UNPKG

@typed/content-hash

Version:

Content hash a directory of HTML/JS/CSS files and other static assets

55 lines 2.49 kB
"use strict"; 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