@stacksjs/cli 0.75.226 → 0.75.233
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +9 -8
- package/dist/output.d.ts +4 -0
- package/dist/output.js +3 -2
- package/package.json +9 -9
package/dist/index.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import
|
|
2
|
+
import Me from"process";async function Ie(e,t={silent:!0}){let r=t.packageManager??"bun",n=[r==="npm"?"install":"add"];if(t.dev)n.push("-D");if(t.preferOffline&&r!=="bun")n.push("--prefer-offline");if(t.additionalArgs)n.push(...t.additionalArgs);n.push(e);let i=await Bun.spawn([r,...n],{cwd:t.cwd??Me.cwd(),stdout:t.silent?"ignore":"inherit",stderr:t.silent?"ignore":"inherit",stdin:"ignore",env:Me.env}).exited;if(i!==0)throw Error(`Failed to install ${e} (exit code ${i})`)}async function Kt(e,t){return Ie(e,t??{silent:!0})}async function Ht(e,t){return Ie(`@stacksjs/${e}`,t??{silent:!0})}import{CLI as Jt,cli as rt,onUnknownSubcommand as Qt}from"@stacksjs/clapp";function Xt(e,t){if(typeof e==="object")t=e,e=t.name;return rt(e||"buddy")}import{existsSync as V,readdirSync as ot}from"fs";import{join as Te}from"path";var it=/(?:\.test|\.spec|\.bench|\.d)\.ts$/;function st(e){return e.endsWith(".ts")&&!it.test(e)&&!e.startsWith("_")}function at(e){if(!V(e))return[];let t=[],r=(n,o)=>{for(let i of ot(n,{withFileTypes:!0})){if(i.name.startsWith(".")||i.name==="node_modules")continue;if(i.isDirectory()){r(Te(n,i.name),`${o}${i.name}/`);continue}if(st(i.name))t.push(`${o}${i.name.slice(0,-3)}`)}};return r(e,""),t.sort()}async function Ee(e){if(!e||!V(e))return{};try{let r=(await import(e)).default;if(!r||typeof r!=="object")return{error:Error(`${e} must default-export a command registry object.`)};return{registry:r}}catch(t){return{error:t}}}async function lt(e){let{commandsDir:t}=e,r=e.registry??(await Ee(e.registryPath)).registry,n=at(t),o=new Map;for(let l of n)o.set(l,{file:l,path:Te(t,`${l}.ts`),aliases:[],enabled:!0,source:"auto"});let i=[];for(let[l,a]of Object.entries(r??{})){let s=typeof a==="string"?{file:a}:a,g=o.get(s.file);if(!g)continue;if(g.signature=l,g.aliases=s.aliases??[],g.enabled=s.enabled!==!1,g.source="registry",!i.includes(g))i.push(g)}for(let l of n){let a=o.get(l);if(a&&!i.includes(a))i.push(a)}return i}function ct(e,t,r){let n=t.trim().split(/\s+/)[0],i=e?.commands?.find((l)=>l.name===n);if(!i||typeof i.alias!=="function")return!1;for(let l of r)i.alias(l);return!0}async function nn(e,t){let r=t.onError??(()=>{}),n=t.onDebug??(()=>{});if(!V(t.commandsDir))return n(`No ${t.commandsDir} directory, skipping application commands.`),[];let o=t.registry?{registry:t.registry}:await Ee(t.registryPath);if(o.error)r(`Could not read the command registry at ${t.registryPath}`,o.error);let i=await lt({...t,registry:o.registry}),l=[];for(let a of i){if(!a.enabled){n(`Skipping disabled command ${a.file}.`);continue}try{let s=await import(a.path);if(s.enabled===!1){n(`Skipping ${a.file}: the module exports \`enabled = false\`.`);continue}if(typeof s.default!=="function"){r(`Expected a default export function in ${a.file}.ts, but got: ${typeof s.default}`);continue}let g=e.commands?.length??0;s.default(e);let m=[...a.aliases,...s.aliases??[]];if(m.length)gt(e,a.signature,g,m,n);l.push(a)}catch(s){r(`Failed to load command ${a.file}`,s)}}return l}function gt(e,t,r,n,o){if(t&&ct(e,t,n))return;let a=(e.commands?.slice(r)??[])[0];if(!a||typeof a.alias!=="function"){o(`Could not alias '${t??"command"}': no matching command was registered.`);return}for(let s of n)a.alias(s)}function rn(e){if(typeof e==="function")return e;return(t)=>ut(t,e)}function ut(e,t){let r=e.command(t.name,t.description??"",{allowUnknownOptions:t.allowUnknownOptions});if(t.usage)r.usage(t.usage);for(let[n,o]of Object.entries(t.options??{})){let i=typeof o==="string"?{description:o}:o;r.option(n,i.description??"",{...i.default===void 0?{}:{default:i.default},...i.type?{type:i.type}:{}})}for(let n of t.aliases??[])r.alias(n);for(let n of t.examples??[])r.example(n);return r.action((...n)=>{let o=n[n.length-1];return t.handle(o,...n.slice(0,-1))}),r}function on(e){return e}import W from"process";import{err as j,handleError as J,ok as dt}from"@stacksjs/error-handling";import{ExitCode as G}from"@stacksjs/types";async function Q(e,t){let r=Array.isArray(e)?e:e.match(/(?:[^\s"]|"[^"]*")+/g);if(!r)return j(J(`Failed to parse command: ${r}`,t));let n=t?.cwd??W.cwd(),o=t?.timeoutMs,[i,l,a]=Array.isArray(t?.stdio)?t.stdio:[],s=t?.silent||t?.quiet,g=Bun.spawn(r,{stdin:t?.stdin??i??"inherit",stdout:s?"ignore":t?.stdout??l??"inherit",stderr:s?"ignore":t?.stderr??a??"inherit",cwd:n,env:{...W.env,...t?.env},onExit(x,T,w,S){Pe("spawn",x,T,w,S)}});if(t?.stdin==="pipe"&&t.input){if(g.stdin)g.stdin.write(t.input),g.stdin.end()}let m,b=await Promise.race([g.exited,new Promise((x)=>{if(!o)return;m=setTimeout(()=>{try{g.kill()}catch{}x(G.FatalError)},o)})]);if(m)clearTimeout(m);if(o&&b===G.FatalError&&g.exitCode===null)return j(J(`Command timed out after ${o}ms: ${h(r.join(" "))} in ${h(n)}`,t));if(b===G.Success)return dt(g);let y=g.signalCode;if(y==="SIGTERM"||y==="SIGINT"||y==="SIGKILL"||g.exitCode===null&&b!==G.Success)return j(Error(`Command terminated by ${y??"signal"}: ${r.join(" ")}`));return j(J(`Failed to execute command: ${h(r.join(" "))} in ${h(n)}`,t))}async function Ae(e,t){let r=Array.isArray(e)?e:e.match(/(?:[^\s"]|"[^"]*")+/g);if(!r)throw p.error(`Failed to parse command: ${r}`,t),Error(`Failed to parse command: ${r}`);let n=Bun.spawnSync(r,{...t,stdin:t?.stdin??"inherit",stdout:t?.stdout??"pipe",stderr:t?.stderr??"inherit",cwd:t?.cwd??W.cwd(),env:{...W.env,...t?.env},onExit(i,l,a,s){Pe("spawnSync",i,l,a,s)}}),o=n.stdout?.toString()??"";if(t?.throwOnError&&n.exitCode!==0){let l=((n.stderr?.toString()??"").trim()||o.trim()||"(no output)").split(`
|
|
3
3
|
`).slice(0,5).join(`
|
|
4
4
|
`);throw Error(`Command failed with exit code ${n.exitCode}: ${r.join(" ")}
|
|
5
|
-
${l}`)}return o}function
|
|
6
|
-
`)}function
|
|
7
|
-
`)}var
|
|
8
|
-
|
|
9
|
-
`),
|
|
10
|
-
`)}function
|
|
11
|
-
`)}
|
|
5
|
+
${l}`)}return o}function Pe(e,t,r,n,o){if(p.debug(`exitHandler: ${e}, exitCode: ${r}, signalCode: ${n}`),o)p.debug("Process error:",o.message)}import{handleError as kt}from"@stacksjs/error-handling";import{log as p}from"@stacksjs/logging";import{ExitCode as Le}from"@stacksjs/types";import{collect as mt}from"@stacksjs/collections";var u=!process.env.NO_COLOR&&(process.env.FORCE_COLOR?process.env.FORCE_COLOR!=="0":!!process.stdout?.isTTY),d={reset:u?"\x1B[0m":"",black:u?"\x1B[30m":"",red:u?"\x1B[31m":"",green:u?"\x1B[32m":"",yellow:u?"\x1B[33m":"",blue:u?"\x1B[34m":"",magenta:u?"\x1B[35m":"",cyan:u?"\x1B[36m":"",white:u?"\x1B[37m":"",gray:u?"\x1B[90m":"",lightRed:u?"\x1B[91m":"",lightGreen:u?"\x1B[92m":"",lightYellow:u?"\x1B[93m":"",lightBlue:u?"\x1B[94m":"",lightMagenta:u?"\x1B[95m":"",lightCyan:u?"\x1B[96m":"",lightGray:u?"\x1B[37m":"",bgBlack:u?"\x1B[40m":"",bgRed:u?"\x1B[41m":"",bgGreen:u?"\x1B[42m":"",bgYellow:u?"\x1B[43m":"",bgBlue:u?"\x1B[44m":"",bgMagenta:u?"\x1B[45m":"",bgCyan:u?"\x1B[46m":"",bgWhite:u?"\x1B[47m":"",bgGray:u?"\x1B[100m":"",bgLightRed:u?"\x1B[101m":"",bgLightGreen:u?"\x1B[102m":"",bgLightYellow:u?"\x1B[103m":"",bgLightBlue:u?"\x1B[104m":"",bgLightMagenta:u?"\x1B[105m":"",bgLightCyan:u?"\x1B[106m":"",bgLightGray:u?"\x1B[47m":"",bold:u?"\x1B[1m":"",dim:u?"\x1B[2m":"",italic:u?"\x1B[3m":"",underline:u?"\x1B[4m":"",inverse:u?"\x1B[7m":"",hidden:u?"\x1B[8m":"",strikethrough:u?"\x1B[9m":""},D="\x1B[",pt="\x1B]8;;",ft="\x1B]8;;\x07",je=(e)=>String(e);function k(e,t,r){return Math.min(Math.max(Math.floor(e),t),r)}function c(e,t=d.reset){return(r)=>{if(!u)return String(r);return`${e}${String(r)}${t}`}}function ht(e){return e.replace(/\x1B\]8;;[^\x07]*(?:\x07|\x1B\\)/g,"").replace(/\x1B\]8;;(?:\x07|\x1B\\)/g,"")}function O(e){return ht(e).replace(/\x1B\[[0-?]*[ -/]*[@-~]/g,"")}var Ge=O;function We(e){return Array.from(O(e)).length}var X=c(d.black),Z=c(d.red),L=c(d.green),ee=c(d.yellow),te=c(d.blue),ne=c(d.magenta),R=c(d.cyan),re=c(d.white),F=c(d.gray),oe=c(d.lightRed),ie=c(d.lightGreen),se=c(d.lightYellow),ae=c(d.lightBlue),le=c(d.lightMagenta),ce=c(d.lightCyan),Y=c(d.lightGray),ge=c(d.bgBlack),ue=c(d.bgRed),de=c(d.bgGreen),me=c(d.bgYellow),pe=c(d.bgBlue),fe=c(d.bgMagenta),E=c(d.bgCyan),he=c(d.bgWhite),be=c(d.bgGray),ye=c(d.bgLightRed),Ce=c(d.bgLightGreen),xe=c(d.bgLightYellow),we=c(d.bgLightBlue),ke=c(d.bgLightMagenta),$e=c(d.bgLightCyan),N=c(d.bgLightGray),C=c(d.bold),v=c(d.dim),h=c(d.italic),Fe=c(d.underline),ve=c(d.inverse),Oe=c(d.hidden),Be=c(d.strikethrough),Se=c(d.reset,"");function Ye(e){return c(`${D}38;5;${k(e,0,255)}m`)}function Ne(e){return c(`${D}48;5;${k(e,0,255)}m`)}function De(e,t,r){return c(`${D}38;2;${k(e,0,255)};${k(t,0,255)};${k(r,0,255)}m`)}function ze(e,t,r){return c(`${D}48;2;${k(e,0,255)};${k(t,0,255)};${k(r,0,255)}m`)}function _e(e,t){let r=(o,i)=>{let l=String(o);if(!u)return l;return`${pt}${i}\x07${l}${ft}`};if(typeof t==="string")return r(e,t);let n=String(e);return(o)=>r(o,n)}var bt={black:X,red:Z,green:L,yellow:ee,blue:te,magenta:ne,cyan:R,white:re,gray:F,lightRed:oe,lightGreen:ie,lightYellow:se,lightBlue:ae,lightMagenta:le,lightCyan:ce,lightGray:Y,bgBlack:ge,bgRed:ue,bgGreen:de,bgYellow:me,bgBlue:pe,bgMagenta:fe,bgCyan:E,bgWhite:he,bgGray:be,bgLightRed:ye,bgLightGreen:Ce,bgLightYellow:xe,bgLightBlue:we,bgLightMagenta:ke,bgLightCyan:$e,bgLightGray:N,bold:C,dim:v,italic:h,underline:Fe,inverse:ve,hidden:Oe,strikethrough:Be,reset:Se};function qe(e){return bt[e]??je}function mn(e,t){if(typeof t==="function")return t(e);return qe(t)(e)}function yt(){return u}var pn={black:X,red:Z,green:L,yellow:ee,blue:te,magenta:ne,cyan:R,white:re,gray:F,lightRed:oe,lightGreen:ie,lightYellow:se,lightBlue:ae,lightMagenta:le,lightCyan:ce,lightGray:Y,bgBlack:ge,bgRed:ue,bgGreen:de,bgYellow:me,bgBlue:pe,bgMagenta:fe,bgCyan:E,bgWhite:he,bgGray:be,bgLightRed:ye,bgLightGreen:Ce,bgLightYellow:xe,bgLightBlue:we,bgLightMagenta:ke,bgLightCyan:$e,bgLightGray:N,bold:C,dim:v,italic:h,underline:Fe,inverse:ve,hidden:Oe,strikethrough:Be,reset:Se,ansi256:Ye,ansi256Bg:Ne,trueColor:De,trueColorBg:ze,link:_e,stripColors:Ge},fn={black:X,red:Z,green:L,yellow:ee,blue:te,magenta:ne,cyan:R,white:re,gray:F,lightRed:oe,lightGreen:ie,lightYellow:se,lightBlue:ae,lightMagenta:le,lightCyan:ce,lightGray:Y,bgBlack:ge,bgRed:ue,bgGreen:de,bgYellow:me,bgBlue:pe,bgMagenta:fe,bgCyan:E,bgWhite:he,bgGray:be,bgLightRed:ye,bgLightGreen:Ce,bgLightYellow:xe,bgLightBlue:we,bgLightMagenta:ke,bgLightCyan:$e,bgLightGray:N,bold:C,dim:v,italic:h,underline:Fe,inverse:ve,hidden:Oe,strikethrough:Be,reset:Se,ansi256:Ye,ansi256Bg:Ne,trueColor:De,trueColorBg:ze,link:_e,stripColors:Ge,grey:F,lightGrey:Y,bgLightGrey:N,supportsColor:yt};function Ct(e,t,r,n){let o=We(e);if(o>=t)return e;let i=n[0]||" ",l=t-o;if(r==="right")return`${i.repeat(l)}${e}`;if(r==="center"){let a=Math.floor(l/2),s=l-a;return`${i.repeat(a)}${e}${i.repeat(s)}`}return`${e}${i.repeat(l)}`}function z(e){return Math.max(0,...e.map(We))}function _(e,t,r="left"){let n=String(e).split(/\r?\n/),o=typeof t==="object"?t:void 0,i=typeof t==="number"?t:o?.width??z(n),l=o?.align??r,a=o?.padChar??" ";return n.map((s)=>Ct(s,Math.max(0,i),l,a)).join(`
|
|
6
|
+
`)}function hn(e,t){return _(e,t,"left")}function bn(e,t){let r=String(e).split(/\r?\n/);return _(e,t??process.stdout?.columns??z(r),"right")}function yn(e,t){let r=String(e).split(/\r?\n/);return _(e,t??process.stdout?.columns??z(r),"center")}var xt={single:{topLeft:"\u250C",topRight:"\u2510",bottomLeft:"\u2514",bottomRight:"\u2518",horizontal:"\u2500",vertical:"\u2502"},double:{topLeft:"\u2554",topRight:"\u2557",bottomLeft:"\u255A",bottomRight:"\u255D",horizontal:"\u2550",vertical:"\u2551"},round:{topLeft:"\u256D",topRight:"\u256E",bottomLeft:"\u2570",bottomRight:"\u256F",horizontal:"\u2500",vertical:"\u2502"}};function Ke(e,t={}){let r=String(e).split(/\r?\n/),n=xt[t.borderStyle??"single"],o=Math.max(0,t.padding??1),i=Math.max(0,t.margin??0),l=t.align??"left",a=z(r),s=a+o*2,g=typeof t.borderColor==="function"?t.borderColor:t.borderColor?qe(t.borderColor):je,b=g((()=>{if(!t.title)return`${n.topLeft}${n.horizontal.repeat(s)}${n.topRight}`;let S=` ${O(String(t.title))} `.slice(0,s),U=n.horizontal.repeat(Math.max(0,s-S.length));return`${n.topLeft}${S}${U}${n.topRight}`})()),y=g(`${n.bottomLeft}${n.horizontal.repeat(s)}${n.bottomRight}`),x=r.map((w)=>{let S=_(w,{align:l,width:a}),U=`${" ".repeat(o)}${S}${" ".repeat(o)}`;return`${g(n.vertical)}${U}${g(n.vertical)}`}),T=" ".repeat(i);return[b,...x,y].map((w)=>`${T}${w}`).join(`
|
|
7
|
+
`)}var Cn=mt(["The best way to get started is to quit talking and begin doing.","The pessimist sees difficulty in every opportunity. The optimist sees opportunity in every difficulty.","Don\u2019t let yesterday take up too much of today.","You learn more from failure than from success. Don\u2019t let it stop you. Failure builds character.","It\u2019s not whether you get knocked down, it\u2019s whether you get up.","If you are working on something that you really care about, you don\u2019t have to be pushed. The vision pulls you.","People who are crazy enough to think they can change the world, are the ones who do.","Failure will never overtake me if my determination to succeed is strong enough.","Entrepreneurs are great at dealing with uncertainty and also very good at minimizing risk. That\u2019s the classic entrepreneur.","We may encounter many defeats but we must not be defeated.","Knowing is not enough; we must apply. Wishing is not enough; we must do.","Imagine your life is perfect in every respect; what would it look like?","We generate fears while we sit. We overcome them by action.","Whether you think you can or think you can\u2019t, you\u2019re right.","Security is mostly a superstition. Life is either a daring adventure or nothing."]);var He="0.75.233";async function Bn(e,t){return new Promise((r)=>{if(t?.quiet===!1)console.log(),console.log(R(C("Stacks CLI"))+v(` v${He}`)),console.log();if(p.info(`Running ${E(h(C(` ${e} `)))}`),t?.showPerformance===!1||t?.quiet)return r(0);return r(performance.now())})}function Sn(e,t,r){let n={type:"success",useSeconds:!0,...t};return n.message=t?.message||e,new Promise((o)=>{if(r)return kt(r),o(Le.FatalError);if(n?.startTime){let i=performance.now()-n.startTime;if(n.useSeconds)i=i/1000,i=Math.round(i*100)/100;if(n.quiet===!0)return o(Le.Success);if(r)p.error(`[${i.toFixed(2)}${n.useSeconds?"s":"ms"}] Failed`);else if(n.type==="error")p.error(`[${i.toFixed(2)}${n.useSeconds?"s":"ms"}] ${n.message??"Failed"}`);else if(n.type==="warning")p.warn(`[${i.toFixed(2)}${n.useSeconds?"s":"ms"}] ${n.message??"Complete"}`);else if(n.type==="info")p.info(`${v(F(`[${i.toFixed(2)}${n.useSeconds?"s":"ms"}]`))} ${n.message??"Complete"}`);else p.success(`${v(F(C(`[${i.toFixed(2)}${n.useSeconds?"s":"ms"}]`)))} ${C(L(n.message??"Complete"))}`)}else if(n?.type==="info")p.info(e);else if(n?.type==="error")p.error(e);else if(n?.type==="warning")p.warn(e);else if(n?.type==="success"&&n?.quiet!==!0)p.success(e);p.flush().catch(()=>{}).then(()=>o(Le.Success))})}import q from"process";function Ue(e){if(!e)return!1;return e.startsWith("--")}function $t(e){return e.startsWith("-")&&!Ue(e)}function Re(e){if(e==="true")return!0;if(e==="false")return!1;let t=Number.parseFloat(e);if(!Number.isNaN(t))return t;return e.replace(/"/g,"")}function Ft(e,t,r,n){let[o,i]=e.slice(2).split("=");if(i!==void 0)n[o]=Re(i);else if(r+1<t.length&&!t[r+1]?.startsWith("-"))n[o]=t[r+1],r++;else n[o]=!0;return r}function vt(e,t,r,n){let[o,i]=e.slice(1).split("=");if(o===void 0)return r;if(i!==void 0&&o!==void 0)for(let l=0;l<o.length;l++)n[o[l]]=Re(i);else for(let l=0;l<o.length;l++)if(r+1<t.length&&l===o.length-1&&!t[r+1]?.startsWith("-"))n[o[l]]=Re(t[r+1]),r++;else n[o[l]]=!0;return r}function Ot(e){if(e===void 0)e=q.argv.slice(2);let t=[],r={};for(let n=0;n<e.length;n++){let o=e[n];if(!o)continue;if(Ue(o))n=Ft(o,e,n,r);else if($t(o))n=vt(o,e,n,r);else t.push(o)}return{args:t,options:r}}function In(e){if(e===void 0)e=q.argv.slice(2);return Ot(e).args}function Tn(e){e=e||{};let t={dryRun:!1,quiet:!1,verbose:!1},r=q.argv.slice(2);for(let n=0;n<r.length;n++){let o=r[n];if(o?.startsWith("--")){let l=o.substring(2).replace(/-([a-z])/gi,(a)=>a[1]?a[1].toUpperCase():"");if(n+1<r.length&&!r?.[n+1]?.startsWith("--"))if(r?.[n+1]==="true"||r?.[n+1]==="false")e[l]=r[n+1]==="true",n++;else e[l]=r[n+1],n++;else e[l]=!0}}if(Object.keys(e).length===0)return{};return{...t,...e}}function Bt(e){let t=[];for(let[r,n]of Object.entries(e)){if(r==="--"||r==="_"||n===!1||n===void 0||n===null)continue;if(typeof n==="object"&&!Array.isArray(n))continue;if(typeof n==="function"||typeof n==="symbol")continue;if(n===!0)t.push(`--${r}`);else t.push(`--${r}`,String(n))}return t}function St(e){if(Array.isArray(e)){if(e=Array.from(new Set(e)),Array.isArray(e)&&e[0]&&!e[0].startsWith("-"))e.shift();return e.join(" ")}if(typeof e==="object"&&e!==null)return Bt(e).join(" ");return St(q.argv.slice(2))}import{writeSync as Lt}from"fs";import{format as K}from"util";function jn(...e){Je(1,K(...e))}function Gn(...e){Je(2,K(...e))}async function Wn(...e){await Ve(process.stdout,K(...e))}async function Yn(...e){await Ve(process.stderr,K(...e))}function Ve(e,t){return new Promise((r,n)=>{let o=(i)=>{e.off("error",o),n(i)};e.once("error",o);try{e.write(`${t}
|
|
8
|
+
`,"utf8",(i)=>{if(i)setImmediate(()=>e.off("error",o)),n(i);else e.off("error",o),r()})}catch(i){e.off("error",o),n(i)}})}function Je(e,t){let r=Buffer.from(`${t}
|
|
9
|
+
`),n=0;while(n<r.length)n+=Lt(e,r,n,r.length-n)}import f from"process";import{createInterface as Rt}from"readline";var _n=f.stdin.destroy;f.stdin.destroy=function(e){if(e)this.emit("error",e);return this};f.on("SIGINT",()=>{console.log(`
|
|
10
|
+
`),f.exit(130)});var M=null;function Mt(){if(!M){let e=f.stdin.isTTY&&f.stdout.isTTY;if(M=Rt({input:f.stdin,output:f.stdout,terminal:e}),e&&typeof f.stdin.setRawMode==="function")M.on("SIGINT",()=>{f.emit("SIGINT")});M.once("close",()=>{M=null})}return M}var H=Symbol("stdin-eof");function Qe(e){return new Promise((t)=>{let r=Mt(),n=!1,o=(l)=>{if(n)return;n=!0,r.off("close",i),t(l)},i=()=>o(H);r.once("close",i);try{r.question(e,o)}catch{o(H)}})}function Xe(){if(f.argv.includes("--no-interaction"))return!1;if(f.env.CI)return!1;return Boolean(f.stdin.isTTY&&f.stdout.isTTY)}async function A(e){if(!Xe())return"";let t=await Qe(e);return t===H?"":t}function Ze(e,t){let r=e.toLowerCase().trim();if(!r)return t;if(r==="y"||r==="yes")return!0;if(r==="n"||r==="no")return!1;return t}async function qn(e){let t=typeof e==="string"?{message:e}:e,r=t.initial??!1,n=r?" (Y/n) ":" (y/N) ";if(!Xe())return null;let o=await Qe(`${t.message}${n}`);if(o===H)return null;return Ze(o,r)}async function It(e){let t=typeof e==="string"?{message:e}:e,r=t.initial??!1,n=r?" (Y/n) ":" (y/N) ",o=await A(`${t.message}${n}`);return Ze(o,r)}async function Tt(e){let t=typeof e==="string"?{message:e}:e,r=t.placeholder||t.initial||"",n=r?` (${r}) `:" ";return(await A(`${t.message}${n}`)).trim()||t.initial||""}async function Et(e){console.log(e.message),e.choices.forEach((o,i)=>{let l=i===(e.initial??0)?">":" ";console.log(`${l} ${i+1}. ${o.label}`)});let t=await A("Select (number): "),r=Number.parseInt(t.trim(),10)-1,n=e.choices[r]??e.choices[e.initial??0];if(!n)throw Error("select prompt: no choices available");return n.value}async function At(e){console.log(e.message),console.log("(Enter numbers separated by commas)"),e.choices.forEach((o,i)=>{console.log(` ${i+1}. ${o.label}`)});let r=(await A("Select (e.g., 1,3,4): ")).split(",").map((o)=>Number.parseInt(o.trim(),10)-1),n=[];for(let o of r){let i=e.choices[o];if(i)n.push(i.value)}return n}async function Pt(e){return(await A(`${(typeof e==="string"?{message:e}:e).message} `)).trim()}var Kn={text:Tt,confirm:It,select:Et,multiselect:At,password:Pt};import{handleError as jt}from"@stacksjs/error-handling";async function Gt(e,t){let r={...t,stdin:t?.stdin??"inherit",verbose:t?.verbose??!1};return await Q(e,r)}async function Jn(e,t){let r={...t,stdio:[t?.stdin??"inherit","pipe","pipe"],verbose:t?.verbose??!1};return await Q(e,r)}async function Qn(e,t){let r={...t,stdio:[t?.stdin??"inherit","pipe","pipe"],verbose:t?.verbose??!1};return await Ae(e,r)}async function Xn(e,t){let r=[];for(let n of e){let o=await Gt(n,t);if(o.isErr)throw jt("Error during runCommands",o.error),o.error;r.push(o)}return r}import Wt from"process";var Yt=["SIGINT","SIGTERM","SIGHUP"],I=new Map,et=!1;function Nt(){if(et)return;et=!0;for(let e of Yt)Wt.on(e,async()=>{for(let[t,r]of I)try{await r()}catch(n){console.error(`[signals] cleanup '${t}' threw:`,n)}})}function tr(e,t){return Nt(),I.set(e,t),()=>{if(I.get(e)===t)I.delete(e)}}function nr(e){I.delete(e)}function rr(){return[...I.keys()]}var tt=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],P=process.stdout.isTTY&&!process.env.CI;function Dt(e){let t=e||"",r=0,n=null,o=!1,i=()=>{if(P)process.stdout.write("\r\x1B[K")},l=()=>{if(!P)return;i();let a=tt[r];process.stdout.write(`${a} ${t}`),r=(r+1)%tt.length};return{start(a){if(a)t=a;if(o)return;if(o=!0,P)l(),n=setInterval(l,80);else if(t)console.log(` ${t}`)},stop(a){if(o=!1,n)clearInterval(n),n=null;if(i(),a)console.log(a)},update(a){if(t=a,!P&&o)console.log(` ${a}`)},succeed(a){let s=a||t;if(o=!1,n)clearInterval(n),n=null;i(),console.log(`\u2713 ${s}`)},fail(a){let s=a||t;if(o=!1,n)clearInterval(n),n=null;i(),console.error(`\u2717 ${s}`)},get text(){return t},set text(a){if(t=a,P&&o)l()},get isSpinning(){return o}}}async function ir(e,t,r){let n=Dt(e);n.start();try{let o=await t();return n.succeed(r?.successMessage||e),o}catch(o){throw n.fail(r?.failMessage||`Failed: ${e}`),o}}import B from"process";var nt="\r\x1B[2K";function zt(){return{columns:B.stdout.columns??80,rows:B.stdout.rows??24}}function _t(){return Boolean(B.stdout.isTTY)&&!B.env.CI}function cr(e,t){console.log(Ke(e,t===void 0?{}:{title:t}))}function gr(e,t={}){let n=(t.columns??[...new Set(e.flatMap((s)=>Object.keys(s)))]).map((s)=>typeof s==="string"?{key:s}:s);if(n.length===0)return"";let o=(s,g)=>{let m=s[g.key];return m===void 0||m===null?"":String(m)},i=n.map((s)=>{let g=t.header===!1?"":s.header??s.key;return Math.max(O(g).length,...e.map((m)=>O(o(m,s)).length))}),l=(s,g,m)=>{let b=Math.max(0,g-O(s).length);return m==="right"?" ".repeat(b)+s:s+" ".repeat(b)},a=[];if(t.header!==!1)a.push(n.map((s,g)=>l(s.header??s.key,i[g],s.align)).join(" ").trimEnd()),a.push(n.map((s,g)=>"-".repeat(i[g])).join(" "));for(let s of e)a.push(n.map((g,m)=>l(o(s,g),i[m],g.align)).join(" ").trimEnd());return a.join(`
|
|
11
|
+
`)}function ur(e){if(!Number.isFinite(e.total)||e.total<=0)throw TypeError(`progress() needs a positive total; got ${e.total}`);let t=e.format??"|{bar}| {percentage}% | {value}/{total}",r=e.width??Math.max(10,Math.floor(zt().columns/3)),n=_t(),o=0,i=-1,l=(s)=>{let g=Math.min(1,o/e.total),m=Math.round(g*r),b={bar:"\u2588".repeat(m)+"\u2591".repeat(r-m),percentage:Math.round(g*100),value:o,total:e.total,...s},y=t.replace(/\{(\w+)\}/g,(T,w)=>String(b[w]??T));if(n){B.stdout.write(`${nt}${y}`);return}let x=Math.floor(g*10);if(x>i)i=x,console.log(y)},a={update(s,g={}){o=Math.max(0,Math.min(e.total,s)),l(g)},increment(s=1){a.update(o+s)},stop(s){if(n)B.stdout.write(nt);if(s)console.log(s);else if(n)B.stdout.write(`
|
|
12
|
+
`)},get value(){return o},get total(){return e.total}};return a}async function dr(e){let t=[];for(let r of e){let n=Date.now(),o=r.skip?.();if(o){console.log(`- ${r.title}${typeof o==="string"?` (${o})`:""}`),t.push({title:r.title,status:"skipped",durationMs:0});continue}try{await r.task(),console.log(`\u2713 ${r.title}`),t.push({title:r.title,status:"done",durationMs:Date.now()-n})}catch(i){throw console.log(`\u2717 ${r.title}`),t.push({title:r.title,status:"failed",error:i instanceof Error?i:Error(String(i)),durationMs:Date.now()-n}),i}}return t}export{Jt as CLI,_ as align,Ye as ansi256,Ne as ansi256Bg,ct as applyAliases,ge as bgBlack,pe as bgBlue,E as bgCyan,be as bgGray,de as bgGreen,we as bgLightBlue,$e as bgLightCyan,N as bgLightGray,Ce as bgLightGreen,ke as bgLightMagenta,ye as bgLightRed,xe as bgLightYellow,fe as bgMagenta,ue as bgRed,he as bgWhite,me as bgYellow,X as black,te as blue,C as bold,Ke as box,Bt as buddyOptionArgs,St as buddyOptions,yn as centerAlign,Xt as cli,mn as colorize,pn as colors,It as confirm,qn as confirmOrNull,R as cyan,rn as defineCommand,on as defineCommands,v as dim,at as discoverCommandFiles,Q as exec,Ae as execSync,qe as getColor,zt as getTerminalSize,F as gray,L as green,Oe as hidden,Kt as installPackage,Ht as installStack,Bn as intro,ve as inverse,_t as isInteractive,h as italic,fn as kolorist,hn as leftAlign,ae as lightBlue,ce as lightCyan,Y as lightGray,ie as lightGreen,le as lightMagenta,oe as lightRed,se as lightYellow,_e as link,rr as listSignalHandlers,Ee as loadCommandRegistry,nn as loadCommands,p as log,ne as magenta,At as multiselect,cr as note,nr as offSignal,tr as onSignal,Qt as onUnknownSubcommand,Sn as outro,In as parseArgs,Ot as parseArgv,Tn as parseOptions,Pt as password,jn as print,Wn as printAsync,Gn as printError,Yn as printErrorAsync,ur as progress,Kn as prompts,Xe as promptsAreInteractive,Cn as quotes,Z as red,Se as reset,lt as resolveCommands,bn as rightAlign,Gt as runCommand,Qn as runCommandSync,Xn as runCommands,Jn as runProcess,Et as select,Dt as spinner,Be as strikethrough,O as stripAnsi,Ge as stripColors,gr as table,dr as tasks,Tt as text,De as trueColor,ze as trueColorBg,Fe as underline,re as white,ir as withSpinner,ee as yellow};
|
package/dist/output.d.ts
CHANGED
|
@@ -6,3 +6,7 @@
|
|
|
6
6
|
export declare function print(...args: unknown[]): void;
|
|
7
7
|
/** Print a plain diagnostic to stderr without changing the process exit code. */
|
|
8
8
|
export declare function printError(...args: unknown[]): void;
|
|
9
|
+
/** Print to stdout, awaiting completion even when a pipe applies backpressure. */
|
|
10
|
+
export declare function printAsync(...args: unknown[]): Promise<void>;
|
|
11
|
+
/** Print to stderr, awaiting completion without changing the exit code. */
|
|
12
|
+
export declare function printErrorAsync(...args: unknown[]): Promise<void>;
|
package/dist/output.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{writeSync as
|
|
3
|
-
|
|
2
|
+
import{writeSync as u}from"fs";import{format as e}from"util";function m(...r){c(1,e(...r))}function d(...r){c(2,e(...r))}async function y(...r){await s(process.stdout,e(...r))}async function a(...r){await s(process.stderr,e(...r))}function s(r,f){return new Promise((t,o)=>{let i=(n)=>{r.off("error",i),o(n)};r.once("error",i);try{r.write(`${f}
|
|
3
|
+
`,"utf8",(n)=>{if(n)setImmediate(()=>r.off("error",i)),o(n);else r.off("error",i),t()})}catch(n){r.off("error",i),o(n)}})}function c(r,f){let t=Buffer.from(`${f}
|
|
4
|
+
`),o=0;while(o<t.length)o+=u(r,t,o,t.length-o)}export{m as print,y as printAsync,d as printError,a as printErrorAsync};
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@stacksjs/cli",
|
|
3
3
|
"type": "module",
|
|
4
4
|
"sideEffects": false,
|
|
5
|
-
"version": "0.75.
|
|
5
|
+
"version": "0.75.233",
|
|
6
6
|
"description": "TypeScript framework for CLI artisans. Build beautiful console apps with ease.",
|
|
7
7
|
"author": "Chris Breuer",
|
|
8
8
|
"contributors": [
|
|
@@ -70,16 +70,16 @@
|
|
|
70
70
|
},
|
|
71
71
|
"dependencies": {
|
|
72
72
|
"@stacksjs/clapp": "^0.2.12",
|
|
73
|
-
"@stacksjs/collections": "0.75.
|
|
74
|
-
"@stacksjs/error-handling": "0.75.
|
|
75
|
-
"@stacksjs/logging": "0.75.
|
|
76
|
-
"@stacksjs/types": "0.75.
|
|
73
|
+
"@stacksjs/collections": "0.75.233",
|
|
74
|
+
"@stacksjs/error-handling": "0.75.233",
|
|
75
|
+
"@stacksjs/logging": "0.75.233",
|
|
76
|
+
"@stacksjs/types": "0.75.233"
|
|
77
77
|
},
|
|
78
78
|
"devDependencies": {
|
|
79
|
-
"@stacksjs/config": "0.75.
|
|
80
|
-
"@stacksjs/path": "0.75.
|
|
81
|
-
"@stacksjs/utils": "0.75.
|
|
82
|
-
"@stacksjs/validation": "0.75.
|
|
79
|
+
"@stacksjs/config": "0.75.233",
|
|
80
|
+
"@stacksjs/path": "0.75.233",
|
|
81
|
+
"@stacksjs/utils": "0.75.233",
|
|
82
|
+
"@stacksjs/validation": "0.75.233",
|
|
83
83
|
"better-dx": "^0.2.24"
|
|
84
84
|
}
|
|
85
85
|
}
|