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