From 02719a09da9b2df92b66a0d6b1e2ff8aced39b9d Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Wed, 6 Jul 2022 11:52:07 -0700 Subject: [PATCH] Remove dependence on `module` compiler option to consider mts/cts files always modules --- src/compiler/utilities.ts | 7 ++----- ...uleDetectionIsolatedModulesCjsFileScope.js | 19 +++++++++++++++++++ ...tectionIsolatedModulesCjsFileScope.symbols | 8 ++++++++ ...DetectionIsolatedModulesCjsFileScope.types | 10 ++++++++++ ...uleDetectionIsolatedModulesCjsFileScope.ts | 9 +++++++++ 5 files changed, 48 insertions(+), 5 deletions(-) create mode 100644 tests/baselines/reference/moduleDetectionIsolatedModulesCjsFileScope.js create mode 100644 tests/baselines/reference/moduleDetectionIsolatedModulesCjsFileScope.symbols create mode 100644 tests/baselines/reference/moduleDetectionIsolatedModulesCjsFileScope.types create mode 100644 tests/cases/compiler/moduleDetectionIsolatedModulesCjsFileScope.ts diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 0ac57b26fee15..348b90d6e9f45 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -6319,7 +6319,7 @@ namespace ts { // Excludes declaration files - they still require an explicit `export {}` or the like // for back compat purposes. The only non-declaration files _not_ forced to be a module are `.js` files // that aren't esm-mode (meaning not in a `type: module` scope). - return (file.impliedNodeFormat === ModuleKind.ESNext || (fileExtensionIsOneOf(file.fileName, [Extension.Cjs, Extension.Cts]))) && !file.isDeclarationFile ? true : undefined; + return (file.impliedNodeFormat === ModuleKind.ESNext || (fileExtensionIsOneOf(file.fileName, [Extension.Cjs, Extension.Cts, Extension.Mjs, Extension.Mts]))) && !file.isDeclarationFile ? true : undefined; } export function getSetExternalModuleIndicator(options: CompilerOptions): (file: SourceFile) => void { @@ -6343,10 +6343,7 @@ namespace ts { if (options.jsx === JsxEmit.ReactJSX || options.jsx === JsxEmit.ReactJSXDev) { checks.push(isFileModuleFromUsingJSXTag); } - const moduleKind = getEmitModuleKind(options); - if (moduleKind === ModuleKind.Node16 || moduleKind === ModuleKind.NodeNext) { - checks.push(isFileForcedToBeModuleByFormat); - } + checks.push(isFileForcedToBeModuleByFormat); const combined = or(...checks); const callback = (file: SourceFile) => void (file.externalModuleIndicator = combined(file)); return callback; diff --git a/tests/baselines/reference/moduleDetectionIsolatedModulesCjsFileScope.js b/tests/baselines/reference/moduleDetectionIsolatedModulesCjsFileScope.js new file mode 100644 index 0000000000000..5718d67611ead --- /dev/null +++ b/tests/baselines/reference/moduleDetectionIsolatedModulesCjsFileScope.js @@ -0,0 +1,19 @@ +//// [tests/cases/compiler/moduleDetectionIsolatedModulesCjsFileScope.ts] //// + +//// [filename.cts] +const a = 2; +//// [filename.mts] +const a = 2; + +//// [filename.cjs] +const a = 2; +export {}; +//// [filename.mjs] +const a = 2; +export {}; + + +//// [filename.d.cts] +export {}; +//// [filename.d.mts] +export {}; diff --git a/tests/baselines/reference/moduleDetectionIsolatedModulesCjsFileScope.symbols b/tests/baselines/reference/moduleDetectionIsolatedModulesCjsFileScope.symbols new file mode 100644 index 0000000000000..12507c08e5c0b --- /dev/null +++ b/tests/baselines/reference/moduleDetectionIsolatedModulesCjsFileScope.symbols @@ -0,0 +1,8 @@ +=== tests/cases/compiler/filename.cts === +const a = 2; +>a : Symbol(a, Decl(filename.cts, 0, 5)) + +=== tests/cases/compiler/filename.mts === +const a = 2; +>a : Symbol(a, Decl(filename.mts, 0, 5)) + diff --git a/tests/baselines/reference/moduleDetectionIsolatedModulesCjsFileScope.types b/tests/baselines/reference/moduleDetectionIsolatedModulesCjsFileScope.types new file mode 100644 index 0000000000000..0f7b6eff869af --- /dev/null +++ b/tests/baselines/reference/moduleDetectionIsolatedModulesCjsFileScope.types @@ -0,0 +1,10 @@ +=== tests/cases/compiler/filename.cts === +const a = 2; +>a : 2 +>2 : 2 + +=== tests/cases/compiler/filename.mts === +const a = 2; +>a : 2 +>2 : 2 + diff --git a/tests/cases/compiler/moduleDetectionIsolatedModulesCjsFileScope.ts b/tests/cases/compiler/moduleDetectionIsolatedModulesCjsFileScope.ts new file mode 100644 index 0000000000000..1b37d919466c1 --- /dev/null +++ b/tests/cases/compiler/moduleDetectionIsolatedModulesCjsFileScope.ts @@ -0,0 +1,9 @@ +// @target: esnext +// @module: esnext +// @declaration: true +// @moduleResolution: node +// @isolatedModules: true +// @filename: filename.cts +const a = 2; +// @filename: filename.mts +const a = 2; \ No newline at end of file