@@ -434,6 +434,7 @@ namespace ts {
434434 let deferredGlobalAsyncIteratorType: GenericType;
435435 let deferredGlobalAsyncIterableIteratorType: GenericType;
436436 let deferredGlobalTemplateStringsArrayType: ObjectType;
437+ let deferredGlobalImportMetaType: ObjectType;
437438
438439 let deferredNodes: Node[];
439440 const allPotentiallyUnusedIdentifiers = createMap<ReadonlyArray<PotentiallyUnusedIdentifier>>(); // key is file name
@@ -7708,6 +7709,10 @@ namespace ts {
77087709 return deferredGlobalTemplateStringsArrayType || (deferredGlobalTemplateStringsArrayType = getGlobalType("TemplateStringsArray" as __String, /*arity*/ 0, /*reportErrors*/ true)) || emptyObjectType;
77097710 }
77107711
7712+ function getGlobalImportMetaType() {
7713+ return deferredGlobalImportMetaType || (deferredGlobalImportMetaType = getGlobalType("ImportMeta" as __String, /*arity*/ 0, /*reportErrors*/ true)) || emptyObjectType;
7714+ }
7715+
77117716 function getGlobalESSymbolConstructorSymbol(reportErrors: boolean) {
77127717 return deferredGlobalESSymbolConstructorSymbol || (deferredGlobalESSymbolConstructorSymbol = getGlobalValueSymbol("Symbol" as __String, reportErrors));
77137718 }
@@ -18691,6 +18696,20 @@ namespace ts {
1869118696
1869218697 function checkMetaProperty(node: MetaProperty) {
1869318698 checkGrammarMetaProperty(node);
18699+
18700+ if (node.keywordToken === SyntaxKind.NewKeyword) {
18701+ return checkNewTargetMetaProperty(node);
18702+ }
18703+
18704+ if (node.keywordToken === SyntaxKind.ImportKeyword) {
18705+ const file = getSourceFileOfNode(node);
18706+ Debug.assert(!!(file.flags & NodeFlags.PossiblyContainsImportMeta), "Containing file is missing import meta node flag.");
18707+ Debug.assert(!!file.externalModuleIndicator, "Containing file should be a module.");
18708+ return node.name.escapedText === "meta" ? getGlobalImportMetaType() : unknownType;
18709+ }
18710+ }
18711+
18712+ function checkNewTargetMetaProperty(node: MetaProperty) {
1869418713 const container = getNewTargetContainer(node);
1869518714 if (!container) {
1869618715 error(node, Diagnostics.Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constructor, "new.target");
@@ -27554,10 +27573,18 @@ namespace ts {
2755427573 }
2755527574
2755627575 function checkGrammarMetaProperty(node: MetaProperty) {
27557- if (node.keywordToken === SyntaxKind.NewKeyword) {
27558- if (node.name.escapedText !== "target") {
27559- return grammarErrorOnNode(node.name, Diagnostics._0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2, node.name.escapedText, tokenToString(node.keywordToken), "target");
27560- }
27576+ const escapedText = node.name.escapedText;
27577+ switch (node.keywordToken) {
27578+ case SyntaxKind.NewKeyword:
27579+ if (escapedText !== "target") {
27580+ return grammarErrorOnNode(node.name, Diagnostics._0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2, node.name.escapedText, tokenToString(node.keywordToken), "target");
27581+ }
27582+ break;
27583+ case SyntaxKind.ImportKeyword:
27584+ if (escapedText !== "meta") {
27585+ return grammarErrorOnNode(node.name, Diagnostics._0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2, node.name.escapedText, tokenToString(node.keywordToken), "meta");
27586+ }
27587+ break;
2756127588 }
2756227589 }
2756327590
0 commit comments