Skip to content

Commit 6120036

Browse files
authored
Use loader with extension substitution for package.json main, types, typesVersions (#57261)
1 parent db823e3 commit 6120036

File tree

42 files changed

+388
-169
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+388
-169
lines changed

src/compiler/diagnosticMessages.json

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4723,10 +4723,6 @@
47234723
"category": "Message",
47244724
"code": 6080
47254725
},
4726-
"File '{0}' has an unsupported extension, so skipping it.": {
4727-
"category": "Message",
4728-
"code": 6081
4729-
},
47304726
"Only 'amd' and 'system' modules are supported alongside --{0}.": {
47314727
"category": "Error",
47324728
"code": 6082

src/compiler/moduleNameResolver.ts

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2090,7 +2090,6 @@ function loadModuleFromFileNoImplicitExtensions(extensions: Extensions, candidat
20902090
/**
20912091
* This function is only ever called with paths written in package.json files - never
20922092
* module specifiers written in source files - and so it always allows the
2093-
20942093
* candidate to end with a TS extension (but will also try substituting a JS extension for a TS extension).
20952094
*/
20962095
function loadFileNameFromPackageJsonField(extensions: Extensions, candidate: string, onlyRecordFailures: boolean, state: ModuleResolutionState): PathAndExtension | undefined {
@@ -2459,15 +2458,9 @@ function loadNodeModuleFromDirectoryWorker(extensions: Extensions, candidate: st
24592458
}
24602459

24612460
const loader: ResolutionKindSpecificLoader = (extensions, candidate, onlyRecordFailures, state) => {
2462-
const fromFile = tryFile(candidate, onlyRecordFailures, state);
2461+
const fromFile = loadFileNameFromPackageJsonField(extensions, candidate, onlyRecordFailures, state);
24632462
if (fromFile) {
2464-
const resolved = resolvedIfExtensionMatches(extensions, fromFile);
2465-
if (resolved) {
2466-
return noPackageId(resolved);
2467-
}
2468-
if (state.traceEnabled) {
2469-
trace(state.host, Diagnostics.File_0_has_an_unsupported_extension_so_skipping_it, fromFile);
2470-
}
2463+
return noPackageId(fromFile);
24712464
}
24722465

24732466
// Even if extensions is DtsOnly, we can still look up a .ts file as a result of package.json "types"
@@ -2514,12 +2507,6 @@ function loadNodeModuleFromDirectoryWorker(extensions: Extensions, candidate: st
25142507
}
25152508
}
25162509

2517-
/** Resolve from an arbitrarily specified file. Return `undefined` if it has an unsupported extension. */
2518-
function resolvedIfExtensionMatches(extensions: Extensions, path: string, resolvedUsingTsExtension?: boolean): PathAndExtension | undefined {
2519-
const ext = tryGetExtensionFromPath(path);
2520-
return ext !== undefined && extensionIsOk(extensions, ext) ? { path, ext, resolvedUsingTsExtension } : undefined;
2521-
}
2522-
25232510
/** True if `extension` is one of the supported `extensions`. */
25242511
function extensionIsOk(extensions: Extensions, extension: string): boolean {
25252512
return extensions & Extensions.JavaScript && (extension === Extension.Js || extension === Extension.Jsx || extension === Extension.Mjs || extension === Extension.Cjs)
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
error TS5095: Option 'bundler' can only be used when 'module' is set to 'preserve' or to 'es2015' or later.
2+
error TS5109: Option 'moduleResolution' must be set to 'NodeNext' (or left unspecified) when option 'module' is set to 'NodeNext'.
3+
4+
5+
!!! error TS5095: Option 'bundler' can only be used when 'module' is set to 'preserve' or to 'es2015' or later.
6+
!!! error TS5109: Option 'moduleResolution' must be set to 'NodeNext' (or left unspecified) when option 'module' is set to 'NodeNext'.
7+
==== /app/test.ts (0 errors) ====
8+
import { test } from '../lib';
9+
10+
==== /lib/package.json (0 errors) ====
11+
{
12+
"main": "./cjs/index.js"
13+
}
14+
15+
==== /lib/cjs/index.js (0 errors) ====
16+
export function test() {}
17+
18+
==== /lib/cjs/index.d.ts (0 errors) ====
19+
export function test(): void;
20+
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
[
2+
"======== Resolving module '../lib' from '/app/test.ts'. ========",
3+
"Explicitly specified module resolution kind: 'Bundler'.",
4+
"Resolving in CJS mode with conditions 'import', 'types'.",
5+
"Loading module as file / folder, candidate module location '/lib', target file types: TypeScript, JavaScript, Declaration, JSON.",
6+
"File '/lib.ts' does not exist.",
7+
"File '/lib.tsx' does not exist.",
8+
"File '/lib.d.ts' does not exist.",
9+
"File '/lib.js' does not exist.",
10+
"File '/lib.jsx' does not exist.",
11+
"Found 'package.json' at '/lib/package.json'.",
12+
"'package.json' does not have a 'typesVersions' field.",
13+
"'package.json' does not have a 'typings' field.",
14+
"'package.json' does not have a 'types' field.",
15+
"'package.json' has 'main' field './cjs/index.js' that references '/lib/cjs/index.js'.",
16+
"File name '/lib/cjs/index.js' has a '.js' extension - stripping it.",
17+
"File '/lib/cjs/index.ts' does not exist.",
18+
"File '/lib/cjs/index.tsx' does not exist.",
19+
"File '/lib/cjs/index.d.ts' exists - use it as a name resolution result.",
20+
"======== Module name '../lib' was successfully resolved to '/lib/cjs/index.d.ts'. ========",
21+
"======== Resolving module '@typescript/lib-es5' from '/.src/__lib_node_modules_lookup_lib.es5.d.ts__.ts'. ========",
22+
"Explicitly specified module resolution kind: 'Node10'.",
23+
"Loading module '@typescript/lib-es5' from 'node_modules' folder, target file types: TypeScript, Declaration.",
24+
"Searching all ancestor node_modules directories for preferred extensions: TypeScript, Declaration.",
25+
"Directory '/.src/node_modules' does not exist, skipping all lookups in it.",
26+
"Scoped package detected, looking in 'typescript__lib-es5'",
27+
"Directory '/node_modules' does not exist, skipping all lookups in it.",
28+
"Scoped package detected, looking in 'typescript__lib-es5'",
29+
"Loading module '@typescript/lib-es5' from 'node_modules' folder, target file types: JavaScript.",
30+
"Searching all ancestor node_modules directories for fallback extensions: JavaScript.",
31+
"Directory '/.src/node_modules' does not exist, skipping all lookups in it.",
32+
"Directory '/node_modules' does not exist, skipping all lookups in it.",
33+
"======== Module name '@typescript/lib-es5' was not resolved. ========",
34+
"======== Resolving module '@typescript/lib-decorators' from '/.src/__lib_node_modules_lookup_lib.decorators.d.ts__.ts'. ========",
35+
"Explicitly specified module resolution kind: 'Node10'.",
36+
"Loading module '@typescript/lib-decorators' from 'node_modules' folder, target file types: TypeScript, Declaration.",
37+
"Searching all ancestor node_modules directories for preferred extensions: TypeScript, Declaration.",
38+
"Directory '/.src/node_modules' does not exist, skipping all lookups in it.",
39+
"Scoped package detected, looking in 'typescript__lib-decorators'",
40+
"Directory '/node_modules' does not exist, skipping all lookups in it.",
41+
"Scoped package detected, looking in 'typescript__lib-decorators'",
42+
"Loading module '@typescript/lib-decorators' from 'node_modules' folder, target file types: JavaScript.",
43+
"Searching all ancestor node_modules directories for fallback extensions: JavaScript.",
44+
"Directory '/.src/node_modules' does not exist, skipping all lookups in it.",
45+
"Directory '/node_modules' does not exist, skipping all lookups in it.",
46+
"======== Module name '@typescript/lib-decorators' was not resolved. ========",
47+
"======== Resolving module '@typescript/lib-decorators/legacy' from '/.src/__lib_node_modules_lookup_lib.decorators.legacy.d.ts__.ts'. ========",
48+
"Explicitly specified module resolution kind: 'Node10'.",
49+
"Loading module '@typescript/lib-decorators/legacy' from 'node_modules' folder, target file types: TypeScript, Declaration.",
50+
"Searching all ancestor node_modules directories for preferred extensions: TypeScript, Declaration.",
51+
"Directory '/.src/node_modules' does not exist, skipping all lookups in it.",
52+
"Scoped package detected, looking in 'typescript__lib-decorators/legacy'",
53+
"Directory '/node_modules' does not exist, skipping all lookups in it.",
54+
"Scoped package detected, looking in 'typescript__lib-decorators/legacy'",
55+
"Loading module '@typescript/lib-decorators/legacy' from 'node_modules' folder, target file types: JavaScript.",
56+
"Searching all ancestor node_modules directories for fallback extensions: JavaScript.",
57+
"Directory '/.src/node_modules' does not exist, skipping all lookups in it.",
58+
"Directory '/node_modules' does not exist, skipping all lookups in it.",
59+
"======== Module name '@typescript/lib-decorators/legacy' was not resolved. ========",
60+
"======== Resolving module '@typescript/lib-dom' from '/.src/__lib_node_modules_lookup_lib.dom.d.ts__.ts'. ========",
61+
"Explicitly specified module resolution kind: 'Node10'.",
62+
"Loading module '@typescript/lib-dom' from 'node_modules' folder, target file types: TypeScript, Declaration.",
63+
"Searching all ancestor node_modules directories for preferred extensions: TypeScript, Declaration.",
64+
"Directory '/.src/node_modules' does not exist, skipping all lookups in it.",
65+
"Scoped package detected, looking in 'typescript__lib-dom'",
66+
"Directory '/node_modules' does not exist, skipping all lookups in it.",
67+
"Scoped package detected, looking in 'typescript__lib-dom'",
68+
"Loading module '@typescript/lib-dom' from 'node_modules' folder, target file types: JavaScript.",
69+
"Searching all ancestor node_modules directories for fallback extensions: JavaScript.",
70+
"Directory '/.src/node_modules' does not exist, skipping all lookups in it.",
71+
"Directory '/node_modules' does not exist, skipping all lookups in it.",
72+
"======== Module name '@typescript/lib-dom' was not resolved. ========",
73+
"======== Resolving module '@typescript/lib-webworker/importscripts' from '/.src/__lib_node_modules_lookup_lib.webworker.importscripts.d.ts__.ts'. ========",
74+
"Explicitly specified module resolution kind: 'Node10'.",
75+
"Loading module '@typescript/lib-webworker/importscripts' from 'node_modules' folder, target file types: TypeScript, Declaration.",
76+
"Searching all ancestor node_modules directories for preferred extensions: TypeScript, Declaration.",
77+
"Directory '/.src/node_modules' does not exist, skipping all lookups in it.",
78+
"Scoped package detected, looking in 'typescript__lib-webworker/importscripts'",
79+
"Directory '/node_modules' does not exist, skipping all lookups in it.",
80+
"Scoped package detected, looking in 'typescript__lib-webworker/importscripts'",
81+
"Loading module '@typescript/lib-webworker/importscripts' from 'node_modules' folder, target file types: JavaScript.",
82+
"Searching all ancestor node_modules directories for fallback extensions: JavaScript.",
83+
"Directory '/.src/node_modules' does not exist, skipping all lookups in it.",
84+
"Directory '/node_modules' does not exist, skipping all lookups in it.",
85+
"======== Module name '@typescript/lib-webworker/importscripts' was not resolved. ========",
86+
"======== Resolving module '@typescript/lib-scripthost' from '/.src/__lib_node_modules_lookup_lib.scripthost.d.ts__.ts'. ========",
87+
"Explicitly specified module resolution kind: 'Node10'.",
88+
"Loading module '@typescript/lib-scripthost' from 'node_modules' folder, target file types: TypeScript, Declaration.",
89+
"Searching all ancestor node_modules directories for preferred extensions: TypeScript, Declaration.",
90+
"Directory '/.src/node_modules' does not exist, skipping all lookups in it.",
91+
"Scoped package detected, looking in 'typescript__lib-scripthost'",
92+
"Directory '/node_modules' does not exist, skipping all lookups in it.",
93+
"Scoped package detected, looking in 'typescript__lib-scripthost'",
94+
"Loading module '@typescript/lib-scripthost' from 'node_modules' folder, target file types: JavaScript.",
95+
"Searching all ancestor node_modules directories for fallback extensions: JavaScript.",
96+
"Directory '/.src/node_modules' does not exist, skipping all lookups in it.",
97+
"Directory '/node_modules' does not exist, skipping all lookups in it.",
98+
"======== Module name '@typescript/lib-scripthost' was not resolved. ========"
99+
]

0 commit comments

Comments
 (0)