tsconfig-replace-paths
Version:
Replace absolute paths to relative paths for package compilation
53 lines (52 loc) • 1.8 kB
JavaScript
const path = require('path');
const fs = require('fs');
const JSON5 = require('json5');
export const mapPaths = (paths, mapper) => {
const dest = {};
Object.keys(paths).forEach(key => {
dest[key] = paths[key].map(mapper);
});
return dest;
};
export const loadConfig = (file) => {
const fileToParse = fs.readFileSync(file);
const parsedJsonFile = JSON5.parse(fileToParse);
const { extends: extendsPath, compilerOptions: { baseUrl, outDir, rootDir, paths } = {
baseUrl: undefined,
outDir: undefined,
rootDir: undefined,
paths: undefined,
}, } = parsedJsonFile;
const config = {};
if (baseUrl) {
config.baseUrl = baseUrl;
}
if (outDir) {
config.outDir = outDir;
}
if (rootDir) {
config.rootDir = rootDir;
}
if (paths) {
config.paths = paths;
}
if (extendsPath) {
const childConfigDirPath = path.dirname(file);
const parentConfigPath = path.resolve(childConfigDirPath, extendsPath);
const parentConfigDirPath = path.dirname(parentConfigPath);
const currentExtension = path.extname(parentConfigPath);
let parentExtendedConfigFile = path.format({
name: parentConfigPath,
ext: currentExtension === '' ? '.json' : '',
});
if (/\.json\.json$/.test(parentExtendedConfigFile)) {
parentExtendedConfigFile = parentExtendedConfigFile.replace(/\.json\.json$/, '.json');
}
const parentConfig = loadConfig(parentExtendedConfigFile);
if (parentConfig.baseUrl) {
parentConfig.baseUrl = path.resolve(parentConfigDirPath, parentConfig.baseUrl);
}
return Object.assign(Object.assign({}, parentConfig), config);
}
return config;
};