UNPKG

nhb-scripts

Version:

A collection of Node.js scripts to use in TypeScript & JavaScript projects

41 lines (33 loc) 1.26 kB
// @ts-check import { intro, outro } from '@clack/prompts'; import chalk from 'chalk'; import { existsSync } from 'fs'; import { writeFile } from 'fs/promises'; import path from 'path'; import { cwd } from 'process'; import { pathToFileURL } from 'url'; import { configBoilerplate } from '../templates/config-boilerplate.mjs'; /** @typedef {import('../types/index.d.ts').ScriptConfig} ScriptConfig */ const candidates = /* @__PURE__ */ Object.freeze([ 'nhb.scripts.config.mjs', 'nhb.scripts.config.js', ]); /** * * Load user-defined config file if present, otherwise create a config file. * @returns {Promise<ScriptConfig>} User-defined configs. */ export async function loadUserConfig() { const root = cwd(); let file = candidates.map((name) => path.join(root, name)).find(existsSync); if (!file) { intro( chalk.yellowBright(`⚙️ No config file found! Creating 'nhb.scripts.config.mjs'...`) ); const filePath = path.join(root, 'nhb.scripts.config.mjs'); await writeFile(filePath, configBoilerplate, 'utf-8'); outro(chalk.green(`✓ Successfully created ${filePath}`)); file = filePath; } const configModule = await import(pathToFileURL(file).href); return /** @type {ScriptConfig} */ (configModule.default || configModule); }