javascript - TypeScript compiler api: få position i genereret kode af en specifik AST-node


Mit mål er at få placeringen (start og slut) af en specifik TypeScript AST-node i den genererede (JavaScript) fil.

Tag for eksempel denne kode:

const program = ts.createProgram(tsconfig.fileNames, tsconfig.options);
const aNode = program.getSourceFiles()[0].getChildAt(1);
const emittedFiles = [];
program.emit(/*targetSourceFile */undefined, /*writeFile*/ (fileName, content) => emittedFiles.push({ fileName, content }));

Hvordan kan jeg få placeringen af den udsendte kode repræsenteret af aNode?

Måden, jeg prøver dette på nu, er ved at fange source map-filen og reverse-ingeniøre placeringen ved hjælp af https://npmjs.org/package/source-map. Dog giver source map-filen kun et estimat af placeringen.

Er der nogen måde at reverse-engineere den præcise placering ved hjælp af source map-filen, eller opsnappe den præcise placering, mens noden skrives til JavaScript-output under emit-fasen?

Svar #1

Jeg tror, hvad jeg ledte efter, ikke er muligt. Jeg endte med at producere source maps og bruge dem til at beregne den oprindelige position ved hjælp af https://github.com/mozilla/source-map

Relaterede artikler