Skip to content

Commit e43d504

Browse files
committed
Baseline tsbuild info section files from written files
1 parent bfc4f7a commit e43d504

File tree

5 files changed

+63
-57
lines changed

5 files changed

+63
-57
lines changed

src/compiler/tsbuild.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,6 +308,7 @@ namespace ts {
308308
/*@internal*/ getUpToDateStatusOfProject(project: string): UpToDateStatus;
309309
/*@internal*/ invalidateProject(configFilePath: ResolvedConfigFilePath, reloadLevel?: ConfigFileProgramReloadLevel): void;
310310
/*@internal*/ buildNextInvalidatedProject(): void;
311+
/*@internal*/ getAllParsedConfigs(): readonly ParsedCommandLine[];
311312
}
312313

313314
/**
@@ -2047,6 +2048,10 @@ namespace ts {
20472048
},
20482049
invalidateProject: (configFilePath, reloadLevel) => invalidateProject(state, configFilePath, reloadLevel || ConfigFileProgramReloadLevel.None),
20492050
buildNextInvalidatedProject: () => buildNextInvalidatedProject(state),
2051+
getAllParsedConfigs: () => arrayFrom(mapDefinedIterator(
2052+
state.configFileCache.values(),
2053+
config => isParsedCommandLine(config) ? config : undefined
2054+
)),
20502055
};
20512056
}
20522057

src/testRunner/unittests/tsbuild/amdModulesWithOut.ts

Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,8 @@ namespace ts {
22
describe("unittests:: tsbuild:: outFile:: on amd modules with --out", () => {
33
let outFileFs: vfs.FileSystem;
44
const { time, tick } = getTime();
5-
const enum ext { js, jsmap, dts, dtsmap, buildinfo }
65
const enum project { lib, app }
7-
type OutputFile = [string, string, string, string, string];
86
function relName(path: string) { return path.slice(1); }
9-
const outputFiles: [OutputFile, OutputFile] = [
10-
[
11-
"/src/lib/module.js",
12-
"/src/lib/module.js.map",
13-
"/src/lib/module.d.ts",
14-
"/src/lib/module.d.ts.map",
15-
"/src/lib/module.tsbuildinfo"
16-
],
17-
[
18-
"/src/app/module.js",
19-
"/src/app/module.js.map",
20-
"/src/app/module.d.ts",
21-
"/src/app/module.d.ts.map",
22-
"/src/app/module.tsbuildinfo"
23-
]
24-
];
257
type Sources = [string, ReadonlyArray<string>];
268
const enum source { config, ts }
279
const sources: [Sources, Sources] = [
@@ -68,10 +50,6 @@ namespace ts {
6850
proj: "amdModulesWithOut",
6951
rootNames: ["/src/app"],
7052
baselineSourceMap: true,
71-
expectedBuildInfoFilesForSectionBaselines: [
72-
[outputFiles[project.lib][ext.buildinfo], outputFiles[project.lib][ext.js], outputFiles[project.lib][ext.dts]],
73-
[outputFiles[project.app][ext.buildinfo], outputFiles[project.app][ext.js], outputFiles[project.app][ext.dts]]
74-
],
7553
initialBuild: {
7654
modifyFs
7755
},
@@ -197,13 +175,6 @@ ${internal} export enum internalEnum { a, b, c }`);
197175
replaceText(fs, sources[project.app][source.ts][0], "file1", "lib/file1");
198176
}
199177

200-
const libOutputFile: OutputFile = [
201-
"/src/lib/module.js",
202-
"/src/lib/module.js.map",
203-
"/src/lib/module.d.ts",
204-
"/src/lib/module.d.ts.map",
205-
"/src/lib/module.tsbuildinfo"
206-
];
207178
verifyTsbuildOutput({
208179
scenario: "when the module resolution finds original source file",
209180
projFs: () => outFileFs,
@@ -212,10 +183,6 @@ ${internal} export enum internalEnum { a, b, c }`);
212183
proj: "amdModulesWithOut",
213184
rootNames: ["/src/app"],
214185
baselineSourceMap: true,
215-
expectedBuildInfoFilesForSectionBaselines: [
216-
[libOutputFile[ext.buildinfo], libOutputFile[ext.js], libOutputFile[ext.dts]],
217-
[outputFiles[project.app][ext.buildinfo], outputFiles[project.app][ext.js], outputFiles[project.app][ext.dts]]
218-
],
219186
initialBuild: {
220187
modifyFs,
221188
expectedDiagnostics: [

src/testRunner/unittests/tsbuild/helpers.ts

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -235,12 +235,12 @@ interface Symbol {
235235
fs: vfs.FileSystem;
236236
tick: () => void;
237237
rootNames: ReadonlyArray<string>;
238-
baselineSourceMap?: true;
239-
expectedBuildInfoFilesForSectionBaselines?: ReadonlyArray<BuildInfoSectionBaselineFiles>;
240238
modifyFs: (fs: vfs.FileSystem) => void;
239+
baselineSourceMap?: true;
240+
baselineBuildInfo?: true;
241241
}
242242

243-
function build({ fs, tick, rootNames, baselineSourceMap, expectedBuildInfoFilesForSectionBaselines, modifyFs }: BuildInput) {
243+
function build({ fs, tick, rootNames, modifyFs, baselineSourceMap, baselineBuildInfo }: BuildInput) {
244244
const actualReadFileMap = createMap<number>();
245245
modifyFs(fs);
246246
tick();
@@ -265,7 +265,21 @@ interface Symbol {
265265
};
266266
builder.build();
267267
if (baselineSourceMap) generateSourceMapBaselineFiles(fs, mapDefinedIterator(writtenFiles.keys(), f => f.endsWith(".map") ? f : undefined));
268-
generateBuildInfoSectionBaselineFiles(fs, expectedBuildInfoFilesForSectionBaselines || emptyArray);
268+
if (baselineBuildInfo) {
269+
let expectedBuildInfoFiles: BuildInfoSectionBaselineFiles[] | undefined;
270+
for (const { options } of builder.getAllParsedConfigs()) {
271+
const out = options.outFile || options.out;
272+
if (out) {
273+
const { jsFilePath, declarationFilePath, buildInfoPath } = getOutputPathsForBundle(options, /*forceDts*/ false);
274+
if (buildInfoPath && writtenFiles.has(buildInfoPath)) {
275+
(expectedBuildInfoFiles || (expectedBuildInfoFiles = [])).push(
276+
[buildInfoPath, jsFilePath, declarationFilePath]
277+
);
278+
}
279+
}
280+
}
281+
if (expectedBuildInfoFiles) generateBuildInfoSectionBaselineFiles(fs, expectedBuildInfoFiles);
282+
}
269283
fs.makeReadonly();
270284
return { fs, actualReadFileMap, host, builder, writtenFiles };
271285
}
@@ -311,7 +325,6 @@ Mismatch Actual(path, actual, expected): ${JSON.stringify(arrayFrom(mapDefinedIt
311325
tick: () => void;
312326
proj: string;
313327
rootNames: ReadonlyArray<string>;
314-
expectedBuildInfoFilesForSectionBaselines?: ReadonlyArray<BuildInfoSectionBaselineFiles>;
315328
initialBuild: BuildState;
316329
incrementalDtsChangedBuild?: BuildState;
317330
incrementalDtsUnchangedBuild?: BuildState;
@@ -322,8 +335,8 @@ Mismatch Actual(path, actual, expected): ${JSON.stringify(arrayFrom(mapDefinedIt
322335
}
323336

324337
export function verifyTsbuildOutput({
325-
scenario, projFs, time, tick, proj, rootNames, baselineOnly, verifyDiagnostics,
326-
baselineSourceMap, expectedBuildInfoFilesForSectionBaselines,
338+
scenario, projFs, time, tick, proj, rootNames,
339+
baselineOnly, verifyDiagnostics, baselineSourceMap,
327340
initialBuild, incrementalDtsChangedBuild, incrementalDtsUnchangedBuild, incrementalHeaderChangedBuild
328341
}: VerifyTsBuildInput) {
329342
describe(`tsc --b ${proj}:: ${scenario}`, () => {
@@ -337,9 +350,9 @@ Mismatch Actual(path, actual, expected): ${JSON.stringify(arrayFrom(mapDefinedIt
337350
fs: projFs().shadow(),
338351
tick,
339352
rootNames,
340-
baselineSourceMap,
341-
expectedBuildInfoFilesForSectionBaselines,
342353
modifyFs: initialBuild.modifyFs,
354+
baselineSourceMap,
355+
baselineBuildInfo: true,
343356
});
344357
({ fs, actualReadFileMap, host, writtenFiles: initialWrittenFiles } = result);
345358
firstBuildTime = time();
@@ -383,9 +396,9 @@ Mismatch Actual(path, actual, expected): ${JSON.stringify(arrayFrom(mapDefinedIt
383396
fs: newFs,
384397
tick,
385398
rootNames,
386-
baselineSourceMap,
387-
expectedBuildInfoFilesForSectionBaselines,
388399
modifyFs: incrementalModifyFs,
400+
baselineSourceMap,
401+
baselineBuildInfo: true,
389402
}));
390403
afterBuildTime = newFs.statSync(lastProjectOutput).mtimeMs;
391404
});

src/testRunner/unittests/tsbuild/outFile.ts

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,6 @@ namespace ts {
5555
]
5656
]
5757
];
58-
const expectedTsbuildInfoFileNames: ReadonlyArray<BuildInfoSectionBaselineFiles> = [
59-
[outputFiles[project.first][ext.buildinfo], outputFiles[project.first][ext.js], outputFiles[project.first][ext.dts]],
60-
[outputFiles[project.second][ext.buildinfo], outputFiles[project.second][ext.js], outputFiles[project.second][ext.dts]],
61-
[outputFiles[project.third][ext.buildinfo], outputFiles[project.third][ext.js], outputFiles[project.third][ext.dts]]
62-
];
6358
const relSources = sources.map(([config, sources]) => [relName(config), sources.map(relName)]) as any as [Sources, Sources, Sources];
6459
const { time, tick } = getTime();
6560
let expectedOutputFiles = [
@@ -244,7 +239,6 @@ namespace ts {
244239
modifyFs: (fs: vfs.FileSystem) => void;
245240
modifyAgainFs?: (fs: vfs.FileSystem) => void;
246241
additionalSourceFiles?: ReadonlyArray<string>;
247-
expectedBuildInfoFilesForSectionBaselines?: ReadonlyArray<BuildInfoSectionBaselineFiles>;
248242
dependOrdered?: true;
249243
ignoreDtsChanged?: true;
250244
ignoreDtsUnchanged?: true;
@@ -256,7 +250,6 @@ namespace ts {
256250
modifyFs,
257251
modifyAgainFs,
258252
additionalSourceFiles,
259-
expectedBuildInfoFilesForSectionBaselines,
260253
dependOrdered,
261254
ignoreDtsChanged,
262255
ignoreDtsUnchanged,
@@ -279,7 +272,6 @@ namespace ts {
279272
proj: "outfile-concat",
280273
rootNames: ["/src/third"],
281274
baselineSourceMap: true,
282-
expectedBuildInfoFilesForSectionBaselines: expectedBuildInfoFilesForSectionBaselines || expectedTsbuildInfoFileNames,
283275
initialBuild: {
284276
modifyFs,
285277
expectedDiagnostics: initialExpectedDiagnostics,
@@ -334,11 +326,6 @@ namespace ts {
334326
scenario: "when final project specifies tsBuildInfoFile",
335327
modifyFs: fs => replaceText(fs, sources[project.third][source.config], `"composite": true,`, `"composite": true,
336328
"tsBuildInfoFile": "./thirdjs/output/third.tsbuildinfo",`),
337-
expectedBuildInfoFilesForSectionBaselines: [
338-
expectedTsbuildInfoFileNames[0],
339-
expectedTsbuildInfoFileNames[1],
340-
["/src/third/thirdjs/output/third.tsbuildinfo", expectedTsbuildInfoFileNames[2][1], expectedTsbuildInfoFileNames[2][2]]
341-
],
342329
ignoreDtsChanged: true,
343330
ignoreDtsUnchanged: true,
344331
baselineOnly: true

tests/baselines/reference/tsbuild/amdModulesWithOut/initial-Build/when-the-module-resolution-finds-original-source-file.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -803,3 +803,37 @@ sourceFile:lib/global.ts
803803
"version": "FakeTSVersion"
804804
}
805805

806+
//// [/src/module.tsbuildinfo.baseline.txt]
807+
======================================================================
808+
File:: /src/module.js
809+
----------------------------------------------------------------------
810+
text: (0-417)
811+
var myGlob = 20;
812+
define("lib/file1", ["require", "exports"], function (require, exports) {
813+
"use strict";
814+
Object.defineProperty(exports, "__esModule", { value: true });
815+
exports.x = 10;
816+
});
817+
define("lib/file2", ["require", "exports"], function (require, exports) {
818+
"use strict";
819+
Object.defineProperty(exports, "__esModule", { value: true });
820+
exports.y = 20;
821+
});
822+
var globalConst = 10;
823+
824+
======================================================================
825+
======================================================================
826+
File:: /src/module.d.ts
827+
----------------------------------------------------------------------
828+
text: (0-179)
829+
declare const myGlob = 20;
830+
declare module "lib/file1" {
831+
export const x = 10;
832+
}
833+
declare module "lib/file2" {
834+
export const y = 20;
835+
}
836+
declare const globalConst = 10;
837+
838+
======================================================================
839+

0 commit comments

Comments
 (0)