@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.49 kB
JavaScript
import{spawn as S}from"node:child_process";import{LunoraError as f}from"@lunora/errors";const w=/[\s"%&<>^|]/u,m=/(\\*)"/gu,E=/(\\+)$/u,h=(t,s,a=process.platform)=>{if(a!=="win32"||t===process.execPath)return{args:[...s],command:t,shell:!1};const o=e=>e===""?'""':w.test(e)?`"${e.replaceAll(m,String.raw`$1$1\"`).replace(E,"$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 i="inherit";e||u?i="pipe":t.stdoutToStderr&&(i=2);const c=h(t.command,t.args),r=S(c.command,c.args,{cwd:t.cwd??process.cwd(),env:t.env?{...process.env,...t.env}:process.env,shell:c.shell,stdio:[o?"pipe":"inherit",i,t.captureStderr===!0?"pipe":"inherit"]});let p="",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=>{p+=n.toString("utf8"),e&&process.stdout.write(n)}),r.on("error",n=>{if(n.code==="ENOENT"){a(new f("LOCAL_DEPENDENCY_MISSING",`\`${t.command}\` is not installed or not on your PATH — nothing was run.`,{cause:n}));return}a(n)}),r.on("exit",(n,l)=>{s({code:n??(l?1:0),stderr:t.captureStderr===!0?d:void 0,stdout:e||u?p: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,h as spawnShellCompat};