Skip to content

Commit 63d6b11

Browse files
authored
Fix generating module specifiers verbatim from exports (#1087)
1 parent 4fb7922 commit 63d6b11

File tree

67 files changed

+120
-477
lines changed

Some content is hidden

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

67 files changed

+120
-477
lines changed

internal/modulespecifiers/specifiers.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -688,7 +688,7 @@ func tryGetModuleNameAsNodeModule(
688688
return "" // File is under this package.json, but is not publicly exported - there's no way to name it via `node_modules` resolution
689689
}
690690
if verbatimFromExports {
691-
return moduleFileName
691+
return moduleFileToTry
692692
}
693693
//}
694694
if len(packageRootPath) > 0 {

testdata/baselines/reference/submodule/compiler/declarationEmitBundlerConditions.errors.txt

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

testdata/baselines/reference/submodule/compiler/declarationEmitBundlerConditions.errors.txt.diff

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

testdata/baselines/reference/submodule/compiler/declarationEmitBundlerConditions.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,4 @@ export const c = makeC();
3737
import { C } from "pkg";
3838
export declare function makeC(): C;
3939
//// [index.d.ts]
40-
export declare const c: any;
40+
export declare const c: import("pkg").C;

testdata/baselines/reference/submodule/compiler/declarationEmitBundlerConditions.js.diff

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

testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitDynamicImportWithPackageExports(module=node18).js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,8 +163,8 @@ export declare const e: typeof import("inner/mjs");
163163
export declare const a: Promise<typeof import("./index.cts")>;
164164
export declare const b: Promise<typeof import("package/mjs", { with: { "resolution-mode": "import" } })>;
165165
export declare const c: Promise<typeof import("package", { with: { "resolution-mode": "import" } })>;
166-
export declare const f: Promise<typeof import("inner", { with: { "resolution-mode": "import" } })>;
166+
export declare const f: Promise<typeof import("inner")>;
167167
//// [other2.d.cts]
168168
// cjs format file, no TLA
169-
export declare const d: Promise<typeof import("inner/cjs", { with: { "resolution-mode": "import" } })>;
169+
export declare const d: Promise<typeof import("inner/cjs")>;
170170
export declare const e: Promise<typeof import("inner/mjs", { with: { "resolution-mode": "import" } })>;

testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitDynamicImportWithPackageExports(module=node18).js.diff

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,12 +127,12 @@
127127
- cjsMain: true;
128128
- default: typeof import("inner");
129129
-}>;
130-
+export declare const f: Promise<typeof import("inner", { with: { "resolution-mode": "import" } })>;
130+
+export declare const f: Promise<typeof import("inner")>;
131131
//// [other2.d.cts]
132132
-export declare const d: Promise<{
133133
- cjsNonmain: true;
134134
- default: typeof import("inner/cjs");
135135
-}>;
136136
+// cjs format file, no TLA
137-
+export declare const d: Promise<typeof import("inner/cjs", { with: { "resolution-mode": "import" } })>;
137+
+export declare const d: Promise<typeof import("inner/cjs")>;
138138
export declare const e: Promise<typeof import("inner/mjs", { with: { "resolution-mode": "import" } })>;

testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitDynamicImportWithPackageExports(module=node18).types

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,15 +110,15 @@ export const c = import("package");
110110
>"package" : "package"
111111

112112
export const f = import("inner");
113-
>f : Promise<typeof import("./node_modules/inner")>
114-
>import("inner") : Promise<typeof import("./node_modules/inner")>
113+
>f : Promise<typeof import("inner")>
114+
>import("inner") : Promise<typeof import("inner")>
115115
>"inner" : "inner"
116116

117117
=== other2.cts ===
118118
// cjs format file, no TLA
119119
export const d = import("inner/cjs");
120-
>d : Promise<typeof import("./node_modules/inner/index.d.cts")>
121-
>import("inner/cjs") : Promise<typeof import("./node_modules/inner/index.d.cts")>
120+
>d : Promise<typeof import("inner/cjs")>
121+
>import("inner/cjs") : Promise<typeof import("inner/cjs")>
122122
>"inner/cjs" : "inner/cjs"
123123

124124
export const e = import("inner/mjs");

testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitDynamicImportWithPackageExports(module=node18).types.diff

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -143,17 +143,17 @@
143143
export const f = import("inner");
144144
->f : Promise<{ cjsMain: true; default: typeof import("node_modules/inner/index"); }>
145145
->import("inner") : Promise<{ cjsMain: true; default: typeof import("node_modules/inner/index"); }>
146-
+>f : Promise<typeof import("./node_modules/inner")>
147-
+>import("inner") : Promise<typeof import("./node_modules/inner")>
146+
+>f : Promise<typeof import("inner")>
147+
+>import("inner") : Promise<typeof import("inner")>
148148
>"inner" : "inner"
149149

150150
=== other2.cts ===
151151
// cjs format file, no TLA
152152
export const d = import("inner/cjs");
153153
->d : Promise<{ cjsNonmain: true; default: typeof import("node_modules/inner/index"); }>
154154
->import("inner/cjs") : Promise<{ cjsNonmain: true; default: typeof import("node_modules/inner/index"); }>
155-
+>d : Promise<typeof import("./node_modules/inner/index.d.cts")>
156-
+>import("inner/cjs") : Promise<typeof import("./node_modules/inner/index.d.cts")>
155+
+>d : Promise<typeof import("inner/cjs")>
156+
+>import("inner/cjs") : Promise<typeof import("inner/cjs")>
157157
>"inner/cjs" : "inner/cjs"
158158

159159
export const e = import("inner/mjs");

testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitDynamicImportWithPackageExports(module=nodenext).js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -169,12 +169,12 @@ export declare const b: Promise<typeof import("package/mjs", { with: { "resoluti
169169
export declare const c: Promise<typeof import("package", { with: { "resolution-mode": "import" } })>;
170170
export declare const f: Promise<{
171171
cjsMain: true;
172-
default: typeof import("inner", { with: { "resolution-mode": "import" } });
172+
default: typeof import("inner");
173173
}>;
174174
//// [other2.d.cts]
175175
// cjs format file, no TLA
176176
export declare const d: Promise<{
177177
cjsNonmain: true;
178-
default: typeof import("inner/cjs", { with: { "resolution-mode": "import" } });
178+
default: typeof import("inner/cjs");
179179
}>;
180180
export declare const e: Promise<typeof import("inner/mjs", { with: { "resolution-mode": "import" } })>;

testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitDynamicImportWithPackageExports(module=nodenext).js.diff

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -50,16 +50,11 @@
5050
}>;
5151
export declare const b: Promise<typeof import("package/mjs", { with: { "resolution-mode": "import" } })>;
5252
export declare const c: Promise<typeof import("package", { with: { "resolution-mode": "import" } })>;
53-
export declare const f: Promise<{
54-
cjsMain: true;
55-
- default: typeof import("inner");
56-
+ default: typeof import("inner", { with: { "resolution-mode": "import" } });
53+
@@= skipped -16, +18 lines =@@
54+
default: typeof import("inner");
5755
}>;
5856
//// [other2.d.cts]
5957
+// cjs format file, no TLA
6058
export declare const d: Promise<{
6159
cjsNonmain: true;
62-
- default: typeof import("inner/cjs");
63-
+ default: typeof import("inner/cjs", { with: { "resolution-mode": "import" } });
64-
}>;
65-
export declare const e: Promise<typeof import("inner/mjs", { with: { "resolution-mode": "import" } })>;
60+
default: typeof import("inner/cjs");

testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitDynamicImportWithPackageExports(module=nodenext).types

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,15 +110,15 @@ export const c = import("package");
110110
>"package" : "package"
111111

112112
export const f = import("inner");
113-
>f : Promise<{ cjsMain: true; default: typeof import("./node_modules/inner"); }>
114-
>import("inner") : Promise<{ cjsMain: true; default: typeof import("./node_modules/inner"); }>
113+
>f : Promise<{ cjsMain: true; default: typeof import("inner"); }>
114+
>import("inner") : Promise<{ cjsMain: true; default: typeof import("inner"); }>
115115
>"inner" : "inner"
116116

117117
=== other2.cts ===
118118
// cjs format file, no TLA
119119
export const d = import("inner/cjs");
120-
>d : Promise<{ cjsNonmain: true; default: typeof import("./node_modules/inner/index.d.cts"); }>
121-
>import("inner/cjs") : Promise<{ cjsNonmain: true; default: typeof import("./node_modules/inner/index.d.cts"); }>
120+
>d : Promise<{ cjsNonmain: true; default: typeof import("inner/cjs"); }>
121+
>import("inner/cjs") : Promise<{ cjsNonmain: true; default: typeof import("inner/cjs"); }>
122122
>"inner/cjs" : "inner/cjs"
123123

124124
export const e = import("inner/mjs");

testdata/baselines/reference/submodule/conformance/nodeModulesDeclarationEmitDynamicImportWithPackageExports(module=nodenext).types.diff

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -143,17 +143,17 @@
143143
export const f = import("inner");
144144
->f : Promise<{ cjsMain: true; default: typeof import("node_modules/inner/index"); }>
145145
->import("inner") : Promise<{ cjsMain: true; default: typeof import("node_modules/inner/index"); }>
146-
+>f : Promise<{ cjsMain: true; default: typeof import("./node_modules/inner"); }>
147-
+>import("inner") : Promise<{ cjsMain: true; default: typeof import("./node_modules/inner"); }>
146+
+>f : Promise<{ cjsMain: true; default: typeof import("inner"); }>
147+
+>import("inner") : Promise<{ cjsMain: true; default: typeof import("inner"); }>
148148
>"inner" : "inner"
149149

150150
=== other2.cts ===
151151
// cjs format file, no TLA
152152
export const d = import("inner/cjs");
153153
->d : Promise<{ cjsNonmain: true; default: typeof import("node_modules/inner/index"); }>
154154
->import("inner/cjs") : Promise<{ cjsNonmain: true; default: typeof import("node_modules/inner/index"); }>
155-
+>d : Promise<{ cjsNonmain: true; default: typeof import("./node_modules/inner/index.d.cts"); }>
156-
+>import("inner/cjs") : Promise<{ cjsNonmain: true; default: typeof import("./node_modules/inner/index.d.cts"); }>
155+
+>d : Promise<{ cjsNonmain: true; default: typeof import("inner/cjs"); }>
156+
+>import("inner/cjs") : Promise<{ cjsNonmain: true; default: typeof import("inner/cjs"); }>
157157
>"inner/cjs" : "inner/cjs"
158158

159159
export const e = import("inner/mjs");

testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=node16).errors.txt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,12 @@
11
index.ts(2,23): error TS2307: Cannot find module 'inner/other.js' or its corresponding type declarations.
2-
index.ts(3,14): error TS2742: The inferred type of 'a' cannot be named without a reference to './node_modules/inner/other.js'. This is likely not portable. A type annotation is necessary.
32

43

5-
==== index.ts (2 errors) ====
4+
==== index.ts (1 errors) ====
65
// esm format file
76
import { Thing } from "inner/other.js"; // should fail
87
~~~~~~~~~~~~~~~~
98
!!! error TS2307: Cannot find module 'inner/other.js' or its corresponding type declarations.
109
export const a = (await import("inner")).x();
11-
~
12-
!!! error TS2742: The inferred type of 'a' cannot be named without a reference to './node_modules/inner/other.js'. This is likely not portable. A type annotation is necessary.
1310
==== node_modules/inner/index.d.ts (0 errors) ====
1411
// esm format file
1512
export { x } from "./other.js";

testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=node16).errors.txt.diff

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

testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=node16).js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,4 @@ export const a = (await import("inner")).x();
3838

3939

4040
//// [index.d.ts]
41-
export declare const a: any;
41+
export declare const a: import("inner/other").Thing;

testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=node16).js.diff

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

testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=node16).types

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@ import { Thing } from "inner/other.js"; // should fail
66
>Thing : any
77

88
export const a = (await import("inner")).x();
9-
>a : import("./node_modules/inner/other.js").Thing
10-
>(await import("inner")).x() : import("./node_modules/inner/other.js").Thing
11-
>(await import("inner")).x : () => import("./node_modules/inner/other.js").Thing
9+
>a : import("inner/other").Thing
10+
>(await import("inner")).x() : import("inner/other").Thing
11+
>(await import("inner")).x : () => import("inner/other").Thing
1212
>(await import("inner")) : typeof import("inner")
1313
>await import("inner") : typeof import("inner")
1414
>import("inner") : Promise<typeof import("inner")>
1515
>"inner" : "inner"
16-
>x : () => import("./node_modules/inner/other.js").Thing
16+
>x : () => import("inner/other").Thing
1717

1818
=== node_modules/inner/index.d.ts ===
1919
// esm format file

testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=node16).types.diff

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@
1010
->(await import("inner")) : typeof import("node_modules/inner/index")
1111
->await import("inner") : typeof import("node_modules/inner/index")
1212
->import("inner") : Promise<typeof import("node_modules/inner/index")>
13-
+>a : import("./node_modules/inner/other.js").Thing
14-
+>(await import("inner")).x() : import("./node_modules/inner/other.js").Thing
15-
+>(await import("inner")).x : () => import("./node_modules/inner/other.js").Thing
13+
+>a : import("inner/other").Thing
14+
+>(await import("inner")).x() : import("inner/other").Thing
15+
+>(await import("inner")).x : () => import("inner/other").Thing
1616
+>(await import("inner")) : typeof import("inner")
1717
+>await import("inner") : typeof import("inner")
1818
+>import("inner") : Promise<typeof import("inner")>
1919
>"inner" : "inner"
2020
->x : () => import("node_modules/inner/other").Thing
21-
+>x : () => import("./node_modules/inner/other.js").Thing
21+
+>x : () => import("inner/other").Thing
2222

2323
=== node_modules/inner/index.d.ts ===
2424
// esm format file

testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=node18).errors.txt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,12 @@
11
index.ts(2,23): error TS2307: Cannot find module 'inner/other.js' or its corresponding type declarations.
2-
index.ts(3,14): error TS2742: The inferred type of 'a' cannot be named without a reference to './node_modules/inner/other.js'. This is likely not portable. A type annotation is necessary.
32

43

5-
==== index.ts (2 errors) ====
4+
==== index.ts (1 errors) ====
65
// esm format file
76
import { Thing } from "inner/other.js"; // should fail
87
~~~~~~~~~~~~~~~~
98
!!! error TS2307: Cannot find module 'inner/other.js' or its corresponding type declarations.
109
export const a = (await import("inner")).x();
11-
~
12-
!!! error TS2742: The inferred type of 'a' cannot be named without a reference to './node_modules/inner/other.js'. This is likely not portable. A type annotation is necessary.
1310
==== node_modules/inner/index.d.ts (0 errors) ====
1411
// esm format file
1512
export { x } from "./other.js";

testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=node18).errors.txt.diff

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

testdata/baselines/reference/submodule/conformance/nodeModulesExportsSpecifierGenerationConditions(module=node18).js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,4 @@ exports.a = (await import("inner")).x();
4141

4242

4343
//// [index.d.ts]
44-
export declare const a: any;
44+
export declare const a: import("inner/other").Thing;

0 commit comments

Comments
 (0)