fix getExtendedConfig in commandLineParser
* remove invalid assertion * fix invalid array spread on possibly undefined value * only add unique files to extendedSourceFiles, preventing the array from growing infinitely
This commit is contained in:
parent
394ee31a56
commit
78d221993b
|
@ -1993,7 +1993,7 @@ namespace ts {
|
|||
if (ownConfig.extendedConfigPath) {
|
||||
// copy the resolution stack so it is never reused between branches in potential diamond-problem scenarios.
|
||||
resolutionStack = resolutionStack.concat([resolvedPath]);
|
||||
const extendedConfig = getExtendedConfig(sourceFile!, ownConfig.extendedConfigPath, host, basePath, resolutionStack, errors);
|
||||
const extendedConfig = getExtendedConfig(sourceFile, ownConfig.extendedConfigPath, host, basePath, resolutionStack, errors);
|
||||
if (extendedConfig && isSuccessfulParsedTsconfig(extendedConfig)) {
|
||||
const baseRaw = extendedConfig.raw;
|
||||
const raw = ownConfig.raw;
|
||||
|
@ -2134,7 +2134,7 @@ namespace ts {
|
|||
}
|
||||
|
||||
function getExtendedConfig(
|
||||
sourceFile: TsConfigSourceFile,
|
||||
sourceFile: TsConfigSourceFile | undefined,
|
||||
extendedConfigPath: string,
|
||||
host: ParseConfigHost,
|
||||
basePath: string,
|
||||
|
@ -2143,7 +2143,12 @@ namespace ts {
|
|||
): ParsedTsconfig | undefined {
|
||||
const extendedResult = readJsonConfigFile(extendedConfigPath, path => host.readFile(path));
|
||||
if (sourceFile) {
|
||||
(sourceFile.extendedSourceFiles || (sourceFile.extendedSourceFiles = [])).push(extendedResult.fileName);
|
||||
if (sourceFile.extendedSourceFiles) {
|
||||
pushIfUnique(sourceFile.extendedSourceFiles, extendedResult.fileName);
|
||||
}
|
||||
else {
|
||||
sourceFile.extendedSourceFiles = [extendedResult.fileName];
|
||||
}
|
||||
}
|
||||
if (extendedResult.parseDiagnostics.length) {
|
||||
errors.push(...extendedResult.parseDiagnostics);
|
||||
|
@ -2153,8 +2158,10 @@ namespace ts {
|
|||
const extendedDirname = getDirectoryPath(extendedConfigPath);
|
||||
const extendedConfig = parseConfig(/*json*/ undefined, extendedResult, host, extendedDirname,
|
||||
getBaseFileName(extendedConfigPath), resolutionStack, errors);
|
||||
if (sourceFile) {
|
||||
sourceFile.extendedSourceFiles!.push(...extendedResult.extendedSourceFiles!);
|
||||
if (sourceFile && extendedResult.extendedSourceFiles) {
|
||||
for (const extended of extendedResult.extendedSourceFiles) {
|
||||
pushIfUnique(sourceFile.extendedSourceFiles!, extended);
|
||||
}
|
||||
}
|
||||
|
||||
if (isSuccessfulParsedTsconfig(extendedConfig)) {
|
||||
|
|
|
@ -244,6 +244,20 @@ namespace ts {
|
|||
}, [
|
||||
combinePaths(basePath, "main.ts")
|
||||
]);
|
||||
|
||||
it("adds extendedSourceFiles only once", () => {
|
||||
const sourceFile = readJsonConfigFile("configs/fourth.json", (path) => host.readFile(path));
|
||||
const dir = combinePaths(basePath, "configs");
|
||||
const expected = [
|
||||
combinePaths(dir, "third.json"),
|
||||
combinePaths(dir, "second.json"),
|
||||
combinePaths(dir, "base.json"),
|
||||
];
|
||||
parseJsonSourceFileConfigFileContent(sourceFile, host, dir, {}, "fourth.json");
|
||||
assert.deepEqual(sourceFile.extendedSourceFiles, expected);
|
||||
parseJsonSourceFileConfigFileContent(sourceFile, host, dir, {}, "fourth.json");
|
||||
assert.deepEqual(sourceFile.extendedSourceFiles, expected);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue