Apart from typing, use main field in package json to resolve typescript files

Fixes #23502
This commit is contained in:
Sheetal Nandi
2018-05-14 14:38:09 -07:00
parent 22d5b0e19f
commit dc50fe5e40
10 changed files with 75 additions and 37 deletions

View File

@@ -1049,9 +1049,18 @@ namespace ts {
}
function loadModuleFromPackageJson(jsonContent: PackageJsonPathFields, extensions: Extensions, candidate: string, failedLookupLocations: Push<string>, state: ModuleResolutionState): PathAndExtension | undefined {
const file = tryReadPackageJsonFields(extensions !== Extensions.JavaScript && extensions !== Extensions.Json, jsonContent, candidate, state);
let file = tryReadPackageJsonFields(extensions !== Extensions.JavaScript && extensions !== Extensions.Json, jsonContent, candidate, state);
if (!file) {
return undefined;
if (extensions === Extensions.TypeScript) {
// When resolving typescript modules, try resolving using main field as well
file = tryReadPackageJsonFields(/*readTypes*/ false, jsonContent, candidate, state);
if (!file) {
return undefined;
}
}
else {
return undefined;
}
}
const onlyRecordFailures = !directoryProbablyExists(getDirectoryPath(file), state.host);

View File

@@ -181,6 +181,13 @@ namespace ts {
"/a/b/foo.ts",
"/a/b/foo.tsx",
"/a/b/foo.d.ts",
"/c/d",
"/c/d.ts",
"/c/d.tsx",
"/c/d.d.ts",
"/c/d/index.ts",
"/c/d/index.tsx",
"/c/d/index.d.ts",
"/a/b/foo/index.ts",
"/a/b/foo/index.tsx",
]);

View File

@@ -40,6 +40,7 @@
"File '/node_modules/a/node_modules/foo.d.ts' does not exist.",
"'package.json' does not have a 'typings' field.",
"'package.json' does not have a 'types' field.",
"'package.json' does not have a 'main' field.",
"File '/node_modules/a/node_modules/foo/index.ts' does not exist.",
"File '/node_modules/a/node_modules/foo/index.tsx' does not exist.",
"File '/node_modules/a/node_modules/foo/index.d.ts' exist - use it as a name resolution result.",

View File

@@ -40,6 +40,7 @@
"File '/node_modules/a/node_modules/@foo/bar.d.ts' does not exist.",
"'package.json' does not have a 'typings' field.",
"'package.json' does not have a 'types' field.",
"'package.json' does not have a 'main' field.",
"File '/node_modules/a/node_modules/@foo/bar/index.ts' does not exist.",
"File '/node_modules/a/node_modules/@foo/bar/index.tsx' does not exist.",
"File '/node_modules/a/node_modules/@foo/bar/index.d.ts' exist - use it as a name resolution result.",

View File

@@ -11,6 +11,14 @@
"File '/node_modules/normalize.css.d.ts' does not exist.",
"'package.json' does not have a 'typings' field.",
"'package.json' does not have a 'types' field.",
"'package.json' has 'main' field 'normalize.css' that references '/node_modules/normalize.css/normalize.css'.",
"File '/node_modules/normalize.css/normalize.css' exist - use it as a name resolution result.",
"File '/node_modules/normalize.css/normalize.css' has an unsupported extension, so skipping it.",
"Loading module as file / folder, candidate module location '/node_modules/normalize.css/normalize.css', target file type 'TypeScript'.",
"File '/node_modules/normalize.css/normalize.css.ts' does not exist.",
"File '/node_modules/normalize.css/normalize.css.tsx' does not exist.",
"File '/node_modules/normalize.css/normalize.css.d.ts' does not exist.",
"Directory '/node_modules/normalize.css/normalize.css' does not exist, skipping all lookups in it.",
"File '/node_modules/normalize.css/index.ts' does not exist.",
"File '/node_modules/normalize.css/index.tsx' does not exist.",
"File '/node_modules/normalize.css/index.d.ts' does not exist.",

View File

@@ -1,14 +0,0 @@
/index.ts(1,19): error TS2307: Cannot find module 'foo'.
==== /node_modules/foo/package.json (0 errors) ====
{ "name": "foo", "version": "1.2.3", "main": "src/index.js" }
==== /node_modules/foo/src/index.d.ts (0 errors) ====
export const x: number;
==== /index.ts (1 errors) ====
import { x } from "foo";
~~~~~
!!! error TS2307: Cannot find module 'foo'.

View File

@@ -11,27 +11,16 @@
"File '/node_modules/foo.d.ts' does not exist.",
"'package.json' does not have a 'typings' field.",
"'package.json' does not have a 'types' field.",
"File '/node_modules/foo/index.ts' does not exist.",
"File '/node_modules/foo/index.tsx' does not exist.",
"File '/node_modules/foo/index.d.ts' does not exist.",
"Directory '/node_modules/@types' does not exist, skipping all lookups in it.",
"Loading module 'foo' from 'node_modules' folder, target file type 'JavaScript'.",
"'package.json' does not have a 'typings' field.",
"'package.json' does not have a 'types' field.",
"'package.json' has 'main' field 'src/index.js' that references '/node_modules/foo/src/index.js'.",
"Found 'package.json' at '/node_modules/foo/package.json'. Package ID is 'foo/src/index.d.ts@1.2.3'.",
"File '/node_modules/foo.js' does not exist.",
"File '/node_modules/foo.jsx' does not exist.",
"'package.json' has 'main' field 'src/index.js' that references '/node_modules/foo/src/index.js'.",
"File '/node_modules/foo/src/index.js' does not exist.",
"Loading module as file / folder, candidate module location '/node_modules/foo/src/index.js', target file type 'JavaScript'.",
"File '/node_modules/foo/src/index.js.js' does not exist.",
"File '/node_modules/foo/src/index.js.jsx' does not exist.",
"Loading module as file / folder, candidate module location '/node_modules/foo/src/index.js', target file type 'TypeScript'.",
"File '/node_modules/foo/src/index.js.ts' does not exist.",
"File '/node_modules/foo/src/index.js.tsx' does not exist.",
"File '/node_modules/foo/src/index.js.d.ts' does not exist.",
"File name '/node_modules/foo/src/index.js' has a '.js' extension - stripping it.",
"File '/node_modules/foo/src/index.js' does not exist.",
"File '/node_modules/foo/src/index.jsx' does not exist.",
"Directory '/node_modules/foo/src/index.js' does not exist, skipping all lookups in it.",
"File '/node_modules/foo/index.js' does not exist.",
"File '/node_modules/foo/index.jsx' does not exist.",
"======== Module name 'foo' was not resolved. ========"
"File '/node_modules/foo/src/index.ts' does not exist.",
"File '/node_modules/foo/src/index.tsx' does not exist.",
"File '/node_modules/foo/src/index.d.ts' exist - use it as a name resolution result.",
"Resolving real path for '/node_modules/foo/src/index.d.ts', result '/node_modules/foo/src/index.d.ts'.",
"======== Module name 'foo' was successfully resolved to '/node_modules/foo/src/index.d.ts'. ========"
]

View File

@@ -4,5 +4,5 @@ export const x: number;
=== /index.ts ===
import { x } from "foo";
>x : any
>x : number

View File

@@ -11,6 +11,13 @@
"File '/node_modules/foo.d.ts' does not exist.",
"'package.json' does not have a 'typings' field.",
"'package.json' does not have a 'types' field.",
"'package.json' has 'main' field 'oof' that references '/node_modules/foo/oof'.",
"File '/node_modules/foo/oof' does not exist.",
"Loading module as file / folder, candidate module location '/node_modules/foo/oof', target file type 'TypeScript'.",
"File '/node_modules/foo/oof.ts' does not exist.",
"File '/node_modules/foo/oof.tsx' does not exist.",
"File '/node_modules/foo/oof.d.ts' does not exist.",
"Directory '/node_modules/foo/oof' does not exist, skipping all lookups in it.",
"File '/node_modules/foo/index.ts' does not exist.",
"File '/node_modules/foo/index.tsx' does not exist.",
"File '/node_modules/foo/index.d.ts' does not exist.",
@@ -40,6 +47,18 @@
"File '/node_modules/bar.d.ts' does not exist.",
"'package.json' does not have a 'typings' field.",
"'package.json' does not have a 'types' field.",
"'package.json' has 'main' field 'rab.js' that references '/node_modules/bar/rab.js'.",
"File '/node_modules/bar/rab.js' exist - use it as a name resolution result.",
"File '/node_modules/bar/rab.js' has an unsupported extension, so skipping it.",
"Loading module as file / folder, candidate module location '/node_modules/bar/rab.js', target file type 'TypeScript'.",
"File '/node_modules/bar/rab.js.ts' does not exist.",
"File '/node_modules/bar/rab.js.tsx' does not exist.",
"File '/node_modules/bar/rab.js.d.ts' does not exist.",
"File name '/node_modules/bar/rab.js' has a '.js' extension - stripping it.",
"File '/node_modules/bar/rab.ts' does not exist.",
"File '/node_modules/bar/rab.tsx' does not exist.",
"File '/node_modules/bar/rab.d.ts' does not exist.",
"Directory '/node_modules/bar/rab.js' does not exist, skipping all lookups in it.",
"File '/node_modules/bar/index.ts' does not exist.",
"File '/node_modules/bar/index.tsx' does not exist.",
"File '/node_modules/bar/index.d.ts' does not exist.",
@@ -67,6 +86,15 @@
"File '/node_modules/baz.d.ts' does not exist.",
"'package.json' does not have a 'typings' field.",
"'package.json' does not have a 'types' field.",
"'package.json' has 'main' field 'zab' that references '/node_modules/baz/zab'.",
"File '/node_modules/baz/zab' does not exist.",
"Loading module as file / folder, candidate module location '/node_modules/baz/zab', target file type 'TypeScript'.",
"File '/node_modules/baz/zab.ts' does not exist.",
"File '/node_modules/baz/zab.tsx' does not exist.",
"File '/node_modules/baz/zab.d.ts' does not exist.",
"File '/node_modules/baz/zab/index.ts' does not exist.",
"File '/node_modules/baz/zab/index.tsx' does not exist.",
"File '/node_modules/baz/zab/index.d.ts' does not exist.",
"File '/node_modules/baz/index.ts' does not exist.",
"File '/node_modules/baz/index.tsx' does not exist.",
"File '/node_modules/baz/index.d.ts' does not exist.",

View File

@@ -11,6 +11,15 @@
"File '/node_modules/foo.d.ts' does not exist.",
"'package.json' does not have a 'typings' field.",
"'package.json' does not have a 'types' field.",
"'package.json' has 'main' field 'oof' that references '/node_modules/foo/oof'.",
"File '/node_modules/foo/oof' does not exist.",
"Loading module as file / folder, candidate module location '/node_modules/foo/oof', target file type 'TypeScript'.",
"File '/node_modules/foo/oof.ts' does not exist.",
"File '/node_modules/foo/oof.tsx' does not exist.",
"File '/node_modules/foo/oof.d.ts' does not exist.",
"File '/node_modules/foo/oof/index.ts' does not exist.",
"File '/node_modules/foo/oof/index.tsx' does not exist.",
"File '/node_modules/foo/oof/index.d.ts' does not exist.",
"File '/node_modules/foo/index.ts' does not exist.",
"File '/node_modules/foo/index.tsx' does not exist.",
"File '/node_modules/foo/index.d.ts' does not exist.",