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)
// }
