Skip to content

Commit dc50fe5

Browse files
committed
Apart from typing, use main field in package json to resolve typescript files
Fixes microsoft#23502
1 parent 22d5b0e commit dc50fe5

10 files changed

+75
-37
lines changed

src/compiler/moduleNameResolver.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1049,9 +1049,18 @@ namespace ts {
10491049
}
10501050

10511051
function loadModuleFromPackageJson(jsonContent: PackageJsonPathFields, extensions: Extensions, candidate: string, failedLookupLocations: Push<string>, state: ModuleResolutionState): PathAndExtension | undefined {
1052-
const file = tryReadPackageJsonFields(extensions !== Extensions.JavaScript && extensions !== Extensions.Json, jsonContent, candidate, state);
1052+
let file = tryReadPackageJsonFields(extensions !== Extensions.JavaScript && extensions !== Extensions.Json, jsonContent, candidate, state);
10531053
if (!file) {
1054-
return undefined;
1054+
if (extensions === Extensions.TypeScript) {
1055+
// When resolving typescript modules, try resolving using main field as well
1056+
file = tryReadPackageJsonFields(/*readTypes*/ false, jsonContent, candidate, state);
1057+
if (!file) {
1058+
return undefined;
1059+
}
1060+
}
1061+
else {
1062+
return undefined;
1063+
}
10551064
}
10561065

10571066
const onlyRecordFailures = !directoryProbablyExists(getDirectoryPath(file), state.host);

src/harness/unittests/moduleResolution.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,13 @@ namespace ts {
181181
"/a/b/foo.ts",
182182
"/a/b/foo.tsx",
183183
"/a/b/foo.d.ts",
184+
"/c/d",
185+
"/c/d.ts",
186+
"/c/d.tsx",
187+
"/c/d.d.ts",
188+
"/c/d/index.ts",
189+
"/c/d/index.tsx",
190+
"/c/d/index.d.ts",
184191
"/a/b/foo/index.ts",
185192
"/a/b/foo/index.tsx",
186193
]);

tests/baselines/reference/duplicatePackage_relativeImportWithinPackage.trace.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
"File '/node_modules/a/node_modules/foo.d.ts' does not exist.",
4141
"'package.json' does not have a 'typings' field.",
4242
"'package.json' does not have a 'types' field.",
43+
"'package.json' does not have a 'main' field.",
4344
"File '/node_modules/a/node_modules/foo/index.ts' does not exist.",
4445
"File '/node_modules/a/node_modules/foo/index.tsx' does not exist.",
4546
"File '/node_modules/a/node_modules/foo/index.d.ts' exist - use it as a name resolution result.",

tests/baselines/reference/duplicatePackage_relativeImportWithinPackage_scoped.trace.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
"File '/node_modules/a/node_modules/@foo/bar.d.ts' does not exist.",
4141
"'package.json' does not have a 'typings' field.",
4242
"'package.json' does not have a 'types' field.",
43+
"'package.json' does not have a 'main' field.",
4344
"File '/node_modules/a/node_modules/@foo/bar/index.ts' does not exist.",
4445
"File '/node_modules/a/node_modules/@foo/bar/index.tsx' does not exist.",
4546
"File '/node_modules/a/node_modules/@foo/bar/index.d.ts' exist - use it as a name resolution result.",

tests/baselines/reference/moduleResolutionWithExtensions_unexpected.trace.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,14 @@
1111
"File '/node_modules/normalize.css.d.ts' does not exist.",
1212
"'package.json' does not have a 'typings' field.",
1313
"'package.json' does not have a 'types' field.",
14+
"'package.json' has 'main' field 'normalize.css' that references '/node_modules/normalize.css/normalize.css'.",
15+
"File '/node_modules/normalize.css/normalize.css' exist - use it as a name resolution result.",
16+
"File '/node_modules/normalize.css/normalize.css' has an unsupported extension, so skipping it.",
17+
"Loading module as file / folder, candidate module location '/node_modules/normalize.css/normalize.css', target file type 'TypeScript'.",
18+
"File '/node_modules/normalize.css/normalize.css.ts' does not exist.",
19+
"File '/node_modules/normalize.css/normalize.css.tsx' does not exist.",
20+
"File '/node_modules/normalize.css/normalize.css.d.ts' does not exist.",
21+
"Directory '/node_modules/normalize.css/normalize.css' does not exist, skipping all lookups in it.",
1422
"File '/node_modules/normalize.css/index.ts' does not exist.",
1523
"File '/node_modules/normalize.css/index.tsx' does not exist.",
1624
"File '/node_modules/normalize.css/index.d.ts' does not exist.",

tests/baselines/reference/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.errors.txt

Lines changed: 0 additions & 14 deletions
This file was deleted.

tests/baselines/reference/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.trace.json

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,27 +11,16 @@
1111
"File '/node_modules/foo.d.ts' does not exist.",
1212
"'package.json' does not have a 'typings' field.",
1313
"'package.json' does not have a 'types' field.",
14-
"File '/node_modules/foo/index.ts' does not exist.",
15-
"File '/node_modules/foo/index.tsx' does not exist.",
16-
"File '/node_modules/foo/index.d.ts' does not exist.",
17-
"Directory '/node_modules/@types' does not exist, skipping all lookups in it.",
18-
"Loading module 'foo' from 'node_modules' folder, target file type 'JavaScript'.",
19-
"'package.json' does not have a 'typings' field.",
20-
"'package.json' does not have a 'types' field.",
21-
"'package.json' has 'main' field 'src/index.js' that references '/node_modules/foo/src/index.js'.",
22-
"Found 'package.json' at '/node_modules/foo/package.json'. Package ID is 'foo/src/index.d.ts@1.2.3'.",
23-
"File '/node_modules/foo.js' does not exist.",
24-
"File '/node_modules/foo.jsx' does not exist.",
2514
"'package.json' has 'main' field 'src/index.js' that references '/node_modules/foo/src/index.js'.",
2615
"File '/node_modules/foo/src/index.js' does not exist.",
27-
"Loading module as file / folder, candidate module location '/node_modules/foo/src/index.js', target file type 'JavaScript'.",
28-
"File '/node_modules/foo/src/index.js.js' does not exist.",
29-
"File '/node_modules/foo/src/index.js.jsx' does not exist.",
16+
"Loading module as file / folder, candidate module location '/node_modules/foo/src/index.js', target file type 'TypeScript'.",
17+
"File '/node_modules/foo/src/index.js.ts' does not exist.",
18+
"File '/node_modules/foo/src/index.js.tsx' does not exist.",
19+
"File '/node_modules/foo/src/index.js.d.ts' does not exist.",
3020
"File name '/node_modules/foo/src/index.js' has a '.js' extension - stripping it.",
31-
"File '/node_modules/foo/src/index.js' does not exist.",
32-
"File '/node_modules/foo/src/index.jsx' does not exist.",
33-
"Directory '/node_modules/foo/src/index.js' does not exist, skipping all lookups in it.",
34-
"File '/node_modules/foo/index.js' does not exist.",
35-
"File '/node_modules/foo/index.jsx' does not exist.",
36-
"======== Module name 'foo' was not resolved. ========"
21+
"File '/node_modules/foo/src/index.ts' does not exist.",
22+
"File '/node_modules/foo/src/index.tsx' does not exist.",
23+
"File '/node_modules/foo/src/index.d.ts' exist - use it as a name resolution result.",
24+
"Resolving real path for '/node_modules/foo/src/index.d.ts', result '/node_modules/foo/src/index.d.ts'.",
25+
"======== Module name 'foo' was successfully resolved to '/node_modules/foo/src/index.d.ts'. ========"
3726
]

tests/baselines/reference/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.types

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ export const x: number;
44

55
=== /index.ts ===
66
import { x } from "foo";
7-
>x : any
7+
>x : number
88

tests/baselines/reference/packageJsonMain.trace.json

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,13 @@
1111
"File '/node_modules/foo.d.ts' does not exist.",
1212
"'package.json' does not have a 'typings' field.",
1313
"'package.json' does not have a 'types' field.",
14+
"'package.json' has 'main' field 'oof' that references '/node_modules/foo/oof'.",
15+
"File '/node_modules/foo/oof' does not exist.",
16+
"Loading module as file / folder, candidate module location '/node_modules/foo/oof', target file type 'TypeScript'.",
17+
"File '/node_modules/foo/oof.ts' does not exist.",
18+
"File '/node_modules/foo/oof.tsx' does not exist.",
19+
"File '/node_modules/foo/oof.d.ts' does not exist.",
20+
"Directory '/node_modules/foo/oof' does not exist, skipping all lookups in it.",
1421
"File '/node_modules/foo/index.ts' does not exist.",
1522
"File '/node_modules/foo/index.tsx' does not exist.",
1623
"File '/node_modules/foo/index.d.ts' does not exist.",
@@ -40,6 +47,18 @@
4047
"File '/node_modules/bar.d.ts' does not exist.",
4148
"'package.json' does not have a 'typings' field.",
4249
"'package.json' does not have a 'types' field.",
50+
"'package.json' has 'main' field 'rab.js' that references '/node_modules/bar/rab.js'.",
51+
"File '/node_modules/bar/rab.js' exist - use it as a name resolution result.",
52+
"File '/node_modules/bar/rab.js' has an unsupported extension, so skipping it.",
53+
"Loading module as file / folder, candidate module location '/node_modules/bar/rab.js', target file type 'TypeScript'.",
54+
"File '/node_modules/bar/rab.js.ts' does not exist.",
55+
"File '/node_modules/bar/rab.js.tsx' does not exist.",
56+
"File '/node_modules/bar/rab.js.d.ts' does not exist.",
57+
"File name '/node_modules/bar/rab.js' has a '.js' extension - stripping it.",
58+
"File '/node_modules/bar/rab.ts' does not exist.",
59+
"File '/node_modules/bar/rab.tsx' does not exist.",
60+
"File '/node_modules/bar/rab.d.ts' does not exist.",
61+
"Directory '/node_modules/bar/rab.js' does not exist, skipping all lookups in it.",
4362
"File '/node_modules/bar/index.ts' does not exist.",
4463
"File '/node_modules/bar/index.tsx' does not exist.",
4564
"File '/node_modules/bar/index.d.ts' does not exist.",
@@ -67,6 +86,15 @@
6786
"File '/node_modules/baz.d.ts' does not exist.",
6887
"'package.json' does not have a 'typings' field.",
6988
"'package.json' does not have a 'types' field.",
89+
"'package.json' has 'main' field 'zab' that references '/node_modules/baz/zab'.",
90+
"File '/node_modules/baz/zab' does not exist.",
91+
"Loading module as file / folder, candidate module location '/node_modules/baz/zab', target file type 'TypeScript'.",
92+
"File '/node_modules/baz/zab.ts' does not exist.",
93+
"File '/node_modules/baz/zab.tsx' does not exist.",
94+
"File '/node_modules/baz/zab.d.ts' does not exist.",
95+
"File '/node_modules/baz/zab/index.ts' does not exist.",
96+
"File '/node_modules/baz/zab/index.tsx' does not exist.",
97+
"File '/node_modules/baz/zab/index.d.ts' does not exist.",
7098
"File '/node_modules/baz/index.ts' does not exist.",
7199
"File '/node_modules/baz/index.tsx' does not exist.",
72100
"File '/node_modules/baz/index.d.ts' does not exist.",

tests/baselines/reference/packageJsonMain_isNonRecursive.trace.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,15 @@
1111
"File '/node_modules/foo.d.ts' does not exist.",
1212
"'package.json' does not have a 'typings' field.",
1313
"'package.json' does not have a 'types' field.",
14+
"'package.json' has 'main' field 'oof' that references '/node_modules/foo/oof'.",
15+
"File '/node_modules/foo/oof' does not exist.",
16+
"Loading module as file / folder, candidate module location '/node_modules/foo/oof', target file type 'TypeScript'.",
17+
"File '/node_modules/foo/oof.ts' does not exist.",
18+
"File '/node_modules/foo/oof.tsx' does not exist.",
19+
"File '/node_modules/foo/oof.d.ts' does not exist.",
20+
"File '/node_modules/foo/oof/index.ts' does not exist.",
21+
"File '/node_modules/foo/oof/index.tsx' does not exist.",
22+
"File '/node_modules/foo/oof/index.d.ts' does not exist.",
1423
"File '/node_modules/foo/index.ts' does not exist.",
1524
"File '/node_modules/foo/index.tsx' does not exist.",
1625
"File '/node_modules/foo/index.d.ts' does not exist.",

0 commit comments

Comments
 (0)