Skip to content

Commit a143963

Browse files
committed
Resolve json modules only when --resolveJsonModule is specified
1 parent 9f72415 commit a143963

File tree

39 files changed

+163
-60
lines changed

39 files changed

+163
-60
lines changed

src/compiler/commandLineParser.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -506,6 +506,12 @@ namespace ts {
506506
category: Diagnostics.Advanced_Options,
507507
description: Diagnostics.Enable_tracing_of_the_name_resolution_process
508508
},
509+
{
510+
name: "resolveJsonModule",
511+
type: "boolean",
512+
category: Diagnostics.Advanced_Options,
513+
description: Diagnostics.Resolve_module_name_imported_with_json_extension_to_the_json_source_file
514+
},
509515
{
510516
name: "listFiles",
511517
type: "boolean",

src/compiler/diagnosticMessages.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2795,6 +2795,10 @@
27952795
"category": "Error",
27962796
"code": 5069
27972797
},
2798+
"Option '--resolveJsonModule' cannot be specified without 'node' module resolution strategy.": {
2799+
"category": "Error",
2800+
"code": 5070
2801+
},
27982802

27992803
"Generates a sourcemap for each corresponding '.d.ts' file.": {
28002804
"category": "Message",
@@ -3527,6 +3531,11 @@
35273531
"category": "Message",
35283532
"code": 6194
35293533
},
3534+
"Resolve module name imported with '.json' extension to the json source file.": {
3535+
"category": "Message",
3536+
"code": 6195
3537+
},
3538+
35303539
"Variable '{0}' implicitly has an '{1}' type.": {
35313540
"category": "Error",
35323541
"code": 7005

src/compiler/moduleNameResolver.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -743,7 +743,11 @@ namespace ts {
743743
const failedLookupLocations: string[] = [];
744744
const state: ModuleResolutionState = { compilerOptions, host, traceEnabled };
745745

746-
const result = (jsOnly ? tryResolve(Extensions.JavaScript) : (tryResolve(Extensions.TypeScript) || tryResolve(Extensions.JavaScript))) || tryResolve(Extensions.Json);
746+
const result = jsOnly ?
747+
tryResolve(Extensions.JavaScript) :
748+
(tryResolve(Extensions.TypeScript) ||
749+
tryResolve(Extensions.JavaScript) ||
750+
(compilerOptions.resolveJsonModule ? tryResolve(Extensions.Json) : undefined));
747751
if (result && result.value) {
748752
const { resolved, originalPath, isExternalLibraryImport } = result.value;
749753
return createResolvedModuleWithFailedLookupLocations(resolved, originalPath, isExternalLibraryImport, failedLookupLocations);

src/compiler/program.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2195,6 +2195,12 @@ namespace ts {
21952195
}
21962196
}
21972197

2198+
if (options.resolveJsonModule) {
2199+
if (getEmitModuleResolutionKind(options) !== ModuleResolutionKind.NodeJs) {
2200+
createDiagnosticForOptionName(Diagnostics.Option_resolveJsonModule_cannot_be_specified_without_node_module_resolution_strategy, "resolveJsonModule");
2201+
}
2202+
}
2203+
21982204
// there has to be common source directory if user specified --outdir || --sourceRoot
21992205
// if user specified --mapRoot, there needs to be common source directory if there would be multiple files being emitted
22002206
if (options.outDir || // there is --outDir specified

src/compiler/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4220,6 +4220,7 @@ namespace ts {
42204220
/* @internal */ suppressOutputPathCheck?: boolean;
42214221
target?: ScriptTarget;
42224222
traceResolution?: boolean;
4223+
resolveJsonModule?: boolean;
42234224
types?: string[];
42244225
/** Paths used to compute primary types search locations */
42254226
typeRoots?: string[];

src/harness/unittests/reuseProgramStructure.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -471,8 +471,6 @@ namespace ts {
471471
"File 'node_modules/a.jsx' does not exist.",
472472
"File 'node_modules/a/index.js' does not exist.",
473473
"File 'node_modules/a/index.jsx' does not exist.",
474-
"Loading module 'a' from 'node_modules' folder, target file type 'Json'.",
475-
"File 'node_modules/a/package.json' does not exist.",
476474
"======== Module name 'a' was not resolved. ========"
477475
],
478476
"initialProgram: execute module resolution normally.");

src/harness/unittests/tsserverProjectSystem.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3386,10 +3386,6 @@ namespace ts.projectSystem {
33863386
"Directory '/a/b/node_modules' does not exist, skipping all lookups in it.",
33873387
"Directory '/a/node_modules' does not exist, skipping all lookups in it.",
33883388
"Directory '/node_modules' does not exist, skipping all lookups in it.",
3389-
"Loading module 'lib' from 'node_modules' folder, target file type 'Json'.",
3390-
"Directory '/a/b/node_modules' does not exist, skipping all lookups in it.",
3391-
"Directory '/a/node_modules' does not exist, skipping all lookups in it.",
3392-
"Directory '/node_modules' does not exist, skipping all lookups in it.",
33933389
"======== Module name 'lib' was not resolved. ========",
33943390
`Auto discovery for typings is enabled in project '${proj.getProjectName()}'. Running extra resolution pass for module 'lib' using cache location '/a/cache'.`,
33953391
"File '/a/cache/node_modules/lib.d.ts' does not exist.",

src/server/protocol.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2716,6 +2716,7 @@ namespace ts.server.protocol {
27162716
suppressImplicitAnyIndexErrors?: boolean;
27172717
target?: ScriptTarget | ts.ScriptTarget;
27182718
traceResolution?: boolean;
2719+
resolveJsonModule?: boolean;
27192720
types?: string[];
27202721
/** Paths used to used to compute primary types search locations */
27212722
typeRoots?: string[];

tests/baselines/reference/api/tsserverlibrary.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2390,6 +2390,7 @@ declare namespace ts {
23902390
suppressImplicitAnyIndexErrors?: boolean;
23912391
target?: ScriptTarget;
23922392
traceResolution?: boolean;
2393+
resolveJsonModule?: boolean;
23932394
types?: string[];
23942395
/** Paths used to compute primary types search locations */
23952396
typeRoots?: string[];
@@ -7239,6 +7240,7 @@ declare namespace ts.server.protocol {
72397240
suppressImplicitAnyIndexErrors?: boolean;
72407241
target?: ScriptTarget | ts.ScriptTarget;
72417242
traceResolution?: boolean;
7243+
resolveJsonModule?: boolean;
72427244
types?: string[];
72437245
/** Paths used to used to compute primary types search locations */
72447246
typeRoots?: string[];

tests/baselines/reference/api/typescript.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2390,6 +2390,7 @@ declare namespace ts {
23902390
suppressImplicitAnyIndexErrors?: boolean;
23912391
target?: ScriptTarget;
23922392
traceResolution?: boolean;
2393+
resolveJsonModule?: boolean;
23932394
types?: string[];
23942395
/** Paths used to compute primary types search locations */
23952396
typeRoots?: string[];

0 commit comments

Comments
 (0)