UNPKG

psya

Version:
52 lines (45 loc) 1.89 kB
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) // }