Skip to content

Commit 2fb1117

Browse files
committed
Merge branch 'module-node20'
2 parents 0dda037 + 2ffe7d0 commit 2fb1117

File tree

659 files changed

+38661
-1040
lines changed

Some content is hidden

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

659 files changed

+38661
-1040
lines changed

src/compiler/checker.ts

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4714,7 +4714,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
47144714
if (errorNode && resolvedModule.isExternalLibraryImport && !resolutionExtensionIsTSOrJson(resolvedModule.extension)) {
47154715
errorOnImplicitAnyModule(/*isError*/ false, errorNode, currentSourceFile, mode, resolvedModule, moduleReference);
47164716
}
4717-
if (errorNode && (moduleResolutionKind === ModuleResolutionKind.Node16 || moduleResolutionKind === ModuleResolutionKind.NodeNext)) {
4717+
if (errorNode && (moduleKind === ModuleKind.Node16 || moduleKind === ModuleKind.Node18)) {
47184718
const isSyncImport = (currentSourceFile.impliedNodeFormat === ModuleKind.CommonJS && !findAncestor(location, isImportCall)) || !!findAncestor(location, isImportEqualsDeclaration);
47194719
const overrideHost = findAncestor(location, l => isImportTypeNode(l) || isExportDeclaration(l) || isImportDeclaration(l) || isJSDocImportTag(l));
47204720
// An override clause will take effect for type-only imports and import types, and allows importing the types across formats, regardless of
@@ -39215,6 +39215,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
3921539215
switch (moduleKind) {
3921639216
case ModuleKind.Node16:
3921739217
case ModuleKind.Node18:
39218+
case ModuleKind.Node20:
3921839219
case ModuleKind.NodeNext:
3921939220
if (sourceFile.impliedNodeFormat === ModuleKind.CommonJS) {
3922039221
span ??= getSpanOfTokenAtPosition(sourceFile, node.pos);
@@ -39235,8 +39236,8 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
3923539236
// fallthrough
3923639237
default:
3923739238
span ??= getSpanOfTokenAtPosition(sourceFile, node.pos);
39238-
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 :
39239-
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;
39239+
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 :
39240+
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;
3924039241
diagnostics.add(createFileDiagnostic(sourceFile, span.start, span.length, message));
3924139242
hasError = true;
3924239243
break;
@@ -48071,11 +48072,15 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
4807148072
return grammarErrorOnNode(
4807248073
node,
4807348074
isImportAttributes
48074-
? Diagnostics.Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_nodenext_or_preserve
48075-
: Diagnostics.Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_nodenext_or_preserve,
48075+
? Diagnostics.Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext_or_preserve
48076+
: Diagnostics.Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext_or_preserve,
4807648077
);
4807748078
}
4807848079

48080+
if (moduleKind === ModuleKind.NodeNext && !isImportAttributes) {
48081+
return grammarErrorOnFirstToken(node, Diagnostics.Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_asserts);
48082+
}
48083+
4807948084
if (declaration.moduleSpecifier && getEmitSyntaxForModuleSpecifierExpression(declaration.moduleSpecifier) === ModuleKind.CommonJS) {
4808048085
return grammarErrorOnNode(
4808148086
node,
@@ -52072,6 +52077,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
5207252077
switch (moduleKind) {
5207352078
case ModuleKind.Node16:
5207452079
case ModuleKind.Node18:
52080+
case ModuleKind.Node20:
5207552081
case ModuleKind.NodeNext:
5207652082
if (sourceFile.impliedNodeFormat === ModuleKind.CommonJS) {
5207752083
diagnostics.add(
@@ -52090,7 +52096,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
5209052096
// fallthrough
5209152097
default:
5209252098
diagnostics.add(
52093-
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),
52099+
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),
5209452100
);
5209552101
break;
5209652102
}
@@ -52892,7 +52898,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
5289252898
}
5289352899

5289452900
if (moduleKind === ModuleKind.ES2015) {
52895-
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);
52901+
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);
5289652902
}
5289752903

5289852904
if (node.typeArguments) {
@@ -52906,7 +52912,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
5290652912

5290752913
if (nodeArguments.length > 1) {
5290852914
const importAttributesArgument = nodeArguments[1];
52909-
return grammarErrorOnNode(importAttributesArgument, Diagnostics.Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_nodenext_or_preserve);
52915+
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);
5291052916
}
5291152917
}
5291252918

src/compiler/commandLineParser.ts

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

src/compiler/diagnosticMessages.json

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1028,11 +1028,11 @@
10281028
"category": "Error",
10291029
"code": 1322
10301030
},
1031-
"Dynamic imports are only supported when the '--module' flag is set to 'es2020', 'es2022', 'esnext', 'commonjs', 'amd', 'system', 'umd', 'node16', 'node18', or 'nodenext'.": {
1031+
"Dynamic imports are only supported when the '--module' flag is set to 'es2020', 'es2022', 'esnext', 'commonjs', 'amd', 'system', 'umd', 'node16', 'node18', 'node20', or 'nodenext'.": {
10321032
"category": "Error",
10331033
"code": 1323
10341034
},
1035-
"Dynamic imports only support a second argument when the '--module' option is set to 'esnext', 'node16', 'node18', 'nodenext', or 'preserve'.": {
1035+
"Dynamic imports only support a second argument when the '--module' option is set to 'esnext', 'node16', 'node18', 'node20', 'nodenext', or 'preserve'.": {
10361036
"category": "Error",
10371037
"code": 1324
10381038
},
@@ -1220,7 +1220,7 @@
12201220
"category": "Message",
12211221
"code": 1377
12221222
},
1223-
"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.": {
1223+
"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.": {
12241224
"category": "Error",
12251225
"code": 1378
12261226
},
@@ -1424,7 +1424,7 @@
14241424
"category": "Error",
14251425
"code": 1431
14261426
},
1427-
"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.": {
1427+
"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.": {
14281428
"category": "Error",
14291429
"code": 1432
14301430
},
@@ -3788,15 +3788,15 @@
37883788
"category": "Error",
37893789
"code": 2820
37903790
},
3791-
"Import assertions are only supported when the '--module' option is set to 'esnext', 'node18', 'nodenext', or 'preserve'.": {
3791+
"Import assertions are only supported when the '--module' option is set to 'esnext', 'node18', 'node20', 'nodenext', or 'preserve'.": {
37923792
"category": "Error",
37933793
"code": 2821
37943794
},
37953795
"Import assertions cannot be used with type-only imports or exports.": {
37963796
"category": "Error",
37973797
"code": 2822
37983798
},
3799-
"Import attributes are only supported when the '--module' option is set to 'esnext', 'node18', 'nodenext', or 'preserve'.": {
3799+
"Import attributes are only supported when the '--module' option is set to 'esnext', 'node18', 'node20', 'nodenext', or 'preserve'.": {
38003800
"category": "Error",
38013801
"code": 2823
38023802
},
@@ -3876,7 +3876,7 @@
38763876
"category": "Error",
38773877
"code": 2853
38783878
},
3879-
"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.": {
3879+
"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.": {
38803880
"category": "Error",
38813881
"code": 2854
38823882
},
@@ -3980,6 +3980,10 @@
39803980
"category": "Error",
39813981
"code": 2879
39823982
},
3983+
"Import assertions have been replaced by import attributes. Use 'with' instead of 'asserts'.": {
3984+
"category": "Error",
3985+
"code": 2880
3986+
},
39833987

39843988
"Import declaration '{0}' is using private name '{1}'.": {
39853989
"category": "Error",

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
@@ -7546,6 +7546,7 @@ export enum ModuleKind {
75467546
// Node16+ is an amalgam of commonjs (albeit updated) and es2022+, and represents a distinct module system from es2020/esnext
75477547
Node16 = 100,
75487548
Node18 = 101,
7549+
Node20 = 102,
75497550
NodeNext = 199,
75507551

75517552
// Emit as written

src/compiler/utilities.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8941,6 +8941,7 @@ const _computedOptions = createComputedCompilerOptions({
89418941
return target ??
89428942
((compilerOptions.module === ModuleKind.Node16 && ScriptTarget.ES2022) ||
89438943
(compilerOptions.module === ModuleKind.Node18 && ScriptTarget.ES2022) ||
8944+
(compilerOptions.module === ModuleKind.Node20 && ScriptTarget.ES2023) ||
89448945
(compilerOptions.module === ModuleKind.NodeNext && ScriptTarget.ESNext) ||
89458946
ScriptTarget.ES5);
89468947
},
@@ -8964,6 +8965,7 @@ const _computedOptions = createComputedCompilerOptions({
89648965
break;
89658966
case ModuleKind.Node16:
89668967
case ModuleKind.Node18:
8968+
case ModuleKind.Node20:
89678969
moduleResolution = ModuleResolutionKind.Node16;
89688970
break;
89698971
case ModuleKind.NodeNext:
@@ -9007,6 +9009,7 @@ const _computedOptions = createComputedCompilerOptions({
90079009
switch (_computedOptions.module.computeValue(compilerOptions)) {
90089010
case ModuleKind.Node16:
90099011
case ModuleKind.Node18:
9012+
case ModuleKind.Node20:
90109013
case ModuleKind.NodeNext:
90119014
case ModuleKind.Preserve:
90129015
return true;

src/server/protocol.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3255,6 +3255,7 @@ export const enum ModuleKind {
32553255
ESNext = "esnext",
32563256
Node16 = "node16",
32573257
Node18 = "node18",
3258+
Node20 = "node20",
32583259
NodeNext = "nodenext",
32593260
Preserve = "preserve",
32603261
}

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
@@ -2517,6 +2517,7 @@ declare namespace ts {
25172517
ESNext = "esnext",
25182518
Node16 = "node16",
25192519
Node18 = "node18",
2520+
Node20 = "node20",
25202521
NodeNext = "nodenext",
25212522
Preserve = "preserve",
25222523
}
@@ -7133,6 +7134,7 @@ declare namespace ts {
71337134
ESNext = 99,
71347135
Node16 = 100,
71357136
Node18 = 101,
7137+
Node20 = 102,
71367138
NodeNext = 199,
71377139
Preserve = 200,
71387140
}

0 commit comments

Comments
 (0)