@typed/test
Version:
Testing made simple.
41 lines • 2.17 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const fs_1 = __importDefault(require("fs"));
const path_1 = require("path");
const typescript_1 = require("typescript");
const diagnosticToString_1 = require("./diagnosticToString");
function findTsConfig(cwd = process.cwd()) {
const configPath = typescript_1.findConfigFile(cwd, (fileName) => fs_1.default.existsSync(fileName));
if (!configPath) {
throw new Error('Unable to find TypeScript configuration');
}
const baseConfig = parseConfigFile(cwd, configPath);
if (baseConfig.extends) {
const extensions = Array.isArray(baseConfig.extends) ? baseConfig.extends : [baseConfig.extends];
const extendedConfigPaths = extensions.map(ext => path_1.join(path_1.dirname(configPath), ext));
const extendedConfigs = extendedConfigPaths.map(path => parseConfigFile(cwd, path));
if (extendedConfigs.length === 1) {
return mergeConfigs(baseConfig, extendedConfigs[0]);
}
return extendedConfigs.reduceRight(mergeConfigs, baseConfig);
}
return baseConfig;
}
exports.findTsConfig = findTsConfig;
function mergeConfigs(base, extension) {
return Object.assign(Object.assign(Object.assign({}, extension), base), { compilerOptions: Object.assign(Object.assign({}, extension.compilerOptions), base.compilerOptions) });
}
function parseConfigFile(cwd, filePath) {
const fileName = path_1.basename(filePath);
const contents = fs_1.default.readFileSync(filePath).toString();
const { config } = typescript_1.parseConfigFileTextToJson(filePath, contents);
const { options, errors } = typescript_1.convertCompilerOptionsFromJson(config.compilerOptions, cwd, fileName);
if (errors && errors.length > 0) {
throw new Error(errors.map(x => diagnosticToString_1.diagnosticToString(x, cwd)).join('\n'));
}
return Object.assign(Object.assign({}, config), { compilerOptions: options, configPath: filePath });
}
//# sourceMappingURL=findTsConfig.js.map