UNPKG

nvexeca

Version:
89 lines (56 loc) 1.31 kB
import{execa}from"execa"; import getNode from"get-node"; import{npmRunPathEnv}from"npm-run-path"; import{copyBinaries}from"./copy/main.js"; import{getOpts}from"./options.js"; const nvexeca=async(versionRange,command,args,opts)=>{ const{ args:argsA, dry, getNodeOpts, execaOptions }=getOpts({versionRange,command,args,opts}); const[{path:nodePath,version},execaOptionsA]=await Promise.all([ getNode(versionRange,getNodeOpts), copyBinaries(execaOptions)] ); const commandA=getCommand(nodePath,command); const execaOptionsB=getExecaOptions(nodePath,execaOptionsA); const childProcess=startProcess({ command:commandA, args:argsA, execaOptions:execaOptionsB, dry }); return{ childProcess, version, versionRange, command:commandA, args:argsA, execaOptions:execaOptionsB } }; export default nvexeca; const getCommand=(nodePath,command)=> command==="node"?nodePath:command; const getExecaOptions=(nodePath,execaOptions)=>({ ...execaOptions, ...getEnv(nodePath,execaOptions), nodePath, preferLocal:true }); const getEnv=(nodePath,{extendEnv=true,env})=>({ extendEnv:extendEnv||env===undefined, env:npmRunPathEnv({ env:env??{}, execPath:nodePath, preferLocal:false }) }); const startProcess=({command,args,execaOptions,dry})=>{ if(dry){ return } return execa(command,args,execaOptions) };