Skip to content

Commit 4d27361

Browse files
authored
Allow JS with isolated modules (#31483)
* Allow JS with isolated modules Previously legacy JS code was not allowed; it was required to use ES6 module syntax. Unfortunately, the check happens after parsing but before binding, and the commonjs module indicator isn't set until binding because it's not syntactically simple like the ES6 module indicator, which is set during parsing. So I decided that JS should be allowed during isolatedModules unconditionally. We're not going to be transforming it anyway. * Update baselines * Switch test to outDir instead of noEmit
1 parent ae7a1b4 commit 4d27361

14 files changed

+60
-19
lines changed

src/compiler/diagnosticMessages.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -655,7 +655,7 @@
655655
"category": "Error",
656656
"code": 1207
657657
},
658-
"Cannot compile namespaces when the '--isolatedModules' flag is provided.": {
658+
"All files must be modules when the '--isolatedModules' flag is provided.": {
659659
"category": "Error",
660660
"code": 1208
661661
},

src/compiler/program.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2858,10 +2858,10 @@ namespace ts {
28582858
createDiagnosticForOptionName(Diagnostics.Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES2015_or_higher, "isolatedModules", "target");
28592859
}
28602860

2861-
const firstNonExternalModuleSourceFile = find(files, f => !isExternalModule(f) && !f.isDeclarationFile && f.scriptKind !== ScriptKind.JSON);
2861+
const firstNonExternalModuleSourceFile = find(files, f => !isExternalModule(f) && !isSourceFileJS(f) && !f.isDeclarationFile && f.scriptKind !== ScriptKind.JSON);
28622862
if (firstNonExternalModuleSourceFile) {
28632863
const span = getErrorSpanForNode(firstNonExternalModuleSourceFile, firstNonExternalModuleSourceFile);
2864-
programDiagnostics.add(createFileDiagnostic(firstNonExternalModuleSourceFile, span.start, span.length, Diagnostics.Cannot_compile_namespaces_when_the_isolatedModules_flag_is_provided));
2864+
programDiagnostics.add(createFileDiagnostic(firstNonExternalModuleSourceFile, span.start, span.length, Diagnostics.All_files_must_be_modules_when_the_isolatedModules_flag_is_provided));
28652865
}
28662866
}
28672867
else if (firstNonAmbientExternalModuleSourceFile && languageVersion < ScriptTarget.ES2015 && options.module === ModuleKind.None) {
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
//// [index.js]
2+
module.exports = {}
3+
var x = 1
4+
5+
6+
//// [index.js]
7+
module.exports = {};
8+
var x = 1;
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
=== tests/cases/compiler/index.js ===
2+
module.exports = {}
3+
>module.exports : Symbol("tests/cases/compiler/index", Decl(index.js, 0, 0))
4+
>module : Symbol(module, Decl(index.js, 0, 0))
5+
>exports : Symbol("tests/cases/compiler/index", Decl(index.js, 0, 0))
6+
7+
var x = 1
8+
>x : Symbol(x, Decl(index.js, 1, 3))
9+
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
=== tests/cases/compiler/index.js ===
2+
module.exports = {}
3+
>module.exports = {} : typeof import("tests/cases/compiler/index")
4+
>module.exports : typeof import("tests/cases/compiler/index")
5+
>module : { "tests/cases/compiler/index": typeof import("tests/cases/compiler/index"); }
6+
>exports : typeof import("tests/cases/compiler/index")
7+
>{} : {}
8+
9+
var x = 1
10+
>x : number
11+
>1 : 1
12+

tests/baselines/reference/importHelpersInIsolatedModules.errors.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
tests/cases/compiler/script.ts(1,1): error TS1208: Cannot compile namespaces when the '--isolatedModules' flag is provided.
1+
tests/cases/compiler/script.ts(1,1): error TS1208: All files must be modules when the '--isolatedModules' flag is provided.
22

33

44
==== tests/cases/compiler/external.ts (0 errors) ====
@@ -16,7 +16,7 @@ tests/cases/compiler/script.ts(1,1): error TS1208: Cannot compile namespaces whe
1616
==== tests/cases/compiler/script.ts (1 errors) ====
1717
class A { }
1818
~~~~~
19-
!!! error TS1208: Cannot compile namespaces when the '--isolatedModules' flag is provided.
19+
!!! error TS1208: All files must be modules when the '--isolatedModules' flag is provided.
2020
class B extends A { }
2121

2222
declare var dec: any;
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
tests/cases/compiler/file1.ts(1,1): error TS1208: Cannot compile namespaces when the '--isolatedModules' flag is provided.
1+
tests/cases/compiler/file1.ts(1,1): error TS1208: All files must be modules when the '--isolatedModules' flag is provided.
22

33

44
==== tests/cases/compiler/file1.ts (1 errors) ====
55
var x;
66
~~~
7-
!!! error TS1208: Cannot compile namespaces when the '--isolatedModules' flag is provided.
7+
!!! error TS1208: All files must be modules when the '--isolatedModules' flag is provided.

tests/baselines/reference/isolatedModulesOut.errors.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
error TS5053: Option 'out' cannot be specified with option 'isolatedModules'.
22
tests/cases/compiler/file1.ts(1,1): error TS6131: Cannot compile modules using option 'out' unless the '--module' flag is 'amd' or 'system'.
3-
tests/cases/compiler/file2.ts(1,1): error TS1208: Cannot compile namespaces when the '--isolatedModules' flag is provided.
3+
tests/cases/compiler/file2.ts(1,1): error TS1208: All files must be modules when the '--isolatedModules' flag is provided.
44

55

66
!!! error TS5053: Option 'out' cannot be specified with option 'isolatedModules'.
@@ -11,4 +11,4 @@ tests/cases/compiler/file2.ts(1,1): error TS1208: Cannot compile namespaces when
1111
==== tests/cases/compiler/file2.ts (1 errors) ====
1212
var y;
1313
~~~
14-
!!! error TS1208: Cannot compile namespaces when the '--isolatedModules' flag is provided.
14+
!!! error TS1208: All files must be modules when the '--isolatedModules' flag is provided.
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
tests/cases/compiler/isolatedModulesPlainFile-AMD.ts(1,1): error TS1208: Cannot compile namespaces when the '--isolatedModules' flag is provided.
1+
tests/cases/compiler/isolatedModulesPlainFile-AMD.ts(1,1): error TS1208: All files must be modules when the '--isolatedModules' flag is provided.
22

33

44
==== tests/cases/compiler/isolatedModulesPlainFile-AMD.ts (1 errors) ====
55
declare function run(a: number): void;
66
~~~~~~~
7-
!!! error TS1208: Cannot compile namespaces when the '--isolatedModules' flag is provided.
7+
!!! error TS1208: All files must be modules when the '--isolatedModules' flag is provided.
88
run(1);
99

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
tests/cases/compiler/isolatedModulesPlainFile-CommonJS.ts(1,1): error TS1208: Cannot compile namespaces when the '--isolatedModules' flag is provided.
1+
tests/cases/compiler/isolatedModulesPlainFile-CommonJS.ts(1,1): error TS1208: All files must be modules when the '--isolatedModules' flag is provided.
22

33

44
==== tests/cases/compiler/isolatedModulesPlainFile-CommonJS.ts (1 errors) ====
55
declare function run(a: number): void;
66
~~~~~~~
7-
!!! error TS1208: Cannot compile namespaces when the '--isolatedModules' flag is provided.
7+
!!! error TS1208: All files must be modules when the '--isolatedModules' flag is provided.
88
run(1);
99

0 commit comments

Comments
 (0)