UNPKG

tsconfig-replace-paths

Version:

Replace absolute paths to relative paths for package compilation

69 lines (68 loc) 2.23 kB
"use strict"; 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; }