@stacksjs/cli 0.75.120 → 0.75.122
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.d.ts +1 -0
- package/dist/index.js +8 -7
- package/dist/output.d.ts +8 -0
- package/dist/output.js +3 -0
- package/package.json +9 -9
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import Re from"process";async function Me(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
|
|
2
|
+
import Re from"process";async function Me(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??Re.cwd(),stdout:t.silent?"ignore":"inherit",stderr:t.silent?"ignore":"inherit",stdin:"ignore",env:Re.env}).exited;if(i!==0)throw Error(`Failed to install ${e} (exit code ${i})`)}async function qt(e,t){return Me(e,t??{silent:!0})}async function Kt(e,t){return Me(`@stacksjs/${e}`,t??{silent:!0})}import{CLI as Vt,cli as nt,onUnknownSubcommand as Jt}from"@stacksjs/clapp";function Qt(e,t){if(typeof e==="object")t=e,e=t.name;return nt(e||"buddy")}import{existsSync as U,readdirSync as rt}from"fs";import{join as Ie}from"path";var ot=/(?:\.test|\.spec|\.bench|\.d)\.ts$/;function it(e){return e.endsWith(".ts")&&!ot.test(e)&&!e.startsWith("_")}function st(e){if(!U(e))return[];let t=[],r=(n,o)=>{for(let i of rt(n,{withFileTypes:!0})){if(i.name.startsWith(".")||i.name==="node_modules")continue;if(i.isDirectory()){r(Ie(n,i.name),`${o}${i.name}/`);continue}if(it(i.name))t.push(`${o}${i.name.slice(0,-3)}`)}};return r(e,""),t.sort()}async function Te(e){if(!e||!U(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 at(e){let{commandsDir:t}=e,r=e.registry??(await Te(e.registryPath)).registry,n=st(t),o=new Map;for(let l of n)o.set(l,{file:l,path:Ie(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 lt(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 tn(e,t){let r=t.onError??(()=>{}),n=t.onDebug??(()=>{});if(!U(t.commandsDir))return n(`No ${t.commandsDir} directory, skipping application commands.`),[];let o=t.registry?{registry:t.registry}:await Te(t.registryPath);if(o.error)r(`Could not read the command registry at ${t.registryPath}`,o.error);let i=await at({...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)ct(e,a.signature,g,m,n);l.push(a)}catch(s){r(`Failed to load command ${a.file}`,s)}}return l}function ct(e,t,r,n,o){if(t&<(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 nn(e){if(typeof e==="function")return e;return(t)=>gt(t,e)}function gt(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 rn(e){return e}import Y from"process";import{err as A,handleError as V,ok as ut}from"@stacksjs/error-handling";import{ExitCode as P}from"@stacksjs/types";async function J(e,t){let r=Array.isArray(e)?e:e.match(/(?:[^\s"]|"[^"]*")+/g);if(!r)return A(V(`Failed to parse command: ${r}`,t));let n=t?.cwd??Y.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:{...Y.env,...t?.env},onExit(x,T,w,S){Ee("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(P.FatalError)},o)})]);if(m)clearTimeout(m);if(o&&b===P.FatalError&&g.exitCode===null)return A(V(`Command timed out after ${o}ms: ${h(r.join(" "))} in ${h(n)}`,t));if(b===P.Success)return ut(g);let y=g.signalCode;if(y==="SIGTERM"||y==="SIGINT"||y==="SIGKILL"||g.exitCode===null&&b!==P.Success)return A(Error(`Command terminated by ${y??"signal"}: ${r.join(" ")}`));return A(V(`Failed to execute command: ${h(r.join(" "))} in ${h(n)}`,t))}async function je(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??Y.cwd(),env:{...Y.env,...t?.env},onExit(i,l,a,s){Ee("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 Ee(e,t,r,n,o){if(p.debug(`exitHandler: ${e}, exitCode: ${r}, signalCode: ${n}`),o)p.debug("Process error:",o.message)}import{handleError as
|
|
6
|
-
`)}function
|
|
7
|
-
`)}var
|
|
8
|
-
`),
|
|
9
|
-
`)}function
|
|
10
|
-
`)}
|
|
5
|
+
${l}`)}return o}function Ee(e,t,r,n,o){if(p.debug(`exitHandler: ${e}, exitCode: ${r}, signalCode: ${n}`),o)p.debug("Process error:",o.message)}import{handleError as wt}from"@stacksjs/error-handling";import{log as p}from"@stacksjs/logging";import{ExitCode as Se}from"@stacksjs/types";import{collect as dt}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[",mt="\x1B]8;;",pt="\x1B]8;;\x07",Ge=(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 ft(e){return e.replace(/\x1B\]8;;[^\x07]*(?:\x07|\x1B\\)/g,"").replace(/\x1B\]8;;(?:\x07|\x1B\\)/g,"")}function O(e){return ft(e).replace(/\x1B\[[0-?]*[ -/]*[@-~]/g,"")}var Ae=O;function Pe(e){return Array.from(O(e)).length}var Q=c(d.black),X=c(d.red),L=c(d.green),Z=c(d.yellow),ee=c(d.blue),te=c(d.magenta),R=c(d.cyan),ne=c(d.white),F=c(d.gray),re=c(d.lightRed),oe=c(d.lightGreen),ie=c(d.lightYellow),se=c(d.lightBlue),ae=c(d.lightMagenta),le=c(d.lightCyan),W=c(d.lightGray),ce=c(d.bgBlack),ge=c(d.bgRed),ue=c(d.bgGreen),de=c(d.bgYellow),me=c(d.bgBlue),pe=c(d.bgMagenta),j=c(d.bgCyan),fe=c(d.bgWhite),he=c(d.bgGray),be=c(d.bgLightRed),ye=c(d.bgLightGreen),Ce=c(d.bgLightYellow),xe=c(d.bgLightBlue),we=c(d.bgLightMagenta),ke=c(d.bgLightCyan),N=c(d.bgLightGray),C=c(d.bold),v=c(d.dim),h=c(d.italic),$e=c(d.underline),Fe=c(d.inverse),ve=c(d.hidden),Oe=c(d.strikethrough),Be=c(d.reset,"");function Ye(e){return c(`${D}38;5;${k(e,0,255)}m`)}function We(e){return c(`${D}48;5;${k(e,0,255)}m`)}function Ne(e,t,r){return c(`${D}38;2;${k(e,0,255)};${k(t,0,255)};${k(r,0,255)}m`)}function De(e,t,r){return c(`${D}48;2;${k(e,0,255)};${k(t,0,255)};${k(r,0,255)}m`)}function ze(e,t){let r=(o,i)=>{let l=String(o);if(!u)return l;return`${mt}${i}\x07${l}${pt}`};if(typeof t==="string")return r(e,t);let n=String(e);return(o)=>r(o,n)}var ht={black:Q,red:X,green:L,yellow:Z,blue:ee,magenta:te,cyan:R,white:ne,gray:F,lightRed:re,lightGreen:oe,lightYellow:ie,lightBlue:se,lightMagenta:ae,lightCyan:le,lightGray:W,bgBlack:ce,bgRed:ge,bgGreen:ue,bgYellow:de,bgBlue:me,bgMagenta:pe,bgCyan:j,bgWhite:fe,bgGray:he,bgLightRed:be,bgLightGreen:ye,bgLightYellow:Ce,bgLightBlue:xe,bgLightMagenta:we,bgLightCyan:ke,bgLightGray:N,bold:C,dim:v,italic:h,underline:$e,inverse:Fe,hidden:ve,strikethrough:Oe,reset:Be};function _e(e){return ht[e]??Ge}function dn(e,t){if(typeof t==="function")return t(e);return _e(t)(e)}function bt(){return u}var mn={black:Q,red:X,green:L,yellow:Z,blue:ee,magenta:te,cyan:R,white:ne,gray:F,lightRed:re,lightGreen:oe,lightYellow:ie,lightBlue:se,lightMagenta:ae,lightCyan:le,lightGray:W,bgBlack:ce,bgRed:ge,bgGreen:ue,bgYellow:de,bgBlue:me,bgMagenta:pe,bgCyan:j,bgWhite:fe,bgGray:he,bgLightRed:be,bgLightGreen:ye,bgLightYellow:Ce,bgLightBlue:xe,bgLightMagenta:we,bgLightCyan:ke,bgLightGray:N,bold:C,dim:v,italic:h,underline:$e,inverse:Fe,hidden:ve,strikethrough:Oe,reset:Be,ansi256:Ye,ansi256Bg:We,trueColor:Ne,trueColorBg:De,link:ze,stripColors:Ae},pn={black:Q,red:X,green:L,yellow:Z,blue:ee,magenta:te,cyan:R,white:ne,gray:F,lightRed:re,lightGreen:oe,lightYellow:ie,lightBlue:se,lightMagenta:ae,lightCyan:le,lightGray:W,bgBlack:ce,bgRed:ge,bgGreen:ue,bgYellow:de,bgBlue:me,bgMagenta:pe,bgCyan:j,bgWhite:fe,bgGray:he,bgLightRed:be,bgLightGreen:ye,bgLightYellow:Ce,bgLightBlue:xe,bgLightMagenta:we,bgLightCyan:ke,bgLightGray:N,bold:C,dim:v,italic:h,underline:$e,inverse:Fe,hidden:ve,strikethrough:Oe,reset:Be,ansi256:Ye,ansi256Bg:We,trueColor:Ne,trueColorBg:De,link:ze,stripColors:Ae,grey:F,lightGrey:W,bgLightGrey:N,supportsColor:bt};function yt(e,t,r,n){let o=Pe(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(Pe))}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)=>yt(s,Math.max(0,i),l,a)).join(`
|
|
6
|
+
`)}function fn(e,t){return _(e,t,"left")}function hn(e,t){let r=String(e).split(/\r?\n/);return _(e,t??process.stdout?.columns??z(r),"right")}function bn(e,t){let r=String(e).split(/\r?\n/);return _(e,t??process.stdout?.columns??z(r),"center")}var Ct={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 qe(e,t={}){let r=String(e).split(/\r?\n/),n=Ct[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?_e(t.borderColor):Ge,b=g((()=>{if(!t.title)return`${n.topLeft}${n.horizontal.repeat(s)}${n.topRight}`;let S=` ${O(String(t.title))} `.slice(0,s),H=n.horizontal.repeat(Math.max(0,s-S.length));return`${n.topLeft}${S}${H}${n.topRight}`})()),y=g(`${n.bottomLeft}${n.horizontal.repeat(s)}${n.bottomRight}`),x=r.map((w)=>{let S=_(w,{align:l,width:a}),H=`${" ".repeat(o)}${S}${" ".repeat(o)}`;return`${g(n.vertical)}${H}${g(n.vertical)}`}),T=" ".repeat(i);return[b,...x,y].map((w)=>`${T}${w}`).join(`
|
|
7
|
+
`)}var yn=dt(["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 Ke="0.75.122";async function On(e,t){return new Promise((r)=>{if(t?.quiet===!1)console.log(),console.log(R(C("Stacks CLI"))+v(` v${Ke}`)),console.log();if(p.info(`Running ${j(h(C(` ${e} `)))}`),t?.showPerformance===!1||t?.quiet)return r(0);return r(performance.now())})}function Bn(e,t,r){let n={type:"success",useSeconds:!0,...t};return n.message=t?.message||e,new Promise((o)=>{if(r)return wt(r),o(Se.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(Se.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(Se.Success))})}import q from"process";function He(e){if(!e)return!1;return e.startsWith("--")}function kt(e){return e.startsWith("-")&&!He(e)}function Le(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 $t(e,t,r,n){let[o,i]=e.slice(2).split("=");if(i!==void 0)n[o]=Le(i);else if(r+1<t.length&&!t[r+1]?.startsWith("-"))n[o]=t[r+1],r++;else n[o]=!0;return r}function Ft(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]]=Le(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]]=Le(t[r+1]),r++;else n[o[l]]=!0;return r}function vt(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(He(o))n=$t(o,e,n,r);else if(kt(o))n=Ft(o,e,n,r);else t.push(o)}return{args:t,options:r}}function Mn(e){if(e===void 0)e=q.argv.slice(2);return vt(e).args}function In(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 Ot(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 Bt(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 Ot(e).join(" ");return Bt(q.argv.slice(2))}import{writeSync as St}from"fs";import{format as Ue}from"util";function Gn(...e){Ve(1,Ue(...e))}function An(...e){Ve(2,Ue(...e))}function Ve(e,t){let r=Buffer.from(`${t}
|
|
8
|
+
`),n=0;while(n<r.length)n+=St(e,r,n,r.length-n)}import f from"process";import{createInterface as Lt}from"readline";var Nn=f.stdin.destroy;f.stdin.destroy=function(e){if(e)this.emit("error",e);return this};f.on("SIGINT",()=>{console.log(`
|
|
9
|
+
`),f.exit(130)});var M=null;function Rt(){if(!M){let e=f.stdin.isTTY&&f.stdout.isTTY;if(M=Lt({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 K=Symbol("stdin-eof");function Je(e){return new Promise((t)=>{let r=Rt(),n=!1,o=(l)=>{if(n)return;n=!0,r.off("close",i),t(l)},i=()=>o(K);r.once("close",i);try{r.question(e,o)}catch{o(K)}})}function Qe(){if(f.argv.includes("--no-interaction"))return!1;if(f.env.CI)return!1;return Boolean(f.stdin.isTTY&&f.stdout.isTTY)}async function E(e){if(!Qe())return"";let t=await Je(e);return t===K?"":t}function Xe(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 Dn(e){let t=typeof e==="string"?{message:e}:e,r=t.initial??!1,n=r?" (Y/n) ":" (y/N) ";if(!Qe())return null;let o=await Je(`${t.message}${n}`);if(o===K)return null;return Xe(o,r)}async function Mt(e){let t=typeof e==="string"?{message:e}:e,r=t.initial??!1,n=r?" (Y/n) ":" (y/N) ",o=await E(`${t.message}${n}`);return Xe(o,r)}async function It(e){let t=typeof e==="string"?{message:e}:e,r=t.placeholder||t.initial||"",n=r?` (${r}) `:" ";return(await E(`${t.message}${n}`)).trim()||t.initial||""}async function Tt(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 E("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 jt(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 E("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 Et(e){return(await E(`${(typeof e==="string"?{message:e}:e).message} `)).trim()}var zn={text:It,confirm:Mt,select:Tt,multiselect:jt,password:Et};import{handleError as Gt}from"@stacksjs/error-handling";async function At(e,t){let r={...t,stdin:t?.stdin??"inherit",verbose:t?.verbose??!1};return await J(e,r)}async function Hn(e,t){let r={...t,stdio:[t?.stdin??"inherit","pipe","pipe"],verbose:t?.verbose??!1};return await J(e,r)}async function Un(e,t){let r={...t,stdio:[t?.stdin??"inherit","pipe","pipe"],verbose:t?.verbose??!1};return await je(e,r)}async function Vn(e,t){let r=[];for(let n of e){let o=await At(n,t);if(o.isErr)throw Gt("Error during runCommands",o.error),o.error;r.push(o)}return r}import Pt from"process";var Yt=["SIGINT","SIGTERM","SIGHUP"],I=new Map,Ze=!1;function Wt(){if(Ze)return;Ze=!0;for(let e of Yt)Pt.on(e,async()=>{for(let[t,r]of I)try{await r()}catch(n){console.error(`[signals] cleanup '${t}' threw:`,n)}})}function Xn(e,t){return Wt(),I.set(e,t),()=>{if(I.get(e)===t)I.delete(e)}}function Zn(e){I.delete(e)}function er(){return[...I.keys()]}var et=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],G=process.stdout.isTTY&&!process.env.CI;function Nt(e){let t=e||"",r=0,n=null,o=!1,i=()=>{if(G)process.stdout.write("\r\x1B[K")},l=()=>{if(!G)return;i();let a=et[r];process.stdout.write(`${a} ${t}`),r=(r+1)%et.length};return{start(a){if(a)t=a;if(o)return;if(o=!0,G)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,!G&&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,G&&o)l()},get isSpinning(){return o}}}async function nr(e,t,r){let n=Nt(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 tt="\r\x1B[2K";function Dt(){return{columns:B.stdout.columns??80,rows:B.stdout.rows??24}}function zt(){return Boolean(B.stdout.isTTY)&&!B.env.CI}function sr(e,t){console.log(qe(e,t===void 0?{}:{title:t}))}function ar(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(`
|
|
10
|
+
`)}function lr(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(Dt().columns/3)),n=zt(),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(`${tt}${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(tt);if(s)console.log(s);else if(n)B.stdout.write(`
|
|
11
|
+
`)},get value(){return o},get total(){return e.total}};return a}async function cr(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{Vt as CLI,_ as align,Ye as ansi256,We as ansi256Bg,lt as applyAliases,ce as bgBlack,me as bgBlue,j as bgCyan,he as bgGray,ue as bgGreen,xe as bgLightBlue,ke as bgLightCyan,N as bgLightGray,ye as bgLightGreen,we as bgLightMagenta,be as bgLightRed,Ce as bgLightYellow,pe as bgMagenta,ge as bgRed,fe as bgWhite,de as bgYellow,Q as black,ee as blue,C as bold,qe as box,Ot as buddyOptionArgs,Bt as buddyOptions,bn as centerAlign,Qt as cli,dn as colorize,mn as colors,Mt as confirm,Dn as confirmOrNull,R as cyan,nn as defineCommand,rn as defineCommands,v as dim,st as discoverCommandFiles,J as exec,je as execSync,_e as getColor,Dt as getTerminalSize,F as gray,L as green,ve as hidden,qt as installPackage,Kt as installStack,On as intro,Fe as inverse,zt as isInteractive,h as italic,pn as kolorist,fn as leftAlign,se as lightBlue,le as lightCyan,W as lightGray,oe as lightGreen,ae as lightMagenta,re as lightRed,ie as lightYellow,ze as link,er as listSignalHandlers,Te as loadCommandRegistry,tn as loadCommands,p as log,te as magenta,jt as multiselect,sr as note,Zn as offSignal,Xn as onSignal,Jt as onUnknownSubcommand,Bn as outro,Mn as parseArgs,vt as parseArgv,In as parseOptions,Et as password,Gn as print,An as printError,lr as progress,zn as prompts,Qe as promptsAreInteractive,yn as quotes,X as red,Be as reset,at as resolveCommands,hn as rightAlign,At as runCommand,Un as runCommandSync,Vn as runCommands,Hn as runProcess,Tt as select,Nt as spinner,Oe as strikethrough,O as stripAnsi,Ae as stripColors,ar as table,cr as tasks,It as text,Ne as trueColor,De as trueColorBg,$e as underline,ne as white,nr as withSpinner,Z as yellow};
|
package/dist/output.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Print plain terminal output, preserving inspection and formatting placeholders.
|
|
3
|
+
* Unlike application logs, command results and test tallies must remain visible
|
|
4
|
+
* regardless of the configured log level and must survive an immediate exit.
|
|
5
|
+
*/
|
|
6
|
+
export declare function print(...args: unknown[]): void;
|
|
7
|
+
/** Print a plain diagnostic to stderr without changing the process exit code. */
|
|
8
|
+
export declare function printError(...args: unknown[]): void;
|
package/dist/output.js
ADDED
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.122",
|
|
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.122",
|
|
74
|
+
"@stacksjs/error-handling": "0.75.122",
|
|
75
|
+
"@stacksjs/logging": "0.75.122",
|
|
76
|
+
"@stacksjs/types": "0.75.122"
|
|
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.122",
|
|
80
|
+
"@stacksjs/path": "0.75.122",
|
|
81
|
+
"@stacksjs/utils": "0.75.122",
|
|
82
|
+
"@stacksjs/validation": "0.75.122",
|
|
83
83
|
"better-dx": "^0.2.24"
|
|
84
84
|
}
|
|
85
85
|
}
|