UNPKG

better-scripts

Version:

The next level of npm scripts. An npm scripts runner. A better way to organize your npm scripts. Make redundant NPM scripts easier to read, maintain and use.

51 lines (43 loc) 1.38 kB
import prompts from 'prompts'; import {getUserConfig} from '../getUserConfig.js'; import {parseUserConfig} from '../parseUserConfig.js'; import {runScript} from '../runScript.js'; /** * @param {import('../types').ParsedUserConfig} parsedUserConfig */ async function promptsAndRun(parsedUserConfig) { const choices = Object.values(parsedUserConfig).map(script => { if (!script) throw new Error('Failed parsing config script'); return { title: script.alias ?? script.name, value: script, description: script.desc ?? script.command }; }); /** @type {{script: import('../types.js').Script}} */ const {script} = await prompts({ type: 'autocomplete', name: 'script', message: 'Select a script to run', suggest: (input, choices) => Promise.resolve( choices.filter(choice => choice.title.toLowerCase().includes(input.toLowerCase()) ) ), clearFirst: true, choices }); // Exit if no script value if (!script) process.exit(0); // Run script recursively await runScript(script, nextScripts => { return promptsAndRun(nextScripts); }); } export async function defaultCommand(argv) { const {config: configPath} = argv; const userConfig = await getUserConfig(configPath); const parsedUserConfig = parseUserConfig(userConfig); await promptsAndRun(parsedUserConfig); }