UNPKG

@lunora/cli

Version:

The Lunora CLI: init, dev, deploy, codegen, run, reset, and migrate commands

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