UNPKG

rs-runner

Version:

RS is a CLI tool for quickly detecting package.json scripts, and running them.

112 lines (96 loc) 2.87 kB
#!/usr/bin/env node import { Command } from 'commander'; import chalk from 'chalk'; import { version } from '../package.json'; import { listScripts } from './lib/display'; import { addNewDirectoryScript, addNewGlobalScript, getDirectoryScripts, getGlobalScripts, removeDirectoryScript, removeGlobalScript, } from './lib/scripts'; import { interactiveMode } from './lib/interactive'; import { getPackageJsonScripts } from './lib/pm'; import { runDirectoryScript, runGlobalScript, runPackageScript, runRunnerCommand } from './lib/run'; const program = new Command(); const description = 'CLI tool for detecting and running package.json scripts'; program .name('RS') .description(description) .version(version, '-v, --version') .option('-l, --list', 'List all scripts') .option('-h, --help', 'Show help') .option('-i, --interactive', 'Run in interactive mode') .option('-a, --add <key> <value>', 'Add new global script') .option('-d, --delete [key]', 'Delete global script') .option('--add-dir <key> <value>', 'Add new directory script') .option('--delete-dir [key]', 'Delete directory script'); program.argument('[script]', 'Script to run').action((script: string | undefined) => { if (program.opts().help) { program.outputHelp(); return; } if (program.opts().list) { listScripts(); return; } if (program.opts().add) { const key = program.opts().add; if (program.args.length < 1) { console.warn(chalk.yellow('Please specify a value for the script')); return; } const value = program.args.slice(0).join(' '); addNewGlobalScript(key, value); return; } if (program.opts().addDir) { const key = program.opts().addDir; if (program.args.length < 1) { console.warn(chalk.yellow('Please specify a value for the directory script')); return; } const value = program.args.slice(0).join(' '); addNewDirectoryScript(key, value); return; } if (program.opts().delete) { const key = program.opts().delete; removeGlobalScript(key); return; } if (program.opts().deleteDir) { const key = program.opts().deleteDir; removeDirectoryScript(key); return; } if (program.opts().interactive) { interactiveMode(); return; } if (!script) { listScripts(); return; } // Order of check is // package.json -> directory -> global -> runner <command> const packageJsonScripts = getPackageJsonScripts(); if (packageJsonScripts[script]) { runPackageScript(script); return; } const directoryScripts = getDirectoryScripts(); if (directoryScripts[script]) { runDirectoryScript(script); return; } const globalScripts = getGlobalScripts(); if (globalScripts[script]) { runGlobalScript(script); return; } runRunnerCommand(script); }); program.parse(process.argv);