@typed/content-hash
Version:
Content hash a directory of HTML/JS/CSS files and other static assets
55 lines • 2.49 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.findTsConfig = exports.DEFAULT_TSCONFIG_FILENAME = void 0;
const tslib_1 = require("tslib");
const Option_1 = require("fp-ts/Option");
const fs = (0, tslib_1.__importStar)(require("fs"));
const path_1 = require("path");
const resolve_1 = require("resolve");
const typescript_1 = require("typescript");
exports.DEFAULT_TSCONFIG_FILENAME = 'tsconfig.json';
function findTsConfig({ directory, configFileName = exports.DEFAULT_TSCONFIG_FILENAME, }) {
const configPath = (0, typescript_1.findConfigFile)(directory, typescript_1.sys.fileExists, configFileName);
if (!configPath) {
return Option_1.none;
}
const formatHost = {
getCanonicalFileName: (path) => path_1.posix.resolve(directory, path),
getCurrentDirectory: () => directory,
getNewLine: () => typescript_1.sys.newLine,
};
const baseConfig = parseConfigFile(directory, configPath, formatHost);
if (baseConfig.extends) {
const extensions = Array.isArray(baseConfig.extends) ? baseConfig.extends : [baseConfig.extends];
const extendedConfigPaths = extensions.map((ext) => (0, resolve_1.sync)(ext, { basedir: path_1.posix.dirname(configPath) }));
const extendedConfigs = extendedConfigPaths.map((path) => parseConfigFile(directory, path, formatHost));
return (0, Option_1.some)(extendedConfigs.reduceRight(mergeConfigs, baseConfig));
}
return (0, Option_1.some)(baseConfig);
}
exports.findTsConfig = findTsConfig;
function mergeConfigs(base, extension) {
return {
...extension,
...base,
compilerOptions: {
...extension.compilerOptions,
...base.compilerOptions,
},
};
}
function parseConfigFile(directory, filePath, host) {
const fileName = path_1.posix.basename(filePath);
const contents = fs.readFileSync(filePath).toString();
const { config } = (0, typescript_1.parseConfigFileTextToJson)(filePath, contents);
const { options, errors } = (0, typescript_1.convertCompilerOptionsFromJson)(config.compilerOptions, directory, fileName);
if (errors && errors.length > 0) {
throw new Error((0, typescript_1.formatDiagnosticsWithColorAndContext)(errors, host));
}
return {
...config,
compilerOptions: { ...(0, typescript_1.getDefaultCompilerOptions)(), ...options },
configPath: filePath,
};
}
//# sourceMappingURL=findTsConfig.js.map