@stacksjs/cli 0.72.77 → 0.72.78

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.
@@ -0,0 +1,92 @@
1
+ import type { CLI } from '@stacksjs/clapp';
2
+ import type { CommandDefinition, CommandFactory, CommandOptionsMap, CommandRegistry, ResolvedCommand } from '@stacksjs/types';
3
+ /**
4
+ * Every command file under `dir`, as ids relative to it and without the `.ts`
5
+ * extension (`'Inspire'`, `'Archive/Run'`), sorted for a stable help listing.
6
+ *
7
+ * Nested directories are walked so commands can be grouped by feature rather
8
+ * than flattened into one directory of prefixed names.
9
+ */
10
+ export declare function discoverCommandFiles(dir: string): string[];
11
+ /**
12
+ * Read the optional `app/Commands.ts` registry.
13
+ *
14
+ * A missing file is the normal case and returns `undefined`. A file that
15
+ * exists but throws is a real problem the caller should hear about, so the
16
+ * error is returned rather than swallowed - the old loader treated both the
17
+ * same and silently fell back to discovery, which turned a syntax error in the
18
+ * registry into "my aliases stopped working".
19
+ */
20
+ export declare function loadCommandRegistry(registryPath?: string): Promise<{ registry?: CommandRegistry, error?: unknown }>;
21
+ /**
22
+ * The commands an application exposes: every file on disk, with registry
23
+ * configuration layered on top.
24
+ *
25
+ * Registry entries come first, in declaration order, so an application can
26
+ * still control how its commands are listed. Entries pointing at a file that
27
+ * does not exist are dropped.
28
+ */
29
+ export declare function resolveCommands(options: ResolveCommandsOptions): Promise<ResolvedCommand[]>;
30
+ /**
31
+ * Attach aliases to a command the CLI already knows about.
32
+ *
33
+ * The signature may carry arguments (`'send-emails <type>'`) while the command
34
+ * is named by its first word, so the lookup matches on that. Nothing is thrown
35
+ * when no command matches: an alias for a command that was never registered is
36
+ * a mistake worth a log line, not a reason to take the whole CLI down.
37
+ */
38
+ export declare function applyAliases(cli: CLI, signature: string, aliases: string[]): boolean;
39
+ /**
40
+ * Register every enabled application command on `cli`.
41
+ *
42
+ * Returns the commands that were loaded, so a caller can report on them. One
43
+ * broken command file never stops the others from loading.
44
+ */
45
+ export declare function loadCommands(cli: CLI, options: LoadCommandsOptions): Promise<ResolvedCommand[]>;
46
+ /* -------------------------------------------------------------------------- */
47
+ /* Authoring helpers */
48
+ /* -------------------------------------------------------------------------- */
49
+ /**
50
+ * Type the default export of a command file.
51
+ *
52
+ * Two forms, both fully typed:
53
+ *
54
+ * ```ts
55
+ * // declarative - `options` is inferred from the flags
56
+ * export default defineCommand({
57
+ * name: 'archive:run',
58
+ * description: 'Export aged log partitions',
59
+ * options: {
60
+ * '--dry-run': { description: 'Change nothing', default: false },
61
+ * '--project <id>': 'Restrict the run to one project',
62
+ * },
63
+ * handle: async (options) => {
64
+ * options.dryRun // boolean
65
+ * options.project // string | undefined
66
+ * },
67
+ * })
68
+ *
69
+ * // imperative - the CLI is typed, for commands that register several names
70
+ * export default defineCommand((cli) => {
71
+ * cli.command('inspire', 'Inspire yourself').action(() => {})
72
+ * })
73
+ * ```
74
+ */
75
+ export declare function defineCommand(factory: CommandFactory): CommandFactory;
76
+ export declare function defineCommand<TOptions extends CommandOptionsMap>(definition: CommandDefinition<TOptions>): CommandFactory;
77
+ /**
78
+ * Type the optional `app/Commands.ts` registry.
79
+ *
80
+ * Only needed to disable a command or add an alias without editing the command
81
+ * file - commands are discovered from `app/Commands/` either way.
82
+ */
83
+ export declare function defineCommands<T extends CommandRegistry>(registry: T): T;
84
+ export declare interface ResolveCommandsOptions {
85
+ commandsDir: string
86
+ registryPath?: string
87
+ registry?: CommandRegistry
88
+ }
89
+ export declare interface LoadCommandsOptions extends ResolveCommandsOptions {
90
+ onError?: (message: string, error?: unknown) => void
91
+ onDebug?: (message: string) => void
92
+ }
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from './actions/index';
2
2
  export * from './cli';
3
+ export * from './commands';
3
4
  export * from './exec';
4
5
  export * from './helpers';
5
6
  export * from './parse';
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  // @bun
2
- import Se from"process";async function Le(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??Se.cwd(),stdout:t.silent?"ignore":"inherit",stderr:t.silent?"ignore":"inherit",stdin:"ignore",env:Se.env}).exited;if(i!==0)throw Error(`Failed to install ${e} (exit code ${i})`)}async function $t(e,t){return Le(e,t??{silent:!0})}async function Bt(e,t){return Le(`@stacksjs/${e}`,t??{silent:!0})}import{CLI as vt,cli as Ke,onUnknownSubcommand as Ot}from"@stacksjs/clapp";function Rt(e,t){if(typeof e==="object")t=e,e=t.name;return Ke(e||"buddy")}import I from"process";import{err as R,handleError as q,ok as Ve}from"@stacksjs/error-handling";import{ExitCode as G}from"@stacksjs/types";async function _(e,t){let r=Array.isArray(e)?e:e.match(/(?:[^\s"]|"[^"]*")+/g);if(!r)return R(q(`Failed to parse command: ${r}`,t));let n=t?.cwd??I.cwd(),o=t?.timeoutMs,i=Bun.spawn(r,{stdin:t?.stdin??"inherit",stdout:t?.silent||t?.quiet?"ignore":t?.stdin?t.stdin:t?.stdout||"inherit",stderr:t?.silent||t?.quiet?"ignore":t?.stderr||"inherit",cwd:n,env:{...I.env,...t?.env},onExit(h,Be,W,N){Oe("spawn",h,Be,W,N)}});if(t?.stdin==="pipe"&&t.input){if(i.stdin)i.stdin.write(t.input),i.stdin.end()}let a,c=await Promise.race([i.exited,new Promise((h)=>{if(!o)return;a=setTimeout(()=>{try{i.kill()}catch{}h(G.FatalError)},o)})]);if(a)clearTimeout(a);if(o&&c===G.FatalError&&i.exitCode===null)return R(q(`Command timed out after ${o}ms: ${p(r.join(" "))} in ${p(n)}`,t));if(c===G.Success)return Ve(i);let u=i.signalCode;if(u==="SIGTERM"||u==="SIGINT"||u==="SIGKILL"||i.exitCode===null&&c!==G.Success)return R(Error(`Command terminated by ${u??"signal"}: ${r.join(" ")}`));return R(q(`Failed to execute command: ${p(r.join(" "))} in ${p(n)}`,t))}async function ve(e,t){let r=Array.isArray(e)?e:e.match(/(?:[^\s"]|"[^"]*")+/g);if(!r)throw d.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??I.cwd(),env:{...I.env,...t?.env},onExit(i,a,c,u){Oe("spawnSync",i,a,c,u)}}),o=n.stdout?.toString()??"";if(t?.throwOnError&&n.exitCode!==0){let a=((n.stderr?.toString()??"").trim()||o.trim()||"(no output)").split(`
2
+ import Oe from"process";async function ve(e,t={silent:!0}){let n=t.packageManager??"bun",r=[n==="npm"?"install":"add"];if(t.dev)r.push("-D");if(t.preferOffline&&n!=="bun")r.push("--prefer-offline");if(t.additionalArgs)r.push(...t.additionalArgs);r.push(e);let i=await Bun.spawn([n,...r],{cwd:t.cwd??Oe.cwd(),stdout:t.silent?"ignore":"inherit",stderr:t.silent?"ignore":"inherit",stdin:"ignore",env:Oe.env}).exited;if(i!==0)throw Error(`Failed to install ${e} (exit code ${i})`)}async function Et(e,t){return ve(e,t??{silent:!0})}async function Tt(e,t){return ve(`@stacksjs/${e}`,t??{silent:!0})}import{CLI as Wt,cli as Je,onUnknownSubcommand as Yt}from"@stacksjs/clapp";function Nt(e,t){if(typeof e==="object")t=e,e=t.name;return Je(e||"buddy")}import{existsSync as q,readdirSync as Qe}from"fs";import{join as Se}from"path";var Xe=/(?:\.test|\.spec|\.bench|\.d)\.ts$/;function Ze(e){return e.endsWith(".ts")&&!Xe.test(e)&&!e.startsWith("_")}function et(e){if(!q(e))return[];let t=[],n=(r,o)=>{for(let i of Qe(r,{withFileTypes:!0})){if(i.name.startsWith(".")||i.name==="node_modules")continue;if(i.isDirectory()){n(Se(r,i.name),`${o}${i.name}/`);continue}if(Ze(i.name))t.push(`${o}${i.name.slice(0,-3)}`)}};return n(e,""),t.sort()}async function Re(e){if(!e||!q(e))return{};try{let n=(await import(e)).default;if(!n||typeof n!=="object")return{error:Error(`${e} must default-export a command registry object.`)};return{registry:n}}catch(t){return{error:t}}}async function tt(e){let{commandsDir:t}=e,n=e.registry??(await Re(e.registryPath)).registry,r=et(t),o=new Map;for(let s of r)o.set(s,{file:s,path:Se(t,`${s}.ts`),aliases:[],enabled:!0,source:"auto"});let i=[];for(let[s,a]of Object.entries(n??{})){let u=typeof a==="string"?{file:a}:a,m=o.get(u.file);if(!m)continue;if(m.signature=s,m.aliases=u.aliases??[],m.enabled=u.enabled!==!1,m.source="registry",!i.includes(m))i.push(m)}for(let s of r){let a=o.get(s);if(a&&!i.includes(a))i.push(a)}return i}function nt(e,t,n){let r=t.trim().split(/\s+/)[0],i=e?.commands?.find((s)=>s.name===r);if(!i||typeof i.alias!=="function")return!1;for(let s of n)i.alias(s);return!0}async function _t(e,t){let n=t.onError??(()=>{}),r=t.onDebug??(()=>{});if(!q(t.commandsDir))return r(`No ${t.commandsDir} directory, skipping application commands.`),[];let o=t.registry?{registry:t.registry}:await Re(t.registryPath);if(o.error)n(`Could not read the command registry at ${t.registryPath}`,o.error);let i=await tt({...t,registry:o.registry}),s=[];for(let a of i){if(!a.enabled){r(`Skipping disabled command ${a.file}.`);continue}try{let u=await import(a.path);if(u.enabled===!1){r(`Skipping ${a.file}: the module exports \`enabled = false\`.`);continue}if(typeof u.default!=="function"){n(`Expected a default export function in ${a.file}.ts, but got: ${typeof u.default}`);continue}let m=e.commands?.length??0;u.default(e);let B=[...a.aliases,...u.aliases??[]];if(B.length)rt(e,a.signature,m,B,r);s.push(a)}catch(u){n(`Failed to load command ${a.file}`,u)}}return s}function rt(e,t,n,r,o){if(t&&nt(e,t,r))return;let a=(e.commands?.slice(n)??[])[0];if(!a||typeof a.alias!=="function"){o(`Could not alias '${t??"command"}': no matching command was registered.`);return}for(let u of r)a.alias(u)}function Ht(e){if(typeof e==="function")return e;return(t)=>ot(t,e)}function ot(e,t){let n=e.command(t.name,t.description??"",{allowUnknownOptions:t.allowUnknownOptions});if(t.usage)n.usage(t.usage);for(let[r,o]of Object.entries(t.options??{})){let i=typeof o==="string"?{description:o}:o;n.option(r,i.description??"",{...i.default===void 0?{}:{default:i.default},...i.type?{type:i.type}:{}})}for(let r of t.aliases??[])n.alias(r);for(let r of t.examples??[])n.example(r);return n.action((...r)=>{let o=r[r.length-1];return t.handle(o,...r.slice(0,-1))}),n}function Kt(e){return e}import M from"process";import{err as I,handleError as _,ok as it}from"@stacksjs/error-handling";import{ExitCode as G}from"@stacksjs/types";async function H(e,t){let n=Array.isArray(e)?e:e.match(/(?:[^\s"]|"[^"]*")+/g);if(!n)return I(_(`Failed to parse command: ${n}`,t));let r=t?.cwd??M.cwd(),o=t?.timeoutMs,i=Bun.spawn(n,{stdin:t?.stdin??"inherit",stdout:t?.silent||t?.quiet?"ignore":t?.stdin?t.stdin:t?.stdout||"inherit",stderr:t?.silent||t?.quiet?"ignore":t?.stderr||"inherit",cwd:r,env:{...M.env,...t?.env},onExit(m,B,N,D){Ge("spawn",m,B,N,D)}});if(t?.stdin==="pipe"&&t.input){if(i.stdin)i.stdin.write(t.input),i.stdin.end()}let s,a=await Promise.race([i.exited,new Promise((m)=>{if(!o)return;s=setTimeout(()=>{try{i.kill()}catch{}m(G.FatalError)},o)})]);if(s)clearTimeout(s);if(o&&a===G.FatalError&&i.exitCode===null)return I(_(`Command timed out after ${o}ms: ${d(n.join(" "))} in ${d(r)}`,t));if(a===G.Success)return it(i);let u=i.signalCode;if(u==="SIGTERM"||u==="SIGINT"||u==="SIGKILL"||i.exitCode===null&&a!==G.Success)return I(Error(`Command terminated by ${u??"signal"}: ${n.join(" ")}`));return I(_(`Failed to execute command: ${d(n.join(" "))} in ${d(r)}`,t))}async function Ie(e,t){let n=Array.isArray(e)?e:e.match(/(?:[^\s"]|"[^"]*")+/g);if(!n)throw p.error(`Failed to parse command: ${n}`,t),Error(`Failed to parse command: ${n}`);let r=Bun.spawnSync(n,{...t,stdin:t?.stdin??"inherit",stdout:t?.stdout??"pipe",stderr:t?.stderr??"inherit",cwd:t?.cwd??M.cwd(),env:{...M.env,...t?.env},onExit(i,s,a,u){Ge("spawnSync",i,s,a,u)}}),o=r.stdout?.toString()??"";if(t?.throwOnError&&r.exitCode!==0){let s=((r.stderr?.toString()??"").trim()||o.trim()||"(no output)").split(`
3
3
  `).slice(0,5).join(`
4
- `);throw Error(`Command failed with exit code ${n.exitCode}: ${r.join(" ")}
5
- ${a}`)}return o}function Oe(e,t,r,n,o){if(d.debug(`exitHandler: ${e}, exitCode: ${r}, signalCode: ${n}`),o)d.debug("Process error:",o.message)}import{handleError as ot}from"@stacksjs/error-handling";import{log as d}from"@stacksjs/logging";import{ExitCode as Fe}from"@stacksjs/types";import{collect as Ue}from"@stacksjs/collections";var l=!process.env.NO_COLOR&&(process.env.FORCE_COLOR?process.env.FORCE_COLOR!=="0":!!process.stdout?.isTTY),g={reset:l?"\x1B[0m":"",black:l?"\x1B[30m":"",red:l?"\x1B[31m":"",green:l?"\x1B[32m":"",yellow:l?"\x1B[33m":"",blue:l?"\x1B[34m":"",magenta:l?"\x1B[35m":"",cyan:l?"\x1B[36m":"",white:l?"\x1B[37m":"",gray:l?"\x1B[90m":"",lightRed:l?"\x1B[91m":"",lightGreen:l?"\x1B[92m":"",lightYellow:l?"\x1B[93m":"",lightBlue:l?"\x1B[94m":"",lightMagenta:l?"\x1B[95m":"",lightCyan:l?"\x1B[96m":"",lightGray:l?"\x1B[37m":"",bgBlack:l?"\x1B[40m":"",bgRed:l?"\x1B[41m":"",bgGreen:l?"\x1B[42m":"",bgYellow:l?"\x1B[43m":"",bgBlue:l?"\x1B[44m":"",bgMagenta:l?"\x1B[45m":"",bgCyan:l?"\x1B[46m":"",bgWhite:l?"\x1B[47m":"",bgGray:l?"\x1B[100m":"",bgLightRed:l?"\x1B[101m":"",bgLightGreen:l?"\x1B[102m":"",bgLightYellow:l?"\x1B[103m":"",bgLightBlue:l?"\x1B[104m":"",bgLightMagenta:l?"\x1B[105m":"",bgLightCyan:l?"\x1B[106m":"",bgLightGray:l?"\x1B[47m":"",bold:l?"\x1B[1m":"",dim:l?"\x1B[2m":"",italic:l?"\x1B[3m":"",underline:l?"\x1B[4m":"",inverse:l?"\x1B[7m":"",hidden:l?"\x1B[8m":"",strikethrough:l?"\x1B[9m":""},E="\x1B[",Je="\x1B]8;;",Qe="\x1B]8;;\x07",Re=(e)=>String(e);function b(e,t,r){return Math.min(Math.max(Math.floor(e),t),r)}function s(e,t=g.reset){return(r)=>{if(!l)return String(r);return`${e}${String(r)}${t}`}}function Xe(e){return e.replace(/\x1B\]8;;[^\x07]*(?:\x07|\x1B\\)/g,"").replace(/\x1B\]8;;(?:\x07|\x1B\\)/g,"")}function D(e){return Xe(e).replace(/\x1B\[[0-?]*[ -/]*[@-~]/g,"")}var Ge=D;function Ie(e){return Array.from(D(e)).length}var H=s(g.black),K=s(g.red),x=s(g.green),V=s(g.yellow),U=s(g.blue),J=s(g.magenta),w=s(g.cyan),Q=s(g.white),y=s(g.gray),X=s(g.lightRed),Z=s(g.lightGreen),ee=s(g.lightYellow),te=s(g.lightBlue),re=s(g.lightMagenta),ne=s(g.lightCyan),M=s(g.lightGray),oe=s(g.bgBlack),ie=s(g.bgRed),se=s(g.bgGreen),le=s(g.bgYellow),ae=s(g.bgBlue),ge=s(g.bgMagenta),B=s(g.bgCyan),ce=s(g.bgWhite),ue=s(g.bgGray),pe=s(g.bgLightRed),de=s(g.bgLightGreen),me=s(g.bgLightYellow),fe=s(g.bgLightBlue),he=s(g.bgLightMagenta),be=s(g.bgLightCyan),j=s(g.bgLightGray),f=s(g.bold),C=s(g.dim),p=s(g.italic),ye=s(g.underline),Ce=s(g.inverse),xe=s(g.hidden),we=s(g.strikethrough),ke=s(g.reset,"");function Me(e){return s(`${E}38;5;${b(e,0,255)}m`)}function je(e){return s(`${E}48;5;${b(e,0,255)}m`)}function Ee(e,t,r){return s(`${E}38;2;${b(e,0,255)};${b(t,0,255)};${b(r,0,255)}m`)}function Pe(e,t,r){return s(`${E}48;2;${b(e,0,255)};${b(t,0,255)};${b(r,0,255)}m`)}function Ae(e,t){let r=(o,i)=>{let a=String(o);if(!l)return a;return`${Je}${i}\x07${a}${Qe}`};if(typeof t==="string")return r(e,t);let n=String(e);return(o)=>r(o,n)}var Ze={black:H,red:K,green:x,yellow:V,blue:U,magenta:J,cyan:w,white:Q,gray:y,lightRed:X,lightGreen:Z,lightYellow:ee,lightBlue:te,lightMagenta:re,lightCyan:ne,lightGray:M,bgBlack:oe,bgRed:ie,bgGreen:se,bgYellow:le,bgBlue:ae,bgMagenta:ge,bgCyan:B,bgWhite:ce,bgGray:ue,bgLightRed:pe,bgLightGreen:de,bgLightYellow:me,bgLightBlue:fe,bgLightMagenta:he,bgLightCyan:be,bgLightGray:j,bold:f,dim:C,italic:p,underline:ye,inverse:Ce,hidden:xe,strikethrough:we,reset:ke};function Te(e){return Ze[e]??Re}function Tt(e,t){if(typeof t==="function")return t(e);return Te(t)(e)}function et(){return l}var Yt={black:H,red:K,green:x,yellow:V,blue:U,magenta:J,cyan:w,white:Q,gray:y,lightRed:X,lightGreen:Z,lightYellow:ee,lightBlue:te,lightMagenta:re,lightCyan:ne,lightGray:M,bgBlack:oe,bgRed:ie,bgGreen:se,bgYellow:le,bgBlue:ae,bgMagenta:ge,bgCyan:B,bgWhite:ce,bgGray:ue,bgLightRed:pe,bgLightGreen:de,bgLightYellow:me,bgLightBlue:fe,bgLightMagenta:he,bgLightCyan:be,bgLightGray:j,bold:f,dim:C,italic:p,underline:ye,inverse:Ce,hidden:xe,strikethrough:we,reset:ke,ansi256:Me,ansi256Bg:je,trueColor:Ee,trueColorBg:Pe,link:Ae,stripColors:Ge},Wt={black:H,red:K,green:x,yellow:V,blue:U,magenta:J,cyan:w,white:Q,gray:y,lightRed:X,lightGreen:Z,lightYellow:ee,lightBlue:te,lightMagenta:re,lightCyan:ne,lightGray:M,bgBlack:oe,bgRed:ie,bgGreen:se,bgYellow:le,bgBlue:ae,bgMagenta:ge,bgCyan:B,bgWhite:ce,bgGray:ue,bgLightRed:pe,bgLightGreen:de,bgLightYellow:me,bgLightBlue:fe,bgLightMagenta:he,bgLightCyan:be,bgLightGray:j,bold:f,dim:C,italic:p,underline:ye,inverse:Ce,hidden:xe,strikethrough:we,reset:ke,ansi256:Me,ansi256Bg:je,trueColor:Ee,trueColorBg:Pe,link:Ae,stripColors:Ge,grey:y,lightGrey:M,bgLightGrey:j,supportsColor:et};function tt(e,t,r,n){let o=Ie(e);if(o>=t)return e;let i=n[0]||" ",a=t-o;if(r==="right")return`${i.repeat(a)}${e}`;if(r==="center"){let c=Math.floor(a/2),u=a-c;return`${i.repeat(c)}${e}${i.repeat(u)}`}return`${e}${i.repeat(a)}`}function P(e){return Math.max(0,...e.map(Ie))}function A(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??P(n),a=o?.align??r,c=o?.padChar??" ";return n.map((u)=>tt(u,Math.max(0,i),a,c)).join(`
6
- `)}function Nt(e,t){return A(e,t,"left")}function zt(e,t){let r=String(e).split(/\r?\n/);return A(e,t??process.stdout?.columns??P(r),"right")}function qt(e,t){let r=String(e).split(/\r?\n/);return A(e,t??process.stdout?.columns??P(r),"center")}var rt={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 _t(e,t={}){let r=String(e).split(/\r?\n/),n=rt[t.borderStyle??"single"],o=Math.max(0,t.padding??1),i=Math.max(0,t.margin??0),a=t.align??"left",c=P(r),u=c+o*2,h=typeof t.borderColor==="function"?t.borderColor:t.borderColor?Te(t.borderColor):Re,W=h((()=>{if(!t.title)return`${n.topLeft}${n.horizontal.repeat(u)}${n.topRight}`;let O=` ${D(String(t.title))} `.slice(0,u),z=n.horizontal.repeat(Math.max(0,u-O.length));return`${n.topLeft}${O}${z}${n.topRight}`})()),N=h(`${n.bottomLeft}${n.horizontal.repeat(u)}${n.bottomRight}`),De=r.map((v)=>{let O=A(v,{align:a,width:c}),z=`${" ".repeat(o)}${O}${" ".repeat(o)}`;return`${h(n.vertical)}${z}${h(n.vertical)}`}),He=" ".repeat(i);return[W,...De,N].map((v)=>`${He}${v}`).join(`
7
- `)}var Dt=Ue(["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 Ye="0.72.77";async function Zt(e,t){return new Promise((r)=>{if(t?.quiet===!1)console.log(),console.log(w(f("Stacks CLI"))+C(` v${Ye}`)),console.log();if(d.info(`Running ${B(p(f(` ${e} `)))}`),t?.showPerformance===!1||t?.quiet)return r(0);return r(performance.now())})}function er(e,t,r){let n={type:"success",useSeconds:!0,...t};return n.message=t?.message||e,new Promise((o)=>{if(r)return ot(r),o(Fe.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(Fe.Success);if(r)d.error(`[${i.toFixed(2)}${n.useSeconds?"s":"ms"}] Failed`);else if(n.type==="info")d.info(`${C(y(`[${i.toFixed(2)}${n.useSeconds?"s":"ms"}]`))} ${n.message??"Complete"}`);else d.success(`${C(y(f(`[${i.toFixed(2)}${n.useSeconds?"s":"ms"}]`)))} ${f(x(n.message??"Complete"))}`)}else if(n?.type==="info")d.info(e);else if(n?.type==="success"&&n?.quiet!==!0)d.success(e);d.flush().catch(()=>{}).then(()=>o(Fe.Success))})}import T from"process";function We(e){if(!e)return!1;return e.startsWith("--")}function it(e){return e.startsWith("-")&&!We(e)}function $e(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 st(e,t,r,n){let[o,i]=e.slice(2).split("=");if(i!==void 0)n[o]=$e(i);else if(r+1<t.length&&!t[r+1]?.startsWith("-"))n[o]=t[r+1],r++;else n[o]=!0;return r}function lt(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 a=0;a<o.length;a++)n[o[a]]=$e(i);else for(let a=0;a<o.length;a++)if(r+1<t.length&&a===o.length-1&&!t[r+1]?.startsWith("-"))n[o[a]]=$e(t[r+1]),r++;else n[o[a]]=!0;return r}function at(e){if(e===void 0)e=T.argv.slice(2);let t=[],r={};for(let n=0;n<e.length;n++){let o=e[n];if(!o)continue;if(We(o))n=st(o,e,n,r);else if(it(o))n=lt(o,e,n,r);else t.push(o)}return{args:t,options:r}}function or(e){if(e===void 0)e=T.argv.slice(2);return at(e).args}function ir(e){e=e||{};let t={dryRun:!1,quiet:!1,verbose:!1},r=T.argv.slice(2);for(let n=0;n<r.length;n++){let o=r[n];if(o?.startsWith("--")){let a=o.substring(2).replace(/-([a-z])/gi,(c)=>c[1]?c[1].toUpperCase():"");if(n+1<r.length&&!r?.[n+1]?.startsWith("--"))if(r?.[n+1]==="true"||r?.[n+1]==="false")e[a]=r[n+1]==="true",n++;else e[a]=r[n+1],n++;else e[a]=!0}}if(Object.keys(e).length===0)return{};return{...t,...e}}function gt(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 Object.entries(e).filter(([t,r])=>t!=="--"&&t!=="_"&&r!==!1&&r!==void 0&&r!==null).map(([t,r])=>{if(r===!0)return`--${t}`;return`--${t} ${r}`}).join(" ");return gt(T.argv.slice(2))}import m from"process";import{createInterface as ct}from"readline";var gr=m.stdin.destroy;m.stdin.destroy=function(e){if(e)this.emit("error",e);return this};m.on("SIGINT",()=>{console.log(`
8
- `),m.exit(130)});var k=null;function ut(){if(!k){let e=m.stdin.isTTY&&m.stdout.isTTY;if(k=ct({input:m.stdin,output:m.stdout,terminal:e}),e&&typeof m.stdin.setRawMode==="function")k.on("SIGINT",()=>{m.emit("SIGINT")});k.once("close",()=>{k=null})}return k}var Y=Symbol("stdin-eof");function Ne(e){return new Promise((t)=>{let r=ut(),n=!1,o=(a)=>{if(n)return;n=!0,r.off("close",i),t(a)},i=()=>o(Y);r.once("close",i);try{r.question(e,o)}catch{o(Y)}})}async function S(e){let t=await Ne(e);return t===Y?"":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 cr(e){let t=typeof e==="string"?{message:e}:e,r=t.initial??!1,n=r?" (Y/n) ":" (y/N) ",o=await Ne(`${t.message}${n}`);if(o===Y)return null;return ze(o,r)}async function pt(e){let t=typeof e==="string"?{message:e}:e,r=t.initial??!1,n=r?" (Y/n) ":" (y/N) ",o=await S(`${t.message}${n}`);return ze(o,r)}async function dt(e){let t=typeof e==="string"?{message:e}:e,r=t.placeholder||t.initial||"",n=r?` (${r}) `:" ";return(await S(`${t.message}${n}`)).trim()||t.initial||""}async function mt(e){console.log(e.message),e.choices.forEach((o,i)=>{let a=i===(e.initial??0)?">":" ";console.log(`${a} ${i+1}. ${o.label}`)});let t=await S("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 ft(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 S("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 ht(e){return(await S(`${(typeof e==="string"?{message:e}:e).message} `)).trim()}var ur={text:dt,confirm:pt,select:mt,multiselect:ft,password:ht};import{handleError as bt}from"@stacksjs/error-handling";async function yt(e,t){let r={...t,stdin:t?.stdin??"inherit",verbose:t?.verbose??!1};return await _(e,r)}async function fr(e,t){let r={...t,stdio:[t?.stdin??"inherit","pipe","pipe"],verbose:t?.verbose??!1};return await _(e,r)}async function hr(e,t){let r={...t,stdio:[t?.stdin??"inherit","pipe","pipe"],verbose:t?.verbose??!1};return await ve(e,r)}async function br(e,t){let r=[];for(let n of e){let o=await yt(n,t);if(o.isErr)throw bt("Error during runCommands",o.error),o.error;r.push(o)}return r}import Ct from"process";var xt=["SIGINT","SIGTERM","SIGHUP"],F=new Map,qe=!1;function wt(){if(qe)return;qe=!0;for(let e of xt)Ct.on(e,async()=>{for(let[t,r]of F)try{await r()}catch(n){console.error(`[signals] cleanup '${t}' threw:`,n)}})}function xr(e,t){return wt(),F.set(e,t),()=>{if(F.get(e)===t)F.delete(e)}}function wr(e){F.delete(e)}function kr(){return[...F.keys()]}var _e=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],L=process.stdout.isTTY&&!process.env.CI;function kt(e){let t=e||"",r=0,n=null,o=!1,i=()=>{if(L)process.stdout.write("\r\x1B[K")},a=()=>{if(!L)return;i();let c=_e[r];process.stdout.write(`${c} ${t}`),r=(r+1)%_e.length};return{start(c){if(c)t=c;if(o)return;if(o=!0,L)a(),n=setInterval(a,80);else if(t)console.log(` ${t}`)},stop(c){if(o=!1,n)clearInterval(n),n=null;if(i(),c)console.log(c)},update(c){if(t=c,!L&&o)console.log(` ${c}`)},succeed(c){let u=c||t;if(o=!1,n)clearInterval(n),n=null;i(),console.log(`\u2713 ${u}`)},fail(c){let u=c||t;if(o=!1,n)clearInterval(n),n=null;i(),console.error(`\u2717 ${u}`)},get text(){return t},set text(c){if(t=c,L&&o)a()},get isSpinning(){return o}}}async function $r(e,t,r){let n=kt(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}}export{vt as CLI,A as align,Me as ansi256,je as ansi256Bg,oe as bgBlack,ae as bgBlue,B as bgCyan,ue as bgGray,se as bgGreen,fe as bgLightBlue,be as bgLightCyan,j as bgLightGray,de as bgLightGreen,he as bgLightMagenta,pe as bgLightRed,me as bgLightYellow,ge as bgMagenta,ie as bgRed,ce as bgWhite,le as bgYellow,H as black,U as blue,f as bold,_t as box,gt as buddyOptions,qt as centerAlign,Rt as cli,Tt as colorize,Yt as colors,pt as confirm,cr as confirmOrNull,w as cyan,C as dim,_ as exec,ve as execSync,Te as getColor,y as gray,x as green,xe as hidden,$t as installPackage,Bt as installStack,Zt as intro,Ce as inverse,p as italic,Wt as kolorist,Nt as leftAlign,te as lightBlue,ne as lightCyan,M as lightGray,Z as lightGreen,re as lightMagenta,X as lightRed,ee as lightYellow,Ae as link,kr as listSignalHandlers,d as log,J as magenta,ft as multiselect,wr as offSignal,xr as onSignal,Ot as onUnknownSubcommand,er as outro,or as parseArgs,at as parseArgv,ir as parseOptions,ht as password,ur as prompts,Dt as quotes,K as red,ke as reset,zt as rightAlign,yt as runCommand,hr as runCommandSync,br as runCommands,fr as runProcess,mt as select,kt as spinner,we as strikethrough,D as stripAnsi,Ge as stripColors,dt as text,Ee as trueColor,Pe as trueColorBg,ye as underline,Q as white,$r as withSpinner,V as yellow};
4
+ `);throw Error(`Command failed with exit code ${r.exitCode}: ${n.join(" ")}
5
+ ${s}`)}return o}function Ge(e,t,n,r,o){if(p.debug(`exitHandler: ${e}, exitCode: ${n}, signalCode: ${r}`),o)p.debug("Process error:",o.message)}import{handleError as ft}from"@stacksjs/error-handling";import{log as p}from"@stacksjs/logging";import{ExitCode as Be}from"@stacksjs/types";import{collect as st}from"@stacksjs/collections";var c=!process.env.NO_COLOR&&(process.env.FORCE_COLOR?process.env.FORCE_COLOR!=="0":!!process.stdout?.isTTY),g={reset:c?"\x1B[0m":"",black:c?"\x1B[30m":"",red:c?"\x1B[31m":"",green:c?"\x1B[32m":"",yellow:c?"\x1B[33m":"",blue:c?"\x1B[34m":"",magenta:c?"\x1B[35m":"",cyan:c?"\x1B[36m":"",white:c?"\x1B[37m":"",gray:c?"\x1B[90m":"",lightRed:c?"\x1B[91m":"",lightGreen:c?"\x1B[92m":"",lightYellow:c?"\x1B[93m":"",lightBlue:c?"\x1B[94m":"",lightMagenta:c?"\x1B[95m":"",lightCyan:c?"\x1B[96m":"",lightGray:c?"\x1B[37m":"",bgBlack:c?"\x1B[40m":"",bgRed:c?"\x1B[41m":"",bgGreen:c?"\x1B[42m":"",bgYellow:c?"\x1B[43m":"",bgBlue:c?"\x1B[44m":"",bgMagenta:c?"\x1B[45m":"",bgCyan:c?"\x1B[46m":"",bgWhite:c?"\x1B[47m":"",bgGray:c?"\x1B[100m":"",bgLightRed:c?"\x1B[101m":"",bgLightGreen:c?"\x1B[102m":"",bgLightYellow:c?"\x1B[103m":"",bgLightBlue:c?"\x1B[104m":"",bgLightMagenta:c?"\x1B[105m":"",bgLightCyan:c?"\x1B[106m":"",bgLightGray:c?"\x1B[47m":"",bold:c?"\x1B[1m":"",dim:c?"\x1B[2m":"",italic:c?"\x1B[3m":"",underline:c?"\x1B[4m":"",inverse:c?"\x1B[7m":"",hidden:c?"\x1B[8m":"",strikethrough:c?"\x1B[9m":""},T="\x1B[",at="\x1B]8;;",lt="\x1B]8;;\x07",Me=(e)=>String(e);function b(e,t,n){return Math.min(Math.max(Math.floor(e),t),n)}function l(e,t=g.reset){return(n)=>{if(!c)return String(n);return`${e}${String(n)}${t}`}}function ct(e){return e.replace(/\x1B\]8;;[^\x07]*(?:\x07|\x1B\\)/g,"").replace(/\x1B\]8;;(?:\x07|\x1B\\)/g,"")}function K(e){return ct(e).replace(/\x1B\[[0-?]*[ -/]*[@-~]/g,"")}var je=K;function Ee(e){return Array.from(K(e)).length}var U=l(g.black),V=l(g.red),x=l(g.green),J=l(g.yellow),Q=l(g.blue),X=l(g.magenta),w=l(g.cyan),Z=l(g.white),y=l(g.gray),ee=l(g.lightRed),te=l(g.lightGreen),ne=l(g.lightYellow),re=l(g.lightBlue),oe=l(g.lightMagenta),ie=l(g.lightCyan),j=l(g.lightGray),se=l(g.bgBlack),ae=l(g.bgRed),le=l(g.bgGreen),ce=l(g.bgYellow),ge=l(g.bgBlue),ue=l(g.bgMagenta),L=l(g.bgCyan),me=l(g.bgWhite),de=l(g.bgGray),pe=l(g.bgLightRed),fe=l(g.bgLightGreen),he=l(g.bgLightYellow),be=l(g.bgLightBlue),ye=l(g.bgLightMagenta),Ce=l(g.bgLightCyan),E=l(g.bgLightGray),h=l(g.bold),C=l(g.dim),d=l(g.italic),xe=l(g.underline),we=l(g.inverse),ke=l(g.hidden),Fe=l(g.strikethrough),$e=l(g.reset,"");function Te(e){return l(`${T}38;5;${b(e,0,255)}m`)}function Pe(e){return l(`${T}48;5;${b(e,0,255)}m`)}function Ae(e,t,n){return l(`${T}38;2;${b(e,0,255)};${b(t,0,255)};${b(n,0,255)}m`)}function We(e,t,n){return l(`${T}48;2;${b(e,0,255)};${b(t,0,255)};${b(n,0,255)}m`)}function Ye(e,t){let n=(o,i)=>{let s=String(o);if(!c)return s;return`${at}${i}\x07${s}${lt}`};if(typeof t==="string")return n(e,t);let r=String(e);return(o)=>n(o,r)}var gt={black:U,red:V,green:x,yellow:J,blue:Q,magenta:X,cyan:w,white:Z,gray:y,lightRed:ee,lightGreen:te,lightYellow:ne,lightBlue:re,lightMagenta:oe,lightCyan:ie,lightGray:j,bgBlack:se,bgRed:ae,bgGreen:le,bgYellow:ce,bgBlue:ge,bgMagenta:ue,bgCyan:L,bgWhite:me,bgGray:de,bgLightRed:pe,bgLightGreen:fe,bgLightYellow:he,bgLightBlue:be,bgLightMagenta:ye,bgLightCyan:Ce,bgLightGray:E,bold:h,dim:C,italic:d,underline:xe,inverse:we,hidden:ke,strikethrough:Fe,reset:$e};function Ne(e){return gt[e]??Me}function tn(e,t){if(typeof t==="function")return t(e);return Ne(t)(e)}function ut(){return c}var nn={black:U,red:V,green:x,yellow:J,blue:Q,magenta:X,cyan:w,white:Z,gray:y,lightRed:ee,lightGreen:te,lightYellow:ne,lightBlue:re,lightMagenta:oe,lightCyan:ie,lightGray:j,bgBlack:se,bgRed:ae,bgGreen:le,bgYellow:ce,bgBlue:ge,bgMagenta:ue,bgCyan:L,bgWhite:me,bgGray:de,bgLightRed:pe,bgLightGreen:fe,bgLightYellow:he,bgLightBlue:be,bgLightMagenta:ye,bgLightCyan:Ce,bgLightGray:E,bold:h,dim:C,italic:d,underline:xe,inverse:we,hidden:ke,strikethrough:Fe,reset:$e,ansi256:Te,ansi256Bg:Pe,trueColor:Ae,trueColorBg:We,link:Ye,stripColors:je},rn={black:U,red:V,green:x,yellow:J,blue:Q,magenta:X,cyan:w,white:Z,gray:y,lightRed:ee,lightGreen:te,lightYellow:ne,lightBlue:re,lightMagenta:oe,lightCyan:ie,lightGray:j,bgBlack:se,bgRed:ae,bgGreen:le,bgYellow:ce,bgBlue:ge,bgMagenta:ue,bgCyan:L,bgWhite:me,bgGray:de,bgLightRed:pe,bgLightGreen:fe,bgLightYellow:he,bgLightBlue:be,bgLightMagenta:ye,bgLightCyan:Ce,bgLightGray:E,bold:h,dim:C,italic:d,underline:xe,inverse:we,hidden:ke,strikethrough:Fe,reset:$e,ansi256:Te,ansi256Bg:Pe,trueColor:Ae,trueColorBg:We,link:Ye,stripColors:je,grey:y,lightGrey:j,bgLightGrey:E,supportsColor:ut};function mt(e,t,n,r){let o=Ee(e);if(o>=t)return e;let i=r[0]||" ",s=t-o;if(n==="right")return`${i.repeat(s)}${e}`;if(n==="center"){let a=Math.floor(s/2),u=s-a;return`${i.repeat(a)}${e}${i.repeat(u)}`}return`${e}${i.repeat(s)}`}function P(e){return Math.max(0,...e.map(Ee))}function A(e,t,n="left"){let r=String(e).split(/\r?\n/),o=typeof t==="object"?t:void 0,i=typeof t==="number"?t:o?.width??P(r),s=o?.align??n,a=o?.padChar??" ";return r.map((u)=>mt(u,Math.max(0,i),s,a)).join(`
6
+ `)}function on(e,t){return A(e,t,"left")}function sn(e,t){let n=String(e).split(/\r?\n/);return A(e,t??process.stdout?.columns??P(n),"right")}function an(e,t){let n=String(e).split(/\r?\n/);return A(e,t??process.stdout?.columns??P(n),"center")}var dt={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 ln(e,t={}){let n=String(e).split(/\r?\n/),r=dt[t.borderStyle??"single"],o=Math.max(0,t.padding??1),i=Math.max(0,t.margin??0),s=t.align??"left",a=P(n),u=a+o*2,m=typeof t.borderColor==="function"?t.borderColor:t.borderColor?Ne(t.borderColor):Me,N=m((()=>{if(!t.title)return`${r.topLeft}${r.horizontal.repeat(u)}${r.topRight}`;let R=` ${K(String(t.title))} `.slice(0,u),z=r.horizontal.repeat(Math.max(0,u-R.length));return`${r.topLeft}${R}${z}${r.topRight}`})()),D=m(`${r.bottomLeft}${r.horizontal.repeat(u)}${r.bottomRight}`),Ue=n.map((S)=>{let R=A(S,{align:s,width:a}),z=`${" ".repeat(o)}${R}${" ".repeat(o)}`;return`${m(r.vertical)}${z}${m(r.vertical)}`}),Ve=" ".repeat(i);return[N,...Ue,D].map((S)=>`${Ve}${S}`).join(`
7
+ `)}var cn=st(["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 De="0.72.78";async function bn(e,t){return new Promise((n)=>{if(t?.quiet===!1)console.log(),console.log(w(h("Stacks CLI"))+C(` v${De}`)),console.log();if(p.info(`Running ${L(d(h(` ${e} `)))}`),t?.showPerformance===!1||t?.quiet)return n(0);return n(performance.now())})}function yn(e,t,n){let r={type:"success",useSeconds:!0,...t};return r.message=t?.message||e,new Promise((o)=>{if(n)return ft(n),o(Be.FatalError);if(r?.startTime){let i=performance.now()-r.startTime;if(r.useSeconds)i=i/1000,i=Math.round(i*100)/100;if(r.quiet===!0)return o(Be.Success);if(n)p.error(`[${i.toFixed(2)}${r.useSeconds?"s":"ms"}] Failed`);else if(r.type==="info")p.info(`${C(y(`[${i.toFixed(2)}${r.useSeconds?"s":"ms"}]`))} ${r.message??"Complete"}`);else p.success(`${C(y(h(`[${i.toFixed(2)}${r.useSeconds?"s":"ms"}]`)))} ${h(x(r.message??"Complete"))}`)}else if(r?.type==="info")p.info(e);else if(r?.type==="success"&&r?.quiet!==!0)p.success(e);p.flush().catch(()=>{}).then(()=>o(Be.Success))})}import W from"process";function ze(e){if(!e)return!1;return e.startsWith("--")}function ht(e){return e.startsWith("-")&&!ze(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 bt(e,t,n,r){let[o,i]=e.slice(2).split("=");if(i!==void 0)r[o]=Le(i);else if(n+1<t.length&&!t[n+1]?.startsWith("-"))r[o]=t[n+1],n++;else r[o]=!0;return n}function yt(e,t,n,r){let[o,i]=e.slice(1).split("=");if(o===void 0)return n;if(i!==void 0&&o!==void 0)for(let s=0;s<o.length;s++)r[o[s]]=Le(i);else for(let s=0;s<o.length;s++)if(n+1<t.length&&s===o.length-1&&!t[n+1]?.startsWith("-"))r[o[s]]=Le(t[n+1]),n++;else r[o[s]]=!0;return n}function Ct(e){if(e===void 0)e=W.argv.slice(2);let t=[],n={};for(let r=0;r<e.length;r++){let o=e[r];if(!o)continue;if(ze(o))r=bt(o,e,r,n);else if(ht(o))r=yt(o,e,r,n);else t.push(o)}return{args:t,options:n}}function kn(e){if(e===void 0)e=W.argv.slice(2);return Ct(e).args}function Fn(e){e=e||{};let t={dryRun:!1,quiet:!1,verbose:!1},n=W.argv.slice(2);for(let r=0;r<n.length;r++){let o=n[r];if(o?.startsWith("--")){let s=o.substring(2).replace(/-([a-z])/gi,(a)=>a[1]?a[1].toUpperCase():"");if(r+1<n.length&&!n?.[r+1]?.startsWith("--"))if(n?.[r+1]==="true"||n?.[r+1]==="false")e[s]=n[r+1]==="true",r++;else e[s]=n[r+1],r++;else e[s]=!0}}if(Object.keys(e).length===0)return{};return{...t,...e}}function xt(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 Object.entries(e).filter(([t,n])=>t!=="--"&&t!=="_"&&n!==!1&&n!==void 0&&n!==null).map(([t,n])=>{if(n===!0)return`--${t}`;return`--${t} ${n}`}).join(" ");return xt(W.argv.slice(2))}import f from"process";import{createInterface as wt}from"readline";var On=f.stdin.destroy;f.stdin.destroy=function(e){if(e)this.emit("error",e);return this};f.on("SIGINT",()=>{console.log(`
8
+ `),f.exit(130)});var k=null;function kt(){if(!k){let e=f.stdin.isTTY&&f.stdout.isTTY;if(k=wt({input:f.stdin,output:f.stdout,terminal:e}),e&&typeof f.stdin.setRawMode==="function")k.on("SIGINT",()=>{f.emit("SIGINT")});k.once("close",()=>{k=null})}return k}var Y=Symbol("stdin-eof");function qe(e){return new Promise((t)=>{let n=kt(),r=!1,o=(s)=>{if(r)return;r=!0,n.off("close",i),t(s)},i=()=>o(Y);n.once("close",i);try{n.question(e,o)}catch{o(Y)}})}async function O(e){let t=await qe(e);return t===Y?"":t}function _e(e,t){let n=e.toLowerCase().trim();if(!n)return t;if(n==="y"||n==="yes")return!0;if(n==="n"||n==="no")return!1;return t}async function vn(e){let t=typeof e==="string"?{message:e}:e,n=t.initial??!1,r=n?" (Y/n) ":" (y/N) ",o=await qe(`${t.message}${r}`);if(o===Y)return null;return _e(o,n)}async function Ft(e){let t=typeof e==="string"?{message:e}:e,n=t.initial??!1,r=n?" (Y/n) ":" (y/N) ",o=await O(`${t.message}${r}`);return _e(o,n)}async function $t(e){let t=typeof e==="string"?{message:e}:e,n=t.placeholder||t.initial||"",r=n?` (${n}) `:" ";return(await O(`${t.message}${r}`)).trim()||t.initial||""}async function Bt(e){console.log(e.message),e.choices.forEach((o,i)=>{let s=i===(e.initial??0)?">":" ";console.log(`${s} ${i+1}. ${o.label}`)});let t=await O("Select (number): "),n=Number.parseInt(t.trim(),10)-1,r=e.choices[n]??e.choices[e.initial??0];if(!r)throw Error("select prompt: no choices available");return r.value}async function Lt(e){console.log(e.message),console.log("(Enter numbers separated by commas)"),e.choices.forEach((o,i)=>{console.log(` ${i+1}. ${o.label}`)});let n=(await O("Select (e.g., 1,3,4): ")).split(",").map((o)=>Number.parseInt(o.trim(),10)-1),r=[];for(let o of n){let i=e.choices[o];if(i)r.push(i.value)}return r}async function Ot(e){return(await O(`${(typeof e==="string"?{message:e}:e).message} `)).trim()}var Sn={text:$t,confirm:Ft,select:Bt,multiselect:Lt,password:Ot};import{handleError as vt}from"@stacksjs/error-handling";async function St(e,t){let n={...t,stdin:t?.stdin??"inherit",verbose:t?.verbose??!1};return await H(e,n)}async function Mn(e,t){let n={...t,stdio:[t?.stdin??"inherit","pipe","pipe"],verbose:t?.verbose??!1};return await H(e,n)}async function jn(e,t){let n={...t,stdio:[t?.stdin??"inherit","pipe","pipe"],verbose:t?.verbose??!1};return await Ie(e,n)}async function En(e,t){let n=[];for(let r of e){let o=await St(r,t);if(o.isErr)throw vt("Error during runCommands",o.error),o.error;n.push(o)}return n}import Rt from"process";var It=["SIGINT","SIGTERM","SIGHUP"],F=new Map,He=!1;function Gt(){if(He)return;He=!0;for(let e of It)Rt.on(e,async()=>{for(let[t,n]of F)try{await n()}catch(r){console.error(`[signals] cleanup '${t}' threw:`,r)}})}function An(e,t){return Gt(),F.set(e,t),()=>{if(F.get(e)===t)F.delete(e)}}function Wn(e){F.delete(e)}function Yn(){return[...F.keys()]}var Ke=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],v=process.stdout.isTTY&&!process.env.CI;function Mt(e){let t=e||"",n=0,r=null,o=!1,i=()=>{if(v)process.stdout.write("\r\x1B[K")},s=()=>{if(!v)return;i();let a=Ke[n];process.stdout.write(`${a} ${t}`),n=(n+1)%Ke.length};return{start(a){if(a)t=a;if(o)return;if(o=!0,v)s(),r=setInterval(s,80);else if(t)console.log(` ${t}`)},stop(a){if(o=!1,r)clearInterval(r),r=null;if(i(),a)console.log(a)},update(a){if(t=a,!v&&o)console.log(` ${a}`)},succeed(a){let u=a||t;if(o=!1,r)clearInterval(r),r=null;i(),console.log(`\u2713 ${u}`)},fail(a){let u=a||t;if(o=!1,r)clearInterval(r),r=null;i(),console.error(`\u2717 ${u}`)},get text(){return t},set text(a){if(t=a,v&&o)s()},get isSpinning(){return o}}}async function Dn(e,t,n){let r=Mt(e);r.start();try{let o=await t();return r.succeed(n?.successMessage||e),o}catch(o){throw r.fail(n?.failMessage||`Failed: ${e}`),o}}export{Wt as CLI,A as align,Te as ansi256,Pe as ansi256Bg,nt as applyAliases,se as bgBlack,ge as bgBlue,L as bgCyan,de as bgGray,le as bgGreen,be as bgLightBlue,Ce as bgLightCyan,E as bgLightGray,fe as bgLightGreen,ye as bgLightMagenta,pe as bgLightRed,he as bgLightYellow,ue as bgMagenta,ae as bgRed,me as bgWhite,ce as bgYellow,U as black,Q as blue,h as bold,ln as box,xt as buddyOptions,an as centerAlign,Nt as cli,tn as colorize,nn as colors,Ft as confirm,vn as confirmOrNull,w as cyan,Ht as defineCommand,Kt as defineCommands,C as dim,et as discoverCommandFiles,H as exec,Ie as execSync,Ne as getColor,y as gray,x as green,ke as hidden,Et as installPackage,Tt as installStack,bn as intro,we as inverse,d as italic,rn as kolorist,on as leftAlign,re as lightBlue,ie as lightCyan,j as lightGray,te as lightGreen,oe as lightMagenta,ee as lightRed,ne as lightYellow,Ye as link,Yn as listSignalHandlers,Re as loadCommandRegistry,_t as loadCommands,p as log,X as magenta,Lt as multiselect,Wn as offSignal,An as onSignal,Yt as onUnknownSubcommand,yn as outro,kn as parseArgs,Ct as parseArgv,Fn as parseOptions,Ot as password,Sn as prompts,cn as quotes,V as red,$e as reset,tt as resolveCommands,sn as rightAlign,St as runCommand,jn as runCommandSync,En as runCommands,Mn as runProcess,Bt as select,Mt as spinner,Fe as strikethrough,K as stripAnsi,je as stripColors,$t as text,Ae as trueColor,We as trueColorBg,xe as underline,Z as white,Dn as withSpinner,J as yellow};
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@stacksjs/cli",
3
3
  "type": "module",
4
4
  "sideEffects": false,
5
- "version": "0.72.77",
5
+ "version": "0.72.78",
6
6
  "description": "TypeScript framework for CLI artisans. Build beautiful console apps with ease.",
7
7
  "author": "Chris Breuer",
8
8
  "contributors": [
@@ -64,6 +64,7 @@
64
64
  "scripts": {
65
65
  "build": "bun build.ts",
66
66
  "typecheck": "bun tsc --noEmit",
67
+ "typecheck:types": "bun tsc --noEmit -p tsconfig.type-tests.json --pretty false",
67
68
  "test": "bun test",
68
69
  "prepublishOnly": "bun run build"
69
70
  },
@@ -71,14 +72,14 @@
71
72
  "@stacksjs/clapp": "^0.2.12"
72
73
  },
73
74
  "devDependencies": {
74
- "@stacksjs/collections": "0.72.77",
75
- "@stacksjs/config": "0.72.77",
75
+ "@stacksjs/collections": "0.72.78",
76
+ "@stacksjs/config": "0.72.78",
76
77
  "better-dx": "^0.2.24",
77
- "@stacksjs/error-handling": "0.72.77",
78
- "@stacksjs/logging": "0.72.77",
79
- "@stacksjs/path": "0.72.77",
80
- "@stacksjs/types": "0.72.77",
81
- "@stacksjs/utils": "0.72.77",
82
- "@stacksjs/validation": "0.72.77"
78
+ "@stacksjs/error-handling": "0.72.78",
79
+ "@stacksjs/logging": "0.72.78",
80
+ "@stacksjs/path": "0.72.78",
81
+ "@stacksjs/types": "0.72.78",
82
+ "@stacksjs/utils": "0.72.78",
83
+ "@stacksjs/validation": "0.72.78"
83
84
  }
84
85
  }