Skip to content

Commit bc4186c

Browse files
committed
Update the programBuildInfo to be platform and change independent so we can baseline it safely
1 parent 7d464b8 commit bc4186c

7 files changed

Lines changed: 239 additions & 177 deletions

File tree

src/compiler/emitter.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,8 @@ namespace ts {
446446
}
447447
}
448448

449-
function getBuildInfoText(buildInfo: BuildInfo) {
449+
/*@internal*/
450+
export function getBuildInfoText(buildInfo: BuildInfo) {
450451
return JSON.stringify(buildInfo, undefined, 2);
451452
}
452453

src/harness/fakes.ts

Lines changed: 62 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -385,7 +385,68 @@ namespace fakes {
385385
}
386386

387387
export class SolutionBuilderHost extends CompilerHost implements ts.SolutionBuilderHost<ts.BuilderProgram> {
388-
createProgram = ts.createEmitAndSemanticDiagnosticsBuilderProgram;
388+
createProgram(rootNames: ReadonlyArray<string> | undefined, options: ts.CompilerOptions | undefined, host?: CompilerHost, oldProgram?: ts.EmitAndSemanticDiagnosticsBuilderProgram, configFileParsingDiagnostics?: ReadonlyArray<ts.Diagnostic>, projectReferences?: ReadonlyArray<ts.ProjectReference> | undefined) {
389+
const program = ts.createEmitAndSemanticDiagnosticsBuilderProgram(rootNames, options, host, oldProgram, configFileParsingDiagnostics, projectReferences);
390+
const originalGetProgramBuildInfo = program.getProgramBuildInfo.bind(program);
391+
program.getProgramBuildInfo = () => {
392+
const program = originalGetProgramBuildInfo() as ts.ProgramBuildInfo | undefined;
393+
if (!program) return program;
394+
// Fix lib signatures
395+
for (const path of ts.getOwnKeys(program.fileInfos)) {
396+
if (ts.startsWith(path, "/lib/")) {
397+
const currentValue = program.fileInfos[path];
398+
ts.Debug.assert(currentValue.signature === currentValue.version);
399+
program.fileInfos[path] = { version: path, signature: path };
400+
}
401+
}
402+
403+
// reference Map
404+
if (program.referencedMap) {
405+
const referencedMap: ts.MapLike<string[]> = {};
406+
for (const path of ts.getOwnKeys(program.referencedMap).sort()) {
407+
referencedMap[path] = program.referencedMap[path].sort();
408+
}
409+
program.referencedMap = referencedMap;
410+
}
411+
412+
// exportedModulesMap
413+
if (program.exportedModulesMap) {
414+
const exportedModulesMap: ts.MapLike<string[]> = {};
415+
for (const path of ts.getOwnKeys(program.exportedModulesMap).sort()) {
416+
exportedModulesMap[path] = program.exportedModulesMap[path].sort();
417+
}
418+
program.exportedModulesMap = exportedModulesMap;
419+
}
420+
421+
// semanticDiagnosticsPerFile
422+
if (program.semanticDiagnosticsPerFile) {
423+
program.semanticDiagnosticsPerFile.sort();
424+
}
425+
426+
return program;
427+
};
428+
return program;
429+
}
430+
431+
readFile(path: string) {
432+
const value = super.readFile(path);
433+
if (!value || !ts.isBuildInfoFile(path)) return value;
434+
const buildInfo = JSON.parse(value) as ts.BuildInfo;
435+
if (!buildInfo.program) return value;
436+
// Fix lib signatures
437+
for (const path of ts.getOwnKeys(buildInfo.program.fileInfos)) {
438+
if (ts.startsWith(path, "/lib/")) {
439+
const currentValue = buildInfo.program.fileInfos[path];
440+
ts.Debug.assert(currentValue.signature === path);
441+
ts.Debug.assert(currentValue.signature === currentValue.version);
442+
const text = super.readFile(path)!;
443+
const signature = ts.generateDjb2Hash(text);
444+
buildInfo.program.fileInfos[path] = { version: signature, signature };
445+
}
446+
}
447+
return ts.getBuildInfoText(buildInfo);
448+
}
449+
389450
now() {
390451
return new Date(this.sys.vfs.time());
391452
}

tests/baselines/reference/tsbuild/sample1/incremental-declaration-changes/buildInfo/sample.js

Lines changed: 43 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,24 @@
33
"program": {
44
"fileInfos": {
55
"/lib/lib.d.ts": {
6-
"version": "38840781448",
7-
"signature": "38840781448"
6+
"version": "/lib/lib.d.ts",
7+
"signature": "/lib/lib.d.ts"
88
},
99
"/lib/lib.es5.d.ts": {
10-
"version": "-157947125741",
11-
"signature": "-157947125741"
10+
"version": "/lib/lib.es5.d.ts",
11+
"signature": "/lib/lib.es5.d.ts"
1212
},
1313
"/lib/lib.dom.d.ts": {
14-
"version": "-1086375748659",
15-
"signature": "-1086375748659"
14+
"version": "/lib/lib.dom.d.ts",
15+
"signature": "/lib/lib.dom.d.ts"
1616
},
1717
"/lib/lib.webworker.importscripts.d.ts": {
18-
"version": "16827914512",
19-
"signature": "16827914512"
18+
"version": "/lib/lib.webworker.importscripts.d.ts",
19+
"signature": "/lib/lib.webworker.importscripts.d.ts"
2020
},
2121
"/lib/lib.scripthost.d.ts": {
22-
"version": "-7856822451",
23-
"signature": "-7856822451"
22+
"version": "/lib/lib.scripthost.d.ts",
23+
"signature": "/lib/lib.scripthost.d.ts"
2424
},
2525
"/src/core/anothermodule.ts": {
2626
"version": "-2676574883",
@@ -46,13 +46,13 @@
4646
"exportedModulesMap": {},
4747
"semanticDiagnosticsPerFile": [
4848
"/lib/lib.d.ts",
49-
"/lib/lib.es5.d.ts",
5049
"/lib/lib.dom.d.ts",
51-
"/lib/lib.webworker.importscripts.d.ts",
50+
"/lib/lib.es5.d.ts",
5251
"/lib/lib.scripthost.d.ts",
52+
"/lib/lib.webworker.importscripts.d.ts",
5353
"/src/core/anothermodule.ts",
54-
"/src/core/some_decl.d.ts",
55-
"/src/core/index.ts"
54+
"/src/core/index.ts",
55+
"/src/core/some_decl.d.ts"
5656
]
5757
}
5858
}
@@ -231,24 +231,24 @@ export class someClass { }
231231
"program": {
232232
"fileInfos": {
233233
"/lib/lib.d.ts": {
234-
"version": "38840781448",
235-
"signature": "38840781448"
234+
"version": "/lib/lib.d.ts",
235+
"signature": "/lib/lib.d.ts"
236236
},
237237
"/lib/lib.es5.d.ts": {
238-
"version": "-157947125741",
239-
"signature": "-157947125741"
238+
"version": "/lib/lib.es5.d.ts",
239+
"signature": "/lib/lib.es5.d.ts"
240240
},
241241
"/lib/lib.dom.d.ts": {
242-
"version": "-1086375748659",
243-
"signature": "-1086375748659"
242+
"version": "/lib/lib.dom.d.ts",
243+
"signature": "/lib/lib.dom.d.ts"
244244
},
245245
"/lib/lib.webworker.importscripts.d.ts": {
246-
"version": "16827914512",
247-
"signature": "16827914512"
246+
"version": "/lib/lib.webworker.importscripts.d.ts",
247+
"signature": "/lib/lib.webworker.importscripts.d.ts"
248248
},
249249
"/lib/lib.scripthost.d.ts": {
250-
"version": "-7856822451",
251-
"signature": "-7856822451"
250+
"version": "/lib/lib.scripthost.d.ts",
251+
"signature": "/lib/lib.scripthost.d.ts"
252252
},
253253
"/src/core/index.ts": {
254254
"version": "-2069755619",
@@ -273,8 +273,8 @@ export class someClass { }
273273
},
274274
"referencedMap": {
275275
"/src/logic/index.ts": [
276-
"/src/core/index.d.ts",
277-
"/src/core/anothermodule.d.ts"
276+
"/src/core/anothermodule.d.ts",
277+
"/src/core/index.d.ts"
278278
]
279279
},
280280
"exportedModulesMap": {
@@ -284,10 +284,10 @@ export class someClass { }
284284
},
285285
"semanticDiagnosticsPerFile": [
286286
"/lib/lib.d.ts",
287-
"/lib/lib.es5.d.ts",
288287
"/lib/lib.dom.d.ts",
289-
"/lib/lib.webworker.importscripts.d.ts",
288+
"/lib/lib.es5.d.ts",
290289
"/lib/lib.scripthost.d.ts",
290+
"/lib/lib.webworker.importscripts.d.ts",
291291
"/src/core/anothermodule.ts",
292292
"/src/core/index.ts",
293293
"/src/logic/index.ts"
@@ -300,24 +300,24 @@ export class someClass { }
300300
"program": {
301301
"fileInfos": {
302302
"/lib/lib.d.ts": {
303-
"version": "38840781448",
304-
"signature": "38840781448"
303+
"version": "/lib/lib.d.ts",
304+
"signature": "/lib/lib.d.ts"
305305
},
306306
"/lib/lib.es5.d.ts": {
307-
"version": "-157947125741",
308-
"signature": "-157947125741"
307+
"version": "/lib/lib.es5.d.ts",
308+
"signature": "/lib/lib.es5.d.ts"
309309
},
310310
"/lib/lib.dom.d.ts": {
311-
"version": "-1086375748659",
312-
"signature": "-1086375748659"
311+
"version": "/lib/lib.dom.d.ts",
312+
"signature": "/lib/lib.dom.d.ts"
313313
},
314314
"/lib/lib.webworker.importscripts.d.ts": {
315-
"version": "16827914512",
316-
"signature": "16827914512"
315+
"version": "/lib/lib.webworker.importscripts.d.ts",
316+
"signature": "/lib/lib.webworker.importscripts.d.ts"
317317
},
318318
"/lib/lib.scripthost.d.ts": {
319-
"version": "-7856822451",
320-
"signature": "-7856822451"
319+
"version": "/lib/lib.scripthost.d.ts",
320+
"signature": "/lib/lib.scripthost.d.ts"
321321
},
322322
"/src/core/index.ts": {
323323
"version": "-2069755619",
@@ -348,9 +348,9 @@ export class someClass { }
348348
"/src/core/anothermodule.d.ts"
349349
],
350350
"/src/tests/index.ts": [
351+
"/src/core/anothermodule.d.ts",
351352
"/src/core/index.d.ts",
352-
"/src/logic/index.d.ts",
353-
"/src/core/anothermodule.d.ts"
353+
"/src/logic/index.d.ts"
354354
]
355355
},
356356
"exportedModulesMap": {
@@ -363,13 +363,13 @@ export class someClass { }
363363
},
364364
"semanticDiagnosticsPerFile": [
365365
"/lib/lib.d.ts",
366-
"/lib/lib.es5.d.ts",
367366
"/lib/lib.dom.d.ts",
368-
"/lib/lib.webworker.importscripts.d.ts",
367+
"/lib/lib.es5.d.ts",
369368
"/lib/lib.scripthost.d.ts",
369+
"/lib/lib.webworker.importscripts.d.ts",
370370
"/src/core/anothermodule.ts",
371-
"/src/logic/index.ts",
372371
"/src/core/index.ts",
372+
"/src/logic/index.ts",
373373
"/src/tests/index.ts"
374374
]
375375
}

tests/baselines/reference/tsbuild/sample1/incremental-declaration-changes/buildInfo/when-logic-config-changes-declaration-dir.js

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,24 @@
33
"program": {
44
"fileInfos": {
55
"/lib/lib.d.ts": {
6-
"version": "38840781448",
7-
"signature": "38840781448"
6+
"version": "/lib/lib.d.ts",
7+
"signature": "/lib/lib.d.ts"
88
},
99
"/lib/lib.es5.d.ts": {
10-
"version": "-157947125741",
11-
"signature": "-157947125741"
10+
"version": "/lib/lib.es5.d.ts",
11+
"signature": "/lib/lib.es5.d.ts"
1212
},
1313
"/lib/lib.dom.d.ts": {
14-
"version": "-1086375748659",
15-
"signature": "-1086375748659"
14+
"version": "/lib/lib.dom.d.ts",
15+
"signature": "/lib/lib.dom.d.ts"
1616
},
1717
"/lib/lib.webworker.importscripts.d.ts": {
18-
"version": "16827914512",
19-
"signature": "16827914512"
18+
"version": "/lib/lib.webworker.importscripts.d.ts",
19+
"signature": "/lib/lib.webworker.importscripts.d.ts"
2020
},
2121
"/lib/lib.scripthost.d.ts": {
22-
"version": "-7856822451",
23-
"signature": "-7856822451"
22+
"version": "/lib/lib.scripthost.d.ts",
23+
"signature": "/lib/lib.scripthost.d.ts"
2424
},
2525
"/src/core/index.ts": {
2626
"version": "-13851440507",
@@ -46,8 +46,8 @@
4646
},
4747
"referencedMap": {
4848
"/src/logic/index.ts": [
49-
"/src/core/index.d.ts",
50-
"/src/core/anothermodule.d.ts"
49+
"/src/core/anothermodule.d.ts",
50+
"/src/core/index.d.ts"
5151
]
5252
},
5353
"exportedModulesMap": {
@@ -57,12 +57,12 @@
5757
},
5858
"semanticDiagnosticsPerFile": [
5959
"/lib/lib.d.ts",
60-
"/lib/lib.es5.d.ts",
6160
"/lib/lib.dom.d.ts",
62-
"/lib/lib.webworker.importscripts.d.ts",
61+
"/lib/lib.es5.d.ts",
6362
"/lib/lib.scripthost.d.ts",
64-
"/src/core/index.ts",
63+
"/lib/lib.webworker.importscripts.d.ts",
6564
"/src/core/anothermodule.ts",
65+
"/src/core/index.ts",
6666
"/src/logic/index.ts"
6767
]
6868
}
@@ -95,24 +95,24 @@ export declare const m: typeof mod;
9595
"program": {
9696
"fileInfos": {
9797
"/lib/lib.d.ts": {
98-
"version": "38840781448",
99-
"signature": "38840781448"
98+
"version": "/lib/lib.d.ts",
99+
"signature": "/lib/lib.d.ts"
100100
},
101101
"/lib/lib.es5.d.ts": {
102-
"version": "-157947125741",
103-
"signature": "-157947125741"
102+
"version": "/lib/lib.es5.d.ts",
103+
"signature": "/lib/lib.es5.d.ts"
104104
},
105105
"/lib/lib.dom.d.ts": {
106-
"version": "-1086375748659",
107-
"signature": "-1086375748659"
106+
"version": "/lib/lib.dom.d.ts",
107+
"signature": "/lib/lib.dom.d.ts"
108108
},
109109
"/lib/lib.webworker.importscripts.d.ts": {
110-
"version": "16827914512",
111-
"signature": "16827914512"
110+
"version": "/lib/lib.webworker.importscripts.d.ts",
111+
"signature": "/lib/lib.webworker.importscripts.d.ts"
112112
},
113113
"/lib/lib.scripthost.d.ts": {
114-
"version": "-7856822451",
115-
"signature": "-7856822451"
114+
"version": "/lib/lib.scripthost.d.ts",
115+
"signature": "/lib/lib.scripthost.d.ts"
116116
},
117117
"/src/core/index.ts": {
118118
"version": "-13851440507",
@@ -143,9 +143,9 @@ export declare const m: typeof mod;
143143
"/src/core/anothermodule.d.ts"
144144
],
145145
"/src/tests/index.ts": [
146+
"/src/core/anothermodule.d.ts",
146147
"/src/core/index.d.ts",
147-
"/src/logic/decls/index.d.ts",
148-
"/src/core/anothermodule.d.ts"
148+
"/src/logic/decls/index.d.ts"
149149
]
150150
},
151151
"exportedModulesMap": {
@@ -158,12 +158,12 @@ export declare const m: typeof mod;
158158
},
159159
"semanticDiagnosticsPerFile": [
160160
"/lib/lib.d.ts",
161-
"/lib/lib.es5.d.ts",
162161
"/lib/lib.dom.d.ts",
163-
"/lib/lib.webworker.importscripts.d.ts",
162+
"/lib/lib.es5.d.ts",
164163
"/lib/lib.scripthost.d.ts",
165-
"/src/core/index.ts",
164+
"/lib/lib.webworker.importscripts.d.ts",
166165
"/src/core/anothermodule.ts",
166+
"/src/core/index.ts",
167167
"/src/logic/index.ts",
168168
"/src/tests/index.ts"
169169
]

0 commit comments

Comments
 (0)