import { dirname, resolve } from 'path'; /* "baseUrl": ".", "outDir": "lib", "paths": { "src/*": ["src/*"] }, */ export interface IRawTSConfig { extends?: string; compilerOptions?: { baseUrl?: string; outDir?: string; paths?: { [key: string]: string[] }; }; } export interface ITSConfig { baseUrl?: string; outDir?: string; paths?: { [key: string]: string[] }; } export const mapPaths = ( paths: { [key: string]: string[] }, mapper: (x: string) => string ): { [key: string]: string[] } => { const dest = {} as { [key: string]: string[] }; Object.keys(paths).forEach((key) => { dest[key] = paths[key].map(mapper); }); return dest; }; export const loadConfig = (file: string): ITSConfig => { const { extends: ext, compilerOptions: { baseUrl, outDir, paths } = { baseUrl: undefined, outDir: undefined, paths: undefined, }, } = require(file) as IRawTSConfig; const config: ITSConfig = {}; if (baseUrl) { config.baseUrl = baseUrl; } if (outDir) { config.outDir = outDir; } if (paths) { config.paths = paths; } if (ext) { const parentConfig = loadConfig(resolve(dirname(file), ext)); return { ...parentConfig, ...config, }; } return config; };