@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.8 kB
JavaScript
import{spawn as T}from"node:child_process";import{StringDecoder as E}from"node:string_decoder";import{LunoraError as g}from"@lunora/errors";const D=/[\s"%&<>^|]/u,N=500,_=e=>{let a="",r=0;for(const n of e)n==="\\"?r+=1:(a+=n==='"'?`${"\\".repeat(r*2+1)}"`:`${"\\".repeat(r)}${n}`,r=0);return a+"\\".repeat(r*2)},v=(e,a,r=process.platform)=>{if(r!=="win32"||e===process.execPath)return{args:[...a],command:e,shell:!1};const n=s=>s===""?'""':D.test(s)?`"${_(s)}"`:s;return{args:a.map(s=>n(s)),command:n(e),shell:!0}},P=e=>new Promise((a,r)=>{const n=typeof e.input=="string",s=e.captureStdout===!0,u=e.captureStdoutSilently===!0;let i="inherit";s||u?i="pipe":e.stdoutToStderr&&(i=2);const c=v(e.command,e.args),t=T(c.command,c.args,{cwd:e.cwd??process.cwd(),env:e.env?{...process.env,...e.env}:process.env,shell:c.shell,stdio:[n?"pipe":"inherit",i,e.captureStderr===!0?"pipe":"inherit"]}),l=new E("utf8"),p=new E("utf8");let f="",w="";e.captureStderr===!0&&t.stderr&&t.stderr.on("data",o=>{w+=p.write(o),process.stderr.write(o)}),(s||u)&&t.stdout&&t.stdout.on("data",o=>{f+=l.write(o),s&&process.stdout.write(o)});let d=!1;t.on("error",o=>{if(d=!0,o.code==="ENOENT"){r(new g("LOCAL_DEPENDENCY_MISSING",`\`${e.command}\` is not installed or not on your PATH — nothing was run.`,{cause:o}));return}r(o)});let m=0,S;const h=()=>{d||(d=!0,clearTimeout(S),a({code:m,stderr:e.captureStderr===!0?w+p.end():void 0,stdout:s||u?f+l.end():void 0}))};t.on("exit",(o,C)=>{m=o??(C?1:0),S=setTimeout(()=>{t.stdout?.destroy(),t.stderr?.destroy(),h()},N)}),t.on("close",h),n&&t.stdin&&(t.stdin.on("error",()=>{}),t.stdin.end(e.input))}),$=(e=0)=>{const a=[];return{calls:a,spawner:n=>(a.push({descriptor:n}),Promise.resolve({code:e}))}};export{$ as createRecordingSpawner,P as defaultSpawner,v as spawnShellCompat};