diff --git a/internal/core/compileroptions.go b/internal/core/compileroptions.go
index 28e1a797e5..2f41f64dd6 100644
--- a/internal/core/compileroptions.go
+++ b/internal/core/compileroptions.go
@@ -232,12 +232,11 @@ func (options *CompilerOptions) GetEmitModuleDetectionKind() ModuleDetectionKind
if options.ModuleDetection != ModuleDetectionKindNone {
return options.ModuleDetection
}
- switch options.GetEmitModuleKind() {
- case ModuleKindNode16, ModuleKindNode20, ModuleKindNodeNext:
+ moduleKind := options.GetEmitModuleKind()
+ if ModuleKindNode16 <= moduleKind && moduleKind <= ModuleKindNodeNext {
return ModuleDetectionKindForce
- default:
- return ModuleDetectionKindAuto
}
+ return ModuleDetectionKindAuto
}
func (options *CompilerOptions) GetResolvePackageJsonExports() bool {
diff --git a/internal/transformers/moduletransforms/commonjsmodule.go b/internal/transformers/moduletransforms/commonjsmodule.go
index 27b3c50f3e..8d43ef398c 100644
--- a/internal/transformers/moduletransforms/commonjsmodule.go
+++ b/internal/transformers/moduletransforms/commonjsmodule.go
@@ -247,7 +247,7 @@ func (tx *CommonJSModuleTransformer) visitSourceFile(node *ast.SourceFile) *ast.
func (tx *CommonJSModuleTransformer) shouldEmitUnderscoreUnderscoreESModule() bool {
if tspath.FileExtensionIsOneOf(tx.currentSourceFile.FileName(), tspath.SupportedJSExtensionsFlat) &&
tx.currentSourceFile.CommonJSModuleIndicator != nil &&
- (tx.currentSourceFile.ExternalModuleIndicator == nil /*|| tx.currentSourceFile.ExternalModuleIndicator == true*/) { // !!!
+ (tx.currentSourceFile.ExternalModuleIndicator == nil || tx.currentSourceFile.ExternalModuleIndicator.Kind == ast.KindSourceFile) {
return false
}
if tx.currentModuleInfo.exportEquals == nil && ast.IsExternalModule(tx.currentSourceFile) {
diff --git a/testdata/baselines/reference/submodule/compiler/tripleSlashTypesReferenceWithMissingExports(module=node18).js b/testdata/baselines/reference/submodule/compiler/tripleSlashTypesReferenceWithMissingExports(module=node18).js
index 89dd2c7541..7c518b3b9d 100644
--- a/testdata/baselines/reference/submodule/compiler/tripleSlashTypesReferenceWithMissingExports(module=node18).js
+++ b/testdata/baselines/reference/submodule/compiler/tripleSlashTypesReferenceWithMissingExports(module=node18).js
@@ -14,5 +14,7 @@ interface GlobalThing { a: number }
const a: GlobalThing = { a: 0 };
//// [usage.js]
+"use strict";
///
+Object.defineProperty(exports, "__esModule", { value: true });
const a = { a: 0 };
diff --git a/testdata/baselines/reference/submodule/compiler/tripleSlashTypesReferenceWithMissingExports(module=node18).js.diff b/testdata/baselines/reference/submodule/compiler/tripleSlashTypesReferenceWithMissingExports(module=node18).js.diff
deleted file mode 100644
index c91fa848d7..0000000000
--- a/testdata/baselines/reference/submodule/compiler/tripleSlashTypesReferenceWithMissingExports(module=node18).js.diff
+++ /dev/null
@@ -1,10 +0,0 @@
---- old.tripleSlashTypesReferenceWithMissingExports(module=node18).js
-+++ new.tripleSlashTypesReferenceWithMissingExports(module=node18).js
-@@= skipped -13, +13 lines =@@
- const a: GlobalThing = { a: 0 };
-
- //// [usage.js]
--"use strict";
- ///
--Object.defineProperty(exports, "__esModule", { value: true });
- const a = { a: 0 };
\ No newline at end of file
diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node16).js b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node16).js
index a88f505406..bf4a19dcbc 100644
--- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node16).js
+++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node16).js
@@ -35,7 +35,6 @@ const a = {};
module.exports = a;
//// [file.js]
"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
// cjs format file
const a = {};
module.exports = a;
diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node16).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node16).js.diff
index 699333ea8a..6faef5e946 100644
--- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node16).js.diff
+++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node16).js.diff
@@ -1,14 +1,6 @@
--- old.nodeModulesAllowJsExportAssignment(module=node16).js
+++ new.nodeModulesAllowJsExportAssignment(module=node16).js
-@@= skipped -34, +34 lines =@@
- module.exports = a;
- //// [file.js]
- "use strict";
-+Object.defineProperty(exports, "__esModule", { value: true });
- // cjs format file
- const a = {};
- module.exports = a;
-@@= skipped -15, +16 lines =@@
+@@= skipped -49, +49 lines =@@
//// [index.d.ts]
diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node18).js b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node18).js
index f2ed933815..bf4a19dcbc 100644
--- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node18).js
+++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node18).js
@@ -34,6 +34,7 @@ module.exports = a;
const a = {};
module.exports = a;
//// [file.js]
+"use strict";
// cjs format file
const a = {};
module.exports = a;
diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node18).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node18).js.diff
index 25030890c9..92fd817b3e 100644
--- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node18).js.diff
+++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node18).js.diff
@@ -1,14 +1,6 @@
--- old.nodeModulesAllowJsExportAssignment(module=node18).js
+++ new.nodeModulesAllowJsExportAssignment(module=node18).js
-@@= skipped -33, +33 lines =@@
- const a = {};
- module.exports = a;
- //// [file.js]
--"use strict";
- // cjs format file
- const a = {};
- module.exports = a;
-@@= skipped -16, +15 lines =@@
+@@= skipped -49, +49 lines =@@
//// [index.d.ts]
diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node20).js b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node20).js
index a88f505406..bf4a19dcbc 100644
--- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node20).js
+++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node20).js
@@ -35,7 +35,6 @@ const a = {};
module.exports = a;
//// [file.js]
"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
// cjs format file
const a = {};
module.exports = a;
diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node20).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node20).js.diff
index 14e8fb2342..a3aca4c831 100644
--- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node20).js.diff
+++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=node20).js.diff
@@ -1,14 +1,6 @@
--- old.nodeModulesAllowJsExportAssignment(module=node20).js
+++ new.nodeModulesAllowJsExportAssignment(module=node20).js
-@@= skipped -34, +34 lines =@@
- module.exports = a;
- //// [file.js]
- "use strict";
-+Object.defineProperty(exports, "__esModule", { value: true });
- // cjs format file
- const a = {};
- module.exports = a;
-@@= skipped -15, +16 lines =@@
+@@= skipped -49, +49 lines =@@
//// [index.d.ts]
diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=nodenext).js b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=nodenext).js
index a88f505406..bf4a19dcbc 100644
--- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=nodenext).js
+++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=nodenext).js
@@ -35,7 +35,6 @@ const a = {};
module.exports = a;
//// [file.js]
"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
// cjs format file
const a = {};
module.exports = a;
diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=nodenext).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=nodenext).js.diff
index aaf2b1bd7d..d937bfc656 100644
--- a/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=nodenext).js.diff
+++ b/testdata/baselines/reference/submodule/conformance/nodeModulesAllowJsExportAssignment(module=nodenext).js.diff
@@ -1,14 +1,6 @@
--- old.nodeModulesAllowJsExportAssignment(module=nodenext).js
+++ new.nodeModulesAllowJsExportAssignment(module=nodenext).js
-@@= skipped -34, +34 lines =@@
- module.exports = a;
- //// [file.js]
- "use strict";
-+Object.defineProperty(exports, "__esModule", { value: true });
- // cjs format file
- const a = {};
- module.exports = a;
-@@= skipped -15, +16 lines =@@
+@@= skipped -49, +49 lines =@@
//// [index.d.ts]
diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesCJSEmit1(module=node18).js b/testdata/baselines/reference/submodule/conformance/nodeModulesCJSEmit1(module=node18).js
index 750a0afa50..f87b35ecee 100644
--- a/testdata/baselines/reference/submodule/conformance/nodeModulesCJSEmit1(module=node18).js
+++ b/testdata/baselines/reference/submodule/conformance/nodeModulesCJSEmit1(module=node18).js
@@ -22,11 +22,9 @@ three.foo;
//// [1.cjs]
"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
module.exports = {};
//// [2.cjs]
"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
export var foo = 0;
exports.foo = 0;
//// [3.cjs]
diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesCJSEmit1(module=node18).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesCJSEmit1(module=node18).js.diff
index 6312e19c7f..df2d0460b3 100644
--- a/testdata/baselines/reference/submodule/conformance/nodeModulesCJSEmit1(module=node18).js.diff
+++ b/testdata/baselines/reference/submodule/conformance/nodeModulesCJSEmit1(module=node18).js.diff
@@ -1,14 +1,9 @@
--- old.nodeModulesCJSEmit1(module=node18).js
+++ new.nodeModulesCJSEmit1(module=node18).js
-@@= skipped -21, +21 lines =@@
-
- //// [1.cjs]
- "use strict";
-+Object.defineProperty(exports, "__esModule", { value: true });
+@@= skipped -24, +24 lines =@@
module.exports = {};
//// [2.cjs]
"use strict";
-+Object.defineProperty(exports, "__esModule", { value: true });
+export var foo = 0;
exports.foo = 0;
//// [3.cjs]
diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesCJSEmit1(module=node20).js b/testdata/baselines/reference/submodule/conformance/nodeModulesCJSEmit1(module=node20).js
index 750a0afa50..f87b35ecee 100644
--- a/testdata/baselines/reference/submodule/conformance/nodeModulesCJSEmit1(module=node20).js
+++ b/testdata/baselines/reference/submodule/conformance/nodeModulesCJSEmit1(module=node20).js
@@ -22,11 +22,9 @@ three.foo;
//// [1.cjs]
"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
module.exports = {};
//// [2.cjs]
"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
export var foo = 0;
exports.foo = 0;
//// [3.cjs]
diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesCJSEmit1(module=node20).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesCJSEmit1(module=node20).js.diff
index 4986156d82..1d46e50685 100644
--- a/testdata/baselines/reference/submodule/conformance/nodeModulesCJSEmit1(module=node20).js.diff
+++ b/testdata/baselines/reference/submodule/conformance/nodeModulesCJSEmit1(module=node20).js.diff
@@ -1,14 +1,9 @@
--- old.nodeModulesCJSEmit1(module=node20).js
+++ new.nodeModulesCJSEmit1(module=node20).js
-@@= skipped -21, +21 lines =@@
-
- //// [1.cjs]
- "use strict";
-+Object.defineProperty(exports, "__esModule", { value: true });
+@@= skipped -24, +24 lines =@@
module.exports = {};
//// [2.cjs]
"use strict";
-+Object.defineProperty(exports, "__esModule", { value: true });
+export var foo = 0;
exports.foo = 0;
//// [3.cjs]
diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesCJSEmit1(module=nodenext).js b/testdata/baselines/reference/submodule/conformance/nodeModulesCJSEmit1(module=nodenext).js
index 750a0afa50..f87b35ecee 100644
--- a/testdata/baselines/reference/submodule/conformance/nodeModulesCJSEmit1(module=nodenext).js
+++ b/testdata/baselines/reference/submodule/conformance/nodeModulesCJSEmit1(module=nodenext).js
@@ -22,11 +22,9 @@ three.foo;
//// [1.cjs]
"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
module.exports = {};
//// [2.cjs]
"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
export var foo = 0;
exports.foo = 0;
//// [3.cjs]
diff --git a/testdata/baselines/reference/submodule/conformance/nodeModulesCJSEmit1(module=nodenext).js.diff b/testdata/baselines/reference/submodule/conformance/nodeModulesCJSEmit1(module=nodenext).js.diff
index 821b4cd9cf..d6396c3e8a 100644
--- a/testdata/baselines/reference/submodule/conformance/nodeModulesCJSEmit1(module=nodenext).js.diff
+++ b/testdata/baselines/reference/submodule/conformance/nodeModulesCJSEmit1(module=nodenext).js.diff
@@ -1,14 +1,9 @@
--- old.nodeModulesCJSEmit1(module=nodenext).js
+++ new.nodeModulesCJSEmit1(module=nodenext).js
-@@= skipped -21, +21 lines =@@
-
- //// [1.cjs]
- "use strict";
-+Object.defineProperty(exports, "__esModule", { value: true });
+@@= skipped -24, +24 lines =@@
module.exports = {};
//// [2.cjs]
"use strict";
-+Object.defineProperty(exports, "__esModule", { value: true });
+export var foo = 0;
exports.foo = 0;
//// [3.cjs]