Skip to content

Commit 5932420

Browse files
Fix self-name input linking for --allowJs --declaration projects (#54819)
Co-authored-by: Jake Bailey <[email protected]>
1 parent 88cb76d commit 5932420

8 files changed

+110
-7
lines changed

src/compiler/commandLineParser.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -657,6 +657,7 @@ const commandOptionsWithoutBuild: CommandLineOption[] = [
657657
{
658658
name: "checkJs",
659659
type: "boolean",
660+
affectsModuleResolution: true,
660661
showInSimplifiedHelpView: true,
661662
category: Diagnostics.JavaScript_Support,
662663
description: Diagnostics.Enable_error_reporting_in_type_checked_JavaScript_files,

src/compiler/moduleNameResolver.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import {
3535
forEach,
3636
forEachAncestorDirectory,
3737
formatMessage,
38+
getAllowJSCompilerOption,
3839
getBaseFileName,
3940
GetCanonicalFileName,
4041
getCommonSourceDirectory,
@@ -2420,7 +2421,16 @@ function loadModuleFromSelfNameReference(extensions: Extensions, moduleName: str
24202421
// in order to be consistent with (non-self) library-name loading in
24212422
// `loadModuleFromNearestNodeModulesDirectoryWorker`, which uses two passes in order
24222423
// to prioritize `@types` packages higher up the directory tree over untyped
2423-
// implementation packages.
2424+
// implementation packages. See the selfNameModuleAugmentation.ts test for why this
2425+
// matters.
2426+
//
2427+
// However, there's an exception. If the user has `allowJs` and `declaration`, we need
2428+
// to ensure that self-name imports of their own package can resolve back to their
2429+
// input JS files via `tryLoadInputFileForPath` at a higher priority than their output
2430+
// declaration files, so we need to do a single pass with all extensions for that case.
2431+
if (getAllowJSCompilerOption(state.compilerOptions) && !pathContainsNodeModules(directory)) {
2432+
return loadModuleFromExports(scope, extensions, subpath, state, cache, redirectedReference);
2433+
}
24242434
const priorityExtensions = extensions & (Extensions.TypeScript | Extensions.Declaration);
24252435
const secondaryExtensions = extensions & ~(Extensions.TypeScript | Extensions.Declaration);
24262436
return loadModuleFromExports(scope, priorityExtensions, subpath, state, cache, redirectedReference)
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
//// [tests/cases/conformance/node/allowJs/nodeAllowJsPackageSelfName2.ts] ////
2+
3+
//// [package.json]
4+
{
5+
"name": "js-self-name-import",
6+
"type": "module",
7+
"exports": {
8+
"./*": {
9+
"types": "./types/src/*",
10+
"default": "./src/*"
11+
}
12+
}
13+
}
14+
15+
//// [foo.d.ts]
16+
export const foo: 1;
17+
18+
//// [foo.d.ts]
19+
export {};
20+
21+
//// [foo.js]
22+
export const foo = 1;
23+
24+
//// [foo.js]
25+
import { foo } from "js-self-name-import/foo.js";
26+
27+
28+
29+
30+
//// [foo.d.ts]
31+
export const foo: 1;
32+
//// [foo.d.ts]
33+
export {};
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
//// [tests/cases/conformance/node/allowJs/nodeAllowJsPackageSelfName2.ts] ////
2+
3+
=== /src/foo.js ===
4+
export const foo = 1;
5+
>foo : Symbol(foo, Decl(foo.js, 0, 12))
6+
7+
=== /test/foo.js ===
8+
import { foo } from "js-self-name-import/foo.js";
9+
>foo : Symbol(foo, Decl(foo.js, 0, 8))
10+
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
//// [tests/cases/conformance/node/allowJs/nodeAllowJsPackageSelfName2.ts] ////
2+
3+
=== /src/foo.js ===
4+
export const foo = 1;
5+
>foo : 1
6+
>1 : 1
7+
8+
=== /test/foo.js ===
9+
import { foo } from "js-self-name-import/foo.js";
10+
>foo : 1
11+

tests/baselines/reference/tsserver/documentRegistry/Caches-the-source-file-if-script-info-is-orphan,-and-orphan-script-info-changes.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ Info seq [hh:mm:ss:mss] Open files:
6969
Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/index.ts ProjectRootPath: undefined
7070
Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json
7171
DocumentRegistry::
72-
Key:: undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined
72+
Key:: undefined|undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined
7373
/user/username/projects/myproject/index.ts: TS 1
7474
/user/username/projects/myproject/module1.d.ts: TS 1
7575
/a/lib/lib.d.ts: TS 1
@@ -88,7 +88,7 @@ Info seq [hh:mm:ss:mss] Files (2)
8888

8989
Info seq [hh:mm:ss:mss] -----------------------------------------------
9090
DocumentRegistry::
91-
Key:: undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined
91+
Key:: undefined|undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined
9292
/user/username/projects/myproject/index.ts: TS 1
9393
/a/lib/lib.d.ts: TS 1
9494
Info seq [hh:mm:ss:mss] FileWatcher:: Triggered with /user/username/projects/myproject/module1.d.ts 1:: WatchInfo: /user/username/projects/myproject/module1.d.ts 500 undefined WatchType: Closed Script info
@@ -111,7 +111,7 @@ Info seq [hh:mm:ss:mss] Files (3)
111111

112112
Info seq [hh:mm:ss:mss] -----------------------------------------------
113113
DocumentRegistry::
114-
Key:: undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined
114+
Key:: undefined|undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined
115115
/user/username/projects/myproject/index.ts: TS 1
116116
/a/lib/lib.d.ts: TS 1
117117
/user/username/projects/myproject/module1.d.ts: TS 1

tests/baselines/reference/tsserver/documentRegistry/Caches-the-source-file-if-script-info-is-orphan.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ Info seq [hh:mm:ss:mss] Open files:
6969
Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/index.ts ProjectRootPath: undefined
7070
Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json
7171
DocumentRegistry::
72-
Key:: undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined
72+
Key:: undefined|undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined
7373
/user/username/projects/myproject/index.ts: TS 1
7474
/user/username/projects/myproject/module1.d.ts: TS 1
7575
/a/lib/lib.d.ts: TS 1
@@ -88,7 +88,7 @@ Info seq [hh:mm:ss:mss] Files (2)
8888

8989
Info seq [hh:mm:ss:mss] -----------------------------------------------
9090
DocumentRegistry::
91-
Key:: undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined
91+
Key:: undefined|undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined
9292
/user/username/projects/myproject/index.ts: TS 1
9393
/a/lib/lib.d.ts: TS 1
9494
Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json
@@ -109,7 +109,7 @@ Info seq [hh:mm:ss:mss] Files (3)
109109

110110
Info seq [hh:mm:ss:mss] -----------------------------------------------
111111
DocumentRegistry::
112-
Key:: undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined
112+
Key:: undefined|undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined
113113
/user/username/projects/myproject/index.ts: TS 1
114114
/a/lib/lib.d.ts: TS 1
115115
/user/username/projects/myproject/module1.d.ts: TS 1
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
// @Filename: /tsconfig.json
2+
{
3+
"compilerOptions": {
4+
"module": "nodenext",
5+
"target": "esnext",
6+
"emitDeclarationOnly": true,
7+
"declaration": true,
8+
"declarationDir": "./types",
9+
"checkJs": true,
10+
"rootDir": ".",
11+
"strict": true,
12+
},
13+
"include": ["src", "test"]
14+
}
15+
16+
// @Filename: /package.json
17+
{
18+
"name": "js-self-name-import",
19+
"type": "module",
20+
"exports": {
21+
"./*": {
22+
"types": "./types/src/*",
23+
"default": "./src/*"
24+
}
25+
}
26+
}
27+
28+
// @Filename: /types/src/foo.d.ts
29+
export const foo: 1;
30+
31+
// @Filename: /types/test/foo.d.ts
32+
export {};
33+
34+
// @Filename: /src/foo.js
35+
export const foo = 1;
36+
37+
// @Filename: /test/foo.js
38+
import { foo } from "js-self-name-import/foo.js";

0 commit comments

Comments
 (0)