preprocessor - Vytvoriť mapu zdrojov z transformácie API TypeScriptu
Používam TypeScript API na vytvorenie vlastného predprocesora súborov syntaxe, presne tak ako to robia Svelte a Vue.
Takže, vložím svoj vlastný súbor s vlastnou syntaxou a použijem funkciu ts.transform na prechádzanie AST stromu a zmenu toho, čo potrebujem zmeniť.
Ale čo som v dokumentácii TS nenašiel, je, ako môžem generovať source mapy z môjho vstupného textu súboru na výstupný výsledný text.
const sourceFile = ts.createSourceFile(
"index.ts",
fileContent, // file input string
ts.ScriptTarget.ESNext,
false,
ts.ScriptKind.TSX
);
const result = ts.transform(sourceFile, [transformer]); // my custom transformer function
const resultStr = printer.printFile(result.transformed[0]); // the output file string
// how to get sourcemaps for "resultStr"?
Odpoveď č. 1
Na toto som narazil včera, keďže som mal rovnaký problém pri používaní ts.transform. Tak som zistil, ako ts-jest dokázal generovať to isté pri spúšťaní v isolatedModules.
Po preskúmaní kódu ts-jest sme zistili, že ak použijeme ts.transpileModule namiesto ts.transform, výsledný výstup obsahuje aj mapu zdrojov.
Tu je to, čo som použil, čo tiež vrátil zdrojové mapy (s TS 4.7.x), -
const transformedOutput = ts.transpileModule(sourceText, {
fileName: sourcePath,
transformers: {
before: [transformer]
},
compilerOptions: {
target: ts.ScriptTarget.ES2015,
module: ts.ModuleKind.ESNext,
isolatedModules: true,
sourceMap: true
}
});
console.log('Transformed Code - \n', transformedOutput .outputText);
console.log('Transformed sourcemap - \n', transformedOutput .sourceMapText);
Tu je odkaz na kódovú základňu ts-jest s týmto použitím - https://github.com/kulshekhar/ts-jest/blob/main/src/legacy/compiler/ts-compiler.ts#L256
Odpoveď č. 2
Vzdal som sa TypeScriptu a začal som používať balík magic-string, ktorý pre vás vytvára skvelú mapu zdrojov bez starostí.
https://github.com/Rich-Harris/magic-string
