From b23664adf722f45fef4799342392bc43c70ec848 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Fri, 11 Jan 2019 10:57:53 -0800 Subject: [PATCH 1/2] Test to verify external source map range addition --- src/testRunner/unittests/customTransforms.ts | 35 ++++++++++++++++++- .../sourceMapExternalSourceFiles.js | 7 ++++ 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 tests/baselines/reference/customTransforms/sourceMapExternalSourceFiles.js diff --git a/src/testRunner/unittests/customTransforms.ts b/src/testRunner/unittests/customTransforms.ts index 304c0a55c59..aef9ed745ec 100644 --- a/src/testRunner/unittests/customTransforms.ts +++ b/src/testRunner/unittests/customTransforms.ts @@ -95,6 +95,39 @@ namespace ts { module: ModuleKind.ES2015, emitDecoratorMetadata: true, experimentalDecorators: true - }); + }); + + emitsCorrectly("sourceMapExternalSourceFiles", + [ + { + file: "source.ts", + // The text of length 'changed' is made to be on two lines so we know the line map change + text: `\`multi + line\` +'change'` + }, + ], + { + before: [ + context => node => visitNode(node, function visitor(node: Node): Node { + if (isStringLiteral(node) && node.text === "change") { + const text = "'changed'"; + const lineMap = computeLineStarts(text); + setSourceMapRange(node, { + pos: 0, end: text.length, source: { + text, + fileName: "another.html", + lineMap, + getLineAndCharacterOfPosition: pos => computeLineAndCharacterOfPosition(lineMap, pos) + } + }); + return node; + } + return visitEachChild(node, visitor, context); + }) + ] + }, + { sourceMap: true } + ); }); } diff --git a/tests/baselines/reference/customTransforms/sourceMapExternalSourceFiles.js b/tests/baselines/reference/customTransforms/sourceMapExternalSourceFiles.js new file mode 100644 index 00000000000..69406cfe308 --- /dev/null +++ b/tests/baselines/reference/customTransforms/sourceMapExternalSourceFiles.js @@ -0,0 +1,7 @@ +// [source.js.map] +{"version":3,"file":"source.js","sourceRoot":"","sources":["source.ts","another.html"],"names":[],"mappings":"AAAA,iCACyB,CAAA;ACDzB,QACE,CDCM"} + +// [source.js] +"multi\n line"; +'change'; +//# sourceMappingURL=source.js.map \ No newline at end of file From 021c63f1c365c54b6c061d8e4fd0c5cd9f796fa9 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Fri, 11 Jan 2019 12:24:33 -0800 Subject: [PATCH 2/2] Use the SourceMapSource to get line and column instead of current source file Fixes #29300 --- src/compiler/emitter.ts | 2 +- .../reference/customTransforms/sourceMapExternalSourceFiles.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 9c09ed79a77..0afd8ee761c 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -4389,7 +4389,7 @@ namespace ts { return; } - const { line: sourceLine, character: sourceCharacter } = getLineAndCharacterOfPosition(currentSourceFile!, pos); + const { line: sourceLine, character: sourceCharacter } = getLineAndCharacterOfPosition(sourceMapSource, pos); sourceMapGenerator!.addMapping( writer.getLine(), writer.getColumn(), diff --git a/tests/baselines/reference/customTransforms/sourceMapExternalSourceFiles.js b/tests/baselines/reference/customTransforms/sourceMapExternalSourceFiles.js index 69406cfe308..7191d615fc6 100644 --- a/tests/baselines/reference/customTransforms/sourceMapExternalSourceFiles.js +++ b/tests/baselines/reference/customTransforms/sourceMapExternalSourceFiles.js @@ -1,5 +1,5 @@ // [source.js.map] -{"version":3,"file":"source.js","sourceRoot":"","sources":["source.ts","another.html"],"names":[],"mappings":"AAAA,iCACyB,CAAA;ACDzB,QACE,CDCM"} +{"version":3,"file":"source.js","sourceRoot":"","sources":["source.ts","another.html"],"names":[],"mappings":"AAAA,iCACyB,CAAA;ACDzB,QAAS,CDED"} // [source.js] "multi\n line";