UNPKG

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
"use strict"; 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); }