Skip to content

Commit

Permalink
fix(tsload): fix tsconfig inheritance resolution (#29766)
Browse files Browse the repository at this point in the history
Fixes #29731
  • Loading branch information
pavelfeldman authored Mar 1, 2024
1 parent f8e441a commit ff16d79
Showing 1 changed file with 7 additions and 3 deletions.
10 changes: 7 additions & 3 deletions packages/playwright/src/third_party/tsconfig-loader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,8 @@ function resolveConfigFile(baseConfigFile: string, referencedConfigFile: string)
referencedConfigFile += '.json';
const currentDir = path.dirname(baseConfigFile);
let resolvedConfigFile = path.resolve(currentDir, referencedConfigFile);
if (referencedConfigFile.indexOf('/') !== -1 && referencedConfigFile.indexOf('.') !== -1 && !fs.existsSync(referencedConfigFile))
// TODO: I don't see how this makes sense, delete in the next minor release.
if (referencedConfigFile.includes('/') && referencedConfigFile.includes('.') && !fs.existsSync(resolvedConfigFile))
resolvedConfigFile = path.join(currentDir, 'node_modules', referencedConfigFile);
return resolvedConfigFile;
}
Expand All @@ -117,6 +118,7 @@ function loadTsConfig(
let result: LoadedTsConfig = {
tsConfigPath: configFilePath,
};
// Retain result instance below, so that caching works.
visited.set(configFilePath, result);

if (!fs.existsSync(configFilePath))
Expand All @@ -137,7 +139,8 @@ function loadTsConfig(
const extendsDir = path.dirname(extendedConfig);
base.baseUrl = path.join(extendsDir, base.baseUrl);
}
result = { ...result, ...base, tsConfigPath: configFilePath };
// Retain result instance, so that caching works.
Object.assign(result, base, { tsConfigPath: configFilePath });
}

const loadedConfig = Object.fromEntries(Object.entries({
Expand All @@ -146,7 +149,8 @@ function loadTsConfig(
allowJs: parsedConfig?.compilerOptions?.allowJs,
}).filter(([, value]) => value !== undefined));

result = { ...result, ...loadedConfig };
// Retain result instance, so that caching works.
Object.assign(result, loadedConfig);

for (const ref of parsedConfig.references || [])
references.push(loadTsConfig(resolveConfigFile(configFilePath, ref.path), references, visited));
Expand Down

0 comments on commit ff16d79

Please sign in to comment.