diff --git a/tsc/internal/transformers/declarations/transform.go b/tsc/internal/transformers/declarations/transform.go index db2fc7684de7b..296f86da86999 100644 --- a/tsc/internal/transformers/declarations/transform.go +++ b/tsc/internal/transformers/declarations/transform.go @@ -1231,6 +1231,7 @@ func (tx *DeclarationTransformer) transformExportAssignment(input *ast.Node, ass tx.resultHasScopeMarker = true if ast.IsIdentifier(expression) && (ast.IsSourceFile(input.Parent) || ast.IsModuleBlock(input.Parent)) { exportAssignment := tx.Factory().NewExportAssignment(nil, isExportEquals, nil, expression) + tx.EmitContext().AssignSourceMapRange(exportAssignment, input) tx.preserveJsDoc(exportAssignment, input) return exportAssignment } @@ -1247,6 +1248,7 @@ func (tx *DeclarationTransformer) transformExportAssignment(input *ast.Node, ass tx.preserveJsDoc(classDecl, input) // Reuse the same name node for the export so unique names resolve consistently exportAssignment := tx.Factory().NewExportAssignment(nil, isExportEquals, nil, newId) + tx.EmitContext().AssignSourceMapRange(exportAssignment, input) tx.removeAllComments(exportAssignment) return tx.Factory().NewSyntaxList([]*ast.Node{exportAssignment, classDecl}) } else if ast.IsFunctionLike(unwrapped) { @@ -1260,6 +1262,7 @@ func (tx *DeclarationTransformer) transformExportAssignment(input *ast.Node, ass tx.preserveJsDoc(funcDecl, input) // Reuse the same name node for the export so unique names resolve consistently exportAssignment := tx.Factory().NewExportAssignment(nil, isExportEquals, nil, newId) + tx.EmitContext().AssignSourceMapRange(exportAssignment, input) tx.removeAllComments(exportAssignment) return tx.Factory().NewSyntaxList([]*ast.Node{exportAssignment, funcDecl}) } @@ -1290,6 +1293,7 @@ func (tx *DeclarationTransformer) transformExportAssignment(input *ast.Node, ass } statement := tx.Factory().NewVariableStatement(modList, tx.Factory().NewVariableDeclarationList(tx.Factory().NewNodeList([]*ast.Node{varDecl}), ast.NodeFlagsConst)) exportAssignment := tx.Factory().NewExportAssignment(nil, isExportEquals, nil, newId) + tx.EmitContext().AssignSourceMapRange(exportAssignment, input) // Remove comments from the export declaration and copy them onto the synthetic _default declaration tx.preserveJsDoc(statement, input) return tx.Factory().NewSyntaxList([]*ast.Node{statement, exportAssignment}) diff --git a/tsc/testdata/baselines/reference/compiler/declarationMaps.js.map b/tsc/testdata/baselines/reference/compiler/declarationMaps.js.map index aef608cfbbf9f..3ea3a7c3facac 100644 --- a/tsc/testdata/baselines/reference/compiler/declarationMaps.js.map +++ b/tsc/testdata/baselines/reference/compiler/declarationMaps.js.map @@ -1,3 +1,3 @@ //// [declarationMaps.d.ts.map] -{"version":3,"file":"declarationMaps.d.ts","sourceRoot":"","sources":["declarationMaps.ts"],"names":[],"mappings":"AAAA,kBAAU,EAAE,CAAC;IACT,UAAiB,aAAa;QAC1B,CAAC,GAAG,KAAA,EAAE,GAAG,KAAA,EAAE,IAAI,KAAA,GAAG,IAAI,CAAC;KAC1B;IACD,UAAiB,aAAa;QAC1B,GAAG,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,aAAa,CAAC;QAC3C,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;KAClC;CAEJ;AAED,QAAA,IAAI,EAAE,EAAE;IACJ,IAAI,EAAE,CAAC,aAAa,CAAC;IACrB,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC;IACxB,KAAK,IAAI,EAAE,CAAC,aAAa,CAAC;CAC7B,CAAC;SAEO,EAAE"} -//// https://sokra.github.io/source-map-visualization#base64,ZGVjbGFyZSBuYW1lc3BhY2UgbTIgew0KICAgIGludGVyZmFjZSBjb25uZWN0TW9kdWxlIHsNCiAgICAgICAgKHJlczogYW55LCByZXE6IGFueSwgbmV4dDogYW55KTogdm9pZDsNCiAgICB9DQogICAgaW50ZXJmYWNlIGNvbm5lY3RFeHBvcnQgew0KICAgICAgICB1c2U6IChtb2Q6IGNvbm5lY3RNb2R1bGUpID0+IGNvbm5lY3RFeHBvcnQ7DQogICAgICAgIGxpc3RlbjogKHBvcnQ6IG51bWJlcikgPT4gdm9pZDsNCiAgICB9DQp9DQpkZWNsYXJlIHZhciBtMjogew0KICAgICgpOiBtMi5jb25uZWN0RXhwb3J0Ow0KICAgIHRlc3QxOiBtMi5jb25uZWN0TW9kdWxlOw0KICAgIHRlc3QyKCk6IG0yLmNvbm5lY3RNb2R1bGU7DQp9Ow0KZXhwb3J0ID0gbTI7DQovLyMgc291cmNlTWFwcGluZ1VSTD1kZWNsYXJhdGlvbk1hcHMuZC50cy5tYXA=,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjbGFyYXRpb25NYXBzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkZWNsYXJhdGlvbk1hcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0JBQVUsRUFBRSxDQUFDO0lBQ1QsVUFBaUIsYUFBYTtRQUMxQixDQUFDLEdBQUcsS0FBQSxFQUFFLEdBQUcsS0FBQSxFQUFFLElBQUksS0FBQSxHQUFHLElBQUksQ0FBQztLQUMxQjtJQUNELFVBQWlCLGFBQWE7UUFDMUIsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLGFBQWEsS0FBSyxhQUFhLENBQUM7UUFDM0MsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sS0FBSyxJQUFJLENBQUM7S0FDbEM7Q0FFSjtBQUVELFFBQUEsSUFBSSxFQUFFLEVBQUU7SUFDSixJQUFJLEVBQUUsQ0FBQyxhQUFhLENBQUM7SUFDckIsS0FBSyxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUM7SUFDeEIsS0FBSyxJQUFJLEVBQUUsQ0FBQyxhQUFhLENBQUM7Q0FDN0IsQ0FBQztTQUVPLEVBQUUifQ==,bmFtZXNwYWNlIG0yIHsKICAgIGV4cG9ydCBpbnRlcmZhY2UgY29ubmVjdE1vZHVsZSB7CiAgICAgICAgKHJlcywgcmVxLCBuZXh0KTogdm9pZDsKICAgIH0KICAgIGV4cG9ydCBpbnRlcmZhY2UgY29ubmVjdEV4cG9ydCB7CiAgICAgICAgdXNlOiAobW9kOiBjb25uZWN0TW9kdWxlKSA9PiBjb25uZWN0RXhwb3J0OwogICAgICAgIGxpc3RlbjogKHBvcnQ6IG51bWJlcikgPT4gdm9pZDsKICAgIH0KCn0KCnZhciBtMjogewogICAgKCk6IG0yLmNvbm5lY3RFeHBvcnQ7CiAgICB0ZXN0MTogbTIuY29ubmVjdE1vZHVsZTsKICAgIHRlc3QyKCk6IG0yLmNvbm5lY3RNb2R1bGU7Cn07CgpleHBvcnQgPSBtMjs= +{"version":3,"file":"declarationMaps.d.ts","sourceRoot":"","sources":["declarationMaps.ts"],"names":[],"mappings":"AAAA,kBAAU,EAAE,CAAC;IACT,UAAiB,aAAa;QAC1B,CAAC,GAAG,KAAA,EAAE,GAAG,KAAA,EAAE,IAAI,KAAA,GAAG,IAAI,CAAC;KAC1B;IACD,UAAiB,aAAa;QAC1B,GAAG,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,aAAa,CAAC;QAC3C,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;KAClC;CAEJ;AAED,QAAA,IAAI,EAAE,EAAE;IACJ,IAAI,EAAE,CAAC,aAAa,CAAC;IACrB,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC;IACxB,KAAK,IAAI,EAAE,CAAC,aAAa,CAAC;CAC7B,CAAC;AAEF,SAAS,EAAE,CAAC"} +//// https://sokra.github.io/source-map-visualization#base64,ZGVjbGFyZSBuYW1lc3BhY2UgbTIgew0KICAgIGludGVyZmFjZSBjb25uZWN0TW9kdWxlIHsNCiAgICAgICAgKHJlczogYW55LCByZXE6IGFueSwgbmV4dDogYW55KTogdm9pZDsNCiAgICB9DQogICAgaW50ZXJmYWNlIGNvbm5lY3RFeHBvcnQgew0KICAgICAgICB1c2U6IChtb2Q6IGNvbm5lY3RNb2R1bGUpID0+IGNvbm5lY3RFeHBvcnQ7DQogICAgICAgIGxpc3RlbjogKHBvcnQ6IG51bWJlcikgPT4gdm9pZDsNCiAgICB9DQp9DQpkZWNsYXJlIHZhciBtMjogew0KICAgICgpOiBtMi5jb25uZWN0RXhwb3J0Ow0KICAgIHRlc3QxOiBtMi5jb25uZWN0TW9kdWxlOw0KICAgIHRlc3QyKCk6IG0yLmNvbm5lY3RNb2R1bGU7DQp9Ow0KZXhwb3J0ID0gbTI7DQovLyMgc291cmNlTWFwcGluZ1VSTD1kZWNsYXJhdGlvbk1hcHMuZC50cy5tYXA=,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjbGFyYXRpb25NYXBzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkZWNsYXJhdGlvbk1hcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0JBQVUsRUFBRSxDQUFDO0lBQ1QsVUFBaUIsYUFBYTtRQUMxQixDQUFDLEdBQUcsS0FBQSxFQUFFLEdBQUcsS0FBQSxFQUFFLElBQUksS0FBQSxHQUFHLElBQUksQ0FBQztLQUMxQjtJQUNELFVBQWlCLGFBQWE7UUFDMUIsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLGFBQWEsS0FBSyxhQUFhLENBQUM7UUFDM0MsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sS0FBSyxJQUFJLENBQUM7S0FDbEM7Q0FFSjtBQUVELFFBQUEsSUFBSSxFQUFFLEVBQUU7SUFDSixJQUFJLEVBQUUsQ0FBQyxhQUFhLENBQUM7SUFDckIsS0FBSyxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUM7SUFDeEIsS0FBSyxJQUFJLEVBQUUsQ0FBQyxhQUFhLENBQUM7Q0FDN0IsQ0FBQztBQUVGLFNBQVMsRUFBRSxDQUFDIn0=,bmFtZXNwYWNlIG0yIHsKICAgIGV4cG9ydCBpbnRlcmZhY2UgY29ubmVjdE1vZHVsZSB7CiAgICAgICAgKHJlcywgcmVxLCBuZXh0KTogdm9pZDsKICAgIH0KICAgIGV4cG9ydCBpbnRlcmZhY2UgY29ubmVjdEV4cG9ydCB7CiAgICAgICAgdXNlOiAobW9kOiBjb25uZWN0TW9kdWxlKSA9PiBjb25uZWN0RXhwb3J0OwogICAgICAgIGxpc3RlbjogKHBvcnQ6IG51bWJlcikgPT4gdm9pZDsKICAgIH0KCn0KCnZhciBtMjogewogICAgKCk6IG0yLmNvbm5lY3RFeHBvcnQ7CiAgICB0ZXN0MTogbTIuY29ubmVjdE1vZHVsZTsKICAgIHRlc3QyKCk6IG0yLmNvbm5lY3RNb2R1bGU7Cn07CgpleHBvcnQgPSBtMjs= diff --git a/tsc/testdata/baselines/reference/compiler/declarationMaps.sourcemap.txt b/tsc/testdata/baselines/reference/compiler/declarationMaps.sourcemap.txt index ce7f827e84441..52a4b1b704e3e 100644 --- a/tsc/testdata/baselines/reference/compiler/declarationMaps.sourcemap.txt +++ b/tsc/testdata/baselines/reference/compiler/declarationMaps.sourcemap.txt @@ -280,14 +280,20 @@ sourceFile:declarationMaps.ts 2 >Emitted(14, 3) Source(16, 3) + SourceIndex(0) --- >>>export = m2; -1->^^^^^^^^^ -2 > ^^ -3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +1-> +2 >^^^^^^^^^ +3 > ^^ +4 > ^ +5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > - >export = -2 > m2 -1->Emitted(15, 10) Source(18, 10) + SourceIndex(0) -2 >Emitted(15, 12) Source(18, 12) + SourceIndex(0) + > +2 >export = +3 > m2 +4 > ; +1->Emitted(15, 1) Source(18, 1) + SourceIndex(0) +2 >Emitted(15, 10) Source(18, 10) + SourceIndex(0) +3 >Emitted(15, 12) Source(18, 12) + SourceIndex(0) +4 >Emitted(15, 13) Source(18, 13) + SourceIndex(0) --- >>>//# sourceMappingURL=declarationMaps.d.ts.map \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/declarationMapsExportAssignmentExpression.js b/tsc/testdata/baselines/reference/compiler/declarationMapsExportAssignmentExpression.js new file mode 100644 index 0000000000000..d4a9207d085dc --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/declarationMapsExportAssignmentExpression.js @@ -0,0 +1,36 @@ +//// [tests/cases/compiler/declarationMapsExportAssignmentExpression.ts] //// + +//// [exportDefault.ts] +const b = 1; +const d = 2; +export default { b, d }; + +//// [exportEquals.ts] +const a = 1; +export = { a }; + + +//// [exportDefault.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const b = 1; +const d = 2; +exports.default = { b, d }; +//// [exportEquals.js] +"use strict"; +const a = 1; +module.exports = { a }; + + +//// [exportDefault.d.ts] +declare const _default: { + b: number; + d: number; +}; +export default _default; +//# sourceMappingURL=exportDefault.d.ts.map//// [exportEquals.d.ts] +declare const _default: { + a: number; +}; +export = _default; +//# sourceMappingURL=exportEquals.d.ts.map \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/declarationMapsExportAssignmentExpression.js.map b/tsc/testdata/baselines/reference/compiler/declarationMapsExportAssignmentExpression.js.map new file mode 100644 index 0000000000000..06c2c88dcb7f4 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/declarationMapsExportAssignmentExpression.js.map @@ -0,0 +1,7 @@ +//// [exportDefault.d.ts.map] +{"version":3,"file":"exportDefault.d.ts","sourceRoot":"","sources":["exportDefault.ts"],"names":[],"mappings":";;;;AAEA,wBAAwB"} +//// https://sokra.github.io/source-map-visualization#base64,ZGVjbGFyZSBjb25zdCBfZGVmYXVsdDogew0KICAgIGI6IG51bWJlcjsNCiAgICBkOiBudW1iZXI7DQp9Ow0KZXhwb3J0IGRlZmF1bHQgX2RlZmF1bHQ7DQovLyMgc291cmNlTWFwcGluZ1VSTD1leHBvcnREZWZhdWx0LmQudHMubWFw,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0RGVmYXVsdC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZXhwb3J0RGVmYXVsdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBRUEsd0JBQXdCIn0=,Y29uc3QgYiA9IDE7CmNvbnN0IGQgPSAyOwpleHBvcnQgZGVmYXVsdCB7IGIsIGQgfTsK + +//// [exportEquals.d.ts.map] +{"version":3,"file":"exportEquals.d.ts","sourceRoot":"","sources":["exportEquals.ts"],"names":[],"mappings":";;;AACA,kBAAe"} +//// https://sokra.github.io/source-map-visualization#base64,ZGVjbGFyZSBjb25zdCBfZGVmYXVsdDogew0KICAgIGE6IG51bWJlcjsNCn07DQpleHBvcnQgPSBfZGVmYXVsdDsNCi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV4cG9ydEVxdWFscy5kLnRzLm1hcA==,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0RXF1YWxzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJleHBvcnRFcXVhbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0Esa0JBQWUifQ==,Y29uc3QgYSA9IDE7CmV4cG9ydCA9IHsgYSB9Owo= diff --git a/tsc/testdata/baselines/reference/compiler/declarationMapsExportAssignmentExpression.sourcemap.txt b/tsc/testdata/baselines/reference/compiler/declarationMapsExportAssignmentExpression.sourcemap.txt new file mode 100644 index 0000000000000..3f2148c922eda --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/declarationMapsExportAssignmentExpression.sourcemap.txt @@ -0,0 +1,49 @@ +=================================================================== +JsFile: exportDefault.d.ts +mapUrl: exportDefault.d.ts.map +sourceRoot: +sources: exportDefault.ts +=================================================================== +------------------------------------------------------------------- +emittedFile:exportDefault.d.ts +sourceFile:exportDefault.ts +------------------------------------------------------------------- +>>>declare const _default: { +>>> b: number; +>>> d: number; +>>>}; +>>>export default _default; +1 > +2 >^^^^^^^^^^^^^^^^^^^^^^^^ +3 > ^^^^^^^^^^^^^^^^^^-> +1 >const b = 1; + >const d = 2; + > +2 >export default { b, d }; +1 >Emitted(5, 1) Source(3, 1) + SourceIndex(0) +2 >Emitted(5, 25) Source(3, 25) + SourceIndex(0) +--- +>>>//# sourceMappingURL=exportDefault.d.ts.map=================================================================== +JsFile: exportEquals.d.ts +mapUrl: exportEquals.d.ts.map +sourceRoot: +sources: exportEquals.ts +=================================================================== +------------------------------------------------------------------- +emittedFile:exportEquals.d.ts +sourceFile:exportEquals.ts +------------------------------------------------------------------- +>>>declare const _default: { +>>> a: number; +>>>}; +>>>export = _default; +1 > +2 >^^^^^^^^^^^^^^^^^^ +3 > ^^^^^^^^^^^^^^^^^^^^^^^-> +1 >const a = 1; + > +2 >export = { a }; +1 >Emitted(4, 1) Source(2, 1) + SourceIndex(0) +2 >Emitted(4, 19) Source(2, 16) + SourceIndex(0) +--- +>>>//# sourceMappingURL=exportEquals.d.ts.map \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/declarationMapsExportAssignmentExpression.symbols b/tsc/testdata/baselines/reference/compiler/declarationMapsExportAssignmentExpression.symbols new file mode 100644 index 0000000000000..70093432922c3 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/declarationMapsExportAssignmentExpression.symbols @@ -0,0 +1,20 @@ +//// [tests/cases/compiler/declarationMapsExportAssignmentExpression.ts] //// + +=== exportDefault.ts === +const b = 1; +>b : Symbol(b, Decl(exportDefault.ts, 0, 5)) + +const d = 2; +>d : Symbol(d, Decl(exportDefault.ts, 1, 5)) + +export default { b, d }; +>b : Symbol(b, Decl(exportDefault.ts, 2, 16)) +>d : Symbol(d, Decl(exportDefault.ts, 2, 19)) + +=== exportEquals.ts === +const a = 1; +>a : Symbol(a, Decl(exportEquals.ts, 0, 5)) + +export = { a }; +>a : Symbol(a, Decl(exportEquals.ts, 1, 10)) + diff --git a/tsc/testdata/baselines/reference/compiler/declarationMapsExportAssignmentExpression.types b/tsc/testdata/baselines/reference/compiler/declarationMapsExportAssignmentExpression.types new file mode 100644 index 0000000000000..b9659b756bdc2 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/declarationMapsExportAssignmentExpression.types @@ -0,0 +1,25 @@ +//// [tests/cases/compiler/declarationMapsExportAssignmentExpression.ts] //// + +=== exportDefault.ts === +const b = 1; +>b : 1 +>1 : 1 + +const d = 2; +>d : 2 +>2 : 2 + +export default { b, d }; +>{ b, d } : { b: number; d: number; } +>b : number +>d : number + +=== exportEquals.ts === +const a = 1; +>a : 1 +>1 : 1 + +export = { a }; +>{ a } : { a: number; } +>a : number + diff --git a/tsc/testdata/tests/cases/compiler/declarationMapsExportAssignmentExpression.ts b/tsc/testdata/tests/cases/compiler/declarationMapsExportAssignmentExpression.ts new file mode 100644 index 0000000000000..e96e82e14ca67 --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/declarationMapsExportAssignmentExpression.ts @@ -0,0 +1,12 @@ +// @module: commonjs +// @declaration: true +// @declarationMap: true + +// @filename: exportDefault.ts +const b = 1; +const d = 2; +export default { b, d }; + +// @filename: exportEquals.ts +const a = 1; +export = { a };