@eljs/config
Version:
Load your config file.
186 lines (184 loc) • 5.7 kB
JavaScript
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
});