Make build info tolerant to json errors (#50265)

* Make build info tolerant to json errors
Fixes #49754

* Fix incorrect code
This commit is contained in:
Sheetal Nandi
2022-08-10 16:44:35 -07:00
committed by GitHub
parent 8a24fe75c9
commit 90cfbaee37
17 changed files with 521 additions and 40 deletions
+4 -2
View File
@@ -12,7 +12,8 @@ namespace ts {
host.readFile = path => {
const value = originalReadFile.call(host, path);
if (!value || !isBuildInfoFile(path)) return value;
const buildInfo = getBuildInfo(value);
const buildInfo = getBuildInfo(path, value);
if (!buildInfo) return value;
buildInfo.version = fakes.version;
return getBuildInfoText(buildInfo);
};
@@ -330,7 +331,8 @@ interface Symbol {
if (!buildInfoPath || !sys.writtenFiles!.has(toPathWithSystem(sys, buildInfoPath))) return;
if (!sys.fileExists(buildInfoPath)) return;
const buildInfo = getBuildInfo((originalReadCall || sys.readFile).call(sys, buildInfoPath, "utf8")!);
const buildInfo = getBuildInfo(buildInfoPath, (originalReadCall || sys.readFile).call(sys, buildInfoPath, "utf8")!);
if (!buildInfo) return sys.writeFile(`${buildInfoPath}.baseline.txt`, "Error reading valid buildinfo file");
generateBuildInfoProgramBaseline(sys, buildInfoPath, buildInfo);
if (!outFile(options)) return;
@@ -168,6 +168,21 @@ namespace ts {
commandLineArgs: ["--b", "/src/tests", "--verbose", "--force"],
});
verifyTscWithEdits({
scenario: "sample1",
subScenario: "tsbuildinfo has error",
fs: () => loadProjectFromFiles({
"/src/project/main.ts": "export const x = 10;",
"/src/project/tsconfig.json": "{}",
"/src/project/tsconfig.tsbuildinfo": "Some random string",
}),
commandLineArgs: ["--b", "src/project", "-i", "-v"],
edits: [{
subScenario: "tsbuildinfo written has error",
modifyFs: fs => prependText(fs, "/src/project/tsconfig.tsbuildinfo", "Some random string"),
}]
});
verifyTscCompileLike(testTscCompileLike, {
scenario: "sample1",
subScenario: "rebuilds completely when version in tsbuildinfo doesnt match ts version",
@@ -729,5 +729,18 @@ export function someFn() { }`),
}
]
});
verifyTscWatch({
scenario: "programUpdates",
subScenario: "tsbuildinfo has error",
sys: () => createWatchedSystem({
"/src/project/main.ts": "export const x = 10;",
"/src/project/tsconfig.json": "{}",
"/src/project/tsconfig.tsbuildinfo": "Some random string",
[libFile.path]: libFile.content,
}),
commandLineArgs: ["--b", "src/project", "-i", "-w"],
changes: emptyArray
});
});
}
@@ -73,6 +73,21 @@ namespace ts {
edits: noChangeOnlyRuns
});
verifyTscWithEdits({
scenario: "incremental",
subScenario: "tsbuildinfo has error",
fs: () => loadProjectFromFiles({
"/src/project/main.ts": "export const x = 10;",
"/src/project/tsconfig.json": "{}",
"/src/project/tsconfig.tsbuildinfo": "Some random string",
}),
commandLineArgs: ["--p", "src/project", "-i"],
edits: [{
subScenario: "tsbuildinfo written has error",
modifyFs: fs => prependText(fs, "/src/project/tsconfig.tsbuildinfo", "Some random string"),
}]
});
describe("with noEmitOnError", () => {
let projFs: vfs.FileSystem;
before(() => {
@@ -374,5 +374,18 @@ export const Fragment: unique symbol;
},
});
});
verifyTscWatch({
scenario: "incremental",
subScenario: "tsbuildinfo has error",
sys: () => createWatchedSystem({
"/src/project/main.ts": "export const x = 10;",
"/src/project/tsconfig.json": "{}",
"/src/project/tsconfig.tsbuildinfo": "Some random string",
[libFile.path]: libFile.content,
}),
commandLineArgs: ["--p", "src/project", "-i", "-w"],
changes: emptyArray
});
});
}