@@ -10247,7 +10247,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
10247
10247
factory.createImportDeclaration(
10248
10248
/*modifiers*/ undefined,
10249
10249
factory.createImportClause(
10250
- /*isTypeOnly */ false ,
10250
+ /*phaseModifier */ undefined ,
10251
10251
/*name*/ undefined,
10252
10252
factory.createNamedImports([factory.createImportSpecifier(
10253
10253
/*isTypeOnly*/ false,
@@ -10344,7 +10344,11 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
10344
10344
addResult(
10345
10345
factory.createImportDeclaration(
10346
10346
/*modifiers*/ undefined,
10347
- factory.createImportClause(isTypeOnly, factory.createIdentifier(localName), /*namedBindings*/ undefined),
10347
+ factory.createImportClause(
10348
+ /* phaseModifier */ isTypeOnly ? SyntaxKind.TypeKeyword : undefined,
10349
+ factory.createIdentifier(localName),
10350
+ /*namedBindings*/ undefined,
10351
+ ),
10348
10352
specifier,
10349
10353
attributes,
10350
10354
),
@@ -10360,7 +10364,11 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
10360
10364
addResult(
10361
10365
factory.createImportDeclaration(
10362
10366
/*modifiers*/ undefined,
10363
- factory.createImportClause(isTypeOnly, /*name*/ undefined, factory.createNamespaceImport(factory.createIdentifier(localName))),
10367
+ factory.createImportClause(
10368
+ /* phaseModifier */ isTypeOnly ? SyntaxKind.TypeKeyword : undefined,
10369
+ /*name*/ undefined,
10370
+ factory.createNamespaceImport(factory.createIdentifier(localName)),
10371
+ ),
10364
10372
specifier,
10365
10373
(node as ImportClause).parent.attributes,
10366
10374
),
@@ -10389,7 +10397,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
10389
10397
factory.createImportDeclaration(
10390
10398
/*modifiers*/ undefined,
10391
10399
factory.createImportClause(
10392
- isTypeOnly,
10400
+ /* phaseModifier */ isTypeOnly ? SyntaxKind.TypeKeyword : undefined ,
10393
10401
/*name*/ undefined,
10394
10402
factory.createNamedImports([
10395
10403
factory.createImportSpecifier(
@@ -38014,6 +38022,10 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
38014
38022
}
38015
38023
38016
38024
if (node.keywordToken === SyntaxKind.ImportKeyword) {
38025
+ if (node.name.escapedText === "defer") {
38026
+ Debug.assert(!isCallExpression(node.parent) || node.parent.expression !== node, "Trying to get the type of `import.defer` in `import.defer(...)`");
38027
+ return errorType;
38028
+ }
38017
38029
return checkImportMetaProperty(node);
38018
38030
}
38019
38031
@@ -41452,7 +41464,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
41452
41464
}
41453
41465
// Optimize for the common case of a call to a function with a single non-generic call
41454
41466
// signature where we can just fetch the return type without checking the arguments.
41455
- if (isCallExpression(expr) && expr.expression.kind !== SyntaxKind.SuperKeyword && !isRequireCall(expr, /*requireStringLiteralLikeArgument*/ true) && !isSymbolOrSymbolForCall(expr)) {
41467
+ if (isCallExpression(expr) && expr.expression.kind !== SyntaxKind.SuperKeyword && !isRequireCall(expr, /*requireStringLiteralLikeArgument*/ true) && !isSymbolOrSymbolForCall(expr) && !isImportCall(expr) ) {
41456
41468
return isCallChain(expr) ? getReturnTypeOfSingleNonGenericSignatureOfCallChain(expr) :
41457
41469
getReturnTypeOfSingleNonGenericCallSignature(checkNonNullExpression(expr.expression));
41458
41470
}
@@ -41606,8 +41618,8 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
41606
41618
case SyntaxKind.ElementAccessExpression:
41607
41619
return checkIndexedAccess(node as ElementAccessExpression, checkMode);
41608
41620
case SyntaxKind.CallExpression:
41609
- if ((node as CallExpression).expression.kind === SyntaxKind.ImportKeyword ) {
41610
- return checkImportCallExpression(node as ImportCall );
41621
+ if (isImportCall (node) ) {
41622
+ return checkImportCallExpression(node);
41611
41623
}
41612
41624
// falls through
41613
41625
case SyntaxKind.NewExpression:
@@ -49877,6 +49889,10 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
49877
49889
return isExportAssignment(node.parent) ? Debug.checkDefined(node.parent.symbol) : undefined;
49878
49890
49879
49891
case SyntaxKind.ImportKeyword:
49892
+ if (isMetaProperty(node.parent) && node.parent.name.escapedText === "defer") {
49893
+ return undefined;
49894
+ }
49895
+ // falls through
49880
49896
case SyntaxKind.NewKeyword:
49881
49897
return isMetaProperty(node.parent) ? checkMetaPropertyKeyword(node.parent).symbol : undefined;
49882
49898
case SyntaxKind.InstanceOfKeyword:
@@ -52851,7 +52867,18 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
52851
52867
break;
52852
52868
case SyntaxKind.ImportKeyword:
52853
52869
if (escapedText !== "meta") {
52854
- return grammarErrorOnNode(node.name, Diagnostics._0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2, unescapeLeadingUnderscores(node.name.escapedText), tokenToString(node.keywordToken), "meta");
52870
+ const isCallee = isCallExpression(node.parent) && node.parent.expression === node;
52871
+ if (escapedText === "defer") {
52872
+ if (!isCallee) {
52873
+ return grammarErrorAtPos(node, node.end, 0, Diagnostics._0_expected, "(");
52874
+ }
52875
+ }
52876
+ else {
52877
+ if (isCallee) {
52878
+ return grammarErrorOnNode(node.name, Diagnostics._0_is_not_a_valid_meta_property_for_keyword_import_Did_you_mean_meta_or_defer, unescapeLeadingUnderscores(node.name.escapedText));
52879
+ }
52880
+ return grammarErrorOnNode(node.name, Diagnostics._0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2, unescapeLeadingUnderscores(node.name.escapedText), tokenToString(node.keywordToken), "meta");
52881
+ }
52855
52882
}
52856
52883
break;
52857
52884
}
@@ -53110,11 +53137,24 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
53110
53137
}
53111
53138
53112
53139
function checkGrammarImportClause(node: ImportClause): boolean {
53113
- if (node.isTypeOnly && node.name && node.namedBindings) {
53114
- return grammarErrorOnNode(node, Diagnostics.A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both);
53140
+ if (node.phaseModifier === SyntaxKind.TypeKeyword) {
53141
+ if (node.name && node.namedBindings) {
53142
+ return grammarErrorOnNode(node, Diagnostics.A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both);
53143
+ }
53144
+ if (node.namedBindings?.kind === SyntaxKind.NamedImports) {
53145
+ return checkGrammarNamedImportsOrExports(node.namedBindings);
53146
+ }
53115
53147
}
53116
- if (node.isTypeOnly && node.namedBindings?.kind === SyntaxKind.NamedImports) {
53117
- return checkGrammarNamedImportsOrExports(node.namedBindings);
53148
+ else if (node.phaseModifier === SyntaxKind.DeferKeyword) {
53149
+ if (node.name) {
53150
+ return grammarErrorOnNode(node, Diagnostics.Default_imports_are_not_allowed_in_a_deferred_import);
53151
+ }
53152
+ if (node.namedBindings?.kind === SyntaxKind.NamedImports) {
53153
+ return grammarErrorOnNode(node, Diagnostics.Named_imports_are_not_allowed_in_a_deferred_import);
53154
+ }
53155
+ if (moduleKind !== ModuleKind.ESNext && moduleKind !== ModuleKind.Preserve) {
53156
+ return grammarErrorOnNode(node, Diagnostics.Deferred_imports_are_only_supported_when_the_module_flag_is_set_to_esnext_or_preserve);
53157
+ }
53118
53158
}
53119
53159
return false;
53120
53160
}
@@ -53137,7 +53177,12 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
53137
53177
return grammarErrorOnNode(node, Diagnostics.ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_verbatimModuleSyntax_is_enabled);
53138
53178
}
53139
53179
53140
- if (moduleKind === ModuleKind.ES2015) {
53180
+ if (node.expression.kind === SyntaxKind.MetaProperty) {
53181
+ if (moduleKind !== ModuleKind.ESNext && moduleKind !== ModuleKind.Preserve) {
53182
+ return grammarErrorOnNode(node, Diagnostics.Deferred_imports_are_only_supported_when_the_module_flag_is_set_to_esnext_or_preserve);
53183
+ }
53184
+ }
53185
+ else if (moduleKind === ModuleKind.ES2015) {
53141
53186
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);
53142
53187
}
53143
53188
0 commit comments