diff --git a/src/index.ts b/src/index.ts index db693cf..d3e8b06 100644 --- a/src/index.ts +++ b/src/index.ts @@ -89,23 +89,34 @@ async function load(resolveFrom: string, options, logger): Promise return result; } -async function loadConfig(options, resolveFrom) { +async function loadConfigByName(names, options, resolveFrom) { let result = await loadConfigUtil( options.inputFS, resolveFrom, - ['tsconfig.json', 'tsconfig.js'], + names, options.projectRoot ); if (!result?.config) { - throw new Error(`Missing or invalid tsconfig.json in project root (${options.projectRoot})`); + throw new Error(`Missing or invalid ${names.join(',')} in project root (${options.projectRoot})`); } return result.config; } +async function loadCompilerOptions(options, resolveFrom) { + let baseConfig = await loadConfigByName(['tsconfig.json', 'tsconfig.js'], options, resolveFrom) + if (!baseConfig.extends) { + return baseConfig.compilerOptions + } + let extendsConfig = await loadConfigByName([baseConfig.extends], options, resolveFrom) + return extendsConfig?.compilerOptions || baseConfig?.compilerOptions ? { + ...baseConfig?.compilerOptions, + ...extendsConfig?.compilerOptions + } : null +} + /** Populate a map with any paths from tsconfig.json starting from baseUrl */ async function loadTsPaths(resolveFrom: string, options, logger): Promise { - let config = await loadConfig(options, resolveFrom); - let compilerOptions = config?.['compilerOptions']; + let compilerOptions = await loadCompilerOptions(options, resolveFrom); if (!compilerOptions) { throw new Error(`Couldn't find compilerOptions in tsconfig`); }