From fc0483ce1becefde4d7736d52b7c1da9aaf77b9a Mon Sep 17 00:00:00 2001 From: magic-akari Date: Fri, 23 Aug 2024 21:40:28 +0800 Subject: [PATCH] fix(es/typescript): Correctly handle ESM context (#9490) **Related issue:** - https://github.com/nodejs/node/issues/54514 --- .changeset/nasty-trees-cheer.md | 6 ++++ ...mdImportNotAsPrimaryExpression.1.normal.js | 8 ++--- ...ImportNotAsPrimaryExpression.2.minified.js | 9 ++--- .../cjsImportInES2015.1.normal.js | 1 - .../cjsImportInES2015.2.minified.js | 1 - ...assAbstractImportInstantiation.1.normal.js | 1 - ...JSImportNotAsPrimaryExpression.1.normal.js | 3 -- ...ImportNotAsPrimaryExpression.2.minified.js | 3 -- ...xportAssignmentMergedInterface.1.normal.js | 8 ++--- ...ortAssignmentMergedInterface.2.minified.js | 9 ++--- .../importAliasIdentifiers.1.normal.js | 1 - .../importImportOnlyModule.1.normal.js | 8 ++--- .../importImportOnlyModule.2.minified.js | 9 ++--- .../importsNotUsedAsValues_error.1.normal.js | 3 +- ...importsNotUsedAsValues_error.2.minified.js | 2 -- .../invalidImportAliasIdentifiers.1.normal.js | 1 - ...uleResolutionWithoutExtension2.1.normal.js | 2 +- ...eResolutionWithoutExtension2.2.minified.js | 1 - ...uleResolutionWithoutExtension7.1.normal.js | 2 +- ...eResolutionWithoutExtension7.2.minified.js | 1 - .../parserImportDeclaration1.1.normal.js | 1 - .../parserImportDeclaration1.2.minified.js | 1 - .../scannerImportDeclaration1.1.normal.js | 1 - .../scannerImportDeclaration1.2.minified.js | 1 - .../1/output.amd.ts | 8 ++--- .../amd-triple-slash-directive/1/output.cts | 3 -- .../1/output.umd.ts | 13 +++---- .../2/output.amd.ts | 8 ++--- .../amd-triple-slash-directive/2/output.cts | 3 -- .../2/output.umd.ts | 13 +++---- .../3/output.amd.ts | 8 ++--- .../amd-triple-slash-directive/3/output.cts | 3 -- .../3/output.umd.ts | 13 +++---- .../4/output.amd.ts | 8 ++--- .../amd-triple-slash-directive/4/output.cts | 3 -- .../4/output.umd.ts | 13 +++---- .../export-assign/output.amd.ts | 8 ++--- .../export-assign/output.cts | 3 -- .../export-assign/output.umd.ts | 13 +++---- .../export-import/output.amd.ts | 8 ++--- .../export-import/output.cts | 3 -- .../export-import/output.umd.ts | 13 +++---- .../fixture/common/issue-1686/output.amd.ts | 8 ++--- .../fixture/common/issue-1686/output.cts | 3 -- .../fixture/common/issue-1686/output.umd.ts | 13 +++---- .../fixture/common/issue-4898/1/output.amd.ts | 8 ++--- .../fixture/common/issue-4898/1/output.cts | 3 -- .../fixture/common/issue-4898/1/output.umd.ts | 13 +++---- .../fixture/common/issue-5042/2/output.amd.ts | 8 ++--- .../fixture/common/issue-5042/2/output.cts | 3 -- .../fixture/common/issue-5042/2/output.umd.ts | 13 +++---- .../src/typescript.rs | 34 +++++++++++++++++-- 52 files changed, 108 insertions(+), 225 deletions(-) create mode 100644 .changeset/nasty-trees-cheer.md diff --git a/.changeset/nasty-trees-cheer.md b/.changeset/nasty-trees-cheer.md new file mode 100644 index 000000000000..d56640fe906b --- /dev/null +++ b/.changeset/nasty-trees-cheer.md @@ -0,0 +1,6 @@ +--- +swc_ecma_transforms_typescript: patch +swc_core: patch +--- + +fix(es/typescript): Correctly handle ESM context diff --git a/crates/swc/tests/tsc-references/amdImportNotAsPrimaryExpression.1.normal.js b/crates/swc/tests/tsc-references/amdImportNotAsPrimaryExpression.1.normal.js index eb9f3745fec6..f415aa7c022c 100644 --- a/crates/swc/tests/tsc-references/amdImportNotAsPrimaryExpression.1.normal.js +++ b/crates/swc/tests/tsc-references/amdImportNotAsPrimaryExpression.1.normal.js @@ -37,13 +37,9 @@ define([ }); //// [foo_1.ts] define([ - "require", - "exports" -], function(require, exports) { + "require" +], function(require) { "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); var i; var x = {}; var y = false; diff --git a/crates/swc/tests/tsc-references/amdImportNotAsPrimaryExpression.2.minified.js b/crates/swc/tests/tsc-references/amdImportNotAsPrimaryExpression.2.minified.js index 3ffcd4cf0324..c1d94f129110 100644 --- a/crates/swc/tests/tsc-references/amdImportNotAsPrimaryExpression.2.minified.js +++ b/crates/swc/tests/tsc-references/amdImportNotAsPrimaryExpression.2.minified.js @@ -26,10 +26,5 @@ define([ }); //// [foo_1.ts] define([ - "require", - "exports" -], function(require, exports) { - Object.defineProperty(exports, "__esModule", { - value: !0 - }); -}); + "require" +], function(require) {}); diff --git a/crates/swc/tests/tsc-references/cjsImportInES2015.1.normal.js b/crates/swc/tests/tsc-references/cjsImportInES2015.1.normal.js index 39a7b1e17207..140751ed549d 100644 --- a/crates/swc/tests/tsc-references/cjsImportInES2015.1.normal.js +++ b/crates/swc/tests/tsc-references/cjsImportInES2015.1.normal.js @@ -9,4 +9,3 @@ //! `---- //// [/project/index.ts] function handleError(err) {} -export { }; diff --git a/crates/swc/tests/tsc-references/cjsImportInES2015.2.minified.js b/crates/swc/tests/tsc-references/cjsImportInES2015.2.minified.js index c6371d4cf4ba..6c97e98fdf2f 100644 --- a/crates/swc/tests/tsc-references/cjsImportInES2015.2.minified.js +++ b/crates/swc/tests/tsc-references/cjsImportInES2015.2.minified.js @@ -8,4 +8,3 @@ //! 3 | //! `---- //// [/project/index.ts] -export { }; diff --git a/crates/swc/tests/tsc-references/classAbstractImportInstantiation.1.normal.js b/crates/swc/tests/tsc-references/classAbstractImportInstantiation.1.normal.js index ae4a34b7d14b..b255b3491c82 100644 --- a/crates/swc/tests/tsc-references/classAbstractImportInstantiation.1.normal.js +++ b/crates/swc/tests/tsc-references/classAbstractImportInstantiation.1.normal.js @@ -11,4 +11,3 @@ var M; })(M || (M = {})); var myA = M.A; new myA; -export { }; diff --git a/crates/swc/tests/tsc-references/commonJSImportNotAsPrimaryExpression.1.normal.js b/crates/swc/tests/tsc-references/commonJSImportNotAsPrimaryExpression.1.normal.js index 44d87fb2e67c..aa77fb31ab51 100644 --- a/crates/swc/tests/tsc-references/commonJSImportNotAsPrimaryExpression.1.normal.js +++ b/crates/swc/tests/tsc-references/commonJSImportNotAsPrimaryExpression.1.normal.js @@ -32,9 +32,6 @@ var E1; })(E1 || (E1 = {})); //// [foo_1.ts] "use strict"; -Object.defineProperty(exports, "__esModule", { - value: true -}); var i; var x = {}; var y = false; diff --git a/crates/swc/tests/tsc-references/commonJSImportNotAsPrimaryExpression.2.minified.js b/crates/swc/tests/tsc-references/commonJSImportNotAsPrimaryExpression.2.minified.js index 3f12bb103c2b..c5bc9dfb97a1 100644 --- a/crates/swc/tests/tsc-references/commonJSImportNotAsPrimaryExpression.2.minified.js +++ b/crates/swc/tests/tsc-references/commonJSImportNotAsPrimaryExpression.2.minified.js @@ -19,6 +19,3 @@ var E1, E11, _class_call_check = require("@swc/helpers/_/_class_call_check"), C1 }; C1.s1 = !0, (E1 = E11 || (E11 = {}))[E1.A = 0] = "A", E1[E1.B = 1] = "B", E1[E1.C = 2] = "C"; //// [foo_1.ts] -Object.defineProperty(exports, "__esModule", { - value: !0 -}); diff --git a/crates/swc/tests/tsc-references/exportAssignmentMergedInterface.1.normal.js b/crates/swc/tests/tsc-references/exportAssignmentMergedInterface.1.normal.js index 2a1b45f54cd1..78f5225d0247 100644 --- a/crates/swc/tests/tsc-references/exportAssignmentMergedInterface.1.normal.js +++ b/crates/swc/tests/tsc-references/exportAssignmentMergedInterface.1.normal.js @@ -7,13 +7,9 @@ define([ }); //// [foo_1.ts] define([ - "require", - "exports" -], function(require, exports) { + "require" +], function(require) { "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); var x; x("test"); x(42); diff --git a/crates/swc/tests/tsc-references/exportAssignmentMergedInterface.2.minified.js b/crates/swc/tests/tsc-references/exportAssignmentMergedInterface.2.minified.js index d1a767750f24..ae50fead1ee4 100644 --- a/crates/swc/tests/tsc-references/exportAssignmentMergedInterface.2.minified.js +++ b/crates/swc/tests/tsc-references/exportAssignmentMergedInterface.2.minified.js @@ -6,11 +6,8 @@ define([ }); //// [foo_1.ts] define([ - "require", - "exports" -], function(require, exports) { + "require" +], function(require) { var x; - Object.defineProperty(exports, "__esModule", { - value: !0 - }), x("test"), x(42), x.b, x.c, x.d; + x("test"), x(42), x.b, x.c, x.d; }); diff --git a/crates/swc/tests/tsc-references/importAliasIdentifiers.1.normal.js b/crates/swc/tests/tsc-references/importAliasIdentifiers.1.normal.js index 6f4b90925764..cd96aa70f443 100644 --- a/crates/swc/tests/tsc-references/importAliasIdentifiers.1.normal.js +++ b/crates/swc/tests/tsc-references/importAliasIdentifiers.1.normal.js @@ -41,4 +41,3 @@ function fundule() { var p; var p; var p; -export { }; diff --git a/crates/swc/tests/tsc-references/importImportOnlyModule.1.normal.js b/crates/swc/tests/tsc-references/importImportOnlyModule.1.normal.js index bec0e9591f7a..1604b090ad36 100644 --- a/crates/swc/tests/tsc-references/importImportOnlyModule.1.normal.js +++ b/crates/swc/tests/tsc-references/importImportOnlyModule.1.normal.js @@ -23,13 +23,9 @@ define([ }); //// [foo_1.ts] define([ - "require", - "exports" -], function(require, exports) { + "require" +], function(require) { "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); var answer = 42; // No exports }); //// [foo_2.ts] diff --git a/crates/swc/tests/tsc-references/importImportOnlyModule.2.minified.js b/crates/swc/tests/tsc-references/importImportOnlyModule.2.minified.js index 919213e7b512..845663637514 100644 --- a/crates/swc/tests/tsc-references/importImportOnlyModule.2.minified.js +++ b/crates/swc/tests/tsc-references/importImportOnlyModule.2.minified.js @@ -19,13 +19,8 @@ define([ }); //// [foo_1.ts] define([ - "require", - "exports" -], function(require, exports) { - Object.defineProperty(exports, "__esModule", { - value: !0 - }); -}); + "require" +], function(require) {}); //// [foo_2.ts] define([ "require", diff --git a/crates/swc/tests/tsc-references/importsNotUsedAsValues_error.1.normal.js b/crates/swc/tests/tsc-references/importsNotUsedAsValues_error.1.normal.js index 96ba7122a843..094cc9c460bc 100644 --- a/crates/swc/tests/tsc-references/importsNotUsedAsValues_error.1.normal.js +++ b/crates/swc/tests/tsc-references/importsNotUsedAsValues_error.1.normal.js @@ -54,9 +54,8 @@ export { }; //// [/i.ts] var h = {}; console.log(h); -export { }; // Error //// [/j.ts] -export { }; // noUnusedLocals error only + // noUnusedLocals error only //// [/k.ts] //! x Export assignment cannot be used when targeting ECMAScript modules. Consider using `export default` or another module format instead. //! ,-[2:1] diff --git a/crates/swc/tests/tsc-references/importsNotUsedAsValues_error.2.minified.js b/crates/swc/tests/tsc-references/importsNotUsedAsValues_error.2.minified.js index 2016011c00a8..513cd1f2a798 100644 --- a/crates/swc/tests/tsc-references/importsNotUsedAsValues_error.2.minified.js +++ b/crates/swc/tests/tsc-references/importsNotUsedAsValues_error.2.minified.js @@ -38,9 +38,7 @@ export { }; //! `---- //// [/i.ts] console.log({}); -export { }; //// [/j.ts] -export { }; //// [/k.ts] //! x Export assignment cannot be used when targeting ECMAScript modules. Consider using `export default` or another module format instead. //! ,-[2:1] diff --git a/crates/swc/tests/tsc-references/invalidImportAliasIdentifiers.1.normal.js b/crates/swc/tests/tsc-references/invalidImportAliasIdentifiers.1.normal.js index 18626053ba9a..b8cfb52f23cf 100644 --- a/crates/swc/tests/tsc-references/invalidImportAliasIdentifiers.1.normal.js +++ b/crates/swc/tests/tsc-references/invalidImportAliasIdentifiers.1.normal.js @@ -11,4 +11,3 @@ var E; E[E["Red"] = 0] = "Red"; E[E["Blue"] = 1] = "Blue"; })(E || (E = {})); -export { }; diff --git a/crates/swc/tests/tsc-references/moduleResolutionWithoutExtension2.1.normal.js b/crates/swc/tests/tsc-references/moduleResolutionWithoutExtension2.1.normal.js index 8fa5ea889a79..d12c0c472cec 100644 --- a/crates/swc/tests/tsc-references/moduleResolutionWithoutExtension2.1.normal.js +++ b/crates/swc/tests/tsc-references/moduleResolutionWithoutExtension2.1.normal.js @@ -1,4 +1,4 @@ //// [moduleResolutionWithoutExtension2.ts] //// [/src/buzz.mts] // Extensionless relative path cjs import in an ES module -export { }; // should error, should not ask for extension + // should error, should not ask for extension diff --git a/crates/swc/tests/tsc-references/moduleResolutionWithoutExtension2.2.minified.js b/crates/swc/tests/tsc-references/moduleResolutionWithoutExtension2.2.minified.js index 1f66950bd0e0..503e1e1bb305 100644 --- a/crates/swc/tests/tsc-references/moduleResolutionWithoutExtension2.2.minified.js +++ b/crates/swc/tests/tsc-references/moduleResolutionWithoutExtension2.2.minified.js @@ -1,3 +1,2 @@ //// [moduleResolutionWithoutExtension2.ts] //// [/src/buzz.mts] -export { }; diff --git a/crates/swc/tests/tsc-references/moduleResolutionWithoutExtension7.1.normal.js b/crates/swc/tests/tsc-references/moduleResolutionWithoutExtension7.1.normal.js index d7b22959ea87..dc2518a77fc2 100644 --- a/crates/swc/tests/tsc-references/moduleResolutionWithoutExtension7.1.normal.js +++ b/crates/swc/tests/tsc-references/moduleResolutionWithoutExtension7.1.normal.js @@ -1,4 +1,4 @@ //// [moduleResolutionWithoutExtension7.ts] //// [/src/bar.cts] // Extensionless relative path cjs import in a cjs module -export { }; // should error, should not ask for extension + // should error, should not ask for extension diff --git a/crates/swc/tests/tsc-references/moduleResolutionWithoutExtension7.2.minified.js b/crates/swc/tests/tsc-references/moduleResolutionWithoutExtension7.2.minified.js index 40af9f22dc12..41afe4033f21 100644 --- a/crates/swc/tests/tsc-references/moduleResolutionWithoutExtension7.2.minified.js +++ b/crates/swc/tests/tsc-references/moduleResolutionWithoutExtension7.2.minified.js @@ -1,3 +1,2 @@ //// [moduleResolutionWithoutExtension7.ts] //// [/src/bar.cts] -export { }; diff --git a/crates/swc/tests/tsc-references/parserImportDeclaration1.1.normal.js b/crates/swc/tests/tsc-references/parserImportDeclaration1.1.normal.js index 2259d82d9af6..f530ecb06187 100644 --- a/crates/swc/tests/tsc-references/parserImportDeclaration1.1.normal.js +++ b/crates/swc/tests/tsc-references/parserImportDeclaration1.1.normal.js @@ -1,2 +1 @@ //// [parserImportDeclaration1.ts] -export { }; diff --git a/crates/swc/tests/tsc-references/parserImportDeclaration1.2.minified.js b/crates/swc/tests/tsc-references/parserImportDeclaration1.2.minified.js index 2259d82d9af6..f530ecb06187 100644 --- a/crates/swc/tests/tsc-references/parserImportDeclaration1.2.minified.js +++ b/crates/swc/tests/tsc-references/parserImportDeclaration1.2.minified.js @@ -1,2 +1 @@ //// [parserImportDeclaration1.ts] -export { }; diff --git a/crates/swc/tests/tsc-references/scannerImportDeclaration1.1.normal.js b/crates/swc/tests/tsc-references/scannerImportDeclaration1.1.normal.js index 89886c0f73d2..3902fce704a5 100644 --- a/crates/swc/tests/tsc-references/scannerImportDeclaration1.1.normal.js +++ b/crates/swc/tests/tsc-references/scannerImportDeclaration1.1.normal.js @@ -1,2 +1 @@ //// [scannerImportDeclaration1.ts] -export { }; diff --git a/crates/swc/tests/tsc-references/scannerImportDeclaration1.2.minified.js b/crates/swc/tests/tsc-references/scannerImportDeclaration1.2.minified.js index 89886c0f73d2..3902fce704a5 100644 --- a/crates/swc/tests/tsc-references/scannerImportDeclaration1.2.minified.js +++ b/crates/swc/tests/tsc-references/scannerImportDeclaration1.2.minified.js @@ -1,2 +1 @@ //// [scannerImportDeclaration1.ts] -export { }; diff --git a/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/1/output.amd.ts b/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/1/output.amd.ts index d50d12392617..79e854a5762c 100644 --- a/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/1/output.amd.ts +++ b/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/1/output.amd.ts @@ -1,12 +1,8 @@ /// define("NamedModule", [ - "require", - "exports" -], function(require, exports) { + "require" +], function(require) { "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); class Foo { x; constructor(){ diff --git a/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/1/output.cts b/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/1/output.cts index 820ab95ff051..c65fd3a498cb 100644 --- a/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/1/output.cts +++ b/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/1/output.cts @@ -1,8 +1,5 @@ /// "use strict"; -Object.defineProperty(exports, "__esModule", { - value: true -}); class Foo { x; constructor(){ diff --git a/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/1/output.umd.ts b/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/1/output.umd.ts index 4c4f3bce4b00..4298ce2ab7b5 100644 --- a/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/1/output.umd.ts +++ b/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/1/output.umd.ts @@ -1,15 +1,10 @@ /// (function(global, factory) { - if (typeof module === "object" && typeof module.exports === "object") factory(exports); - else if (typeof define === "function" && define.amd) define([ - "exports" - ], factory); - else if (global = typeof globalThis !== "undefined" ? globalThis : global || self) factory(global.input = {}); -})(this, function(exports) { + if (typeof module === "object" && typeof module.exports === "object") factory(); + else if (typeof define === "function" && define.amd) define([], factory); + else if (global = typeof globalThis !== "undefined" ? globalThis : global || self) factory(); +})(this, function() { "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); class Foo { x; constructor(){ diff --git a/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/2/output.amd.ts b/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/2/output.amd.ts index 419e23cd1f31..71a2d747bb6d 100644 --- a/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/2/output.amd.ts +++ b/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/2/output.amd.ts @@ -1,13 +1,9 @@ /// /// define("SecondModuleName", [ - "require", - "exports" -], function(require, exports) { + "require" +], function(require) { "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); class Foo { x; constructor(){ diff --git a/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/2/output.cts b/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/2/output.cts index e3eaa58d9894..a32de25c4798 100644 --- a/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/2/output.cts +++ b/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/2/output.cts @@ -1,9 +1,6 @@ /// /// "use strict"; -Object.defineProperty(exports, "__esModule", { - value: true -}); class Foo { x; constructor(){ diff --git a/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/2/output.umd.ts b/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/2/output.umd.ts index 4ec09637c08f..12b46996a430 100644 --- a/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/2/output.umd.ts +++ b/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/2/output.umd.ts @@ -1,16 +1,11 @@ /// /// (function(global, factory) { - if (typeof module === "object" && typeof module.exports === "object") factory(exports); - else if (typeof define === "function" && define.amd) define([ - "exports" - ], factory); - else if (global = typeof globalThis !== "undefined" ? globalThis : global || self) factory(global.input = {}); -})(this, function(exports) { + if (typeof module === "object" && typeof module.exports === "object") factory(); + else if (typeof define === "function" && define.amd) define([], factory); + else if (global = typeof globalThis !== "undefined" ? globalThis : global || self) factory(); +})(this, function() { "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); class Foo { x; constructor(){ diff --git a/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/3/output.amd.ts b/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/3/output.amd.ts index 76f7ec0436ff..6540aa88dbd9 100644 --- a/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/3/output.amd.ts +++ b/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/3/output.amd.ts @@ -1,12 +1,8 @@ /// define("NamedModule", [ - "require", - "exports" -], function(require, exports) { + "require" +], function(require) { "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); class Foo { x; constructor(){ diff --git a/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/3/output.cts b/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/3/output.cts index 118b25897bc0..0887144127b9 100644 --- a/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/3/output.cts +++ b/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/3/output.cts @@ -1,8 +1,5 @@ /// "use strict"; -Object.defineProperty(exports, "__esModule", { - value: true -}); class Foo { x; constructor(){ diff --git a/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/3/output.umd.ts b/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/3/output.umd.ts index 79d59bc2e068..432a7737c98c 100644 --- a/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/3/output.umd.ts +++ b/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/3/output.umd.ts @@ -1,15 +1,10 @@ /// (function(global, factory) { - if (typeof module === "object" && typeof module.exports === "object") factory(exports); - else if (typeof define === "function" && define.amd) define([ - "exports" - ], factory); - else if (global = typeof globalThis !== "undefined" ? globalThis : global || self) factory(global.input = {}); -})(this, function(exports) { + if (typeof module === "object" && typeof module.exports === "object") factory(); + else if (typeof define === "function" && define.amd) define([], factory); + else if (global = typeof globalThis !== "undefined" ? globalThis : global || self) factory(); +})(this, function() { "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); class Foo { x; constructor(){ diff --git a/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/4/output.amd.ts b/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/4/output.amd.ts index ef002e3b344c..0b9663da8bec 100644 --- a/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/4/output.amd.ts +++ b/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/4/output.amd.ts @@ -1,11 +1,7 @@ /*/ */ define([ - "require", - "exports" -], function(require, exports) { + "require" +], function(require) { "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); class Foo { x; constructor(){ diff --git a/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/4/output.cts b/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/4/output.cts index 4ba42901ff6e..43c0812cdbc2 100644 --- a/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/4/output.cts +++ b/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/4/output.cts @@ -1,7 +1,4 @@ /*/ */ "use strict"; -Object.defineProperty(exports, "__esModule", { - value: true -}); class Foo { x; constructor(){ diff --git a/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/4/output.umd.ts b/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/4/output.umd.ts index 796defc78f91..df69b0a6f956 100644 --- a/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/4/output.umd.ts +++ b/crates/swc_ecma_transforms_module/tests/fixture/common/amd-triple-slash-directive/4/output.umd.ts @@ -1,14 +1,9 @@ /*/ */ (function(global, factory) { - if (typeof module === "object" && typeof module.exports === "object") factory(exports); - else if (typeof define === "function" && define.amd) define([ - "exports" - ], factory); - else if (global = typeof globalThis !== "undefined" ? globalThis : global || self) factory(global.input = {}); -})(this, function(exports) { + if (typeof module === "object" && typeof module.exports === "object") factory(); + else if (typeof define === "function" && define.amd) define([], factory); + else if (global = typeof globalThis !== "undefined" ? globalThis : global || self) factory(); +})(this, function() { "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); class Foo { x; constructor(){ diff --git a/crates/swc_ecma_transforms_module/tests/fixture/common/cts-import-export/export-assign/output.amd.ts b/crates/swc_ecma_transforms_module/tests/fixture/common/cts-import-export/export-assign/output.amd.ts index 99522009e7a0..959d40e15d2f 100644 --- a/crates/swc_ecma_transforms_module/tests/fixture/common/cts-import-export/export-assign/output.amd.ts +++ b/crates/swc_ecma_transforms_module/tests/fixture/common/cts-import-export/export-assign/output.amd.ts @@ -1,11 +1,7 @@ define([ - "require", - "exports" -], function(require, exports) { + "require" +], function(require) { "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); const foo = require("foo"); module.exports = foo; }); diff --git a/crates/swc_ecma_transforms_module/tests/fixture/common/cts-import-export/export-assign/output.cts b/crates/swc_ecma_transforms_module/tests/fixture/common/cts-import-export/export-assign/output.cts index dc5b8b77802e..e642ef8d7dec 100644 --- a/crates/swc_ecma_transforms_module/tests/fixture/common/cts-import-export/export-assign/output.cts +++ b/crates/swc_ecma_transforms_module/tests/fixture/common/cts-import-export/export-assign/output.cts @@ -1,6 +1,3 @@ "use strict"; -Object.defineProperty(exports, "__esModule", { - value: true -}); const foo = require("foo"); module.exports = foo; diff --git a/crates/swc_ecma_transforms_module/tests/fixture/common/cts-import-export/export-assign/output.umd.ts b/crates/swc_ecma_transforms_module/tests/fixture/common/cts-import-export/export-assign/output.umd.ts index 69ce3fce035c..d4bdc8711634 100644 --- a/crates/swc_ecma_transforms_module/tests/fixture/common/cts-import-export/export-assign/output.umd.ts +++ b/crates/swc_ecma_transforms_module/tests/fixture/common/cts-import-export/export-assign/output.umd.ts @@ -1,14 +1,9 @@ (function(global, factory) { - if (typeof module === "object" && typeof module.exports === "object") factory(exports); - else if (typeof define === "function" && define.amd) define([ - "exports" - ], factory); - else if (global = typeof globalThis !== "undefined" ? globalThis : global || self) factory(global.input = {}); -})(this, function(exports) { + if (typeof module === "object" && typeof module.exports === "object") factory(); + else if (typeof define === "function" && define.amd) define([], factory); + else if (global = typeof globalThis !== "undefined" ? globalThis : global || self) factory(); +})(this, function() { "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); const foo = require("foo"); module.exports = foo; }); diff --git a/crates/swc_ecma_transforms_module/tests/fixture/common/cts-import-export/export-import/output.amd.ts b/crates/swc_ecma_transforms_module/tests/fixture/common/cts-import-export/export-import/output.amd.ts index 9f47466d42d0..6fdc7d155789 100644 --- a/crates/swc_ecma_transforms_module/tests/fixture/common/cts-import-export/export-import/output.amd.ts +++ b/crates/swc_ecma_transforms_module/tests/fixture/common/cts-import-export/export-import/output.amd.ts @@ -1,10 +1,6 @@ define([ - "require", - "exports" -], function(require, exports1) { + "require" +], function(require) { "use strict"; - Object.defineProperty(exports1, "__esModule", { - value: true - }); const foo = exports.foo = require("foo"); }); diff --git a/crates/swc_ecma_transforms_module/tests/fixture/common/cts-import-export/export-import/output.cts b/crates/swc_ecma_transforms_module/tests/fixture/common/cts-import-export/export-import/output.cts index 0f47a30c5279..30a9100fb206 100644 --- a/crates/swc_ecma_transforms_module/tests/fixture/common/cts-import-export/export-import/output.cts +++ b/crates/swc_ecma_transforms_module/tests/fixture/common/cts-import-export/export-import/output.cts @@ -1,5 +1,2 @@ "use strict"; -Object.defineProperty(exports, "__esModule", { - value: true -}); const foo = exports.foo = require("foo"); diff --git a/crates/swc_ecma_transforms_module/tests/fixture/common/cts-import-export/export-import/output.umd.ts b/crates/swc_ecma_transforms_module/tests/fixture/common/cts-import-export/export-import/output.umd.ts index b9fb7c6fa407..251a72dd9d35 100644 --- a/crates/swc_ecma_transforms_module/tests/fixture/common/cts-import-export/export-import/output.umd.ts +++ b/crates/swc_ecma_transforms_module/tests/fixture/common/cts-import-export/export-import/output.umd.ts @@ -1,13 +1,8 @@ (function(global, factory) { - if (typeof module === "object" && typeof module.exports === "object") factory(exports); - else if (typeof define === "function" && define.amd) define([ - "exports" - ], factory); - else if (global = typeof globalThis !== "undefined" ? globalThis : global || self) factory(global.input = {}); -})(this, function(exports1) { + if (typeof module === "object" && typeof module.exports === "object") factory(); + else if (typeof define === "function" && define.amd) define([], factory); + else if (global = typeof globalThis !== "undefined" ? globalThis : global || self) factory(); +})(this, function() { "use strict"; - Object.defineProperty(exports1, "__esModule", { - value: true - }); const foo = exports.foo = require("foo"); }); diff --git a/crates/swc_ecma_transforms_module/tests/fixture/common/issue-1686/output.amd.ts b/crates/swc_ecma_transforms_module/tests/fixture/common/issue-1686/output.amd.ts index 843601ef02cd..4fcf95951d20 100644 --- a/crates/swc_ecma_transforms_module/tests/fixture/common/issue-1686/output.amd.ts +++ b/crates/swc_ecma_transforms_module/tests/fixture/common/issue-1686/output.amd.ts @@ -1,11 +1,7 @@ define([ - "require", - "exports" -], function(require, exports) { + "require" +], function(require) { "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); console.log(1); }); // print b diff --git a/crates/swc_ecma_transforms_module/tests/fixture/common/issue-1686/output.cts b/crates/swc_ecma_transforms_module/tests/fixture/common/issue-1686/output.cts index 13efd0de4e2b..230db0518475 100644 --- a/crates/swc_ecma_transforms_module/tests/fixture/common/issue-1686/output.cts +++ b/crates/swc_ecma_transforms_module/tests/fixture/common/issue-1686/output.cts @@ -1,6 +1,3 @@ "use strict"; -Object.defineProperty(exports, "__esModule", { - value: true -}); console.log(1); // print b diff --git a/crates/swc_ecma_transforms_module/tests/fixture/common/issue-1686/output.umd.ts b/crates/swc_ecma_transforms_module/tests/fixture/common/issue-1686/output.umd.ts index d81597a63c11..ccc00561c01e 100644 --- a/crates/swc_ecma_transforms_module/tests/fixture/common/issue-1686/output.umd.ts +++ b/crates/swc_ecma_transforms_module/tests/fixture/common/issue-1686/output.umd.ts @@ -1,14 +1,9 @@ (function(global, factory) { - if (typeof module === "object" && typeof module.exports === "object") factory(exports); - else if (typeof define === "function" && define.amd) define([ - "exports" - ], factory); - else if (global = typeof globalThis !== "undefined" ? globalThis : global || self) factory(global.input = {}); -})(this, function(exports) { + if (typeof module === "object" && typeof module.exports === "object") factory(); + else if (typeof define === "function" && define.amd) define([], factory); + else if (global = typeof globalThis !== "undefined" ? globalThis : global || self) factory(); +})(this, function() { "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); console.log(1); }); // print b diff --git a/crates/swc_ecma_transforms_module/tests/fixture/common/issue-4898/1/output.amd.ts b/crates/swc_ecma_transforms_module/tests/fixture/common/issue-4898/1/output.amd.ts index aad6c13cbdbd..bb3a575fab26 100644 --- a/crates/swc_ecma_transforms_module/tests/fixture/common/issue-4898/1/output.amd.ts +++ b/crates/swc_ecma_transforms_module/tests/fixture/common/issue-4898/1/output.amd.ts @@ -1,11 +1,7 @@ define([ - "require", - "exports" -], function(require, exports) { + "require" +], function(require) { "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); const assert = require("assert"); assert(true); }); diff --git a/crates/swc_ecma_transforms_module/tests/fixture/common/issue-4898/1/output.cts b/crates/swc_ecma_transforms_module/tests/fixture/common/issue-4898/1/output.cts index 7981151b6ef3..a99389509f41 100644 --- a/crates/swc_ecma_transforms_module/tests/fixture/common/issue-4898/1/output.cts +++ b/crates/swc_ecma_transforms_module/tests/fixture/common/issue-4898/1/output.cts @@ -1,6 +1,3 @@ "use strict"; -Object.defineProperty(exports, "__esModule", { - value: true -}); const assert = require("assert"); assert(true); diff --git a/crates/swc_ecma_transforms_module/tests/fixture/common/issue-4898/1/output.umd.ts b/crates/swc_ecma_transforms_module/tests/fixture/common/issue-4898/1/output.umd.ts index 2245e16a64c0..6c087194dba7 100644 --- a/crates/swc_ecma_transforms_module/tests/fixture/common/issue-4898/1/output.umd.ts +++ b/crates/swc_ecma_transforms_module/tests/fixture/common/issue-4898/1/output.umd.ts @@ -1,14 +1,9 @@ (function(global, factory) { - if (typeof module === "object" && typeof module.exports === "object") factory(exports); - else if (typeof define === "function" && define.amd) define([ - "exports" - ], factory); - else if (global = typeof globalThis !== "undefined" ? globalThis : global || self) factory(global.input = {}); -})(this, function(exports) { + if (typeof module === "object" && typeof module.exports === "object") factory(); + else if (typeof define === "function" && define.amd) define([], factory); + else if (global = typeof globalThis !== "undefined" ? globalThis : global || self) factory(); +})(this, function() { "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); const assert = require("assert"); assert(true); }); diff --git a/crates/swc_ecma_transforms_module/tests/fixture/common/issue-5042/2/output.amd.ts b/crates/swc_ecma_transforms_module/tests/fixture/common/issue-5042/2/output.amd.ts index da46b4703c87..04b17295ac31 100644 --- a/crates/swc_ecma_transforms_module/tests/fixture/common/issue-5042/2/output.amd.ts +++ b/crates/swc_ecma_transforms_module/tests/fixture/common/issue-5042/2/output.amd.ts @@ -1,11 +1,7 @@ define([ - "require", - "exports" -], function(require, exports) { + "require" +], function(require) { "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); const foo = require("foo"); foo.bar = 1; foo.bar = 2; diff --git a/crates/swc_ecma_transforms_module/tests/fixture/common/issue-5042/2/output.cts b/crates/swc_ecma_transforms_module/tests/fixture/common/issue-5042/2/output.cts index bcc6da9507ed..4cc5fe3da901 100644 --- a/crates/swc_ecma_transforms_module/tests/fixture/common/issue-5042/2/output.cts +++ b/crates/swc_ecma_transforms_module/tests/fixture/common/issue-5042/2/output.cts @@ -1,7 +1,4 @@ "use strict"; -Object.defineProperty(exports, "__esModule", { - value: true -}); const foo = require("foo"); foo.bar = 1; foo.bar = 2; diff --git a/crates/swc_ecma_transforms_module/tests/fixture/common/issue-5042/2/output.umd.ts b/crates/swc_ecma_transforms_module/tests/fixture/common/issue-5042/2/output.umd.ts index 25d8e5a71bcf..a94d2e8d653f 100644 --- a/crates/swc_ecma_transforms_module/tests/fixture/common/issue-5042/2/output.umd.ts +++ b/crates/swc_ecma_transforms_module/tests/fixture/common/issue-5042/2/output.umd.ts @@ -1,14 +1,9 @@ (function(global, factory) { - if (typeof module === "object" && typeof module.exports === "object") factory(exports); - else if (typeof define === "function" && define.amd) define([ - "exports" - ], factory); - else if (global = typeof globalThis !== "undefined" ? globalThis : global || self) factory(global.input = {}); -})(this, function(exports) { + if (typeof module === "object" && typeof module.exports === "object") factory(); + else if (typeof define === "function" && define.amd) define([], factory); + else if (global = typeof globalThis !== "undefined" ? globalThis : global || self) factory(); +})(this, function() { "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); const foo = require("foo"); foo.bar = 1; foo.bar = 2; diff --git a/crates/swc_ecma_transforms_typescript/src/typescript.rs b/crates/swc_ecma_transforms_typescript/src/typescript.rs index ed3c51844630..e99181156d2c 100644 --- a/crates/swc_ecma_transforms_typescript/src/typescript.rs +++ b/crates/swc_ecma_transforms_typescript/src/typescript.rs @@ -90,12 +90,12 @@ impl TypeScript { n.body .iter() .rev() - .find(|m| m.is_module_decl()) + .find(|m| m.is_es_module_decl()) .map(Spanned::span) } fn restore_esm_ctx(n: &mut Module, span: Span) { - if n.body.iter().any(ModuleItem::is_module_decl) { + if n.body.iter().any(ModuleItem::is_es_module_decl) { return; } @@ -109,6 +109,36 @@ impl TypeScript { } } +trait EsModuleDecl { + fn is_es_module_decl(&self) -> bool; +} + +impl EsModuleDecl for ModuleDecl { + fn is_es_module_decl(&self) -> bool { + // Do not use `matches!` + // We should cover all cases explicitly. + match self { + ModuleDecl::Import(..) + | ModuleDecl::ExportDecl(..) + | ModuleDecl::ExportNamed(..) + | ModuleDecl::ExportDefaultDecl(..) + | ModuleDecl::ExportDefaultExpr(..) + | ModuleDecl::ExportAll(..) => true, + + ModuleDecl::TsImportEquals(..) + | ModuleDecl::TsExportAssignment(..) + | ModuleDecl::TsNamespaceExport(..) => false, + } + } +} + +impl EsModuleDecl for ModuleItem { + fn is_es_module_decl(&self) -> bool { + self.as_module_decl() + .map_or(false, ModuleDecl::is_es_module_decl) + } +} + pub fn tsx( cm: Lrc, config: Config,