UNPKG

@lunora/cli

Version:

The Lunora CLI: init, dev, deploy, codegen, migrate, seed, doctor, insights, logs, registry, and the rest of the project commands

2 lines (1 loc) 1.29 kB
import{spawn as S}from"node:child_process";const f=/[\s"%&<>^|]/u,w=/(\\*)"/gu,h=/(\\+)$/u,g=(t,s,a=process.platform)=>{if(a!=="win32"||t===process.execPath)return{args:[...s],command:t,shell:!1};const o=e=>e===""?'""':f.test(e)?`"${e.replaceAll(w,String.raw`$1$1\"`).replace(h,"$1$1")}"`:e;return{args:s.map(e=>o(e)),command:o(t),shell:!0}},_=t=>new Promise((s,a)=>{const o=typeof t.input=="string",e=t.captureStdout===!0,u=t.captureStdoutSilently===!0;let c="inherit";e||u?c="pipe":t.stdoutToStderr&&(c=2);const p=g(t.command,t.args),r=S(p.command,p.args,{cwd:t.cwd??process.cwd(),env:t.env?{...process.env,...t.env}:process.env,shell:p.shell,stdio:[o?"pipe":"inherit",c,t.captureStderr===!0?"pipe":"inherit"]});let i="",d="";t.captureStderr===!0&&r.stderr&&r.stderr.on("data",n=>{d+=n.toString("utf8"),process.stderr.write(n)}),(e||u)&&r.stdout&&r.stdout.on("data",n=>{i+=n.toString("utf8"),e&&process.stdout.write(n)}),r.on("error",n=>{a(n)}),r.on("exit",(n,l)=>{s({code:n??(l?1:0),stderr:t.captureStderr===!0?d:void 0,stdout:e||u?i:void 0})}),o&&r.stdin&&(r.stdin.on("error",()=>{}),r.stdin.end(t.input))}),A=(t=0)=>{const s=[];return{calls:s,spawner:o=>(s.push({descriptor:o}),Promise.resolve({code:t}))}};export{A as createRecordingSpawner,_ as defaultSpawner,g as spawnShellCompat};