Skip to content

Instantly share code, notes, and snippets.

@magiskboy
Created November 21, 2021 09:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save magiskboy/74227ae8d51bc9d6525e85fffcb47b1e to your computer and use it in GitHub Desktop.
Save magiskboy/74227ae8d51bc9d6525e85fffcb47b1e to your computer and use it in GitHub Desktop.
import ts, { SyntaxKind } from "typescript";
const source = `
function fib(n: number): number {
if (n < 2) return n;
return fib(n - 2) + fib(n - 1);
}
console.log("foo");
const n = 10;
const ret = fib(n);
console.log(\`fib(\${n}) = \${ret}\`);
`;
function transformerFactory<T extends ts.Node>(): ts.TransformerFactory<T> {
return (context) => {
const { factory } = context;
const transform: ts.Visitor = (node) => {
if (
node.kind === SyntaxKind.CallExpression &&
(node as ts.CallExpression).expression.getText() === "console.log"
) {
return factory.createVoidExpression(factory.createNumericLiteral("0"));
}
return ts.visitEachChild(node, (node) => transform(node), context);
};
return (node: T) => ts.visitNode(node, transform);
};
}
const result = ts.transpileModule(source, {
compilerOptions: { module: ts.ModuleKind.CommonJS },
transformers: { before: [transformerFactory()] },
});
console.log(result.outputText);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment