@lunora/cli
Version:
The Lunora CLI: init, dev, deploy, codegen, run, reset, and migrate commands
2 lines (1 loc) • 1.04 kB
JavaScript
import{spawn as l}from"node:child_process";const u=/[\s"%&<>^|]/u,m=/(\\*)"/gu,w=/(\\+)$/u,h=(t,e,n=process.platform)=>{if(n!=="win32"||t===process.execPath)return{args:[...e],command:t,shell:!1};const c=r=>r===""?'""':u.test(r)?`"${r.replaceAll(m,String.raw`$1$1\"`).replace(w,"$1$1")}"`:r;return{args:e.map(r=>c(r)),command:c(t),shell:!0}},S=t=>new Promise((e,n)=>{const c=typeof t.input=="string",r=t.captureStdout===!0;let p="inherit";r?p="pipe":t.stdoutToStderr&&(p=2);const a=h(t.command,t.args),s=l(a.command,a.args,{cwd:t.cwd??process.cwd(),env:t.env?{...process.env,...t.env}:process.env,shell:a.shell,stdio:[c?"pipe":"inherit",p,"inherit"]});let i="";r&&s.stdout&&s.stdout.on("data",o=>{i+=o.toString("utf8"),process.stdout.write(o)}),s.on("error",o=>{n(o)}),s.on("exit",(o,d)=>{e({code:o??(d?1:0),stdout:r?i:void 0})}),c&&s.stdin&&s.stdin.end(t.input)}),f=(t=0)=>{const e=[];return{calls:e,spawner:n=>(e.push({descriptor:n}),Promise.resolve({code:t}))}};export{f as createRecordingSpawner,S as defaultSpawner,h as spawnShellCompat};