Skip to content

Commit 9933c8a

Browse files
authored
Build info baseline improvements (microsoft#43200)
* Use ids as 1 based so we can specialize `0` to be some special meaning * Baseline tsbuildinfo size in the readable baseline * Baseline fileName and fileNames list as well in readable tsbuildinfo so that new additions are easy to recognize
1 parent 2643e65 commit 9933c8a

File tree

235 files changed

+5005
-934
lines changed

Some content is hidden

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

235 files changed

+5005
-934
lines changed

src/compiler/builder.ts

+16-12
Original file line numberDiff line numberDiff line change
@@ -733,7 +733,7 @@ namespace ts {
733733
const fileInfos = arrayFrom(state.fileInfos.entries(), ([key, value]) => {
734734
// Ensure fileId
735735
const fileId = toFileId(key);
736-
Debug.assert(fileNames[fileId] === relativeToBuildInfo(key));
736+
Debug.assert(fileNames[fileId - 1] === relativeToBuildInfo(key));
737737
const signature = state.currentAffectedFilesSignatures && state.currentAffectedFilesSignatures.get(key);
738738
return signature === undefined ? value : { version: value.version, signature, affectsGlobalScope: value.affectsGlobalScope };
739739
});
@@ -804,19 +804,23 @@ namespace ts {
804804
}
805805

806806
function toFileId(path: Path): number {
807-
const existing = fileNameToFileId.get(path);
808-
if (existing !== undefined) return existing;
809-
fileNameToFileId.set(path, fileNames.length);
810-
return fileNames.push(relativeToBuildInfo(path)) - 1;
807+
let fileId = fileNameToFileId.get(path);
808+
if (fileId === undefined) {
809+
fileNames.push(relativeToBuildInfo(path));
810+
fileNameToFileId.set(path, fileId = fileNames.length);
811+
}
812+
return fileId;
811813
}
812814

813815
function toFileIdListId(set: ReadonlySet<Path>): number {
814816
const fileIds = arrayFrom(set.keys(), toFileId).sort(compareValues);
815817
const key = fileIds.join();
816-
const existing = fileNamesToFileIdListId?.get(key);
817-
if (existing !== undefined) return existing;
818-
(fileNamesToFileIdListId ||= new Map()).set(key, fileIdsList?.length || 0);
819-
return (fileIdsList ||= []).push(fileIds) - 1;
818+
let fileIdListId = fileNamesToFileIdListId?.get(key);
819+
if (fileIdListId === undefined) {
820+
(fileIdsList ||= []).push(fileIds);
821+
(fileNamesToFileIdListId ||= new Map()).set(key, fileIdListId = fileIdsList.length);
822+
}
823+
return fileIdListId;
820824
}
821825
}
822826

@@ -1216,7 +1220,7 @@ namespace ts {
12161220
const filePaths = program.fileNames.map(toPath);
12171221
const filePathsSetList = program.fileIdsList?.map(fileIds => new Set(fileIds.map(toFilePath)));
12181222
const fileInfos = new Map<Path, BuilderState.FileInfo>();
1219-
program.fileInfos.forEach((fileInfo, fileId) => fileInfos.set(toFilePath(fileId), fileInfo));
1223+
program.fileInfos.forEach((fileInfo, index) => fileInfos.set(toFilePath(index + 1), fileInfo));
12201224
const state: ReusableBuilderProgramState = {
12211225
fileInfos,
12221226
compilerOptions: convertToOptionsWithAbsolutePaths(program.options, toAbsolutePath),
@@ -1262,11 +1266,11 @@ namespace ts {
12621266
}
12631267

12641268
function toFilePath(fileId: number) {
1265-
return filePaths[fileId];
1269+
return filePaths[fileId - 1];
12661270
}
12671271

12681272
function toFilePathsSet(fileIdsListId: number) {
1269-
return filePathsSetList![fileIdsListId];
1273+
return filePathsSetList![fileIdsListId - 1];
12701274
}
12711275

12721276
function toMapOfReferencedSet(referenceMap: ProgramBuildInfoReferencedMap | undefined): ReadonlyESMap<Path, BuilderState.ReferencedSet> | undefined {

src/testRunner/unittests/tsbuild/helpers.ts

+11-7
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,8 @@ interface Symbol {
240240
type ProgramBuildInfoDiagnostic = string | [string, readonly ReusableDiagnostic[]];
241241
type ProgramBuilderInfoFilePendingEmit = [string, BuilderFileEmit];
242242
interface ProgramBuildInfo {
243+
fileNames: readonly string[];
244+
fileNamesList: readonly (readonly string[])[] | undefined;
243245
fileInfos: MapLike<BuilderState.FileInfo>;
244246
options: CompilerOptions;
245247
referencedMap?: MapLike<string[]>;
@@ -248,11 +250,11 @@ interface Symbol {
248250
affectedFilesPendingEmit?: ProgramBuilderInfoFilePendingEmit[];
249251
}
250252
const fileInfos: ProgramBuildInfo["fileInfos"] = {};
251-
buildInfo.program?.fileInfos.forEach((fileInfo, fileId) => {
252-
fileInfos[toFileName(fileId)] = fileInfo;
253-
});
253+
buildInfo.program?.fileInfos.forEach((fileInfo, index) => fileInfos[toFileName(index + 1)] = fileInfo);
254254
const fileNamesList = buildInfo.program?.fileIdsList?.map(fileIdsListId => fileIdsListId.map(toFileName));
255255
const program: ProgramBuildInfo | undefined = buildInfo.program && {
256+
fileNames: buildInfo.program.fileNames,
257+
fileNamesList,
256258
fileInfos,
257259
options: buildInfo.program.options,
258260
referencedMap: toMapOfReferencedSet(buildInfo.program.referencedMap),
@@ -267,20 +269,22 @@ interface Symbol {
267269
emitKind
268270
]),
269271
};
270-
const result: Omit<BuildInfo, "program"> & { program: ProgramBuildInfo | undefined; } = {
272+
const version = buildInfo.version === ts.version ? fakes.version : buildInfo.version;
273+
const result: Omit<BuildInfo, "program"> & { program: ProgramBuildInfo | undefined; size: number; } = {
271274
bundle: buildInfo.bundle,
272275
program,
273-
version: buildInfo.version === version ? fakes.version : buildInfo.version,
276+
version,
277+
size: getBuildInfoText({ ...buildInfo, version }).length,
274278
};
275279
// For now its just JSON.stringify
276280
originalWriteFile.call(sys, `${buildInfoPath}.readable.baseline.txt`, JSON.stringify(result, /*replacer*/ undefined, 2));
277281

278282
function toFileName(fileId: number) {
279-
return buildInfo.program!.fileNames[fileId];
283+
return buildInfo.program!.fileNames[fileId - 1];
280284
}
281285

282286
function toFileNames(fileIdsListId: number) {
283-
return fileNamesList![fileIdsListId];
287+
return fileNamesList![fileIdsListId - 1];
284288
}
285289

286290
function toMapOfReferencedSet(referenceMap: ProgramBuildInfoReferencedMap | undefined): MapLike<string[]> | undefined {

tests/baselines/reference/tsbuild/amdModulesWithOut/incremental-declaration-doesnt-change/modules-and-globals-mixed-in-amd.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,8 @@ declare const myVar = 30;
363363
]
364364
}
365365
},
366-
"version": "FakeTSVersion"
366+
"version": "FakeTSVersion",
367+
"size": 438
367368
}
368369

369370
//// [/src/lib/module.d.ts] file written with same contents
@@ -603,6 +604,7 @@ declare const globalConst = 10;
603604
]
604605
}
605606
},
606-
"version": "FakeTSVersion"
607+
"version": "FakeTSVersion",
608+
"size": 245
607609
}
608610

tests/baselines/reference/tsbuild/amdModulesWithOut/incremental-declaration-doesnt-change/multiple-emitHelpers-in-all-projects.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -975,7 +975,8 @@ declare const appfile4_ar: number[];
975975
]
976976
}
977977
},
978-
"version": "FakeTSVersion"
978+
"version": "FakeTSVersion",
979+
"size": 743
979980
}
980981

981982
//// [/src/lib/module.d.ts] file written with same contents
@@ -1583,6 +1584,7 @@ declare const globalConst = 10;
15831584
]
15841585
}
15851586
},
1586-
"version": "FakeTSVersion"
1587+
"version": "FakeTSVersion",
1588+
"size": 544
15871589
}
15881590

tests/baselines/reference/tsbuild/amdModulesWithOut/incremental-declaration-doesnt-change/multiple-prologues-in-all-projects.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -513,7 +513,8 @@ declare const myVar = 30;
513513
]
514514
}
515515
},
516-
"version": "FakeTSVersion"
516+
"version": "FakeTSVersion",
517+
"size": 896
517518
}
518519

519520
//// [/src/lib/module.d.ts] file written with same contents
@@ -876,6 +877,7 @@ declare const globalConst = 10;
876877
]
877878
}
878879
},
879-
"version": "FakeTSVersion"
880+
"version": "FakeTSVersion",
881+
"size": 763
880882
}
881883

tests/baselines/reference/tsbuild/amdModulesWithOut/incremental-declaration-doesnt-change/shebang-in-all-projects.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,8 @@ declare const myVar = 30;
369369
]
370370
}
371371
},
372-
"version": "FakeTSVersion"
372+
"version": "FakeTSVersion",
373+
"size": 442
373374
}
374375

375376
//// [/src/lib/module.d.ts] file written with same contents
@@ -613,6 +614,7 @@ declare const globalConst = 10;
613614
]
614615
}
615616
},
616-
"version": "FakeTSVersion"
617+
"version": "FakeTSVersion",
618+
"size": 247
617619
}
618620

tests/baselines/reference/tsbuild/amdModulesWithOut/incremental-declaration-doesnt-change/stripInternal.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -1924,7 +1924,8 @@ declare const myVar = 30;
19241924
]
19251925
}
19261926
},
1927-
"version": "FakeTSVersion"
1927+
"version": "FakeTSVersion",
1928+
"size": 442
19281929
}
19291930

19301931
//// [/src/lib/module.d.ts] file written with same contents
@@ -3796,6 +3797,7 @@ declare const globalConst = 10;
37963797
]
37973798
}
37983799
},
3799-
"version": "FakeTSVersion"
3800+
"version": "FakeTSVersion",
3801+
"size": 515
38003802
}
38013803

tests/baselines/reference/tsbuild/amdModulesWithOut/incremental-declaration-doesnt-change/triple-slash-refs-in-all-projects.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -463,7 +463,8 @@ declare const myVar = 30;
463463
]
464464
}
465465
},
466-
"version": "FakeTSVersion"
466+
"version": "FakeTSVersion",
467+
"size": 572
467468
}
468469

469470
//// [/src/lib/module.d.ts] file written with same contents
@@ -753,6 +754,7 @@ declare const globalConst = 10;
753754
]
754755
}
755756
},
756-
"version": "FakeTSVersion"
757+
"version": "FakeTSVersion",
758+
"size": 308
757759
}
758760

tests/baselines/reference/tsbuild/amdModulesWithOut/incremental-headers-change-without-dts-changes/multiple-emitHelpers-in-all-projects.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -858,7 +858,8 @@ declare const appfile4_ar: number[];
858858
]
859859
}
860860
},
861-
"version": "FakeTSVersion"
861+
"version": "FakeTSVersion",
862+
"size": 743
862863
}
863864

864865
//// [/src/lib/module.d.ts] file written with same contents
@@ -1309,6 +1310,7 @@ declare const globalConst = 10;
13091310
]
13101311
}
13111312
},
1312-
"version": "FakeTSVersion"
1313+
"version": "FakeTSVersion",
1314+
"size": 456
13131315
}
13141316

tests/baselines/reference/tsbuild/amdModulesWithOut/incremental-headers-change-without-dts-changes/multiple-prologues-in-all-projects.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -678,7 +678,8 @@ declare const myVar = 30;
678678
]
679679
}
680680
},
681-
"version": "FakeTSVersion"
681+
"version": "FakeTSVersion",
682+
"size": 896
682683
}
683684

684685
//// [/src/lib/module.d.ts] file written with same contents
@@ -1148,6 +1149,7 @@ declare const globalConst = 10;
11481149
]
11491150
}
11501151
},
1151-
"version": "FakeTSVersion"
1152+
"version": "FakeTSVersion",
1153+
"size": 763
11521154
}
11531155

tests/baselines/reference/tsbuild/amdModulesWithOut/incremental-headers-change-without-dts-changes/stripInternal.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -2100,7 +2100,8 @@ declare const myVar = 30;
21002100
]
21012101
}
21022102
},
2103-
"version": "FakeTSVersion"
2103+
"version": "FakeTSVersion",
2104+
"size": 442
21042105
}
21052106

21062107
//// [/src/lib/module.d.ts] file written with same contents
@@ -4702,6 +4703,7 @@ declare const globalConst = 10;
47024703
]
47034704
}
47044705
},
4705-
"version": "FakeTSVersion"
4706+
"version": "FakeTSVersion",
4707+
"size": 587
47064708
}
47074709

tests/baselines/reference/tsbuild/amdModulesWithOut/initial-build/modules-and-globals-mixed-in-amd.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -582,7 +582,8 @@ declare const myVar = 30;
582582
]
583583
}
584584
},
585-
"version": "FakeTSVersion"
585+
"version": "FakeTSVersion",
586+
"size": 438
586587
}
587588

588589
//// [/src/lib/module.d.ts]
@@ -920,6 +921,7 @@ declare const globalConst = 10;
920921
]
921922
}
922923
},
923-
"version": "FakeTSVersion"
924+
"version": "FakeTSVersion",
925+
"size": 245
924926
}
925927

tests/baselines/reference/tsbuild/amdModulesWithOut/initial-build/multiple-emitHelpers-in-all-projects.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -1311,7 +1311,8 @@ declare const appfile4_ar: number[];
13111311
]
13121312
}
13131313
},
1314-
"version": "FakeTSVersion"
1314+
"version": "FakeTSVersion",
1315+
"size": 743
13151316
}
13161317

13171318
//// [/src/lib/module.d.ts]
@@ -2071,6 +2072,7 @@ declare const globalConst = 10;
20712072
]
20722073
}
20732074
},
2074-
"version": "FakeTSVersion"
2075+
"version": "FakeTSVersion",
2076+
"size": 544
20752077
}
20762078

tests/baselines/reference/tsbuild/amdModulesWithOut/initial-build/multiple-prologues-in-all-projects.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -742,7 +742,8 @@ declare const myVar = 30;
742742
]
743743
}
744744
},
745-
"version": "FakeTSVersion"
745+
"version": "FakeTSVersion",
746+
"size": 896
746747
}
747748

748749
//// [/src/lib/module.d.ts]
@@ -1206,6 +1207,7 @@ declare const globalConst = 10;
12061207
]
12071208
}
12081209
},
1209-
"version": "FakeTSVersion"
1210+
"version": "FakeTSVersion",
1211+
"size": 763
12101212
}
12111213

tests/baselines/reference/tsbuild/amdModulesWithOut/initial-build/shebang-in-all-projects.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -595,7 +595,8 @@ declare const myVar = 30;
595595
]
596596
}
597597
},
598-
"version": "FakeTSVersion"
598+
"version": "FakeTSVersion",
599+
"size": 442
599600
}
600601

601602
//// [/src/lib/module.d.ts]
@@ -941,6 +942,7 @@ declare const globalConst = 10;
941942
]
942943
}
943944
},
944-
"version": "FakeTSVersion"
945+
"version": "FakeTSVersion",
946+
"size": 247
945947
}
946948

tests/baselines/reference/tsbuild/amdModulesWithOut/initial-build/stripInternal.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -2184,7 +2184,8 @@ declare const myVar = 30;
21842184
]
21852185
}
21862186
},
2187-
"version": "FakeTSVersion"
2187+
"version": "FakeTSVersion",
2188+
"size": 442
21882189
}
21892190

21902191
//// [/src/lib/module.d.ts]
@@ -4822,6 +4823,7 @@ declare const globalConst = 10;
48224823
]
48234824
}
48244825
},
4825-
"version": "FakeTSVersion"
4826+
"version": "FakeTSVersion",
4827+
"size": 515
48264828
}
48274829

tests/baselines/reference/tsbuild/amdModulesWithOut/initial-build/triple-slash-refs-in-all-projects.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -742,7 +742,8 @@ declare const myVar = 30;
742742
]
743743
}
744744
},
745-
"version": "FakeTSVersion"
745+
"version": "FakeTSVersion",
746+
"size": 572
746747
}
747748

748749
//// [/src/lib/module.d.ts]
@@ -1155,6 +1156,7 @@ declare const globalConst = 10;
11551156
]
11561157
}
11571158
},
1158-
"version": "FakeTSVersion"
1159+
"version": "FakeTSVersion",
1160+
"size": 308
11591161
}
11601162

0 commit comments

Comments
 (0)