Skip to content

Commit b24b05b

Browse files
TypeScript Botandrewbranch
TypeScript Bot
andauthored
Cherry-pick PR #49327 into release-4.7 (#49329)
Component commits: 79957c1 Fix index fallback of CJS package from ESM-mode import when `main` is present but does not resolve Co-authored-by: Andrew Branch <[email protected]>
1 parent 6e0328a commit b24b05b

6 files changed

+203
-2
lines changed

src/compiler/moduleNameResolver.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -2413,8 +2413,8 @@ namespace ts {
24132413
);
24142414
if (
24152415
!pathAndExtension && packageInfo
2416-
&& packageInfo.packageJsonContent.exports === undefined
2417-
&& packageInfo.packageJsonContent.main === undefined
2416+
// eslint-disable-next-line no-null/no-null
2417+
&& (packageInfo.packageJsonContent.exports === undefined || packageInfo.packageJsonContent.exports === null)
24182418
&& state.features & NodeResolutionFeatures.EsmMode
24192419
) {
24202420
// EsmMode disables index lookup in `loadNodeModuleFromDirectoryWorker` generally, however non-relative package resolutions still assume
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/index.cts(4,21): error TS2307: Cannot find module 'dedent4' or its corresponding type declarations.
2+
/index.mts(4,21): error TS2307: Cannot find module 'dedent4' or its corresponding type declarations.
3+
4+
5+
==== /node_modules/@types/dedent/package.json (0 errors) ====
6+
{ "name": "@types/dedent", "version": "1.0.0", "main": "" }
7+
8+
==== /node_modules/@types/dedent2/package.json (0 errors) ====
9+
{ "name": "@types/dedent2", "version": "1.0.0", "main": "asdfasdfasdf" }
10+
11+
==== /node_modules/@types/dedent3/package.json (0 errors) ====
12+
{ "name": "@types/dedent3", "version": "1.0.0", "main": "asdfasdfasdf", "exports": null }
13+
14+
==== /node_modules/@types/dedent4/package.json (0 errors) ====
15+
{ "name": "@types/dedent4", "version": "1.0.0", "main": "asdfasdfasdf", "exports": "./asdfasdfasdf" }
16+
17+
==== /node_modules/@types/dedent/index.d.ts (0 errors) ====
18+
export {};
19+
20+
==== /node_modules/@types/dedent2/index.d.ts (0 errors) ====
21+
export {};
22+
23+
==== /node_modules/@types/dedent3/index.d.ts (0 errors) ====
24+
export {};
25+
26+
==== /node_modules/@types/dedent4/index.d.ts (0 errors) ====
27+
export {};
28+
29+
==== /index.mts (1 errors) ====
30+
import dedent from "dedent";
31+
import dedent2 from "dedent2";
32+
import dedent3 from "dedent3";
33+
import dedent4 from "dedent4"; // Error
34+
~~~~~~~~~
35+
!!! error TS2307: Cannot find module 'dedent4' or its corresponding type declarations.
36+
37+
==== /index.cts (1 errors) ====
38+
import dedent from "dedent";
39+
import dedent2 from "dedent2";
40+
import dedent3 from "dedent3";
41+
import dedent4 from "dedent4"; // Error
42+
~~~~~~~~~
43+
!!! error TS2307: Cannot find module 'dedent4' or its corresponding type declarations.
44+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
//// [tests/cases/compiler/nodeNextImportModeImplicitIndexResolution2.ts] ////
2+
3+
//// [package.json]
4+
{ "name": "@types/dedent", "version": "1.0.0", "main": "" }
5+
6+
//// [package.json]
7+
{ "name": "@types/dedent2", "version": "1.0.0", "main": "asdfasdfasdf" }
8+
9+
//// [package.json]
10+
{ "name": "@types/dedent3", "version": "1.0.0", "main": "asdfasdfasdf", "exports": null }
11+
12+
//// [package.json]
13+
{ "name": "@types/dedent4", "version": "1.0.0", "main": "asdfasdfasdf", "exports": "./asdfasdfasdf" }
14+
15+
//// [index.d.ts]
16+
export {};
17+
18+
//// [index.d.ts]
19+
export {};
20+
21+
//// [index.d.ts]
22+
export {};
23+
24+
//// [index.d.ts]
25+
export {};
26+
27+
//// [index.mts]
28+
import dedent from "dedent";
29+
import dedent2 from "dedent2";
30+
import dedent3 from "dedent3";
31+
import dedent4 from "dedent4"; // Error
32+
33+
//// [index.cts]
34+
import dedent from "dedent";
35+
import dedent2 from "dedent2";
36+
import dedent3 from "dedent3";
37+
import dedent4 from "dedent4"; // Error
38+
39+
40+
//// [index.mjs]
41+
export {};
42+
//// [index.cjs]
43+
"use strict";
44+
Object.defineProperty(exports, "__esModule", { value: true });
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
=== /node_modules/@types/dedent/index.d.ts ===
2+
export {};
3+
No type information for this code.
4+
No type information for this code.=== /node_modules/@types/dedent2/index.d.ts ===
5+
export {};
6+
No type information for this code.
7+
No type information for this code.=== /node_modules/@types/dedent3/index.d.ts ===
8+
export {};
9+
No type information for this code.
10+
No type information for this code.=== /node_modules/@types/dedent4/index.d.ts ===
11+
export {};
12+
No type information for this code.
13+
No type information for this code.=== /index.mts ===
14+
import dedent from "dedent";
15+
>dedent : Symbol(dedent, Decl(index.mts, 0, 6))
16+
17+
import dedent2 from "dedent2";
18+
>dedent2 : Symbol(dedent2, Decl(index.mts, 1, 6))
19+
20+
import dedent3 from "dedent3";
21+
>dedent3 : Symbol(dedent3, Decl(index.mts, 2, 6))
22+
23+
import dedent4 from "dedent4"; // Error
24+
>dedent4 : Symbol(dedent4, Decl(index.mts, 3, 6))
25+
26+
=== /index.cts ===
27+
import dedent from "dedent";
28+
>dedent : Symbol(dedent, Decl(index.cts, 0, 6))
29+
30+
import dedent2 from "dedent2";
31+
>dedent2 : Symbol(dedent2, Decl(index.cts, 1, 6))
32+
33+
import dedent3 from "dedent3";
34+
>dedent3 : Symbol(dedent3, Decl(index.cts, 2, 6))
35+
36+
import dedent4 from "dedent4"; // Error
37+
>dedent4 : Symbol(dedent4, Decl(index.cts, 3, 6))
38+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
=== /node_modules/@types/dedent/index.d.ts ===
2+
export {};
3+
No type information for this code.
4+
No type information for this code.=== /node_modules/@types/dedent2/index.d.ts ===
5+
export {};
6+
No type information for this code.
7+
No type information for this code.=== /node_modules/@types/dedent3/index.d.ts ===
8+
export {};
9+
No type information for this code.
10+
No type information for this code.=== /node_modules/@types/dedent4/index.d.ts ===
11+
export {};
12+
No type information for this code.
13+
No type information for this code.=== /index.mts ===
14+
import dedent from "dedent";
15+
>dedent : typeof dedent
16+
17+
import dedent2 from "dedent2";
18+
>dedent2 : typeof dedent2
19+
20+
import dedent3 from "dedent3";
21+
>dedent3 : typeof dedent3
22+
23+
import dedent4 from "dedent4"; // Error
24+
>dedent4 : any
25+
26+
=== /index.cts ===
27+
import dedent from "dedent";
28+
>dedent : typeof dedent
29+
30+
import dedent2 from "dedent2";
31+
>dedent2 : typeof dedent2
32+
33+
import dedent3 from "dedent3";
34+
>dedent3 : typeof dedent3
35+
36+
import dedent4 from "dedent4"; // Error
37+
>dedent4 : any
38+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
// @module: nodenext
2+
3+
// @Filename: /node_modules/@types/dedent/package.json
4+
{ "name": "@types/dedent", "version": "1.0.0", "main": "" }
5+
6+
// @Filename: /node_modules/@types/dedent2/package.json
7+
{ "name": "@types/dedent2", "version": "1.0.0", "main": "asdfasdfasdf" }
8+
9+
// @Filename: /node_modules/@types/dedent3/package.json
10+
{ "name": "@types/dedent3", "version": "1.0.0", "main": "asdfasdfasdf", "exports": null }
11+
12+
// @Filename: /node_modules/@types/dedent4/package.json
13+
{ "name": "@types/dedent4", "version": "1.0.0", "main": "asdfasdfasdf", "exports": "./asdfasdfasdf" }
14+
15+
// @Filename: /node_modules/@types/dedent/index.d.ts
16+
export {};
17+
18+
// @Filename: /node_modules/@types/dedent2/index.d.ts
19+
export {};
20+
21+
// @Filename: /node_modules/@types/dedent3/index.d.ts
22+
export {};
23+
24+
// @Filename: /node_modules/@types/dedent4/index.d.ts
25+
export {};
26+
27+
// @Filename: /index.mts
28+
import dedent from "dedent";
29+
import dedent2 from "dedent2";
30+
import dedent3 from "dedent3";
31+
import dedent4 from "dedent4"; // Error
32+
33+
// @Filename: /index.cts
34+
import dedent from "dedent";
35+
import dedent2 from "dedent2";
36+
import dedent3 from "dedent3";
37+
import dedent4 from "dedent4"; // Error

0 commit comments

Comments
 (0)