UNPKG

nve

Version:

Run any command on specific Node.js versions

72 lines (45 loc) 1.53 kB
import{basename}from"node:path"; import{argv}from"node:process"; import{NODE_VERSION_FILES}from"preferred-node-version"; import semver from"semver"; import{parseOpts}from"./options.js"; export const parseInput=(yargs)=>{ const input=argv.slice(2); const{opts,versionArg,command,args}=parseArgs(input); const{opts:optsA,continueOpt,parallel}=parseOpts(opts,yargs); if(versionArg===undefined){ throw new Error("Missing version.") } const versionRanges=versionArg.split(VERSION_DELIMITER); return{versionRanges,command,args,opts:optsA,continueOpt,parallel} }; const parseArgs=(input)=>{ const versionStart=getVersionStart(input); const opts=input.slice(0,versionStart); const[versionArg,command,...args]=input.slice(versionStart); return{opts,versionArg,command,args} }; const getVersionStart=(input)=>{ const versionStart=input.findIndex(isVersionArg); if(versionStart!==-1){ return versionStart } if(isGenericFlags(input)){ return input.length } return 0 }; const isGenericFlags=(input)=>input.every(isGenericFlag); const isGenericFlag=(arg)=>GENERIC_FLAGS.has(arg); const GENERIC_FLAGS=new Set(["-h","--help","-v","--version"]); const isVersionArg=(arg)=>arg.split(VERSION_DELIMITER).every(isVersion); const isVersion=(value)=> ALIASES.has(value)|| isVersionFile(value)|| semver.validRange(value)!==null; const isVersionFile=(value)=>{ const filename=basename(value); return NODE_VERSION_FILES.includes(filename) }; const ALIASES=new Set(["latest","lts","global","local"]); const VERSION_DELIMITER=",";