UNPKG

daizong

Version:

`package.json` script runner for ES Modules

79 lines 2.44 kB
import * as fs from 'fs'; import * as np from 'path'; import { fileURLToPath } from 'url'; const settingsKey = '_'; const dirname = np.dirname(fileURLToPath(import.meta.url)); async function fileExists(file) { return fs.promises .access(file, fs.constants.F_OK) .then(() => true) .catch(() => false); } function normalizeImport(path) { path = np.relative(dirname, path); if (process.platform === 'win32') { return path.split(np.sep).join(np.posix.sep); } return path; } async function getConfigPath(files) { for (const file of files) { if (await fileExists(file)) { return file; } } throw new Error(`Config file "${files[0]}" does not exist.`); } export async function loadConfig(configFile) { configFile = await getConfigPath(configFile ? [configFile] : ['daizong.config.js', 'daizong.config.mjs', 'daizong.config.cjs']); const rawConfig = (await import(normalizeImport(configFile))) ?.default; const rawSettings = (rawConfig[settingsKey] || {}); delete rawConfig[settingsKey]; const rawTasks = rawConfig; const settings = { envGroups: {} }; settings.defaultEnv = rawSettings.defaultEnv; if (rawSettings.envGroups) { settings.envGroups = rawSettings.envGroups; } const tasks = { ...rawTasks }; const { privateTasks } = rawSettings; if (privateTasks) { for (const [key, value] of Object.entries(privateTasks)) { if (!value) { continue; } if (rawTasks[key]) { throw new Error(`Task "${key}" is already defined in public tasks`); } value.__isPrivate = true; tasks[key] = value; } delete rawSettings.privateTasks; } for (const [name, task] of Object.entries(tasks)) { if (!task) { continue; } const { alias } = task; if (alias) { if (task.__isPrivate) { throw new Error(`Private cannot have an alias. Task: "${name}", alias: "${alias}"`); } if (tasks[alias]) { throw new Error(`Duplicate name "${alias}"`); } tasks[alias] = task; } } const config = { settings, tasks, path: configFile, }; return config; } //# sourceMappingURL=config.js.map