Add options tsBuildInfoFile to provide name for the buildinfo file

This commit is contained in:
Sheetal Nandi
2019-03-01 10:28:57 -08:00
parent df9da15abb
commit cd195c91c6
30 changed files with 4253 additions and 13 deletions
+9
View File
@@ -338,6 +338,15 @@ namespace ts {
category: Diagnostics.Basic_Options,
description: Diagnostics.Enable_incremental_compilation,
},
{
name: "tsBuildInfoFile",
type: "string",
isFilePath: true,
paramType: Diagnostics.FILE,
isTSConfigOnly: true,
category: Diagnostics.Basic_Options,
description: Diagnostics.Specify_file_to_store_incremental_compilation_information,
},
{
name: "removeComments",
type: "boolean",
+4
View File
@@ -4032,6 +4032,10 @@
"category": "Error",
"code": 6379
},
"Specify file to store incremental compilation information": {
"category": "Message",
"code": 6380
},
"The expected type comes from property '{0}' which is declared here on type '{1}'": {
"category": "Message",
+2 -2
View File
@@ -54,8 +54,8 @@ namespace ts {
/*@internal*/
export function getOutputPathForBuildInfo(options: CompilerOptions) {
const configFile = options.configFilePath;
if (!configFile || !options.incremental && !options.composite) return undefined;
// TODO:: Add outFile like tsBuildInfoFile option
if (!configFile || !isIncrementalCompilation(options)) return undefined;
if (options.tsBuildInfoFile) return options.tsBuildInfoFile;
const outPath = options.outFile || options.out;
let buildInfoExtensionLess: string;
if (outPath) {
+6
View File
@@ -2725,6 +2725,12 @@ namespace ts {
}
}
if (options.tsBuildInfoFile) {
if (!isIncrementalCompilation(options)) {
createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1_or_option_2, "tsBuildInfoFile", "incremental", "composite");
}
}
verifyProjectReferences();
// List of collected files is complete; validate exhautiveness if this is a project with a file list
+1
View File
@@ -4647,6 +4647,7 @@ namespace ts {
jsxFactory?: string;
composite?: boolean;
incremental?: boolean;
tsBuildInfoFile?: string;
removeComments?: boolean;
rootDir?: string;
rootDirs?: string[];
+4
View File
@@ -7250,6 +7250,10 @@ namespace ts {
return !!(compilerOptions.declaration || compilerOptions.composite);
}
export function isIncrementalCompilation(options: CompilerOptions) {
return !!(options.incremental || options.composite);
}
export type StrictOptionName = "noImplicitAny" | "noImplicitThis" | "strictNullChecks" | "strictFunctionTypes" | "strictBindCallApply" | "strictPropertyInitialization" | "alwaysStrict";
export function getStrictOptionValue(compilerOptions: CompilerOptions, flag: StrictOptionName): boolean {
+7 -8
View File
@@ -146,12 +146,12 @@ namespace ts {
tick: () => void;
rootNames: ReadonlyArray<string>;
expectedMapFileNames: ReadonlyArray<string>;
expectedTsbuildInfoFileNames: ReadonlyArray<BuildInfoSectionBaselineFiles>;
expectedBuildInfoFilesForSectionBaselines?: ReadonlyArray<BuildInfoSectionBaselineFiles>;
modifyFs: (fs: vfs.FileSystem) => void;
withoutBuildInfo: boolean;
}
function build({ fs, tick, rootNames, expectedMapFileNames, expectedTsbuildInfoFileNames, modifyFs, withoutBuildInfo }: BuildInput) {
function build({ fs, tick, rootNames, expectedMapFileNames, expectedBuildInfoFilesForSectionBaselines, modifyFs, withoutBuildInfo }: BuildInput) {
const actualReadFileMap = createMap<number>();
modifyFs(fs);
tick();
@@ -179,7 +179,7 @@ namespace ts {
}
builder.buildAllProjects();
generateSourceMapBaselineFiles(fs, expectedMapFileNames);
generateBuildInfoSectionBaselineFiles(fs, expectedTsbuildInfoFileNames);
generateBuildInfoSectionBaselineFiles(fs, expectedBuildInfoFilesForSectionBaselines || emptyArray);
fs.makeReadonly();
return { fs, actualReadFileMap, host, builder };
}
@@ -230,7 +230,7 @@ Mismatch Actual(path, actual, expected): ${JSON.stringify(arrayFrom(mapDefinedIt
function verifyTsbuildOutputWorker({
scenario, projFs, time, tick, proj, rootNames, outputFiles, baselineOnly,
expectedMapFileNames, expectedTsbuildInfoFileNames, withoutBuildInfo, lastProjectOutputJs,
expectedMapFileNames, expectedBuildInfoFilesForSectionBaselines, withoutBuildInfo, lastProjectOutputJs,
initialBuild, incrementalDtsChangedBuild, incrementalDtsUnchangedBuild, incrementalHeaderChangedBuild
}: VerifyTsBuildInputWorker) {
describe(`tsc --b ${proj}:: ${scenario}${withoutBuildInfo ? " without build info" : ""}`, () => {
@@ -244,7 +244,7 @@ Mismatch Actual(path, actual, expected): ${JSON.stringify(arrayFrom(mapDefinedIt
tick,
rootNames,
expectedMapFileNames,
expectedTsbuildInfoFileNames,
expectedBuildInfoFilesForSectionBaselines,
modifyFs: initialBuild.modifyFs,
withoutBuildInfo
});
@@ -292,7 +292,7 @@ Mismatch Actual(path, actual, expected): ${JSON.stringify(arrayFrom(mapDefinedIt
tick,
rootNames,
expectedMapFileNames,
expectedTsbuildInfoFileNames,
expectedBuildInfoFilesForSectionBaselines,
modifyFs: incrementalModifyFs,
withoutBuildInfo
}));
@@ -323,7 +323,6 @@ Mismatch Actual(path, actual, expected): ${JSON.stringify(arrayFrom(mapDefinedIt
tick,
rootNames,
expectedMapFileNames: emptyArray,
expectedTsbuildInfoFileNames: emptyArray,
modifyFs: fs => {
// Delete output files
for (const outputFile of expectedOutputFiles) {
@@ -380,7 +379,7 @@ Mismatch Actual(path, actual, expected): ${JSON.stringify(arrayFrom(mapDefinedIt
proj: string;
rootNames: ReadonlyArray<string>;
expectedMapFileNames: ReadonlyArray<string>;
expectedTsbuildInfoFileNames: ReadonlyArray<BuildInfoSectionBaselineFiles>;
expectedBuildInfoFilesForSectionBaselines?: ReadonlyArray<BuildInfoSectionBaselineFiles>;
lastProjectOutputJs: string;
initialBuild: ExpectedBuildOutputDifferingWithBuildInfo;
outputFiles?: ReadonlyArray<string>;
+18 -1
View File
@@ -339,6 +339,7 @@ namespace ts {
modifyFs: (fs: vfs.FileSystem) => void;
modifyAgainFs?: (fs: vfs.FileSystem) => void;
additionalSourceFiles?: ReadonlyArray<string>;
expectedBuildInfoFilesForSectionBaselines?: ReadonlyArray<BuildInfoSectionBaselineFiles>;
dependOrdered?: true;
ignoreDtsChanged?: true;
ignoreDtsUnchanged?: true;
@@ -351,6 +352,7 @@ namespace ts {
modifyFs,
modifyAgainFs,
additionalSourceFiles,
expectedBuildInfoFilesForSectionBaselines,
dependOrdered,
ignoreDtsChanged,
ignoreDtsUnchanged,
@@ -380,7 +382,7 @@ namespace ts {
proj: "outfile-concat",
rootNames: ["/src/third"],
expectedMapFileNames,
expectedTsbuildInfoFileNames,
expectedBuildInfoFilesForSectionBaselines: expectedBuildInfoFilesForSectionBaselines || expectedTsbuildInfoFileNames,
lastProjectOutputJs: outputFiles[project.third][ext.js],
initialBuild: {
modifyFs,
@@ -435,6 +437,21 @@ namespace ts {
baselineOnly: true
});
// Verify baseline with and without build info
verifyOutFileScenario({
scenario: "when final project specifies tsBuildInfoFile",
modifyFs: fs => replaceText(fs, sources[project.third][source.config], `"composite": true,`, `"composite": true,
"tsBuildInfoFile": "./thirdjs/output/third.tsbuildinfo",`),
expectedBuildInfoFilesForSectionBaselines: [
expectedTsbuildInfoFileNames[0],
expectedTsbuildInfoFileNames[1],
["/src/third/thirdjs/output/third.tsbuildinfo", expectedTsbuildInfoFileNames[2][1], expectedTsbuildInfoFileNames[2][2]]
],
ignoreDtsChanged: true,
ignoreDtsUnchanged: true,
baselineOnly: true
});
it("clean projects", () => {
const fs = outFileFs.shadow();
const expectedOutputs = [
+61 -2
View File
@@ -428,7 +428,6 @@ export class cNew {}`);
"/src/core/index.d.ts.map",
"/src/logic/index.js.map"
],
expectedTsbuildInfoFileNames: emptyArray,
lastProjectOutputJs: "/src/tests/index.js",
initialBuild,
incrementalDtsChangedBuild: {
@@ -583,7 +582,6 @@ class someClass { }`),
"/src/core/index.d.ts.map",
"/src/logic/index.js.map"
],
expectedTsbuildInfoFileNames: emptyArray,
lastProjectOutputJs: "/src/tests/index.js",
initialBuild,
incrementalDtsChangedBuild: {
@@ -639,6 +637,67 @@ class someClass { }`),
],
ignoreWithoutBuildInfo: true
});
verifyTsbuildOutput({
scenario: "when logic specifies tsBuildInfoFile",
projFs: () => projFs,
time,
tick,
proj: "sample1",
rootNames: ["/src/tests"],
expectedMapFileNames: [
"/src/core/anotherModule.d.ts.map",
"/src/core/index.d.ts.map",
"/src/logic/index.js.map"
],
lastProjectOutputJs: "/src/tests/index.js",
initialBuild: {
modifyFs: fs => replaceText(fs, "/src/logic/tsconfig.json", `"composite": true,`, `"composite": true,
"tsBuildInfoFile": "ownFile.tsbuildinfo",`),
expectedDiagnostics: initialBuild.expectedDiagnostics,
expectedReadFiles: getReadFilesMap(
[
// Configs
"/src/core/tsconfig.json",
"/src/logic/tsconfig.json",
"/src/tests/tsconfig.json",
// Source files
"/src/core/anotherModule.ts",
"/src/core/index.ts",
"/src/core/some_decl.d.ts",
"/src/logic/index.ts",
"/src/tests/index.ts",
// Modules of generated files
"/src/core/anotherModule.d.ts",
"/src/core/index.d.ts",
"/src/logic/index.d.ts",
// build info
"/src/core/tsconfig.tsbuildinfo",
"/src/logic/ownFile.tsbuildinfo",
"/src/tests/tsconfig.tsbuildinfo"
]
)
},
outputFiles: [
"/src/core/anotherModule.js",
"/src/core/anotherModule.d.ts",
"/src/core/anotherModule.d.ts.map",
"/src/core/index.js",
"/src/core/index.d.ts",
"/src/core/index.d.ts.map",
"/src/core/tsconfig.tsbuildinfo",
"/src/logic/index.js",
"/src/logic/index.js.map",
"/src/logic/index.d.ts",
"/src/logic/ownFile.tsbuildinfo",
"/src/tests/index.js",
"/src/tests/index.d.ts",
"/src/tests/tsconfig.tsbuildinfo",
]
});
});
});
}