fix(compiler): don’t use ng://
in AOT source maps, and never point to the original source file
This is important to not confuse users nor downstream tools that consume our source maps. For generated content for which we don’t have an original source file, we use the generated file now. Fixes #19538
This commit is contained in:

committed by
Alex Rickabaugh

parent
5b5108363d
commit
01f711281c
@ -25,7 +25,7 @@ export function main() {
|
||||
ctx.print(createSourceSpan(fileA, 1), 'o1');
|
||||
ctx.print(createSourceSpan(fileB, 0), 'o2');
|
||||
ctx.print(createSourceSpan(fileB, 1), 'o3');
|
||||
const sm = ctx.toSourceMapGenerator('o.ts', 'o.js').toJSON() !;
|
||||
const sm = ctx.toSourceMapGenerator('o.ts').toJSON() !;
|
||||
expect(sm.sources).toEqual([fileA.url, fileB.url]);
|
||||
expect(sm.sourcesContent).toEqual([fileA.content, fileB.content]);
|
||||
});
|
||||
@ -43,7 +43,7 @@ export function main() {
|
||||
it('should be able to shift the content', () => {
|
||||
ctx.print(createSourceSpan(fileA, 0), 'fileA-0');
|
||||
|
||||
const sm = ctx.toSourceMapGenerator('o.ts', 'o.js', 10).toJSON() !;
|
||||
const sm = ctx.toSourceMapGenerator('o.ts', 10).toJSON() !;
|
||||
expect(originalPositionFor(sm, {line: 11, column: 0})).toEqual({
|
||||
line: 1,
|
||||
column: 0,
|
||||
@ -113,7 +113,7 @@ export function main() {
|
||||
function expectMap(
|
||||
ctx: EmitterVisitorContext, genLine: number, genCol: number, source: string | null = null,
|
||||
srcLine: number | null = null, srcCol: number | null = null) {
|
||||
const sm = ctx.toSourceMapGenerator('o.ts', 'o.js').toJSON() !;
|
||||
const sm = ctx.toSourceMapGenerator('o.ts').toJSON() !;
|
||||
const genPosition = {line: genLine + 1, column: genCol};
|
||||
const origPosition = originalPositionFor(sm, genPosition);
|
||||
expect(origPosition.source).toEqual(source);
|
||||
@ -123,7 +123,7 @@ function expectMap(
|
||||
|
||||
// returns the number of segments per line
|
||||
function nbSegmentsPerLine(ctx: EmitterVisitorContext) {
|
||||
const sm = ctx.toSourceMapGenerator('o.ts', 'o.js').toJSON() !;
|
||||
const sm = ctx.toSourceMapGenerator('o.ts').toJSON() !;
|
||||
const lines = sm.mappings.split(';');
|
||||
return lines.map(l => {
|
||||
const m = l.match(/,/g);
|
||||
|
@ -16,7 +16,6 @@ import {ParseLocation, ParseSourceFile, ParseSourceSpan} from '@angular/compiler
|
||||
import {extractSourceMap, originalPositionFor} from './source_map_util';
|
||||
|
||||
const someGenFilePath = 'somePackage/someGenFile';
|
||||
const someSourceFilePath = 'somePackage/someSourceFile';
|
||||
|
||||
export function main() {
|
||||
describe('JavaScriptEmitter', () => {
|
||||
@ -27,7 +26,7 @@ export function main() {
|
||||
|
||||
function emitSourceMap(stmt: o.Statement | o.Statement[], preamble?: string): SourceMap {
|
||||
const stmts = Array.isArray(stmt) ? stmt : [stmt];
|
||||
const source = emitter.emitStatements(someSourceFilePath, someGenFilePath, stmts, preamble);
|
||||
const source = emitter.emitStatements(someGenFilePath, stmts, preamble);
|
||||
return extractSourceMap(source) !;
|
||||
}
|
||||
|
||||
@ -40,7 +39,7 @@ export function main() {
|
||||
const someVar = o.variable('someVar', null, sourceSpan);
|
||||
const sm = emitSourceMap(someVar.toStmt(), '/* MyPreamble \n */');
|
||||
|
||||
expect(sm.sources).toEqual([someSourceFilePath, 'in.js']);
|
||||
expect(sm.sources).toEqual([someGenFilePath, 'in.js']);
|
||||
expect(sm.sourcesContent).toEqual([' ', ';;;var']);
|
||||
expect(originalPositionFor(sm, {line: 3, column: 0}))
|
||||
.toEqual({line: 1, column: 3, source: 'in.js'});
|
||||
|
@ -13,7 +13,6 @@ import * as o from '@angular/compiler/src/output/output_ast';
|
||||
import {stripSourceMapAndNewLine} from './abstract_emitter_spec';
|
||||
|
||||
const someGenFilePath = 'somePackage/someGenFile';
|
||||
const someSourceFilePath = 'somePackage/someSourceFile';
|
||||
const anotherModuleUrl = 'somePackage/someOtherPath';
|
||||
|
||||
const sameModuleIdentifier = new o.ExternalReference(null, 'someLocalId', null);
|
||||
@ -35,7 +34,7 @@ export function main() {
|
||||
});
|
||||
|
||||
function emitStmt(stmt: o.Statement, preamble?: string): string {
|
||||
const source = emitter.emitStatements(someSourceFilePath, someGenFilePath, [stmt], preamble);
|
||||
const source = emitter.emitStatements(someGenFilePath, [stmt], preamble);
|
||||
return stripSourceMapAndNewLine(source);
|
||||
}
|
||||
|
||||
|
@ -16,7 +16,6 @@ import {ParseSourceSpan} from '@angular/compiler/src/parse_util';
|
||||
import {extractSourceMap, originalPositionFor} from './source_map_util';
|
||||
|
||||
const someGenFilePath = 'somePackage/someGenFile';
|
||||
const someSourceFilePath = 'somePackage/someSourceFile';
|
||||
|
||||
export function main() {
|
||||
// Not supported features of our OutputAst in TS:
|
||||
@ -34,7 +33,7 @@ export function main() {
|
||||
|
||||
function emitSourceMap(stmt: o.Statement | o.Statement[], preamble?: string): SourceMap {
|
||||
const stmts = Array.isArray(stmt) ? stmt : [stmt];
|
||||
const source = emitter.emitStatements(someSourceFilePath, someGenFilePath, stmts, preamble);
|
||||
const source = emitter.emitStatements(someGenFilePath, stmts, preamble);
|
||||
return extractSourceMap(source) !;
|
||||
}
|
||||
|
||||
@ -47,7 +46,7 @@ export function main() {
|
||||
const someVar = o.variable('someVar', null, sourceSpan);
|
||||
const sm = emitSourceMap(someVar.toStmt(), '/* MyPreamble \n */');
|
||||
|
||||
expect(sm.sources).toEqual([someSourceFilePath, 'in.js']);
|
||||
expect(sm.sources).toEqual([someGenFilePath, 'in.js']);
|
||||
expect(sm.sourcesContent).toEqual([' ', ';;;var']);
|
||||
expect(originalPositionFor(sm, {line: 3, column: 0}))
|
||||
.toEqual({line: 1, column: 3, source: 'in.js'});
|
||||
|
@ -13,7 +13,6 @@ import {ParseLocation, ParseSourceFile, ParseSourceSpan} from '@angular/compiler
|
||||
import {stripSourceMapAndNewLine} from './abstract_emitter_spec';
|
||||
|
||||
const someGenFilePath = 'somePackage/someGenFile';
|
||||
const someSourceFilePath = 'somePackage/someSourceFile';
|
||||
const anotherModuleUrl = 'somePackage/someOtherPath';
|
||||
|
||||
const sameModuleIdentifier = new o.ExternalReference(null, 'someLocalId', null);
|
||||
@ -36,7 +35,7 @@ export function main() {
|
||||
|
||||
function emitStmt(stmt: o.Statement | o.Statement[], preamble?: string): string {
|
||||
const stmts = Array.isArray(stmt) ? stmt : [stmt];
|
||||
const source = emitter.emitStatements(someSourceFilePath, someGenFilePath, stmts, preamble);
|
||||
const source = emitter.emitStatements(someGenFilePath, stmts, preamble);
|
||||
return stripSourceMapAndNewLine(source);
|
||||
}
|
||||
|
||||
@ -435,7 +434,7 @@ export function main() {
|
||||
new o.ReturnStatement(o.variable('someVar', null, referenceSpan), returnSpan)
|
||||
])])];
|
||||
const {sourceText, context} =
|
||||
emitter.emitStatementsAndContext('a.ts', 'a.ts', statements, '/* some preamble /*\n\n');
|
||||
emitter.emitStatementsAndContext('a.ts', statements, '/* some preamble /*\n\n');
|
||||
const spanOf = (text: string, after: number = 0) => {
|
||||
const location = sourceText.indexOf(text, after);
|
||||
const {line, col} = calculateLineCol(sourceText, location);
|
||||
|
Reference in New Issue
Block a user