Skip to content

Commit 1d850c0

Browse files
TypeScript Botsheetalkamat
TypeScript Bot
andauthored
Cherry-pick PR #44008 into release-4.3 (#44029)
Component commits: 8da9ed0 Test without change 5c1ae7a Update showing fix in #44004 works Co-authored-by: Sheetal Nandi <[email protected]>
1 parent d805ce8 commit 1d850c0

File tree

2 files changed

+193
-0
lines changed

2 files changed

+193
-0
lines changed

src/testRunner/unittests/tsbuild/moduleResolution.ts

+20
Original file line numberDiff line numberDiff line change
@@ -65,5 +65,25 @@ namespace ts.tscWatch {
6565
commandLineArgs: ["-b", "packages/pkg1", "--verbose", "--traceResolution"],
6666
changes: emptyArray
6767
});
68+
69+
verifyTsc({
70+
scenario: "moduleResolution",
71+
subScenario: `type reference resolution uses correct options for different resolution options referenced project`,
72+
fs: () => loadProjectFromFiles({
73+
"/src/packages/pkg1_index.ts": `export const theNum: TheNum = "type1";`,
74+
"/src/packages/pkg1.tsconfig.json": JSON.stringify({
75+
compilerOptions: { composite: true, typeRoots: ["./typeroot1"] },
76+
files: ["./pkg1_index.ts"]
77+
}),
78+
"/src/packages/typeroot1/sometype/index.d.ts": Utils.dedent`declare type TheNum = "type1";`,
79+
"/src/packages/pkg2_index.ts": `export const theNum: TheNum2 = "type2";`,
80+
"/src/packages/pkg2.tsconfig.json": JSON.stringify({
81+
compilerOptions: { composite: true, typeRoots: ["./typeroot2"] },
82+
files: ["./pkg2_index.ts"]
83+
}),
84+
"/src/packages/typeroot2/sometype/index.d.ts": Utils.dedent`declare type TheNum2 = "type2";`,
85+
}),
86+
commandLineArgs: ["-b", "/src/packages/pkg1.tsconfig.json", "/src/packages/pkg2.tsconfig.json", "--verbose", "--traceResolution"],
87+
});
6888
});
6989
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
1+
Input::
2+
//// [/lib/lib.d.ts]
3+
/// <reference no-default-lib="true"/>
4+
interface Boolean {}
5+
interface Function {}
6+
interface CallableFunction {}
7+
interface NewableFunction {}
8+
interface IArguments {}
9+
interface Number { toExponential: any; }
10+
interface Object {}
11+
interface RegExp {}
12+
interface String { charAt: any; }
13+
interface Array<T> { length: number; [n: number]: T; }
14+
interface ReadonlyArray<T> {}
15+
declare const console: { log(msg: any): void; };
16+
17+
//// [/src/packages/pkg1.tsconfig.json]
18+
{"compilerOptions":{"composite":true,"typeRoots":["./typeroot1"]},"files":["./pkg1_index.ts"]}
19+
20+
//// [/src/packages/pkg1_index.ts]
21+
export const theNum: TheNum = "type1";
22+
23+
//// [/src/packages/pkg2.tsconfig.json]
24+
{"compilerOptions":{"composite":true,"typeRoots":["./typeroot2"]},"files":["./pkg2_index.ts"]}
25+
26+
//// [/src/packages/pkg2_index.ts]
27+
export const theNum: TheNum2 = "type2";
28+
29+
//// [/src/packages/typeroot1/sometype/index.d.ts]
30+
declare type TheNum = "type1";
31+
32+
//// [/src/packages/typeroot2/sometype/index.d.ts]
33+
declare type TheNum2 = "type2";
34+
35+
36+
37+
Output::
38+
/lib/tsc -b /src/packages/pkg1.tsconfig.json /src/packages/pkg2.tsconfig.json --verbose --traceResolution
39+
[12:00:00 AM] Projects in this build:
40+
* src/packages/pkg1.tsconfig.json
41+
* src/packages/pkg2.tsconfig.json
42+
43+
[12:00:00 AM] Project 'src/packages/pkg1.tsconfig.json' is out of date because output file 'src/packages/pkg1_index.js' does not exist
44+
45+
[12:00:00 AM] Building project '/src/packages/pkg1.tsconfig.json'...
46+
47+
======== Resolving type reference directive 'sometype', containing file '/src/packages/__inferred type names__.ts', root directory '/src/packages/typeroot1'. ========
48+
Resolving with primary search path '/src/packages/typeroot1'.
49+
File '/src/packages/typeroot1/sometype/package.json' does not exist.
50+
File '/src/packages/typeroot1/sometype/index.d.ts' exist - use it as a name resolution result.
51+
Resolving real path for '/src/packages/typeroot1/sometype/index.d.ts', result '/src/packages/typeroot1/sometype/index.d.ts'.
52+
======== Type reference directive 'sometype' was successfully resolved to '/src/packages/typeroot1/sometype/index.d.ts', primary: true. ========
53+
[12:00:00 AM] Project 'src/packages/pkg2.tsconfig.json' is out of date because output file 'src/packages/pkg2_index.js' does not exist
54+
55+
[12:00:00 AM] Building project '/src/packages/pkg2.tsconfig.json'...
56+
57+
======== Resolving type reference directive 'sometype', containing file '/src/packages/__inferred type names__.ts', root directory '/src/packages/typeroot2'. ========
58+
Resolving with primary search path '/src/packages/typeroot2'.
59+
File '/src/packages/typeroot2/sometype/package.json' does not exist.
60+
File '/src/packages/typeroot2/sometype/index.d.ts' exist - use it as a name resolution result.
61+
Resolving real path for '/src/packages/typeroot2/sometype/index.d.ts', result '/src/packages/typeroot2/sometype/index.d.ts'.
62+
======== Type reference directive 'sometype' was successfully resolved to '/src/packages/typeroot2/sometype/index.d.ts', primary: true. ========
63+
exitCode:: ExitStatus.Success
64+
65+
66+
//// [/src/packages/pkg1.tsconfig.tsbuildinfo]
67+
{"program":{"fileNames":["../../lib/lib.d.ts","./pkg1_index.ts","./typeroot1/sometype/index.d.ts"],"fileInfos":[{"version":"3858781397-/// <reference no-default-lib=\"true\"/>\ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array<T> { length: number; [n: number]: T; }\ninterface ReadonlyArray<T> {}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true},"-9601687719-export const theNum: TheNum = \"type1\";",{"version":"-4557394441-declare type TheNum = \"type1\";","affectsGlobalScope":true}],"options":{"composite":true},"referencedMap":[],"exportedModulesMap":[],"semanticDiagnosticsPerFile":[1,2,3]},"version":"FakeTSVersion"}
68+
69+
//// [/src/packages/pkg1.tsconfig.tsbuildinfo.readable.baseline.txt]
70+
{
71+
"program": {
72+
"fileNames": [
73+
"../../lib/lib.d.ts",
74+
"./pkg1_index.ts",
75+
"./typeroot1/sometype/index.d.ts"
76+
],
77+
"fileInfos": {
78+
"../../lib/lib.d.ts": {
79+
"version": "3858781397-/// <reference no-default-lib=\"true\"/>\ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array<T> { length: number; [n: number]: T; }\ninterface ReadonlyArray<T> {}\ndeclare const console: { log(msg: any): void; };",
80+
"signature": "3858781397-/// <reference no-default-lib=\"true\"/>\ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array<T> { length: number; [n: number]: T; }\ninterface ReadonlyArray<T> {}\ndeclare const console: { log(msg: any): void; };",
81+
"affectsGlobalScope": true
82+
},
83+
"./pkg1_index.ts": {
84+
"version": "-9601687719-export const theNum: TheNum = \"type1\";",
85+
"signature": "-9601687719-export const theNum: TheNum = \"type1\";"
86+
},
87+
"./typeroot1/sometype/index.d.ts": {
88+
"version": "-4557394441-declare type TheNum = \"type1\";",
89+
"signature": "-4557394441-declare type TheNum = \"type1\";",
90+
"affectsGlobalScope": true
91+
}
92+
},
93+
"options": {
94+
"composite": true
95+
},
96+
"referencedMap": {},
97+
"exportedModulesMap": {},
98+
"semanticDiagnosticsPerFile": [
99+
"../../lib/lib.d.ts",
100+
"./pkg1_index.ts",
101+
"./typeroot1/sometype/index.d.ts"
102+
]
103+
},
104+
"version": "FakeTSVersion",
105+
"size": 868
106+
}
107+
108+
//// [/src/packages/pkg1_index.d.ts]
109+
/// <reference types="sometype" />
110+
export declare const theNum: TheNum;
111+
112+
113+
//// [/src/packages/pkg1_index.js]
114+
"use strict";
115+
exports.__esModule = true;
116+
exports.theNum = void 0;
117+
exports.theNum = "type1";
118+
119+
120+
//// [/src/packages/pkg2.tsconfig.tsbuildinfo]
121+
{"program":{"fileNames":["../../lib/lib.d.ts","./pkg2_index.ts","./typeroot2/sometype/index.d.ts"],"fileInfos":[{"version":"3858781397-/// <reference no-default-lib=\"true\"/>\ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array<T> { length: number; [n: number]: T; }\ninterface ReadonlyArray<T> {}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true},"-12823281204-export const theNum: TheNum2 = \"type2\";",{"version":"-980425686-declare type TheNum2 = \"type2\";","affectsGlobalScope":true}],"options":{"composite":true},"referencedMap":[],"exportedModulesMap":[],"semanticDiagnosticsPerFile":[1,2,3]},"version":"FakeTSVersion"}
122+
123+
//// [/src/packages/pkg2.tsconfig.tsbuildinfo.readable.baseline.txt]
124+
{
125+
"program": {
126+
"fileNames": [
127+
"../../lib/lib.d.ts",
128+
"./pkg2_index.ts",
129+
"./typeroot2/sometype/index.d.ts"
130+
],
131+
"fileInfos": {
132+
"../../lib/lib.d.ts": {
133+
"version": "3858781397-/// <reference no-default-lib=\"true\"/>\ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array<T> { length: number; [n: number]: T; }\ninterface ReadonlyArray<T> {}\ndeclare const console: { log(msg: any): void; };",
134+
"signature": "3858781397-/// <reference no-default-lib=\"true\"/>\ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array<T> { length: number; [n: number]: T; }\ninterface ReadonlyArray<T> {}\ndeclare const console: { log(msg: any): void; };",
135+
"affectsGlobalScope": true
136+
},
137+
"./pkg2_index.ts": {
138+
"version": "-12823281204-export const theNum: TheNum2 = \"type2\";",
139+
"signature": "-12823281204-export const theNum: TheNum2 = \"type2\";"
140+
},
141+
"./typeroot2/sometype/index.d.ts": {
142+
"version": "-980425686-declare type TheNum2 = \"type2\";",
143+
"signature": "-980425686-declare type TheNum2 = \"type2\";",
144+
"affectsGlobalScope": true
145+
}
146+
},
147+
"options": {
148+
"composite": true
149+
},
150+
"referencedMap": {},
151+
"exportedModulesMap": {},
152+
"semanticDiagnosticsPerFile": [
153+
"../../lib/lib.d.ts",
154+
"./pkg2_index.ts",
155+
"./typeroot2/sometype/index.d.ts"
156+
]
157+
},
158+
"version": "FakeTSVersion",
159+
"size": 870
160+
}
161+
162+
//// [/src/packages/pkg2_index.d.ts]
163+
/// <reference types="sometype" />
164+
export declare const theNum: TheNum2;
165+
166+
167+
//// [/src/packages/pkg2_index.js]
168+
"use strict";
169+
exports.__esModule = true;
170+
exports.theNum = void 0;
171+
exports.theNum = "type2";
172+
173+

0 commit comments

Comments
 (0)