UNPKG

node-version-use

Version:

Cross-platform solution for using multiple versions of node. Useful for compatibility testing

59 lines (58 loc) 2.27 kB
import exit from 'exit'; import getopts from 'getopts-compat'; import spawnTerm, { figures, formatArguments } from 'spawn-term'; import run from './index.mjs'; const ERROR_CODE = 13; export default ((argv, name)=>{ const options = getopts(argv, { alias: { range: 'r', desc: 'd', expanded: 'e', streaming: 's', silent: 'si' }, default: { range: 'major,even' }, boolean: [ 'silent', 'desc', 'expanded', 'streaming' ], stopEarly: true }); // define.option('-r, --range [range]', 'range type of major, minor, or patch with filters of lts, even, odd for version string expressions', 'major,even'); // define.option('-s, --silent', 'suppress logging', false); options.sort = options.desc ? -1 : 1; const args = options._; if (args.length === 0) { console.log(`Missing version expression. Example usage: ${name} version command arg1 arg2`); return exit(ERROR_CODE); } if (args.length === 1) { console.log(`Missing command. Example usage: ${name} version command arg1 arg2`); return exit(ERROR_CODE); } options.stdio = 'inherit'; // pass through stdio return run(args[0], args[1], args.slice(2), options, (err, results)=>{ if (err && !err.results) { console.log(err.message); return exit(ERROR_CODE); } if (err) results = err.results; const errors = results.filter((result)=>!!result.error); if (!options.silent) { if (!spawnTerm) { console.log('\n======================'); results.forEach((res)=>console.log(`${res.error ? figures.cross : figures.tick} ${res.version}${res.error ? ` Error: ${res.error.message}` : ''}`)); } console.log('\n----------------------'); console.log(`${name} ${formatArguments(args).join(' ')}`); console.log(`${figures.tick} ${results.length - errors.length} succeeded`); if (errors.length) console.log(`${figures.cross} ${errors.length} failed`); } exit(err || errors.length ? ERROR_CODE : 0); }); });