psya
Version:
a strange experiment
52 lines (45 loc) • 1.89 kB
text/typescript
import * as ts from 'typescript';
function transformSourceFile(context: ts.TransformationContext): ts.Transformer<ts.SourceFile> {
return (sourceFile: ts.SourceFile): ts.SourceFile => {
function visit(node: ts.Node): ts.Node {
if (ts.isImportDeclaration(node)) {
if (node.moduleSpecifier && ts.isStringLiteral(node.moduleSpecifier)) {
const moduleName = node.moduleSpecifier.text;
const newModuleName = `/node_modules/${moduleName}`;
const newModuleSpecifier = ts.factory.createStringLiteral(newModuleName);
return ts.factory.updateImportDeclaration(
node,
node.modifiers,
node.importClause,
newModuleSpecifier,
node.attributes
);
}
}
return ts.visitEachChild(node, visit, context);
}
return ts.visitNode(sourceFile, visit) as ts.SourceFile
};
}
import * as path from 'path'
const compilerOptions: ts.CompilerOptions = {
target: ts.ScriptTarget.ESNext,
module: ts.ModuleKind.ESNext,
sourceMap: true,
outDir: path.join(path.dirname(process.argv[2]), '.__psya_cache__'),
experimentalDecorators: true,
};
const fileName = process.argv[2]
const program = ts.createProgram([fileName], compilerOptions);
const sourceFile = program.getSourceFile(fileName);
program.emit(sourceFile, null, null, null, { after: [transformSourceFile] })
// const write: ts.WriteFileCallback = (fileName: string,
// text: string,
// writeByteOrderMark: boolean,
// onError?: (message: string) => void,
// sourceFiles?: readonly ts.SourceFile[],
// data?: ts.WriteFileCallbackData): void =>
// {
// console.log(text)
// console.log(data)
// }