1

I'm tryng to write a Typescript Transformer using TypeScript Compiler API that's appends a suffix to every node identifier, so far what I have is the following code:

main.ts

import * as ts from "typescript";

const transformerFactory: ts.TransformerFactory<ts.Node> = context => rootNode => {
    function visit(node: ts.Node): ts.Node {
        node = ts.visitEachChild(node, visit, context);
        if (ts.isIdentifier(node))
            return context.factory.createIdentifier(node.text + "suffix");
            
        return node;
    }
    return ts.visitNode(rootNode, visit);
};

const program = ts.createProgram(["source.ts"], {})

// PRINTER
const sourceFile = program.getSourceFile("source.ts")
const transformationResult = ts.transform(sourceFile, [transformerFactory])
const transformedSourceFile = transformationResult.transformed[0];
const printer = ts.createPrinter();
const result = printer.printNode(
    ts.EmitHint.Unspecified, 
    transformedSourceFile, 
    undefined
);
console.log(result)

// EMIT
program.emit();

As input file I wrote a file called source.ts with the following content:

source.ts

const test_____: number = 1 + 2;

It's works well printing to console, but does nothing whem file is emited, see below the results:

console.log

const test_____suffix: number = 1 + 2;

source.js

const test_____ = 1 + 2;

How can I make the emited file to have the same as the one printed on the console?

1 Answer 1

1

The transforming and printing that's being done in that code is outside the emit process. Instead of using the transform and printer APIs, you need to provide the transformer factory to the emit method:

const program = ts.createProgram(["source.ts"], {});

program.emit(undefined, undefined, undefined, undefined, {
  before: [transformerFactory]
});
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.