tscpaths
Version:
Replace absolute paths to relative paths after typescript compilation
68 lines (59 loc) • 1.28 kB
text/typescript
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;
};