tsconfig-replace-paths
Version:
Replace absolute paths to relative paths for package compilation
69 lines (68 loc) • 2.23 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.mapPaths = mapPaths;
exports.loadConfig = loadConfig;
const path = require('path');
const fs = require('fs');
const JSON5 = require('json5');
function mapPaths(paths, mapper) {
const dest = {};
Object.keys(paths).forEach(function (key) {
dest[key] = paths[key].map(mapper);
});
return dest;
}
function resolveConfigFile(configDir, extendsPath) {
const relativeCandidate = path.resolve(configDir, extendsPath);
const currentExtension = path.extname(relativeCandidate);
let localConfigFile = path.format({
name: relativeCandidate,
ext: currentExtension === '' ? '.json' : '',
});
if (/\.json\.json$/.test(localConfigFile)) {
localConfigFile = localConfigFile.replace(/\.json\.json$/, '.json');
}
if (fs.existsSync(localConfigFile)) {
return localConfigFile;
}
try {
return require.resolve(extendsPath, { paths: [configDir] });
}
catch (_a) {
return localConfigFile;
}
}
function 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 parentExtendedConfigFile = resolveConfigFile(childConfigDirPath, extendsPath);
const parentConfigDirPath = path.dirname(parentExtendedConfigFile);
const parentConfig = loadConfig(parentExtendedConfigFile);
if (parentConfig.baseUrl) {
parentConfig.baseUrl = path.resolve(parentConfigDirPath, parentConfig.baseUrl);
}
return Object.assign(Object.assign({}, parentConfig), config);
}
return config;
}