From 56f4b2eea43537c8cde20db63b4b2b3592dac8af Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Tue, 10 Apr 2018 16:12:00 -0700 Subject: [PATCH] Provide an error when using 'import.meta' without setting 'esnext'. --- src/compiler/checker.ts | 15 +++++++++++---- src/compiler/diagnosticMessages.json | 4 ++++ 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 444a23881c9..b2e4e3b9377 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -18702,10 +18702,7 @@ namespace ts { } if (node.keywordToken === SyntaxKind.ImportKeyword) { - const file = getSourceFileOfNode(node); - Debug.assert(!!(file.flags & NodeFlags.PossiblyContainsImportMeta), "Containing file is missing import meta node flag."); - Debug.assert(!!file.externalModuleIndicator, "Containing file should be a module."); - return node.name.escapedText === "meta" ? getGlobalImportMetaType() : unknownType; + return checkImportMetaProperty(node); } } @@ -18725,6 +18722,16 @@ namespace ts { } } + function checkImportMetaProperty(node: MetaProperty) { + if (languageVersion < ScriptTarget.ESNext && modulekind < ModuleKind.ESNext) { + error(node, Diagnostics.The_import_meta_meta_property_is_only_allowed_using_ESNext_for_the_target_and_module_compiler_options); + } + const file = getSourceFileOfNode(node); + Debug.assert(!!(file.flags & NodeFlags.PossiblyContainsImportMeta), "Containing file is missing import meta node flag."); + Debug.assert(!!file.externalModuleIndicator, "Containing file should be a module."); + return node.name.escapedText === "meta" ? getGlobalImportMetaType() : unknownType; + } + function getTypeOfParameter(symbol: Symbol) { const type = getTypeOfSymbol(symbol); if (strictNullChecks) { diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 69a90fbabf5..b91165ea17b 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -967,6 +967,10 @@ "category": "Error", "code": 1342 }, + "The 'import.meta' meta-property is only allowed using 'ESNext' for the 'target' and 'module' compiler options.": { + "category": "Error", + "code": 1343 + }, "Duplicate identifier '{0}'.": { "category": "Error",