Skip to content

Commit 8e14aa4

Browse files
committed
Add --module node20
1 parent b504a1e commit 8e14aa4

File tree

508 files changed

+34685
-529
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

508 files changed

+34685
-529
lines changed

src/compiler/checker.ts

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38054,7 +38054,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
3805438054
}
3805538055
}
3805638056
else if (moduleKind < ModuleKind.ES2020 && moduleKind !== ModuleKind.System) {
38057-
error(node, Diagnostics.The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system_node16_node18_or_nodenext);
38057+
error(node, Diagnostics.The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system_node16_node18_node20_or_nodenext);
3805838058
}
3805938059
const file = getSourceFileOfNode(node);
3806038060
Debug.assert(!!(file.flags & NodeFlags.PossiblyContainsImportMeta), "Containing file is missing import meta node flag.");
@@ -39636,6 +39636,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
3963639636
switch (moduleKind) {
3963739637
case ModuleKind.Node16:
3963839638
case ModuleKind.Node18:
39639+
case ModuleKind.Node20:
3963939640
case ModuleKind.NodeNext:
3964039641
if (sourceFile.impliedNodeFormat === ModuleKind.CommonJS) {
3964139642
span ??= getSpanOfTokenAtPosition(sourceFile, node.pos);
@@ -39656,8 +39657,8 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
3965639657
// fallthrough
3965739658
default:
3965839659
span ??= getSpanOfTokenAtPosition(sourceFile, node.pos);
39659-
const message = isAwaitExpression(node) ? Diagnostics.Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_node18_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher :
39660-
Diagnostics.Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_node18_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher;
39660+
const message = isAwaitExpression(node) ? Diagnostics.Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_node18_node20_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher :
39661+
Diagnostics.Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_node18_node20_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher;
3966139662
diagnostics.add(createFileDiagnostic(sourceFile, span.start, span.length, message));
3966239663
hasError = true;
3966339664
break;
@@ -48264,12 +48265,12 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
4826448265
return grammarErrorOnNode(
4826548266
node,
4826648267
isImportAttributes
48267-
? Diagnostics.Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_nodenext_or_preserve
48268-
: Diagnostics.Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_nodenext_or_preserve,
48268+
? Diagnostics.Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext_or_preserve
48269+
: Diagnostics.Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext_or_preserve,
4826948270
);
4827048271
}
4827148272

48272-
if (moduleKind === ModuleKind.NodeNext && !isImportAttributes) {
48273+
if (ModuleKind.Node20 <= moduleKind && moduleKind <= ModuleKind.NodeNext && !isImportAttributes) {
4827348274
return grammarErrorOnFirstToken(node, Diagnostics.Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert);
4827448275
}
4827548276

@@ -52313,6 +52314,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
5231352314
switch (moduleKind) {
5231452315
case ModuleKind.Node16:
5231552316
case ModuleKind.Node18:
52317+
case ModuleKind.Node20:
5231652318
case ModuleKind.NodeNext:
5231752319
if (sourceFile.impliedNodeFormat === ModuleKind.CommonJS) {
5231852320
diagnostics.add(
@@ -52331,7 +52333,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
5233152333
// fallthrough
5233252334
default:
5233352335
diagnostics.add(
52334-
createDiagnosticForNode(forInOrOfStatement.awaitModifier, Diagnostics.Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_node18_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher),
52336+
createDiagnosticForNode(forInOrOfStatement.awaitModifier, Diagnostics.Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_node18_node20_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher),
5233552337
);
5233652338
break;
5233752339
}
@@ -53134,7 +53136,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
5313453136
}
5313553137

5313653138
if (moduleKind === ModuleKind.ES2015) {
53137-
return grammarErrorOnNode(node, Diagnostics.Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd_system_umd_node16_node18_or_nodenext);
53139+
return grammarErrorOnNode(node, Diagnostics.Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd_system_umd_node16_node18_node20_or_nodenext);
5313853140
}
5313953141

5314053142
if (node.typeArguments) {
@@ -53148,7 +53150,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
5314853150

5314953151
if (nodeArguments.length > 1) {
5315053152
const importAttributesArgument = nodeArguments[1];
53151-
return grammarErrorOnNode(importAttributesArgument, Diagnostics.Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_nodenext_or_preserve);
53153+
return grammarErrorOnNode(importAttributesArgument, Diagnostics.Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_node20_nodenext_or_preserve);
5315253154
}
5315353155
}
5315453156

src/compiler/commandLineParser.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -602,6 +602,7 @@ export const moduleOptionDeclaration: CommandLineOptionOfCustomType = {
602602
esnext: ModuleKind.ESNext,
603603
node16: ModuleKind.Node16,
604604
node18: ModuleKind.Node18,
605+
node20: ModuleKind.Node20,
605606
nodenext: ModuleKind.NodeNext,
606607
preserve: ModuleKind.Preserve,
607608
})),

src/compiler/diagnosticMessages.json

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1031,11 +1031,11 @@
10311031
"category": "Error",
10321032
"code": 1322
10331033
},
1034-
"Dynamic imports are only supported when the '--module' flag is set to 'es2020', 'es2022', 'esnext', 'commonjs', 'amd', 'system', 'umd', 'node16', 'node18', or 'nodenext'.": {
1034+
"Dynamic imports are only supported when the '--module' flag is set to 'es2020', 'es2022', 'esnext', 'commonjs', 'amd', 'system', 'umd', 'node16', 'node18', 'node20', or 'nodenext'.": {
10351035
"category": "Error",
10361036
"code": 1323
10371037
},
1038-
"Dynamic imports only support a second argument when the '--module' option is set to 'esnext', 'node16', 'node18', 'nodenext', or 'preserve'.": {
1038+
"Dynamic imports only support a second argument when the '--module' option is set to 'esnext', 'node16', 'node18', 'node20', 'nodenext', or 'preserve'.": {
10391039
"category": "Error",
10401040
"code": 1324
10411041
},
@@ -1103,7 +1103,7 @@
11031103
"category": "Error",
11041104
"code": 1341
11051105
},
1106-
"The 'import.meta' meta-property is only allowed when the '--module' option is 'es2020', 'es2022', 'esnext', 'system', 'node16', 'node18', or 'nodenext'.": {
1106+
"The 'import.meta' meta-property is only allowed when the '--module' option is 'es2020', 'es2022', 'esnext', 'system', 'node16', 'node18', 'node20', or 'nodenext'.": {
11071107
"category": "Error",
11081108
"code": 1343
11091109
},
@@ -1223,7 +1223,7 @@
12231223
"category": "Message",
12241224
"code": 1377
12251225
},
1226-
"Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'node18', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher.": {
1226+
"Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'node18', 'node20', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher.": {
12271227
"category": "Error",
12281228
"code": 1378
12291229
},
@@ -1427,7 +1427,7 @@
14271427
"category": "Error",
14281428
"code": 1431
14291429
},
1430-
"Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'node18', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher.": {
1430+
"Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'node18', 'node20', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher.": {
14311431
"category": "Error",
14321432
"code": 1432
14331433
},
@@ -3791,15 +3791,15 @@
37913791
"category": "Error",
37923792
"code": 2820
37933793
},
3794-
"Import assertions are only supported when the '--module' option is set to 'esnext', 'node18', 'nodenext', or 'preserve'.": {
3794+
"Import assertions are only supported when the '--module' option is set to 'esnext', 'node18', 'node20', 'nodenext', or 'preserve'.": {
37953795
"category": "Error",
37963796
"code": 2821
37973797
},
37983798
"Import assertions cannot be used with type-only imports or exports.": {
37993799
"category": "Error",
38003800
"code": 2822
38013801
},
3802-
"Import attributes are only supported when the '--module' option is set to 'esnext', 'node18', 'nodenext', or 'preserve'.": {
3802+
"Import attributes are only supported when the '--module' option is set to 'esnext', 'node18', 'node20', 'nodenext', or 'preserve'.": {
38033803
"category": "Error",
38043804
"code": 2823
38053805
},
@@ -3879,7 +3879,7 @@
38793879
"category": "Error",
38803880
"code": 2853
38813881
},
3882-
"Top-level 'await using' statements are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'node18', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher.": {
3882+
"Top-level 'await using' statements are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'node18', 'node20', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher.": {
38833883
"category": "Error",
38843884
"code": 2854
38853885
},

src/compiler/transformer.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ function getModuleTransformer(moduleKind: ModuleKind): TransformerFactory<Source
8787
case ModuleKind.ES2015:
8888
case ModuleKind.Node16:
8989
case ModuleKind.Node18:
90+
case ModuleKind.Node20:
9091
case ModuleKind.NodeNext:
9192
case ModuleKind.CommonJS:
9293
// Wraps `transformModule` and `transformECMAScriptModule` and

src/compiler/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7585,6 +7585,7 @@ export enum ModuleKind {
75857585
// Node16+ is an amalgam of commonjs (albeit updated) and es2022+, and represents a distinct module system from es2020/esnext
75867586
Node16 = 100,
75877587
Node18 = 101,
7588+
Node20 = 102,
75887589
NodeNext = 199,
75897590

75907591
// Emit as written

src/compiler/utilities.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8953,6 +8953,7 @@ const _computedOptions = createComputedCompilerOptions({
89538953
return target ??
89548954
((compilerOptions.module === ModuleKind.Node16 && ScriptTarget.ES2022) ||
89558955
(compilerOptions.module === ModuleKind.Node18 && ScriptTarget.ES2022) ||
8956+
(compilerOptions.module === ModuleKind.Node20 && ScriptTarget.ES2023) ||
89568957
(compilerOptions.module === ModuleKind.NodeNext && ScriptTarget.ESNext) ||
89578958
ScriptTarget.ES5);
89588959
},
@@ -8976,6 +8977,7 @@ const _computedOptions = createComputedCompilerOptions({
89768977
break;
89778978
case ModuleKind.Node16:
89788979
case ModuleKind.Node18:
8980+
case ModuleKind.Node20:
89798981
moduleResolution = ModuleResolutionKind.Node16;
89808982
break;
89818983
case ModuleKind.NodeNext:
@@ -9019,6 +9021,7 @@ const _computedOptions = createComputedCompilerOptions({
90199021
switch (_computedOptions.module.computeValue(compilerOptions)) {
90209022
case ModuleKind.Node16:
90219023
case ModuleKind.Node18:
9024+
case ModuleKind.Node20:
90229025
case ModuleKind.NodeNext:
90239026
case ModuleKind.Preserve:
90249027
return true;

src/server/protocol.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3258,6 +3258,7 @@ export const enum ModuleKind {
32583258
ESNext = "esnext",
32593259
Node16 = "node16",
32603260
Node18 = "node18",
3261+
Node20 = "node20",
32613262
NodeNext = "nodenext",
32623263
Preserve = "preserve",
32633264
}

src/services/codefixes/fixModuleAndTargetOptions.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ import {
1919

2020
registerCodeFix({
2121
errorCodes: [
22-
Diagnostics.Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_node18_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher.code,
23-
Diagnostics.Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_node18_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher.code,
24-
Diagnostics.Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_node18_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher.code,
22+
Diagnostics.Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_node18_node20_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher.code,
23+
Diagnostics.Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_node18_node20_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher.code,
24+
Diagnostics.Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_node18_node20_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher.code,
2525
],
2626
getCodeActions: function getCodeActionsToFixModuleAndTarget(context) {
2727
const compilerOptions = context.program.getCompilerOptions();

src/services/codefixes/importFixes.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1559,6 +1559,7 @@ function getUmdImportKind(importingFile: SourceFile | FutureSourceFile, program:
15591559
return ImportKind.Namespace;
15601560
case ModuleKind.Node16:
15611561
case ModuleKind.Node18:
1562+
case ModuleKind.Node20:
15621563
case ModuleKind.NodeNext:
15631564
return getImpliedNodeFormatForEmit(importingFile, program) === ModuleKind.ESNext ? ImportKind.Namespace : ImportKind.CommonJS;
15641565
default:

tests/baselines/reference/api/typescript.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2520,6 +2520,7 @@ declare namespace ts {
25202520
ESNext = "esnext",
25212521
Node16 = "node16",
25222522
Node18 = "node18",
2523+
Node20 = "node20",
25232524
NodeNext = "nodenext",
25242525
Preserve = "preserve",
25252526
}
@@ -7148,6 +7149,7 @@ declare namespace ts {
71487149
ESNext = 99,
71497150
Node16 = 100,
71507151
Node18 = 101,
7152+
Node20 = 102,
71517153
NodeNext = 199,
71527154
Preserve = 200,
71537155
}

0 commit comments

Comments
 (0)