Skip to content

Commit f0081f0

Browse files
Basic checking for 'import.meta'.
1 parent 9e2bbb6 commit f0081f0

2 files changed

Lines changed: 35 additions & 4 deletions

File tree

src/compiler/checker.ts

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

src/lib/es5.d.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,10 @@ interface TemplateStringsArray extends ReadonlyArray<string> {
505505
readonly raw: ReadonlyArray<string>;
506506
}
507507

508+
interface ImportMeta {
509+
[propertyName: string]: any;
510+
}
511+
508512
interface Math {
509513
/** The mathematical constant e. This is Euler's number, the base of natural logarithms. */
510514
readonly E: number;

0 commit comments

Comments
 (0)