UNPKG

@eljs/config

Version:
186 lines (184 loc) 5.7 kB
var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/config.ts var config_exports = {}; __export(config_exports, { ConfigManager: () => ConfigManager }); module.exports = __toCommonJS(config_exports); var import_utils = require("@eljs/utils"); var import_node_path = require("node:path"); var import_utils2 = require("./utils"); var ConfigManager = class _ConfigManager { /** * 构造函数参数 */ constructorOptions; /** * 主配置文件 */ mainConfigFile; constructor(options) { this.constructorOptions = options; } /** * 获取配置项 * @param configExts 配置文件扩展名 */ async getConfig() { const { defaultConfigFiles, defaultConfigExts, cwd } = this.constructorOptions; const mainConfigFile = await _ConfigManager.getMainConfigFile( defaultConfigFiles, cwd ); if (!mainConfigFile) { return null; } let configFiles = [mainConfigFile]; if (defaultConfigExts == null ? void 0 : defaultConfigExts.length) { configFiles = await _ConfigManager.getConfigFiles( mainConfigFile, defaultConfigExts ); } return _ConfigManager.getConfig((0, import_utils2.getAbsFiles)(configFiles, cwd)); } /** * 获取配置项 * @param configExts 配置文件扩展名 */ getConfigSync() { const { defaultConfigFiles, defaultConfigExts, cwd } = this.constructorOptions; const mainConfigFile = _ConfigManager.getMainConfigFileSync( defaultConfigFiles, cwd ); if (!mainConfigFile) { return null; } let configFiles = [mainConfigFile]; if (defaultConfigExts == null ? void 0 : defaultConfigExts.length) { configFiles = _ConfigManager.getConfigFiles( mainConfigFile, defaultConfigExts ); } return _ConfigManager.getConfigSync((0, import_utils2.getAbsFiles)(configFiles, cwd)); } /** * 获取主配置文件 * @param configFiles 默认配置文件列表 * @param cwd 当前工作目录 */ static async getMainConfigFile(configFiles, cwd = process.cwd()) { let mainConfigFile; for (const configFile of configFiles) { const absConfigFile = (0, import_node_path.join)(cwd, configFile); if (await (0, import_utils.isPathExists)(absConfigFile)) { mainConfigFile = absConfigFile; break; } } return mainConfigFile; } /** * 获取主配置文件 * @param configFiles 默认配置文件列表 * @param cwd 当前工作目录 */ static getMainConfigFileSync(configFiles, cwd = process.cwd()) { let mainConfigFile; for (const configFile of configFiles) { const absConfigFile = (0, import_node_path.join)(cwd, configFile); if ((0, import_utils.isPathExistsSync)(absConfigFile)) { mainConfigFile = absConfigFile; break; } } return mainConfigFile; } /** * 获取配置文件列表 * @param mainConfigFile 主配置文件 * @param configExts 配置文件扩展名 */ static getConfigFiles(mainConfigFile, configExts) { return [ mainConfigFile, ...configExts.map((ext) => (0, import_utils2.addFileExt)(mainConfigFile, ext)) ].filter(Boolean); } /** * 获取配置文件 * @param configFiles 配置文件列表 */ static async getConfig(configFiles) { let config = null; for (const configFile of configFiles) { if (await (0, import_utils.isPathExists)(configFile)) { const loader = import_utils.fileLoaders[(0, import_node_path.extname)(configFile)]; try { const content = await loader(configFile); if (!content) { return config; } config = (0, import_utils.deepMerge)(config, content.default ?? content); } catch (error) { const err = error; err.message = err.message.replace( /Load (\/.*?) failed:/, `Load config ${configFile} failed:` ); throw err; } } } return config; } /** * 获取配置文件 * @param configFiles 配置文件列表 */ static getConfigSync(configFiles) { let config = null; for (const configFile of configFiles) { if ((0, import_utils.isPathExistsSync)(configFile)) { const loader = import_utils.fileLoadersSync[(0, import_node_path.extname)(configFile)]; try { const content = loader(configFile); if (!content) { return config; } config = (0, import_utils.deepMerge)(config, content.default ?? content); } catch (error) { const err = error; err.message = err.message.replace( /Load (\/.*?) failed:/, `Load config ${configFile} failed:` ); throw err; } } } return config; } }; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { ConfigManager });