61 lines
2.3 KiB
JavaScript
61 lines
2.3 KiB
JavaScript
var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
|
|
if (typeof path === "string" && /^\.\.?\//.test(path)) {
|
|
return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
|
|
return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
|
|
});
|
|
}
|
|
return path;
|
|
};
|
|
import { access, readFile } from 'node:fs/promises';
|
|
import path from 'node:path';
|
|
import { pathToFileURL } from 'node:url';
|
|
const defaults = {
|
|
title: 'easy-slides',
|
|
description: 'Markdown presentations powered by easy-slides',
|
|
slidesDir: 'slides',
|
|
outDir: 'dist',
|
|
exportDir: 'exports',
|
|
};
|
|
export async function loadProjectConfig(cwd = process.cwd()) {
|
|
const candidates = [
|
|
'easy-slides.config.mjs',
|
|
'easy-slides.config.js',
|
|
'easy-slides.config.json',
|
|
];
|
|
for (const candidate of candidates) {
|
|
const filename = path.join(cwd, candidate);
|
|
if (!(await exists(filename)))
|
|
continue;
|
|
const loaded = candidate.endsWith('.json')
|
|
? JSON.parse(await readFile(filename, 'utf8'))
|
|
: (await import(__rewriteRelativeImportExtension(`${pathToFileURL(filename).href}?t=${Date.now()}`))).default;
|
|
return normalizeConfig(loaded);
|
|
}
|
|
return { ...defaults };
|
|
}
|
|
export function normalizeConfig(value) {
|
|
return {
|
|
...defaults,
|
|
...value,
|
|
slidesDir: normalizeRelativePath(value?.slidesDir ?? defaults.slidesDir, 'slidesDir'),
|
|
outDir: normalizeRelativePath(value?.outDir ?? defaults.outDir, 'outDir'),
|
|
exportDir: normalizeRelativePath(value?.exportDir ?? defaults.exportDir, 'exportDir'),
|
|
};
|
|
}
|
|
function normalizeRelativePath(value, field) {
|
|
const normalized = value.trim().replace(/[\\/]+$/, '');
|
|
const portable = normalized.replaceAll('\\', '/');
|
|
if (!normalized || path.isAbsolute(normalized) || portable === '..' || portable.startsWith('../'))
|
|
throw new Error(`${field} 必须是项目内的相对路径`);
|
|
return normalized;
|
|
}
|
|
async function exists(filename) {
|
|
try {
|
|
await access(filename);
|
|
return true;
|
|
}
|
|
catch {
|
|
return false;
|
|
}
|
|
}
|
|
//# sourceMappingURL=config.js.map
|