auto-config-loader
Version:
Find and load configuration from a package.json property, rc file, or CommonJS module.
57 lines (56 loc) • 1.91 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.loadConf = loadConf;
exports.jsLoader = jsLoader;
const jiti_1 = require("jiti");
const sucrase_1 = require("sucrase");
let jitiInstance = null;
function lazyJiti(option = {}, transformOpt = {}) {
return (jitiInstance ??
(jitiInstance = (0, jiti_1.createJiti)(__filename, {
interopDefault: true,
...option,
transform: (opts) => {
return (0, sucrase_1.transform)(opts.source, {
transforms: ['typescript', 'imports'],
...transformOpt,
});
},
})));
}
async function loadConf(path, option = {}) {
const { jiti = true, jitiOptions, transformOption } = option;
let config = await (async function () {
try {
if (jiti) {
return path ? await lazyJiti(jitiOptions, transformOption).import(path) : {};
}
else {
return path ? require(path) : {};
}
}
catch {
return await lazyJiti(jitiOptions, transformOption).import(path);
}
})();
// Ensure both default export and named exports are handled
if (config.default) {
if (typeof config.default === 'function') {
const defaultFunc = config.default;
Object.assign(defaultFunc, config);
return defaultFunc;
}
else {
config = { ...config.default, ...config };
}
}
// ⚠️ 🚨 For some reason, the CI test default does not exist on the Windows platform.
// To ensure platform consistency, default has been removed.
if (path && path.endsWith('.cjs')) {
delete config.default;
}
return config;
}
async function jsLoader(filepath, content, option = {}) {
return await loadConf(filepath, option);
}