Skip to content

Commit 6f6efb4

Browse files
authored
Disable conditional exports fallbacks on null values (#62483)
1 parent 96acaa5 commit 6f6efb4

8 files changed

+197
-2
lines changed

src/compiler/moduleNameResolver.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2812,7 +2812,9 @@ function getLoadModuleFromTargetExportOrImport(extensions: Extensions, state: Mo
28122812
const subTarget = (target as MapLike<unknown>)[condition];
28132813
const result = loadModuleFromTargetExportOrImport(subTarget, subpath, pattern, key);
28142814
if (result) {
2815-
traceIfEnabled(state, Diagnostics.Resolved_under_condition_0, condition);
2815+
if (result.value) {
2816+
traceIfEnabled(state, Diagnostics.Resolved_under_condition_0, condition);
2817+
}
28162818
traceIfEnabled(state, Diagnostics.Exiting_conditional_exports);
28172819
return result;
28182820
}
@@ -2846,7 +2848,7 @@ function getLoadModuleFromTargetExportOrImport(extensions: Extensions, state: Mo
28462848
if (state.traceEnabled) {
28472849
trace(state.host, Diagnostics.package_json_scope_0_explicitly_maps_specifier_1_to_null, scope.packageDirectory, moduleName);
28482850
}
2849-
return toSearchResult(/*value*/ undefined);
2851+
return { value: undefined };
28502852
}
28512853
if (state.traceEnabled) {
28522854
trace(state.host, Diagnostics.package_json_scope_0_has_invalid_type_for_target_of_specifier_1, scope.packageDirectory, moduleName);
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/index.mts(1,16): error TS2307: Cannot find module 'dep' or its corresponding type declarations.
2+
3+
4+
==== /node_modules/dep/package.json (0 errors) ====
5+
{
6+
"name": "dep",
7+
"version": "1.0.0",
8+
"exports": {
9+
".": {
10+
"import": null,
11+
"types": "./dist/index.d.ts"
12+
}
13+
}
14+
}
15+
16+
==== /node_modules/dep/dist/index.d.ts (0 errors) ====
17+
export {};
18+
19+
==== /index.mts (1 errors) ====
20+
import {} from "dep"; // Cannot find module 'dep'.
21+
~~~~~
22+
!!! error TS2307: Cannot find module 'dep' or its corresponding type declarations.
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
[
2+
"File '/node_modules/dep/dist/package.json' does not exist.",
3+
"Found 'package.json' at '/node_modules/dep/package.json'.",
4+
"======== Resolving module 'dep' from '/index.mts'. ========",
5+
"Explicitly specified module resolution kind: 'Bundler'.",
6+
"Resolving in CJS mode with conditions 'import', 'types'.",
7+
"File '/package.json' does not exist.",
8+
"Loading module 'dep' from 'node_modules' folder, target file types: TypeScript, JavaScript, Declaration, JSON.",
9+
"Searching all ancestor node_modules directories for preferred extensions: TypeScript, Declaration.",
10+
"File '/node_modules/dep/package.json' exists according to earlier cached lookups.",
11+
"Entering conditional exports.",
12+
"Matched 'exports' condition 'import'.",
13+
"package.json scope '/node_modules/dep' explicitly maps specifier '.' to null.",
14+
"Exiting conditional exports.",
15+
"Directory '/node_modules/@types' does not exist, skipping all lookups in it.",
16+
"Searching all ancestor node_modules directories for fallback extensions: JavaScript, JSON.",
17+
"File '/node_modules/dep/package.json' exists according to earlier cached lookups.",
18+
"Entering conditional exports.",
19+
"Matched 'exports' condition 'import'.",
20+
"package.json scope '/node_modules/dep' explicitly maps specifier '.' to null.",
21+
"Exiting conditional exports.",
22+
"======== Module name 'dep' was not resolved. ========"
23+
]
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
error TS5110: Option 'module' must be set to 'Node16' when option 'moduleResolution' is set to 'Node16'.
2+
/index.mts(1,16): error TS2307: Cannot find module 'dep' or its corresponding type declarations.
3+
4+
5+
!!! error TS5110: Option 'module' must be set to 'Node16' when option 'moduleResolution' is set to 'Node16'.
6+
==== /node_modules/dep/package.json (0 errors) ====
7+
{
8+
"name": "dep",
9+
"version": "1.0.0",
10+
"exports": {
11+
".": {
12+
"import": null,
13+
"types": "./dist/index.d.ts"
14+
}
15+
}
16+
}
17+
18+
==== /node_modules/dep/dist/index.d.ts (0 errors) ====
19+
export {};
20+
21+
==== /index.mts (1 errors) ====
22+
import {} from "dep"; // Cannot find module 'dep'.
23+
~~~~~
24+
!!! error TS2307: Cannot find module 'dep' or its corresponding type declarations.
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
[
2+
"File '/node_modules/dep/dist/package.json' does not exist.",
3+
"Found 'package.json' at '/node_modules/dep/package.json'.",
4+
"======== Resolving module 'dep' from '/index.mts'. ========",
5+
"Explicitly specified module resolution kind: 'Node16'.",
6+
"Resolving in ESM mode with conditions 'import', 'types', 'node'.",
7+
"File '/package.json' does not exist.",
8+
"Loading module 'dep' from 'node_modules' folder, target file types: TypeScript, JavaScript, Declaration.",
9+
"Searching all ancestor node_modules directories for preferred extensions: TypeScript, Declaration.",
10+
"File '/node_modules/dep/package.json' exists according to earlier cached lookups.",
11+
"Entering conditional exports.",
12+
"Matched 'exports' condition 'import'.",
13+
"package.json scope '/node_modules/dep' explicitly maps specifier '.' to null.",
14+
"Exiting conditional exports.",
15+
"Directory '/node_modules/@types' does not exist, skipping all lookups in it.",
16+
"Searching all ancestor node_modules directories for fallback extensions: JavaScript.",
17+
"File '/node_modules/dep/package.json' exists according to earlier cached lookups.",
18+
"Entering conditional exports.",
19+
"Matched 'exports' condition 'import'.",
20+
"package.json scope '/node_modules/dep' explicitly maps specifier '.' to null.",
21+
"Exiting conditional exports.",
22+
"======== Module name 'dep' was not resolved. ========",
23+
"File '/.ts/package.json' does not exist.",
24+
"File '/package.json' does not exist according to earlier cached lookups.",
25+
"File '/.ts/package.json' does not exist according to earlier cached lookups.",
26+
"File '/package.json' does not exist according to earlier cached lookups.",
27+
"File '/.ts/package.json' does not exist according to earlier cached lookups.",
28+
"File '/package.json' does not exist according to earlier cached lookups.",
29+
"File '/.ts/package.json' does not exist according to earlier cached lookups.",
30+
"File '/package.json' does not exist according to earlier cached lookups.",
31+
"File '/.ts/package.json' does not exist according to earlier cached lookups.",
32+
"File '/package.json' does not exist according to earlier cached lookups.",
33+
"File '/.ts/package.json' does not exist according to earlier cached lookups.",
34+
"File '/package.json' does not exist according to earlier cached lookups.",
35+
"File '/.ts/package.json' does not exist according to earlier cached lookups.",
36+
"File '/package.json' does not exist according to earlier cached lookups."
37+
]
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
error TS5110: Option 'module' must be set to 'NodeNext' when option 'moduleResolution' is set to 'NodeNext'.
2+
/index.mts(1,16): error TS2307: Cannot find module 'dep' or its corresponding type declarations.
3+
4+
5+
!!! error TS5110: Option 'module' must be set to 'NodeNext' when option 'moduleResolution' is set to 'NodeNext'.
6+
==== /node_modules/dep/package.json (0 errors) ====
7+
{
8+
"name": "dep",
9+
"version": "1.0.0",
10+
"exports": {
11+
".": {
12+
"import": null,
13+
"types": "./dist/index.d.ts"
14+
}
15+
}
16+
}
17+
18+
==== /node_modules/dep/dist/index.d.ts (0 errors) ====
19+
export {};
20+
21+
==== /index.mts (1 errors) ====
22+
import {} from "dep"; // Cannot find module 'dep'.
23+
~~~~~
24+
!!! error TS2307: Cannot find module 'dep' or its corresponding type declarations.
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
[
2+
"File '/node_modules/dep/dist/package.json' does not exist.",
3+
"Found 'package.json' at '/node_modules/dep/package.json'.",
4+
"======== Resolving module 'dep' from '/index.mts'. ========",
5+
"Explicitly specified module resolution kind: 'NodeNext'.",
6+
"Resolving in ESM mode with conditions 'import', 'types', 'node'.",
7+
"File '/package.json' does not exist.",
8+
"Loading module 'dep' from 'node_modules' folder, target file types: TypeScript, JavaScript, Declaration.",
9+
"Searching all ancestor node_modules directories for preferred extensions: TypeScript, Declaration.",
10+
"File '/node_modules/dep/package.json' exists according to earlier cached lookups.",
11+
"Entering conditional exports.",
12+
"Matched 'exports' condition 'import'.",
13+
"package.json scope '/node_modules/dep' explicitly maps specifier '.' to null.",
14+
"Exiting conditional exports.",
15+
"Directory '/node_modules/@types' does not exist, skipping all lookups in it.",
16+
"Searching all ancestor node_modules directories for fallback extensions: JavaScript.",
17+
"File '/node_modules/dep/package.json' exists according to earlier cached lookups.",
18+
"Entering conditional exports.",
19+
"Matched 'exports' condition 'import'.",
20+
"package.json scope '/node_modules/dep' explicitly maps specifier '.' to null.",
21+
"Exiting conditional exports.",
22+
"======== Module name 'dep' was not resolved. ========",
23+
"File '/.ts/package.json' does not exist.",
24+
"File '/package.json' does not exist according to earlier cached lookups.",
25+
"File '/.ts/package.json' does not exist according to earlier cached lookups.",
26+
"File '/package.json' does not exist according to earlier cached lookups.",
27+
"File '/.ts/package.json' does not exist according to earlier cached lookups.",
28+
"File '/package.json' does not exist according to earlier cached lookups.",
29+
"File '/.ts/package.json' does not exist according to earlier cached lookups.",
30+
"File '/package.json' does not exist according to earlier cached lookups.",
31+
"File '/.ts/package.json' does not exist according to earlier cached lookups.",
32+
"File '/package.json' does not exist according to earlier cached lookups.",
33+
"File '/.ts/package.json' does not exist according to earlier cached lookups.",
34+
"File '/package.json' does not exist according to earlier cached lookups.",
35+
"File '/.ts/package.json' does not exist according to earlier cached lookups.",
36+
"File '/package.json' does not exist according to earlier cached lookups."
37+
]
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// @module: esnext
2+
// @moduleResolution: node16,nodenext,bundler
3+
// @traceResolution: true
4+
// @allowJs: true
5+
// @noTypesAndSymbols: true
6+
// @noEmit: true
7+
8+
// We fixed https://github.com/microsoft/TypeScript/issues/50762 for `null` only
9+
10+
// @Filename: /node_modules/dep/package.json
11+
{
12+
"name": "dep",
13+
"version": "1.0.0",
14+
"exports": {
15+
".": {
16+
"import": null,
17+
"types": "./dist/index.d.ts"
18+
}
19+
}
20+
}
21+
22+
// @Filename: /node_modules/dep/dist/index.d.ts
23+
export {};
24+
25+
// @Filename: /index.mts
26+
import {} from "dep"; // Cannot find module 'dep'.

0 commit comments

Comments
 (0)