From af71d55a49e1f45ceda4517f8ef8aa0c16d91bb3 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Tue, 14 Aug 2018 16:10:32 -0700 Subject: [PATCH] Do not include json file unless --resolveJsonModule is specified Fixes #26402 --- src/compiler/diagnosticMessages.json | 6 ++++- src/compiler/program.ts | 6 ++++- ...ResolveJsonModuleAndPathMapping.errors.txt | 23 +++++++++++++++++++ ...eWithoutResolveJsonModuleAndPathMapping.js | 2 -- ...outResolveJsonModuleAndPathMapping.symbols | 4 ---- ...thoutResolveJsonModuleAndPathMapping.types | 8 +------ 6 files changed, 34 insertions(+), 15 deletions(-) create mode 100644 tests/baselines/reference/requireOfJsonFileWithoutResolveJsonModuleAndPathMapping.errors.txt diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 16b064f255c..6000c48de4d 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -3941,6 +3941,10 @@ "category": "Error", "code": 7041 }, + "Module '{0}' was resolved to '{1}', but '--resolveJsonModule' is not used.": { + "category": "Error", + "code": 7042 + }, "You cannot rename this element.": { "category": "Error", "code": 8000 @@ -4576,4 +4580,4 @@ "category": "Message", "code": 95066 } -} \ No newline at end of file +} diff --git a/src/compiler/program.ts b/src/compiler/program.ts index e2648907954..d52025f5a30 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -2849,7 +2849,6 @@ namespace ts { switch (extension) { case Extension.Ts: case Extension.Dts: - case Extension.Json: // Since module is resolved to json file only when --resolveJsonModule, we dont need further check // These are always allowed. return undefined; case Extension.Tsx: @@ -2858,6 +2857,8 @@ namespace ts { return needJsx() || needAllowJs(); case Extension.Js: return needAllowJs(); + case Extension.Json: + return needResolveJsonModule(); } function needJsx() { @@ -2866,6 +2867,9 @@ namespace ts { function needAllowJs() { return options.allowJs || !getStrictOptionValue(options, "noImplicitAny") ? undefined : Diagnostics.Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type; } + function needResolveJsonModule() { + return options.resolveJsonModule ? undefined : Diagnostics.Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used; + } } function getModuleNames({ imports, moduleAugmentations }: SourceFile): string[] { diff --git a/tests/baselines/reference/requireOfJsonFileWithoutResolveJsonModuleAndPathMapping.errors.txt b/tests/baselines/reference/requireOfJsonFileWithoutResolveJsonModuleAndPathMapping.errors.txt new file mode 100644 index 00000000000..fee86f2174c --- /dev/null +++ b/tests/baselines/reference/requireOfJsonFileWithoutResolveJsonModuleAndPathMapping.errors.txt @@ -0,0 +1,23 @@ +/a.ts(1,20): error TS7042: Module 'foo/bar/foobar.json' was resolved to '/node_modules/foo/bar/foobar.json', but '--resolveJsonModule' is not used. + + +==== /tsconfig.json (0 errors) ==== + { + "compilerOptions": { + "baseUrl": ".", + "paths": { + "*": ["node_modules/*", "src/types"] + }, + "allowJs": true, + "outDir": "bin" + } + } + +==== /a.ts (1 errors) ==== + import foobar from "foo/bar/foobar.json"; + ~~~~~~~~~~~~~~~~~~~~~ +!!! error TS7042: Module 'foo/bar/foobar.json' was resolved to '/node_modules/foo/bar/foobar.json', but '--resolveJsonModule' is not used. + +==== /node_modules/foo/bar/foobar.json (0 errors) ==== + { "a": 10 } + \ No newline at end of file diff --git a/tests/baselines/reference/requireOfJsonFileWithoutResolveJsonModuleAndPathMapping.js b/tests/baselines/reference/requireOfJsonFileWithoutResolveJsonModuleAndPathMapping.js index c7e1296deb2..bda2f7194d3 100644 --- a/tests/baselines/reference/requireOfJsonFileWithoutResolveJsonModuleAndPathMapping.js +++ b/tests/baselines/reference/requireOfJsonFileWithoutResolveJsonModuleAndPathMapping.js @@ -7,8 +7,6 @@ import foobar from "foo/bar/foobar.json"; -//// [/bin/node_modules/foo/bar/foobar.json] -{ "a": 10 } //// [/bin/a.js] "use strict"; exports.__esModule = true; diff --git a/tests/baselines/reference/requireOfJsonFileWithoutResolveJsonModuleAndPathMapping.symbols b/tests/baselines/reference/requireOfJsonFileWithoutResolveJsonModuleAndPathMapping.symbols index b934b22d66a..9cc71ea6e59 100644 --- a/tests/baselines/reference/requireOfJsonFileWithoutResolveJsonModuleAndPathMapping.symbols +++ b/tests/baselines/reference/requireOfJsonFileWithoutResolveJsonModuleAndPathMapping.symbols @@ -2,7 +2,3 @@ import foobar from "foo/bar/foobar.json"; >foobar : Symbol(foobar, Decl(a.ts, 0, 6)) -=== /node_modules/foo/bar/foobar.json === -{ "a": 10 } ->"a" : Symbol("a", Decl(foobar.json, 0, 1)) - diff --git a/tests/baselines/reference/requireOfJsonFileWithoutResolveJsonModuleAndPathMapping.types b/tests/baselines/reference/requireOfJsonFileWithoutResolveJsonModuleAndPathMapping.types index 129433bbcd6..23981045b3c 100644 --- a/tests/baselines/reference/requireOfJsonFileWithoutResolveJsonModuleAndPathMapping.types +++ b/tests/baselines/reference/requireOfJsonFileWithoutResolveJsonModuleAndPathMapping.types @@ -1,10 +1,4 @@ === /a.ts === import foobar from "foo/bar/foobar.json"; ->foobar : { "a": number; } - -=== /node_modules/foo/bar/foobar.json === -{ "a": 10 } ->{ "a": 10 } : { "a": number; } ->"a" : number ->10 : 10 +>foobar : any