nve
Version:
Run any command on specific Node.js versions
84 lines (71 loc) • 1.49 kB
JavaScript
import{dirname}from"node:path";
import{exit}from"node:process";
import{fileURLToPath}from"node:url";
import handleCliError from"handle-cli-error";
import{readPackageUp}from"read-package-up";
import updateNotifier from"update-notifier";
import{getAbortOptions}from"./abort.js";
import{handleFault}from"./fault.js";
import{runParallel}from"./parallel.js";
import{parseInput}from"./parse.js";
import{runSerial}from"./serial.js";
import{runSingle}from"./single.js";
import{defineCli}from"./top.js";
const runCli=async()=>{
try{
await checkUpdate();
const yargs=defineCli();
const{versionRanges,command,args,opts,continueOpt,parallel}=
parseInput(yargs);
const exitCode=await runMain({
versionRanges,
command,
args,
opts,
continueOpt,
parallel
});
exit(exitCode)
}catch(error){
handleFault(error);
handleCliError(error,{stack:false})
}
};
const checkUpdate=async()=>{
const cwd=dirname(fileURLToPath(import.meta.url));
const{packageJson}=await readPackageUp({cwd,normalize:false});
updateNotifier({pkg:packageJson}).notify()
};
const runMain=({
versionRanges,
command,
args,
opts,
continueOpt,
parallel
})=>{
if(versionRanges.length===1){
return runSingle({versionRanges,command,args,opts})
}
const{controller,opts:optsA}=getAbortOptions(opts);
if(parallel){
return runParallel({
versionRanges,
command,
args,
opts:optsA,
controller,
continueOpt
})
}
return runSerial({
versionRanges,
command,
args,
opts:optsA,
controller,
continueOpt
})
};
await runCli();