71 lines
1.8 KiB
JavaScript
Raw Permalink Normal View History

2026-05-31 13:21:13 +02:00
import fs from 'node:fs';
import { resolve, dirname } from 'node:path';
import process from 'node:process';
import { createConfigLoader } from 'unconfig';
async function loadConfig(cwd = process.cwd(), configOrPath = cwd, extraConfigSources = [], defaults = {}) {
let inlineConfig = {};
if (typeof configOrPath !== "string") {
inlineConfig = configOrPath;
if (inlineConfig.configFile === false) {
return {
config: inlineConfig,
sources: []
};
} else {
configOrPath = inlineConfig.configFile || process.cwd();
}
}
const resolved = resolve(configOrPath);
let isFile = false;
if (fs.existsSync(resolved) && fs.statSync(resolved).isFile()) {
isFile = true;
cwd = dirname(resolved);
}
const loader = createConfigLoader({
sources: isFile ? [
{
files: resolved,
extensions: []
}
] : [
{
files: [
"unocss.config",
"uno.config"
]
},
...extraConfigSources
],
cwd,
defaults: inlineConfig
});
const result = await loader.load();
result.config = Object.assign(defaults, result.config || inlineConfig);
if (result.config.configDeps) {
result.sources = [
...result.sources,
...result.config.configDeps.map((i) => resolve(cwd, i))
];
}
return result;
}
function createRecoveryConfigLoader() {
let lastResolved;
return async (cwd = process.cwd(), configOrPath = cwd, extraConfigSources = [], defaults = {}) => {
try {
const config = await loadConfig(cwd, configOrPath, extraConfigSources, defaults);
lastResolved = config;
return config;
} catch (e) {
if (lastResolved) {
console.error(e);
return lastResolved;
}
throw e;
}
};
}
export { createRecoveryConfigLoader, loadConfig };