create-crust 0.5.5 → 0.6.0

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/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # create-crust
2
2
 
3
- Scaffold a new Crust CLI project for Bun, Node.js, or Deno
3
+ Scaffold a new Crust CLI project for Bun or Node.js
4
4
 
5
5
  ## Usage
6
6
 
@@ -12,8 +12,6 @@ pnpm create crust@latest my-cli
12
12
  bunx create-crust@latest my-cli
13
13
  # or
14
14
  bun create crust@latest my-cli
15
- # or
16
- deno run -A npm:create-crust@latest my-cli
17
15
  ```
18
16
 
19
17
  The initializer collects the destination, any required overwrite decision, runtime, build output, dependency installation choice, and Git initialization choice. Explicit flags skip the corresponding prompts; prompts can also use defaults without rendering non-interactively. The package name is inferred from the directory name.
@@ -21,17 +19,19 @@ The initializer collects the destination, any required overwrite decision, runti
21
19
  ## Options
22
20
 
23
21
  ```text
24
- create-crust [directory] [--runtime bun|node|deno] [--artifact package|binary] [--install|--no-install] [--git|--no-git] [--overwrite|--no-overwrite]
22
+ create-crust [directory] [--runtime bun|node] [--artifact package|binary] [--install|--no-install] [--git|--no-git] [--overwrite|--no-overwrite]
23
+ create-crust --help | --version
25
24
  ```
26
25
 
27
26
  - `directory` sets the destination; otherwise the directory prompt defaults to `my-cli`. Its basename (the current directory's for `.`) becomes the package and command name, so it must follow the [installed command name rule](https://crustjs.com/docs/modules/core#tooling-subpath): letters, digits, `.`, `_`, and `-`, starting with a letter or digit; anything else is rejected before any file is written.
28
- - `--runtime` selects the runtime the project develops and builds for: `bun`, `node`, or `deno`. The default is `bun`.
29
- - `--artifact` selects the build output independently of the runtime: `package` for a JavaScript bundle requiring the user's selected runtime, or `binary` for a standalone executable embedding that runtime. Defaults: `binary` for Bun/Deno, `package` for Node.js. Deno runtime-package bundling is experimental.
30
- - `--install` / `--no-install` installs or skips dependencies. The default is to install. Deno projects install with `deno install`; the other runtimes use the detected package manager. If installation is skipped, the next steps include the install command.
27
+ - `--runtime` selects the runtime the project develops and builds for: `bun` or `node`. The default is `bun`.
28
+ - `--artifact` selects the build output independently of the runtime: `package` for a JavaScript bundle requiring the user's selected runtime, or `binary` for a standalone executable embedding that runtime. Defaults: `binary` for Bun, `package` for Node.js.
29
+ - `--install` / `--no-install` installs or skips dependencies. The default is to install, using the detected package manager. If installation is skipped, the next steps include the install command.
31
30
  - `--git` / `--no-git` initializes or skips a Git repository when the destination is not already inside one. The default is to initialize.
32
31
  - When the destination requires an overwrite decision, `--overwrite` overwrites conflicting files without confirmation; `--no-overwrite` aborts without prompting. The default is not to overwrite.
32
+ - `-h, --help` prints usage and `-v, --version` prints the version; neither scaffolds anything.
33
33
 
34
- Generated projects use the single-file starter (`src/cli.ts`). The generated README and next steps use the detected package manager for script commands (`bun run`, `npm run`, `pnpm run`, or `yarn run`), independently of the selected runtime. Detection checks the destination's lockfiles first, then the invoking package manager's user-agent, and defaults to npm. Deno projects always use `deno task`.
34
+ Generated projects use the single-file starter (`src/cli.ts`). The generated README and next steps use the detected package manager for script commands (`bun run`, `npm run`, `pnpm run`, or `yarn run`), independently of the selected runtime. Detection checks the destination's lockfiles first, then the invoking package manager's user-agent, and defaults to npm.
35
35
 
36
36
  Every generated project includes:
37
37
 
@@ -41,24 +41,22 @@ Every generated project includes:
41
41
  - `README.md` — getting started instructions
42
42
  - `.gitignore` — sensible defaults for Node/Bun projects
43
43
 
44
- Every project has the same scripts: `build` (`crust build`) stages the publishable npm package(s) in `.crust/`, `start` runs the built CLI from `.crust/root/bin/<name>.js`, and `release` (`crust publish`) publishes them. The runtime decides how the project runs in development; the `crust.artifact` setting decides what `build` puts in `.crust/`. All six combinations are selectable; the defaults preserve each runtime's established output:
44
+ Every project has the same scripts: `build` (`crust build`) stages the publishable npm package(s) in `.crust/`, `start` runs the built CLI from `.crust/root/bin/<name>.js`, and `release` (`crust publish`) publishes them. The runtime decides how the project runs in development; the `crust.artifact` setting decides what `build` puts in `.crust/`. All four combinations are selectable; the defaults preserve each runtime's established output:
45
45
 
46
- | Runtime | `dev` | `build` output (`crust.artifact`) |
47
- | ------- | ------------------------ | --------------------------------------------------------------------------------------------- |
48
- | `bun` | `bun run src/cli.ts` | `binary`: a root package with a Node launcher plus one standalone binary package per platform |
49
- | `node` | `node src/cli.ts` | `package`: a root package containing one JavaScript bundle that needs Node 24+ |
50
- | `deno` | `deno run -A src/cli.ts` | `binary`: a root package with a Node launcher plus one standalone binary package per platform |
46
+ | Runtime | `dev` | `build` output (`crust.artifact`) |
47
+ | ------- | -------------------- | --------------------------------------------------------------------------------------------- |
48
+ | `bun` | `bun run src/cli.ts` | `binary`: a root package with a Node launcher plus one standalone binary package per platform |
49
+ | `node` | `node src/cli.ts` | `package`: a root package containing one JavaScript bundle that needs Node 24+ |
51
50
 
52
51
  Every runtime puts the Crust packages your code imports (`@crustjs/core`, `@crustjs/extensions`) in `dependencies` and the build tool (`@crustjs/crust`) in `devDependencies`, and writes your selections to `"crust": { "runtime": ..., "artifact": ... }` in `package.json` so `crust build` needs no additional flags.
53
52
 
54
- For example, scaffold a Node binary or an experimental Deno runtime package:
53
+ For example, scaffold a Node binary:
55
54
 
56
55
  ```sh
57
56
  npx create-crust@latest my-node-cli --runtime node --artifact binary
58
- npx create-crust@latest my-deno-cli --runtime deno --artifact package
59
57
  ```
60
58
 
61
- Node binaries need Node 26+ and Bun at build time; Node runtime packages do not need the Node executable compiler. Deno packages need Deno 2.5+ to bundle. The wizard does not install or pin compilers. See [Build and distribution](https://crustjs.com/docs/guide/build-and-distribution) for complete requirements.
59
+ Node binaries need Node 26+ and Bun at build time; Node runtime packages do not need the Node executable compiler. The wizard does not install or pin compilers. See [Build and distribution](https://crustjs.com/docs/guide/build-and-distribution) for complete requirements.
62
60
 
63
61
  Artifact choice is separate from distribution channel. `release` publishes to npm, but npm is optional: standalone executables plus adjacent assets can be shipped as downloads or through Homebrew/Scoop without a separate JavaScript runtime. The npm binary launcher requires Node.js. The generated README links to [custom distribution](https://crustjs.com/docs/guide/build-and-distribution#custom-distribution); the wizard does not generate installer definitions.
64
62
 
@@ -1,36 +1,43 @@
1
1
  #!/usr/bin/env node
2
- var Xn=Symbol.dispose||Symbol.for("Symbol.dispose"),Zn=Symbol.asyncDispose||Symbol.for("Symbol.asyncDispose"),Qe=(e,t,n)=>{if(t!=null){if(typeof t!=="object"&&typeof t!=="function")throw TypeError('Object expected to be assigned to "using" declaration');var r;if(n)r=t[Zn];if(r===void 0)r=t[Xn];if(typeof r!=="function")throw TypeError("Object not disposable");e.push([n,r,t])}else if(n)e.push([n]);return t},et=(e,t,n)=>{var r=typeof SuppressedError==="function"?SuppressedError:function(i,a,c,l){return l=Error(c),l.name="SuppressedError",l.error=i,l.suppressed=a,l},s=(i)=>t=n?new r(i,t,"An error was suppressed during disposal"):(n=!0,i),o=(i)=>{while(i=e.pop())try{var a=i[1]&&i[1].call(i[2]);if(i[0])return Promise.resolve(a).then(o,(c)=>(s(c),o()))}catch(c){s(c)}if(n)throw t};return o()};import{existsSync as Hn,readdirSync as Ci}from"node:fs";import{basename as Kn,dirname as Gn,isAbsolute as ji,join as _i,resolve as Yn}from"node:path";import{dirname as Xi,join as Zi,posix as Qi,resolve as yr,win32 as ea}from"node:path";import{existsSync as tt,statSync as Qn}from"node:fs";import{dirname as nt,isAbsolute as Mi,join as er,resolve as tr}from"node:path";function rt(e){let t=tr(e);if(tt(t)&&!Qn(t).isDirectory())t=nt(t);while(!0){if(tt(er(t,"package.json")))return t;let n=nt(t);if(n===t)return null;t=n}}import{realpathSync as nr}from"node:fs";import{dirname as rr,join as pe,resolve as sr}from"node:path";import{fileURLToPath as or}from"node:url";var st="CRUST_INTERNAL_BUILD_OUT_DIR",ir="crustjs.packagedBuild",ar=Symbol.for(ir);function ge(){return globalThis[ar]===!0}function cr(){let{Bun:e,Deno:t}=globalThis,n=e?.main??"";return n.startsWith("/$bunfs/")||/^[A-Za-z]:[\\/]~BUN[\\/]/.test(n)||t?.build?.standalone===!0||process.getBuiltinModule?.("node:sea")?.isSea()===!0}function lr(){return ge()||!0}function he(e){if(e===""||e==="."||e===".."||/[\\/]/.test(e))throw Error(`Artifact name must be a single directory name, got ${JSON.stringify(e)}.`);if(cr())return pe(rr(process.execPath),e);if(lr())return sr(or(import.meta.url),"..","..",e);let t=process.env[st];if(t)return pe(t,e);let n=process.argv[1],r=n;if(n)try{r=nr(n)}catch(o){throw Error(`Could not resolve artifact "${e}": could not resolve source entrypoint "${n}".`,{cause:o})}let s=r?rt(r):null;if(!s)throw Error(`Could not resolve artifact "${e}": no package.json was found above ${n?`entrypoint "${n}"`:"process.argv[1] (unset)"}.`);return pe(s,".crust","root",e)}import{AsyncLocalStorage as ur}from"node:async_hooks";import{Writable as fr}from"node:stream";var dr=Symbol.for("crustjs.terminal.io"),mr=Symbol.for("crustjs.terminal.ambient-callbacks"),ot=globalThis,V=ot[dr]??=new ur,it=ot[mr]??=new WeakMap;function be(e,t){let n=V.getStore();return V.run({input:e.input??n?.input,output:e.output??n?.output},t)}function q(){return V.getStore()}function pr(e){let t="",n=new fr({decodeStrings:!1,write(r,s,o){t+=r.toString();let i=t.indexOf(`
2
+ var _=(e,t,n)=>()=>{if(e)try{t=e(e=0)}catch(r){n=[r]}if(n)throw n[0];return t};var Is=Symbol.dispose||Symbol.for("Symbol.dispose"),js=Symbol.asyncDispose||Symbol.for("Symbol.asyncDispose"),Gt=(e,t,n)=>{if(t!=null){if(typeof t!=="object"&&typeof t!=="function")throw TypeError('Object expected to be assigned to "using" declaration');var r;if(n)r=t[js];if(r===void 0)r=t[Is];if(typeof r!=="function")throw TypeError("Object not disposable");e.push([n,r,t])}else if(n)e.push([n]);return t},Jt=(e,t,n)=>{var r=typeof SuppressedError==="function"?SuppressedError:function(i,a,c,l){return l=Error(c),l.name="SuppressedError",l.error=i,l.suppressed=a,l},s=(i)=>t=n?new r(i,t,"An error was suppressed during disposal"):(n=!0,i),o=(i)=>{while(i=e.pop())try{var a=i[1]&&i[1].call(i[2]);if(i[0])return Promise.resolve(a).then(o,(c)=>(s(c),o()))}catch(c){s(c)}if(n)throw t};return o()};function se(e){if(process.platform!=="linux"||process.versions.bun===void 0)return!1;qt??=$s();let t=process.getBuiltinModule("node:os").constants.signals[e];return t!==void 0&&t<=32&&(qt>>>t-1&1)===1}function $s(){try{let e=process.getBuiltinModule("node:fs").readFileSync("/proc/self/status","utf8"),t=/^SigIgn:\s*([0-9a-f]+)$/m.exec(e)?.[1];return t?Number.parseInt(t.slice(-8),16):0}catch{return 0}}var qt;var ke=()=>{};function V(e){return e instanceof Error&&"code"in e&&typeof e.code==="string"}var oe=()=>{};function Ns(e,t){let n=()=>{if(e.listenerCount("error")===0)e.once("error",Yt)};try{n(),e.write(t,(r)=>{if(r)n()})}catch{}finally{e.removeListener("error",Yt)}}function As(e,t){if(Kt.has(e))return;let{writeSync:n}=process.getBuiltinModule("node:fs"),r=Buffer.from(t),s=0;while(s<r.length)try{s+=n(e,r,s)}catch(o){let i=V(o)?o.code:void 0;if(i!=="EAGAIN"){if(i==="EPIPE"||i==="EBADF")Kt.add(e);return}Atomics.wait(_s??=new Int32Array(new SharedArrayBuffer(4)),0,0,1)}}function H(e,t){if(process.platform==="win32")Ns(e===1?process.stdout:process.stderr,t);else As(e,t)}function ie(){return Zt[Ts]??=new(process.getBuiltinModule("node:async_hooks")).AsyncLocalStorage}function Qt(){return Zt[ks]??=new WeakMap}function Fe(e,t){let n=ie().getStore();return ie().run({input:e.input??n?.input,output:e.output??n?.output},t)}function ae(){return ie().getStore()}function Fs(e){let t="",n=new(process.getBuiltinModule("node:stream")).Writable({decodeStrings:!1,write(r,s,o){t+=r.toString();let i=t.indexOf(`
3
3
  `);while(i!==-1)e.stderr(t.slice(0,i)),t=t.slice(i+1),i=t.indexOf(`
4
- `);o()}});return it.set(n,e),n}function we(e,t){let n=V.getStore();return be({input:n?.input,output:n?.output&&!it.has(n.output)?n.output:pr(e)},t)}import{parseArgs as vr}from"node:util";import{isPromise as xr}from"node:util/types";function at(e){let t=Number(e);return Number.isNaN(t)?void 0:t}function H(e){return e==="true"||e==="1"}import{homedir as Sr}from"node:os";function gr(e){return typeof e==="number"}function hr(e){return e.map((t,n)=>gr(t)?`[${t}]`:n>0?`.${String(t)}`:String(t)).join("")}function br(e){return typeof e==="object"&&e!==null&&"key"in e}function wr(e){if(!e)return[];return e.map((t)=>br(t)?t.key:t)}function ct(e,t=[]){return e.map((n)=>{let r=wr(n.path),s=[...t,...r];return{message:n.message,path:hr(s)}})}var h=class extends Error{code;details;cause;constructor(e,t,...n){super(t);this.name="CrustError",this.code=e,this.details=n[0]}is(e){return Object.is(this.code,e)}withCause(e){return this.cause=e,this}toJSON(){return{code:this.code,message:this.message,details:this.details}}};function ye(e,t){if(e==="")throw new h("DEFINITION",`Flag ${t} spellings must be non-empty`,{subject:"flag",name:e,reason:"empty-spelling"});if(t!=="short"&&e.startsWith("no-"))throw new h("DEFINITION",`Flag ${t} "${e}" must not start with "no-"; the prefix is reserved for boolean negation`,{subject:"flag",name:e,reason:"reserved-no-prefix"});if(e==="__proto__")throw new h("DEFINITION",`Flag ${t} "__proto__" is a reserved spelling`,{subject:"flag",name:e,reason:"reserved-spelling"})}function pt(e,t){return[e,...t.short===void 0?[]:[t.short],...t.aliases??[]]}function gt(e){return e.type==="boolean"&&e.noNegate!==!0}function ht(e,t,n){if(e.choices&&e.default!==void 0){let r="multiple"in e&&e.multiple?e.default:[e.default];for(let s of r)if(!e.choices.includes(s))throw new h("DEFINITION",`${t==="flag"?"Flag":"Argument"} "${n}" default must be one of choices`,{subject:t,name:n,reason:"default-outside-choices"})}return Object.freeze({...e,..."aliases"in e&&e.aliases?{aliases:Object.freeze([...e.aliases])}:{},...e.choices?{choices:Object.freeze([...e.choices])}:{},..."env"in e&&e.env?{env:Object.freeze({name:e.env.name,delimiter:e.env.delimiter})}:{},..."multiple"in e&&e.multiple&&Array.isArray(e.default)?{default:Object.freeze([...e.default])}:{}})}function Or(e){return typeof e==="object"&&e!==null&&!Array.isArray(e)&&"name"in e&&typeof e.name==="string"&&(!("delimiter"in e)||e.delimiter===void 0||typeof e.delimiter==="string")}function bt(e,t){if(ye(e,"canonical"),t.short!==void 0)ye(t.short,"short");for(let r of t.aliases??[])ye(r,"alias");let n=pt(e,t);if(new Set(n).size!==n.length)throw new h("DEFINITION",`Flag "${e}" repeats one of its own spellings`,{subject:"flag",name:e,reason:"flag-collision"});if(t.short!==void 0&&t.short.length!==1)throw new h("DEFINITION",`Flag "${e}" short "${t.short}" must be one character`,{subject:"flag",name:e,reason:"invalid-short"});if(t.env!==void 0&&!Or(t.env))throw new h("DEFINITION",`Flag "${e}" env must be an object with a string name and optional string delimiter`,{subject:"flag",name:e,reason:"invalid-env"});if(t.env?.name==="")throw new h("DEFINITION",`Flag "${e}" env variable name must be non-empty`,{subject:"flag",name:e,reason:"empty-env"});for(let[r,s]of[["delimiter",t.delimiter],["env.delimiter",t.env?.delimiter]]){if(s===void 0)continue;if(!t.multiple)throw new h("DEFINITION",`Flag "${e}" ${r} requires multiple: true`,{subject:"flag",name:e,reason:"delimiter-without-multiple"});if(s==="")throw new h("DEFINITION",`Flag "${e}" ${r} must be non-empty`,{subject:"flag",name:e,reason:"empty-delimiter"})}return ht(t,"flag",e)}function wt(e){if(e.name==="")throw new h("DEFINITION","Argument names must be non-empty",{subject:"argument",name:e.name,reason:"empty-name"});return ht(e,"argument",e.name)}function $r(e){return e.meta.hidden!==!0}var Er={command:"Command",context:"Context",extension:"Extension"};function Ir({subject:e,name:t}){let n=Er[e];return new h("DEFINITION",`${n} "${t}" contains invalid documentation sections`,{subject:e,name:t,reason:"invalid-sections"})}function yt(e,t){let{title:n,body:r,only:s,except:o}=e;if(!n.trim()||/[\r\n]/.test(n)||!r.trim()||s?.length===0||o?.length===0||s!==void 0&&o!==void 0)throw Ir(t);let i=(a)=>Object.freeze(a.map((c)=>typeof c==="string"?c:c.id));return Object.freeze({title:n,body:r,...s?{only:i(s)}:o?{except:i(o)}:{}})}function je(e,t,n="command"){return t.map((r)=>yt(r,{subject:n,name:e}))}var Cr=Symbol("crust.defining");function Y(e){return e[Cr]}var vt=Symbol.for("crust.contextSources");function xt(e){return"contextName"in e?e.contextName:e.name}function J(e,t){let n=new Set(e.map((o)=>o.name)),r=new Set,s=(o)=>{if(r.has(o))return;r.add(o);let i=xt(o);if(!n.has(i))throw new h("DEFINITION",`No provider for Context "${i}"`,{subject:"context",name:i,reason:"missing-context"});for(let a of o.use)s(a)};for(let o of t)s(o)}var jr=Object.freeze({[Symbol("crust.handled")]:!0});function Se(){return jr}function St(e){return{meta:{name:e},localFlags:{},ownedFlags:{},effectiveFlags:{},flagSpellings:new Map,args:[],subCommands:{},contexts:[],providedContexts:[],demands:[],extensions:[],run:void 0}}function N(e,t,n,r){n=bt(t,n);let s=pt(t,n),o=Object.hasOwn(e.effectiveFlags,t)?t:s.map((a)=>e.flagSpellings.get(a)?.canonicalName).find((a)=>a!==void 0);if(o!==void 0)throw new h("DEFINITION",`Flag "${t}" collides with existing flag "${o}" on command "${e.meta.name}"`,{subject:"flag",name:t,reason:"flag-collision"});(r==="local"?e.localFlags:e.ownedFlags)[t]=n,e.effectiveFlags[t]=n;let i={canonicalName:t,def:n,negatable:gt(n)};if(e.flagSpellings.set(t,{...i,kind:"canonical"}),n.short!==void 0)e.flagSpellings.set(n.short,{...i,kind:"short"});for(let a of n.aliases??[])e.flagSpellings.set(a,{...i,kind:"alias"})}function X(e){return{localFlags:{...e.localFlags},ownedFlags:{...e.ownedFlags},effectiveFlags:{...e.effectiveFlags},flagSpellings:new Map(e.flagSpellings)}}function P(e){let t={};for(let[n,r]of Object.entries(e.subCommands))t[n]=P(r);return{...e,meta:{...e.meta},...X(e),args:[...e.args],subCommands:t,contexts:e.contexts.map((n)=>({...n})),providedContexts:[...e.providedContexts],demands:[...e.demands],extensions:[...e.extensions]}}function Ot(e,t,n,r){if(N(e,t,n,"owned"),!r)return;for(let s of Object.values(e.subCommands))Ot(s,t,n,!0)}function _r(e,t,n){for(let r of t.commands)e.subCommands[r.name]=n(r,e,t.id)}function kr(e,t){for(let[n,r]of Object.entries(t.flags)){let{recursive:s=!0,...o}=r;Ot(e,n,o,s)}}function Nr(e,t,n){let r=e;for(let s of t){let o=Object.hasOwn(r.subCommands,s)?r.subCommands[s]:void 0;if(!o)throw new h("DEFINITION",`Extension "${n.id}" section target "${t.join(" ")}" is not a canonical command path`,{subject:"extension",name:n.id,reason:"invalid-section-path"});r=o}return r}function Ar(e,t,n){if(!t.sections)return;let r={subject:"extension",name:t.id},s=t.sections(n);for(let o of s){let i=yt(o,r),a=Nr(e,o.command,t);a.meta.sections=[...a.meta.sections??[],i]}}function Tr(e,t){let n=(r,s,o)=>{let i=[...new Map(o.map((a)=>[a.name,a])).values()];if(i.some((a)=>a.sections.length>0)){let a=new Set((r.meta.sections??[]).map(({title:c})=>c));for(let c of i){for(let{title:l}of c.sections)if(a.has(l))throw new h("DEFINITION",`Context "${c.name}" section "${l}" duplicates a section on command "${s}"`,{subject:"context",name:c.name,reason:"duplicate-section"});for(let{title:l}of c.sections)a.add(l)}r.meta.sections=[...r.meta.sections??[],...i.flatMap((c)=>c.sections)]}for(let[a,c]of Object.entries(r.subCommands))n(c,`${s} ${a}`,c.providedContexts)};n(e,e.meta.name,[...e.providedContexts,...t.flatMap((r)=>r.provide)])}function $t(e,t,n){let r=P(e),s=new Set(t.flatMap((i)=>!n.has(i.id)&&e.extensions.includes(i)?[i.id]:[])),o=(i)=>{i.contexts=i.contexts.filter((u)=>u.extensionId===void 0||s.has(u.extensionId));let a=Object.keys(i.effectiveFlags),c=i.localFlags,l={};for(let{instance:u}of i.contexts)Object.assign(l,u.ownedFlags);i.localFlags={},i.ownedFlags={},i.effectiveFlags={},i.flagSpellings=new Map;for(let u of a){let f=Object.hasOwn(l,u)?"owned":"local",d=f==="owned"?l:c;if(Object.hasOwn(d,u))N(i,u,d[u],f)}for(let u of Object.values(i.subCommands))o(u)};o(r);for(let i of t){if(s.has(i.id))continue;let a=i.provide;if(a.length===0)continue;let c=(l,u)=>{let f=a.filter((b)=>!u.has(b.name)),d=f.map((b)=>({instance:b,extensionId:i.id}));l.contexts.push(...d);for(let b of f)for(let[m,g]of Object.entries(b.ownedFlags))N(l,m,g,"owned");let p=new WeakSet(l.contexts.map(({instance:b})=>b));for(let b of Object.values(l.subCommands)){let m=new Set(u);for(let{instance:g}of b.contexts)if(!p.has(g))m.add(g.name);c(b,m)}};c(r,new Set)}return r}function Fr(e,t){try{return new URL(e)}catch(n){throw new h("PARSE",`Invalid URL for ${t}: "${e}"${/^[a-z][a-z0-9+.-]*:/i.test(e)?"":" (missing protocol — e.g. https://example.com)"}`).withCause(n)}}function Oe(e,t){if(e==="")throw new h("PARSE",`Path for ${t} cannot be empty`);let n=e.replace(/^~(?=\/|$)/,()=>Sr());return yr(process.cwd(),n)}function Pr(e,t){try{return JSON.parse(e)}catch(n){throw new h("PARSE",`Invalid JSON for ${t}: ${n instanceof Error?n.message:String(n)}. Tip: wrap JSON in single quotes on the command line, e.g. --flag '{"k":1}'`).withCause(n)}}async function lt(e,t,n,r){let s=await e["~standard"].validate(t);if(s.issues)return r.push(...ct(s.issues,n)),{ok:!1};return{ok:!0,value:s.value}}async function Rr(e,t){let n=[],r=new Map(Object.entries(t.args)),s=new Map(Object.entries(t.flags));for(let o of e.args){if(o.schema===void 0)continue;let i=await lt(o.schema,r.get(o.name),["args",o.name],n);if(i.ok)r.set(o.name,i.value)}for(let[o,i]of Object.entries(e.effectiveFlags)){if(i.schema===void 0)continue;let a=await lt(i.schema,s.get(o),["flags",o],n);if(a.ok)s.set(o,a.value)}if(n.length>0)throw new h("VALIDATION",`Invalid input:
4
+ `);o()}});return Qt().set(n,e),n}function Pe(e,t){let n=ie().getStore();return Fe({input:n?.input,output:n?.output&&!Qt().has(n.output)?n.output:Fs(e)},t)}var Yt=()=>{},_s,Kt,Xt,Ts,ks,Zt;var q=_(()=>{oe();Kt=new Set;Xt={get isTTY(){return process.getBuiltinModule("node:tty").isatty(2)},get columns(){return process.stderr.columns},write:(e)=>H(2,e)},Ts=Symbol.for("crustjs.terminal.io"),ks=Symbol.for("crustjs.terminal.ambient-callbacks"),Zt=globalThis});function en(e){if(e.trim()==="")return;let t=Number(e);return Number.isNaN(t)?void 0:t}function ce(e){return e==="true"||e==="1"}var tn=()=>{};function Ps(e){return typeof e==="number"}function Rs(e){return e.map((t,n)=>Ps(t)?`[${t}]`:n>0?`.${String(t)}`:String(t)).join("")}function Ms(e){return typeof e==="object"&&e!==null&&"key"in e}function Ds(e){if(!e)return[];return e.map((t)=>Ms(t)?t.key:t)}function nn(e,t=[]){return e.map((n)=>{let r=Ds(n.path),s=[...t,...r];return{message:n.message,path:Rs(s)}})}var rn=()=>{};function he(e){return e!==""&&!/[ \t\n\r\v\f]/.test(e)&&!e.startsWith("-")}function Re(e,t){if(e==="")throw new b("DEFINITION",`Flag ${t} spellings must be non-empty`,{subject:"flag",name:e,reason:"empty-spelling"});if(t==="canonical"&&Ls.test(e))throw new b("DEFINITION",`Flag name "${e}" must not be integer-like; JavaScript reorders such keys`,{subject:"flag",name:e,reason:"integer-like-name"});if(t!=="short"&&e.startsWith("no-"))throw new b("DEFINITION",`Flag ${t} "${e}" must not start with "no-"; the prefix is reserved for boolean negation`,{subject:"flag",name:e,reason:"reserved-no-prefix"});if(e==="__proto__")throw new b("DEFINITION",`Flag ${t} "__proto__" is a reserved spelling`,{subject:"flag",name:e,reason:"reserved-spelling"});if(!he(e)||t!=="short"&&e.includes("="))throw new b("DEFINITION",`Flag ${t} "${e}" must not contain whitespace${t==="short"?"":' or "="'} or start with "-"`,{subject:"flag",name:e,reason:"invalid-spelling"})}function fe(e,t){return[...e===void 0?[]:[e],...t.short===void 0?[]:[t.short],...t.aliases??[]]}function gn(e){return e.type==="boolean"&&e.noNegate!==!0}function zs(e){return new b("DEFINITION",e,{subject:"flag",reason:"invalid-flags"})}function Ke(e){let t=e===null||e===void 0,n=t?void 0:Object.getPrototypeOf(e);if(n!==Object.prototype&&n!==null)throw zs(t?".flags() expects a plain object record":".flags() expects a plain object record; a `__proto__` key sets its prototype instead of naming a flag");let r=Object.entries(e);for(let[s,o]of r)if(o===void 0||o===null)throw new b("DEFINITION",`Flag "${s}" definition must be an object`,{subject:"flag",name:s,reason:"invalid-flags"});return r}function Xe(e,t={}){let n={...t},r=new Set(Object.entries(t).flatMap(([s,o])=>fe(s,o)));for(let[s,o]of e){let i=Ze(s,o);for(let a of fe(s,i)){if(r.has(a))throw new b("DEFINITION",`Flag "${s}" collides with an existing flag`,{subject:"flag",name:s,reason:"flag-collision"});r.add(a)}n[s]=i}return n}function ge(e,t,n){if(e.choices&&e.default!==void 0){let r="multiple"in e&&e.multiple?e.default:[e.default];for(let s of r)if(!e.choices.includes(s))throw new b("DEFINITION",`${t==="flag"?"Flag":"Argument"}${n===void 0?"":` "${n}"`} default must be one of choices`,{subject:t,...n===void 0?{}:{name:n},reason:"default-outside-choices"})}return Object.freeze({...e,..."aliases"in e&&e.aliases?{aliases:Object.freeze([...e.aliases])}:{},...e.choices?{choices:Object.freeze([...e.choices])}:{},..."env"in e&&e.env?{env:Object.freeze({name:e.env.name,delimiter:e.env.delimiter})}:{},..."multiple"in e&&e.multiple&&Array.isArray(e.default)?{default:Object.freeze([...e.default])}:{}})}function Bs(e){return typeof e==="object"&&e!==null&&!Array.isArray(e)&&"name"in e&&typeof e.name==="string"&&(!("delimiter"in e)||e.delimiter===void 0||typeof e.delimiter==="string")}function Ze(e,t){let n=e===void 0?"Flag":`Flag "${e}"`,r=e===void 0?{}:{name:e};if(e!==void 0)Re(e,"canonical");if(t.short!==void 0)Re(t.short,"short");for(let o of t.aliases??[])Re(o,"alias");let s=fe(e,t);if(new Set(s).size!==s.length)throw new b("DEFINITION",`${n} repeats one of its own spellings`,{subject:"flag",...r,reason:"flag-collision"});if(t.short!==void 0&&!/^.$/su.test(t.short))throw new b("DEFINITION",`${n} short "${t.short}" must be one character`,{subject:"flag",...r,reason:"invalid-short"});if(t.env!==void 0&&!Bs(t.env))throw new b("DEFINITION",`${n} env must be an object with a string name and optional string delimiter`,{subject:"flag",...r,reason:"invalid-env"});if(t.env?.name==="")throw new b("DEFINITION",`${n} env variable name must be non-empty`,{subject:"flag",...r,reason:"empty-env"});for(let[o,i]of[["delimiter",t.delimiter],["env.delimiter",t.env?.delimiter]]){if(i===void 0)continue;if(!t.multiple)throw new b("DEFINITION",`${n} ${o} requires multiple: true`,{subject:"flag",...r,reason:"delimiter-without-multiple"});if(i==="")throw new b("DEFINITION",`${n} ${o} must be non-empty`,{subject:"flag",...r,reason:"empty-delimiter"})}return ge(t,"flag",e)}function bn(e){if(e.name==="")throw new b("DEFINITION","Argument names must be non-empty",{subject:"argument",name:e.name,reason:"empty-name"});return ge(e,"argument",e.name)}function Qe(e){return e.meta.hidden!==!0}function et(e,t){let n=(e??[]).filter((s)=>{if(s.only)return s.only.includes(t);if(s.except)return!s.except.includes(t);return!0}),r=new Map;for(let s of n){let o=r.get(s.title);r.set(s.title,o?{title:s.title,body:`${o.body}
5
+ ${s.body}`}:s)}return[...r.values()]}function Ws({subject:e,name:t}){let n=Us[e];return new b("DEFINITION",`${n} "${t}" contains invalid documentation sections`,{subject:e,name:t,reason:"invalid-sections"})}function wn(e,t){let{title:n,body:r,only:s,except:o}=e;if(!n.trim()||/[\r\n]/.test(n)||!r.trim()||s?.length===0||o?.length===0||s!==void 0&&o!==void 0)throw Ws(t);let i=(a)=>Object.freeze(a.map((c)=>typeof c==="string"?c:c.id));return Object.freeze({title:n,body:r,...s?{only:i(s)}:o?{except:i(o)}:{}})}function tt(e,t,n="command"){return t.map((r)=>wn(r,{subject:n,name:e}))}function R(e){return e[vn]}function yn(e,t){return Object.freeze(Object.assign(e,{[vn]:t}))}function xn(e){return"contextName"in e?e.contextName:e.name}function be(e,t){let n=new Set(e.map((o)=>o.name)),r=new Set,s=(o)=>{if(r.has(o))return;r.add(o);let i=xn(o);if(!n.has(i))throw new b("DEFINITION",`No provider for Context "${i}"`,{subject:"context",name:i,reason:"missing-context"});for(let a of o.use)s(a)};for(let o of t)s(o)}function Sn(e,t){try{return new URL(e)}catch{throw new b("PARSE",`Invalid URL for ${t}${/^[a-z][a-z0-9+.-]*:/i.test(e)?"":" (missing protocol — e.g. https://example.com)"}.`)}}function Me(e,t){if(e==="")throw new b("PARSE",`Path for ${t} cannot be empty`);let n=e.replace(/^~(?=\/|$)/,()=>process.getBuiltinModule("node:os").homedir());return process.getBuiltinModule("node:path").resolve(process.cwd(),n)}function Vs(e,t){try{return JSON.parse(e)}catch{throw new b("PARSE",`Invalid JSON for ${t}. Tip: wrap JSON in single quotes on the command line, e.g. --flag '{"k":1}'`)}}async function De(e,t,n,r){let s=await e["~standard"].validate(t);if(s.issues)return r.push(...nn(s.issues,n)),{ok:!1};return{ok:!0,value:s.value}}async function Hs(e,t){let n=[],r=new Map(Object.entries(t.args)),s=new Map(Object.entries(t.flags));for(let o of e.args){if(o.schema===void 0)continue;let i=await De(o.schema,r.get(o.name),["args",o.name],n);if(i.ok)r.set(o.name,i.value)}for(let[o,i]of Object.entries(e.effectiveFlags)){if(i.schema===void 0)continue;let a=await De(i.schema,s.get(o),["flags",o],n);if(a.ok)s.set(o,a.value)}if(n.length>0)throw new b("VALIDATION",`Invalid input:
5
6
  ${n.map((o)=>` - ${o.path}: ${o.message}`).join(`
6
- `)}`,{issues:n});return{args:Object.fromEntries(r),flags:Object.fromEntries(s)}}function Dr(e){let t={};for(let[n,r]of e){if(r.kind==="short")continue;let s={type:r.def.type==="boolean"?"boolean":"string"};if(r.def.multiple)s.multiple=!0;if(r.kind==="canonical"&&r.def.short)s.short=r.def.short;t[n]=s}return t}function Mr(e,t,n){if(t==="number"){let r=at(e);if(r===void 0)throw new h("PARSE",`Expected number for ${n}, got "${e}"`);return r}if(t==="boolean")return H(e);if(t==="url")return Fr(e,n);if(t==="path")return Oe(e,n);if(t==="json")return Pr(e,n);return e}function Lr(e,t,n){if(!t.includes(e))throw new h("PARSE",`Invalid value "${e}" for ${n}. Expected one of: ${t.join(", ")}`)}function $e(e,t,n,r){let s=r===void 0?n:`${n} element [${r}]`,o;try{o=e(t)}catch(i){throw new h("PARSE",`Failed to parse ${s}: ${i instanceof Error?i.message:String(i)}`).withCause(i)}if(xr(o))throw o.catch(()=>{}),new h("PARSE",`Failed to parse ${s}: parse must be synchronous`);return o}function Ee(e,t){let{default:n,parse:r}=e;if(n===void 0)return;if(r){if(Array.isArray(n))return n.map((s,o)=>$e(r,String(s),t,o));return $e(r,String(n),t)}if(e.type==="path"){if(Array.isArray(n))return n.map((s)=>Oe(String(s),t));return Oe(String(n),t)}return"multiple"in e&&e.multiple&&Array.isArray(n)?[...n]:n}function G(e,t,n,r){if(e.schema)return t;if(e.choices)Lr(t,e.choices,n);if(e.parse)return $e(e.parse,t,n,r);return Mr(t,e.type,n)}function zr(e,t,n){if(n.kind==="boolean")return n.value;let r=`--${e}`;return Array.isArray(n.value)?n.value.map((s,o)=>G(t,s,r,o)):G(t,n.value,r)}function Br(e,t){let n={};for(let r of e){if(r.kind!=="option")continue;let{canonicalName:s,def:o}=t.get(r.name),i=n[s];if(o.type==="boolean"){let a=!r.rawName.startsWith("--no-");if(o.multiple&&i?.kind==="boolean"&&Array.isArray(i.value))i.value.push(a);else n[s]={kind:"boolean",value:o.multiple?[a]:a}}else{let a=r.value;if(o.multiple&&i?.kind==="string"&&Array.isArray(i.value))i.value.push(a);else n[s]={kind:"string",value:o.multiple?[a]:a}}}return n}function Et(e,t){if(t===void 0)return[...e];return e.flatMap((n)=>n.split(t)).filter((n)=>n!=="")}function Wr(e,t,n){let r=t.multiple?Et([n],t.env?.delimiter):[n];if(t.multiple&&r.length===0)return;if(t.type!=="boolean")return{kind:"string",value:t.multiple?r:n};let s=r.map(H);if("noNegate"in t&&t.noNegate&&s.includes(!1))throw new h("PARSE",`Flag "--${e}" does not support negation (from ${t.env?.name})`);return{kind:"boolean",value:t.multiple?s:H(n)}}function Ur(e,t,n){let r={};for(let[s,o]of Object.entries(e)){let i=Object.hasOwn(t,s)?t[s]:void 0;if(i!==void 0){if(o.delimiter!==void 0&&i.kind==="string"&&Array.isArray(i.value)){let c=Et(i.value,o.delimiter);r[s]=c.length===0?void 0:{kind:"string",value:c}}else r[s]=i;continue}if(o.env===void 0||!Object.hasOwn(n,o.env.name))continue;let a=n[o.env.name];if(a!==void 0)r[s]=Wr(s,o,a)}return r}function Vr(e,t,n){let r={};for(let[s,o]of Object.entries(e)){let i=Object.hasOwn(t,s)?t[s]:void 0;if(!(i===void 0||o.multiple&&Array.isArray(i)&&i.length===0)){r[s]=n(s,o,i);continue}r[s]=Ee(o,`--${s}`)}return r}function qr(e,t){for(let[n,r]of Object.entries(e))if(r.required===!0&&r.default===void 0){if(t[n]===void 0)throw new h("VALIDATION",`Missing required flag "--${n}"`)}}function Hr(e,t){for(let n of e){if(n.required!==!0||n.default!==void 0)continue;let r=t[n.name];if(n.variadic?!Array.isArray(r)||r.length===0:r===void 0)throw new h("VALIDATION",`Missing required argument "<${n.name}>"`)}}function Gr(e,t,n){let r={},s=0;for(let o of e){let{name:i}=o,a=`<${i}>`;if(Object.defineProperty(r,i,{value:void 0,writable:!0,enumerable:!0,configurable:!0}),o.variadic){let c=t.slice(s);r[i]=c.length===0&&o.default!==void 0?[Ee(o,a)]:c.map((l,u)=>n(o,l,a,u)),s=t.length}else if(s<t.length)r[i]=n(o,t[s],a),s++;else r[i]=Ee(o,a)}return{args:r,consumed:s}}function Kr(e,t){for(let n of e){if(n==="--")return;if(!n.startsWith("--no-"))continue;let r=n.indexOf("="),s=r===-1?n.slice(5):n.slice(5,r),o=t.get(s);if(!o||o.def.type!=="boolean"||o.negatable)continue;throw new h("PARSE",`Flag "--${o.canonicalName}" does not support negation ("--no-${s}")`)}}function Yr(e,t){let n=e.flagSpellings,r=Dr(n);Kr(t,n);let s;try{s=vr({args:t,options:r,strict:!0,allowPositionals:!0,allowNegative:!0,tokens:!0})}catch(c){if(c instanceof Error){let l=c.message.match(/Unknown option '(.+?)'/)?.[1];if(l!==void 0)throw new h("PARSE",`Unknown flag "${l}"`,{flag:l.replace(/^-+|=.*$/g,""),reason:"unknown-flag"}).withCause(c);if("code"in c&&c.code==="ERR_PARSE_ARGS_INVALID_OPTION_VALUE"&&c.message.length>0)throw new h("PARSE",c.message).withCause(c)}throw new h("PARSE","Failed to parse command arguments").withCause(c)}let o=[],i=[],a=!1;for(let c of s.tokens){if(c.kind==="option-terminator"){a=!0;continue}if(c.kind==="positional")(a?o:i).push(c.value)}return{positionals:i,flagValues:Br(s.tokens,n),rawArgs:o}}function _e(e){return Array.isArray(e)}function Jr(e,t,n){let r=e.schema?e.type==="boolean"?"boolean":"string":e.type,s;if(r==="url")s=t instanceof URL;else if(r==="json"){let o=[t],i=new Set;s=!0;while(o.length>0){let a=o.pop();if(a instanceof URL){s=!1;break}if(_e(a)&&!i.has(a))i.add(a),o.push(...a)}}else s=typeof t===(r==="path"?"string":r);if(!s)throw new h("PARSE",`Expected ${r} for ${n}`);if(t===!1&&"noNegate"in e&&e.noNegate)throw new h("PARSE",`Flag "${n}" does not support negation`)}function Ie(e,t,n,r){if(Jr(e,t,n),e.type!=="string"&&e.type!=="path")return t;return G(e,String(t),n,r)}function Xr(e,t,n){let r=`--${e}`;if(t.multiple){if(!_e(n))throw new h("PARSE",`Expected an occurrence array for ${r}`);return n.map((s,o)=>Ie(t,s,r,o))}return Ie(t,n,r)}function It(e,t,n,r,s){let o=Vr(e.effectiveFlags,n,s);return{...Gr(e.args,t,r),flags:o}}function Zr(e,t,n=process.env){let{positionals:r,flagValues:s,rawArgs:o}=Yr(e,t),{args:i,flags:a,consumed:c}=It(e,r,Ur(e.effectiveFlags,s,n),G,zr);return{args:i,flags:a,excessArgs:r.slice(c),rawArgs:o}}function Qr(e,t){let{args:n,flags:r,raw:s}=t,o=[],i;for(let l of e.args){let u=n&&Object.hasOwn(n,l.name)?n[l.name]:void 0;if(u===void 0){i=l.name;continue}if(i!==void 0)throw new h("PARSE",`Argument <${l.name}> cannot be provided after omitted argument <${i}>`,{argument:l.name,reason:"positional-gap"});if(l.variadic){if(!_e(u))throw new h("PARSE",`Expected an occurrence array for <${l.name}>`);o.push(...u)}else o.push(u)}for(let l of Object.keys(n??{}))if(!e.args.some((u)=>u.name===l)&&n?.[l]!==void 0)throw new h("PARSE",`Unknown argument "${l}"`,{argument:l,reason:"unknown-argument"});for(let l of Object.keys(r??{}))if(!Object.hasOwn(e.effectiveFlags,l)&&r?.[l]!==void 0)throw new h("PARSE",`Unknown flag "--${l}"`,{flag:l,reason:"unknown-flag"});let{args:a,flags:c}=It(e,o,r??{},Ie,Xr);return{args:a,flags:c,excessArgs:[],rawArgs:[...s??[]]}}function es(e,t){if(t.excessArgs.length>0)throw new h("VALIDATION",`Unexpected positional argument${t.excessArgs.length===1?"":"s"}: ${t.excessArgs.map((n)=>JSON.stringify(n)).join(", ")}`);Hr(e.args,t.args),qr(e.effectiveFlags,t.flags)}function ts(e){if(e===null||typeof e!=="object"&&typeof e!=="function")return!1;let t=e;return typeof t[Symbol.asyncDispose]==="function"||typeof t[Symbol.dispose]==="function"}function ns(e,t,n){if(!ts(e)||n.has(e))return;n.add(e),t.use(e)}function rs(e,t,n,r){let s=new Map(e.map((m)=>[m.name,m])),o=new Map,i=new WeakSet,a,c=!0,l=!1;n.defer(()=>{l=!0});let u=(m,g,w=new Set)=>{if(m.name===g)return[m.name];if(w.has(m.name))return;w.add(m.name);for(let S of m.waitingOn){let x=o.get(S);if(!x)continue;let v=u(x,g,w);if(v)return[m.name,...v]}},f=(m)=>{try{let g=new Set;for(let w=m;w!=null&&!g.has(w);w=w.cause)if(g.add(w),w instanceof h&&w.code==="DEFINITION"&&w.details?.reason==="flags-before-validation")return!0;return!1}catch{return!1}};function d(m){let g=Promise.reject(m);return g.catch(()=>{}),g}let p=(m)=>(g)=>{let w=m?` (pulled while constructing Context "${m.name}")`:"";if(l)return d(new h("DEFINITION",`Context "${g}" cannot be pulled from onError because invocation Contexts have already been disposed.`,{subject:"context",name:g,reason:"context-after-disposal"}));let S=s.get(g);if(!S)return d(new h("DEFINITION",`No provider for Context "${g}". Add .provide(${g}(...)) to the app or an ancestor command.${w}`,{subject:"context",name:g,reason:"missing-context"}));if(!c&&!o.has(g))return d(new h("DEFINITION",`Context "${g}" cannot be constructed during invocation cleanup. Read it while setting up the Context whose cleanup needs it.`,{subject:"context",name:g,reason:"context-during-disposal"}));if(a===void 0&&Object.keys(S.ownedFlags).length>0)return d(new h("DEFINITION",`Context "${g}" owns flags and cannot be pulled before flag validation${w}. Pull it from an action or a postRun hook after a validated invocation.`,{subject:"context",name:g,reason:"flags-before-validation"}));let x=o.get(g);if(!x){let v=Promise.withResolvers();v.promise.catch(()=>{}),x={name:g,promise:v.promise,resolve:v.resolve,reject:v.reject,waitingOn:new Set,settled:!1},o.set(g,x);let E=x;(async()=>{try{let _=Object.fromEntries(Object.keys(S.ownedFlags).map((I)=>[I,a?.[I]])),C=await S.setup({...t,signal:r,flags:_,ctx:b(S.use,E),defer(I){if(E.settled)throw new h("DEFINITION",`Context "${g}" cannot register cleanup after its setup has finished.`,{subject:"context",name:g,reason:"context-defer-after-setup"});n.defer(I)}});ns(C,n,i),E.resolve(C)}catch(_){if(f(_))o.delete(g);E.reject(_)}finally{E.settled=!0}})()}if(m&&!x.settled){let v=u(x,m.name);if(v)return d(new h("DEFINITION",`Context dependency cycle: ${[m.name,...v].map((E)=>`"${E}"`).join(" -> ")}`,{subject:"context",name:m.name,reason:"context-cycle"}));return m.waitingOn.add(g),x.promise.finally(()=>m.waitingOn.delete(g))}return x.promise},b=(m,g)=>{let w={},S=(x)=>{let v=xt(x);if(Object.hasOwn(w,v))return;Object.defineProperty(w,v,{enumerable:!0,get:()=>p(g)(v)});for(let E of x.use)S(E)};for(let x of m)S(x);return Object.defineProperty(w,vt,{value:Object.freeze([...m])}),Object.freeze(w)};return{bag:(m)=>b(m,null),setValidatedFlags(m){a=m},async settle(){for(;;){let m=[...o.values()].filter((g)=>!g.settled);if(m.length===0){c=!1;return}await Promise.allSettled(m.map((g)=>g.promise))}}}}function K(e){for(let t of Object.keys(e))if(e[t]===void 0)delete e[t];return Object.freeze(e)}function ke(e){if(e instanceof URL)return e.href;if(Array.isArray(e))return Object.freeze(e.map(ke));return e}function ss(e){return K({name:e.name,type:e.type,description:e.description,required:e.required,variadic:e.variadic,choices:e.choices?Object.freeze([...e.choices]):void 0,default:ke(e.default)})}function os(e){return K({type:e.type,description:e.description,short:e.short,aliases:e.aliases?Object.freeze([...e.aliases]):void 0,required:e.required,multiple:e.multiple,negatable:gt(e),noNegate:"noNegate"in e?e.noNegate:void 0,choices:e.choices?Object.freeze([...e.choices]):void 0,default:ke(e.default),env:e.env?K({name:e.env.name,delimiter:e.env.delimiter}):void 0,delimiter:e.delimiter})}function A(e){let t={};for(let[r,s]of Object.entries(e.effectiveFlags))t[r]=os(s);let n={};for(let[r,s]of Object.entries(e.subCommands))n[r]=A(s);return Object.freeze({meta:K({name:e.meta.name,description:e.meta.description,version:e.meta.version,usage:e.meta.usage,sections:e.meta.sections?Object.freeze(e.meta.sections.map((r)=>Object.freeze({...r}))):void 0,aliases:e.meta.aliases?Object.freeze([...e.meta.aliases]):void 0,hidden:e.meta.hidden}),hasAction:e.run!==void 0,args:Object.freeze(e.args.map(ss)),flags:Object.freeze(t),subCommands:Object.freeze(n)})}function Ct(e,t,n){let r=A(e);return new h("COMMAND_NOT_FOUND",`Unknown command "${t}".`,{input:t,available:Object.entries(r.subCommands).flatMap(([s,o])=>$r(o)?[s]:[]),commandPath:[...n],parentCommand:r})}function is(e,t){for(let[n,r]of Object.entries(e)){let s=r.meta.aliases;if(!s)continue;if(s.includes(t))return{canonicalName:n,node:r}}return null}function ut(e,t){if(t==="--")return null;if(t.startsWith("--")){let r=t.indexOf("="),s=r===-1?t.slice(2):t.slice(2,r),o=e.get(s);if(o)return{consumesValue:o.def.type!=="boolean"&&r===-1};if(s.startsWith("no-")){if(e.get(s.slice(3))?.negatable)return{consumesValue:!1}}return null}let n=t.slice(1);if(n.length===0)return null;for(let r=0;r<n.length;r++){let s=e.get(n[r]);if(!s)return null;if(s.def.type!=="boolean")return{consumesValue:r===n.length-1}}return{consumesValue:!1}}function jt(e,t){let n=[e.meta.name],r=e,s=t,o=[],i=[],a=(c,l)=>{if(i.length===0)return;let u=c.flagSpellings;for(let{token:f,consumesValue:d}of i){let p=ut(u,f);if(p!==null&&p.consumesValue===d)continue;throw new h("PARSE",`Flag "${f}" cannot be used before subcommand "${l}" because "${l}" does not accept it.`,{flag:f,reason:"flag-not-forwardable"})}};while(s.length>0){let c=r.subCommands;if(Object.keys(c).length===0)break;let l=s[0];if(!l)break;if(l.startsWith("-")){let f=ut(r.flagSpellings,l);if(!f)break;o.push(l),i.push({token:l,consumesValue:f.consumesValue}),s=s.slice(1);let d=s[0];if(f.consumesValue&&d!==void 0)o.push(d),s=s.slice(1);continue}if(Object.hasOwn(c,l)&&c[l]){a(c[l],l),r=c[l],n.push(l),s=s.slice(1);continue}let u=is(c,l);if(u){a(u.node,l),r=u.node,n.push(u.canonicalName),s=s.slice(1);continue}if(r.run)break;throw Ct(r,l,n)}return{command:r,argv:[...o,...s],commandPath:n}}var ft=()=>{};function dt(e,t){let n=()=>{if(e.listenerCount("error")===0)e.once("error",ft)};try{n(),e.write(`${t}
7
- `,(r)=>{if(r)n()})}catch{}finally{e.removeListener("error",ft)}}var as={stdout:(e)=>dt(process.stdout,e),stderr:(e)=>dt(process.stderr,e)};var F=130;function ve(e){if(!(e instanceof Error))return!1;return e.name==="AbortError"}function _t(e){return kt(e)&&"error"in e&&"suppressed"in e&&e.name==="SuppressedError"}function kt(e){return typeof e==="object"&&e!==null}function Ce(e,t="Error"){let n=[],r=new Set,s=256,o=!1,i=(c)=>{if(o)return;if(s===0){o=!0,n.push("[additional failures omitted]");return}s--;let l;try{l=c()}catch{n.push("[unreadable failure]");return}a(l)},a=(c)=>{try{if(kt(c)){if(r.has(c))return;r.add(c)}let l=n.length;if(_t(c)){if(i(()=>c.error),i(()=>c.suppressed),n.length>l)return}else if(c instanceof AggregateError){let u=c.errors;if(Array.isArray(u)){for(let f=0;f<u.length;f++)if(i(()=>u[f]),o)break;if(n.length>l)return}}n.push(String(c instanceof Error&&c.message||c))}catch{n.push("[unreadable failure]")}};return i(()=>e),n.map((c)=>`${t}: ${c}`).join(`
8
- `)}function Nt(e){if(Object.freeze(e),Object.freeze(e.localFlags),Object.freeze(e.ownedFlags),Object.freeze(e.effectiveFlags),e.meta.sections)Object.freeze(e.meta.sections);Object.freeze(e.meta),Object.freeze(e.contexts),Object.freeze(e.extensions),Object.freeze(e.args);for(let t of Object.values(e.subCommands))Nt(t);Object.freeze(e.subCommands)}function cs(e){return typeof e==="symbol"}var mt=new WeakMap;function ls(e,t){let n=P(e),r=Object.freeze([...e.extensions]);for(let s of r)_r(n,s,t);for(let s of r)kr(n,s);return{rootNode:n,extensions:r}}function us(e,t){if(Tr(e,t),t.some((n)=>n.sections!==void 0)){let n=A(e);for(let r of t)Ar(e,r,n)}return Nt(e),e}function R(e,t){let n=mt.get(e);if(n)return n;let r=ls(e,t);return us(r.rootNode,r.extensions),mt.set(e,r),r}function fs(e,t){let n=jt(e,t);return{argv:t,route:n,parsed:Zr(n.command,n.argv)}}function Ne(e,t){let n=jt(e,t);if(n.argv.length>0)throw Ct(n.command,n.argv[0],n.commandPath);return n}function ds(e,t,n){let r=Ne(e,t);return{argv:t,route:r,parsed:Qr(r.command,n)}}async function At(e,t,n,r,s,o){let E=[];try{let{rootNode:i,extensions:a}=t;let{argv:c,route:l,parsed:u}="argv"in e?fs(i,e.argv):ds(i,e.path,e.input);let f=l.command;const d=Qe(E,new AsyncDisposableStack,1);let p=f.contexts.map(({instance:O})=>O);let b=rs(p,n,d,r);let m=A(i);let g=m;for(let O of l.commandPath.slice(1))g=g.subCommands[O];let w=Object.freeze({argv:[...c],rootCommand:m,command:g,commandPath:Object.freeze([...l.commandPath]),args:u.args,flags:u.flags,rawArgs:u.rawArgs,signal:r,ctx:b.bag(a.flatMap((O)=>O.use)),handled:Se,stdout:n.stdout,stderr:n.stderr});s?.(w);let S=async()=>{es(f,u);let O=await Rr(f,u);if(b.setValidatedFlags(O.flags),!f.run)return;let j={args:O.args,flags:O.flags,ctx:b.bag(p),rawArgs:u.rawArgs,signal:r,command:w.command,rootCommand:m,stdout:n.stdout,stderr:n.stderr};return await f.run(j)};let x;let v={status:"completed"};try{try{for(let j of a)if(await j.hooks?.preRun?.(w)===Se()){v={status:"handled",by:j.id};break}if(v.status!=="handled")x=await S()}catch(j){let U=await o?.(j,w);v={status:"failed",error:j,...U===void 0?{}:{by:U}}}Object.freeze(v);let O;for(let j of a.toReversed())try{await j.hooks?.postRun?.(w,v)}catch(U){if(v.status!=="failed")O??={error:U}}if(v.status==="failed")throw v.error;if(O)throw O.error}finally{await b.settle()}return v.status==="handled"?{status:"handled",by:v.by}:{status:"completed",result:x}}catch(_){var C=_,I=1}finally{var me=et(E,C,I);me&&await me}}async function xe(e,t,n,r,s,o,i=!1){let a=o;if(!a){let c=function(f){return Promise.reject(new h("DEFINITION",`Context "${String(f)}" cannot be pulled from onError because invocation Contexts have already been disposed.`,{subject:"context",name:String(f),reason:"context-after-disposal"}))},l=new Proxy({},{get:(f,d)=>d==="then"||cs(d)?void 0:c(d)}),u=A(n.rootNode);a=Object.freeze({argv:[...t],rootCommand:u,command:u,commandPath:Object.freeze([n.rootNode.meta.name]),args:Object.freeze({}),flags:Object.freeze({}),rawArgs:[],signal:s,handled:Se,stdout:r.stdout,stderr:r.stderr,ctx:l})}try{for(let c of n.extensions)if(await c.hooks?.onError?.(e,a))return c.id}catch{}if(!i)r.stderr(Ce(e))}function ms(e){return e!==void 0&&Object.keys(e).length>0}async function Tt(e,t,n,r){let s=[],o=[];try{let{signal:i=new AbortController().signal,...a}=n??{},c={stdout(l){s.push(l),a.stdout?.(l)},stderr(l){o.push(l),a.stderr?.(l)}};return{...await we(c,async()=>await At(t,R(e,r),c,i)),stdout:s.join(`
7
+ `)}`,{issues:n});return{args:Object.fromEntries(r),flags:Object.fromEntries(s)}}async function Gs(e,t){let n=[],r=await De(e,t,[],n);if(r.ok)return r.value;throw new b("OUTPUT",`Invalid command result:
8
+ ${n.map((s)=>s.path===""?` - ${s.message}`:` - ${s.path}: ${s.message}`).join(`
9
+ `)}`,{issues:n})}function we(e,t){let n=e["~standard"].jsonSchema;if(typeof n?.[t]!=="function")return;try{return n[t]({target:"draft-2020-12"})}catch{return}}function Js(e,t,n){if(t==="number"){let r=en(e);if(r===void 0)throw new b("PARSE",`Expected a number for ${n}.`);return r}if(t==="boolean")return ce(e);if(t==="url")return Sn(e,n);if(t==="path")return Me(e,n);if(t==="json")return Vs(e,n);return e}function qs(e,t,n){if(!t.includes(e))throw new b("PARSE",`Invalid value for ${n}. Expected one of: ${t.join(", ")}`)}function Le(e,t,n,r){let s=r===void 0?n:`${n} element [${r}]`,o;try{o=e(t)}catch(i){throw new b("PARSE",`Failed to parse ${s}: ${i instanceof Error?i.message:String(i)}`).withCause(i)}if(process.getBuiltinModule("node:util/types").isPromise(o))throw o.catch(()=>{}),new b("PARSE",`Failed to parse ${s}: parse must be synchronous`);return o}function ze(e,t){let{default:n,parse:r}=e;if(n===void 0)return;if(r){if(Array.isArray(n))return n.map((s,o)=>Le(r,String(s),t,o));return Le(r,String(n),t)}if(e.type==="path"){if(Array.isArray(n))return n.map((s)=>Me(String(s),t));return Me(String(n),t)}return"multiple"in e&&e.multiple&&Array.isArray(n)?[...n]:n}function de(e,t,n,r){if(e.schema)return t;if(e.choices)qs(t,e.choices,n);if(e.parse)return Le(e.parse,t,n,r);return Js(t,e.type,n)}function Be(e,t,n){if(!t)return e();try{return e()}catch(r){if(!(r instanceof b))throw r;t(r,n);return}}function Ys(e,t,n){if(n.kind==="invalid")throw n.error;if(n.kind==="boolean")return n.value;let r=n.env===void 0?`--${e}`:`--${e} (from $${n.env})`;return Array.isArray(n.value)?n.value.map((s,o)=>de(t,s,r,o)):de(t,n.value,r)}function En(e,t){if(t===void 0)return[...e];return e.flatMap((n)=>n.split(t)).filter((n)=>n!=="")}function Ks(e,t,n){let r=t.multiple?En([n],t.env?.delimiter):[n];if(t.multiple&&r.length===0)return;if(t.type!=="boolean")return{kind:"string",value:t.multiple?r:n,env:t.env?.name};let s=r.map(ce);if("noNegate"in t&&t.noNegate&&s.includes(!1))return{kind:"invalid",error:new b("PARSE",`Flag "--${e}" does not support negation (from $${t.env?.name})`)};return{kind:"boolean",value:t.multiple?s:ce(n)}}function Xs(e,t,n){let r={};for(let[s,o]of Object.entries(e)){let i=Object.hasOwn(t,s)?t[s]:void 0;if(i!==void 0){if(o.delimiter!==void 0&&i.kind==="string"&&Array.isArray(i.value)){let c=En(i.value,o.delimiter);r[s]=c.length===0?void 0:{kind:"string",value:c}}else r[s]=i;continue}if(o.env===void 0||!Object.hasOwn(n,o.env.name))continue;let a=n[o.env.name];if(a!==void 0)r[s]=Ks(s,o,a)}return r}function Zs(e,t,n,r,s){let o={};for(let[i,a]of Object.entries(e)){let c=Object.hasOwn(t,i)?t[i]:void 0;if(!(c===void 0||a.multiple&&Array.isArray(c)&&c.length===0)){s?.add(i),o[i]=Be(()=>n(i,a,c),r,`--${i}`);continue}o[i]=ze(a,`--${i}`)}return o}function Qs(e,t){for(let[n,r]of Object.entries(e))if(r.required===!0&&r.default===void 0){if(t[n]===void 0)throw new b("VALIDATION",`Missing required flag "--${n}"`)}}function eo(e,t){for(let n of e){if(n.required!==!0||n.default!==void 0)continue;let r=t[n.name];if(n.variadic?!Array.isArray(r)||r.length===0:r===void 0)throw new b("VALIDATION",`Missing required argument "<${n.name}>"`)}}function to(e,t,n,r){let s={},o=0;for(let i of e){let{name:a}=i,c=`<${a}>`;if(Object.defineProperty(s,a,{value:void 0,writable:!0,enumerable:!0,configurable:!0}),i.variadic){let l=t.slice(o);s[a]=l.length===0&&i.default!==void 0?[ze(i,c)]:Be(()=>l.map((m,w)=>n(i,m,c,w)),r,c),o=t.length}else if(o<t.length)s[a]=Be(()=>n(i,t[o],c),r,c),o++;else s[a]=ze(i,c)}return{args:s,consumed:o}}function sn(e,t){return new b("PARSE",`Unknown flag "${e}"`,{flag:t,reason:"unknown-flag"})}function on(e){return new b("PARSE",`Flag "--${e}" does not take a value`,{flag:e,reason:"unexpected-value"})}function Cn(e,t){if(t.length<2||!t.startsWith("-")||t==="--")return;if(t[1]!=="-"){let a=[];for(let c=1;c<t.length;){let l=String.fromCodePoint(t.codePointAt(c));c+=l.length;let m=e.get(l);if(!m)return sn(l==="-"?t:`-${l}`,l);if(m.def.type==="boolean"){a.push({spelling:m,value:!0});continue}if(c===t.length)return{occurrences:a,pending:m};a.push({spelling:m,value:t.slice(c)});break}return{occurrences:a}}let n=t.indexOf("=",3),r=n===-1?t.slice(2):t.slice(2,n),s=n===-1?void 0:t.slice(n+1),o=e.get(r);if(o&&o.kind!=="short"){if(o.def.type!=="boolean")return s===void 0?{occurrences:[],pending:o}:{occurrences:[{spelling:o,value:s}]};if(s!==void 0)return on(o.canonicalName);return{occurrences:[{spelling:o,value:!0}]}}let i=r.startsWith("no-")?e.get(r.slice(3)):void 0;if(i&&i.kind!=="short"&&i.def.type==="boolean"){if(!i.negatable)return new b("PARSE",`Flag "--${i.canonicalName}" does not support negation ("--${r}")`);if(s!==void 0)return on(i.canonicalName);return{occurrences:[{spelling:i,value:!1}]}}return sn(`--${r}`,r)}function an(e,{canonicalName:t,def:n},r){let s=e[t];if(typeof r==="boolean")if(n.multiple&&s?.kind==="boolean"&&Array.isArray(s.value))s.value.push(r);else e[t]={kind:"boolean",value:n.multiple?[r]:r};else if(n.multiple&&s?.kind==="string"&&Array.isArray(s.value))s.value.push(r);else e[t]={kind:"string",value:n.multiple?[r]:r}}function no(e,t){let n=[],r={};for(let s=0;s<t.length;s++){let o=t[s];if(o==="--"){let l=n.length;return n.push(...t.slice(s+1)),{positionals:n,separatorIndex:l,flagValues:r}}let i=Cn(e.flagSpellings,o);if(i===void 0){n.push(o);continue}if(i instanceof b)throw i;for(let{spelling:l,value:m}of i.occurrences)an(r,l,m);if(!i.pending)continue;let a=i.pending.canonicalName,c=t[s+1];if(c===void 0||c.length>1&&c.startsWith("-"))throw new b("PARSE",`Missing value for flag "--${a}"${c===void 0?"":`; to pass a value starting with "-", write --${a}=<value>`}`,{flag:a,reason:"missing-value"});an(r,i.pending,c),s++}return{positionals:n,separatorIndex:n.length,flagValues:r}}function nt(e){return Array.isArray(e)}function so(e,t,n){let r=e.schema?e.type==="boolean"?"boolean":"string":e.type,s;if(r==="url")s=t instanceof URL;else if(r==="json"){let o=[t],i=new Set;s=!0;while(o.length>0){let a=o.pop();if(a instanceof URL){s=!1;break}if(nt(a)&&!i.has(a))i.add(a),o.push(...a)}}else s=typeof t===(r==="path"?"string":r);if(!s)throw new b("PARSE",`Expected ${ro[r]} for ${n}.`);if(t===!1&&"noNegate"in e&&e.noNegate)throw new b("PARSE",`Flag "${n}" does not support negation`)}function Ue(e,t,n,r){if(so(e,t,n),e.type!=="string"&&e.type!=="path")return t;return de(e,String(t),n,r)}function oo(e,t,n){let r=`--${e}`;if(t.multiple){if(!nt(n))throw new b("PARSE",`Expected an occurrence array for ${r}`);return n.map((s,o)=>Ue(t,s,r,o))}return Ue(t,n,r)}function me(e,t){let n=[];for(let[r,s]of e){let o=t(r)??(s.default===void 0?void 0:"default");if(o)n.push([r,o])}return Object.freeze(Object.fromEntries(n))}function In(e,t,n,r,s,o){let i=new Set,a=Zs(e.effectiveFlags,n,s,o,i);return{...to(e.args,t,r,o),flags:a,present:i}}function io(e,t,n=process.env){let{positionals:r,separatorIndex:s,flagValues:o}=no(e,t),i=new Map,a=Xs(e.effectiveFlags,o,n),{args:c,flags:l,consumed:m,present:w}=In(e,r,a,de,Ys,(g,d)=>i.set(d,g)),u=r.slice(Math.max(m,s)),p=new Set(e.args.slice(0,r.length).map(({name:g})=>g)),f=Object.freeze({args:me(e.args.map((g)=>[g.name,g]),(g)=>p.has(g)?"argv":void 0),flags:me(Object.entries(e.effectiveFlags),(g)=>{if(Object.hasOwn(o,g))return"argv";return Object.hasOwn(a,g)&&a[g]!==void 0?"env":void 0}),raw:u.length>0?"argv":void 0});return{args:c,flags:l,excessArgs:r.slice(m,s),rawArgs:u,flagOrder:[...Object.keys(o).filter((g)=>w.has(g)),...[...w].filter((g)=>!Object.hasOwn(o,g)).sort()],...p.size>0&&{suppliedArgs:p},sources:f,...i.size>0&&{valueErrors:i}}}function jn(e,t){return new b("PARSE",`Argument <${e}> cannot be provided after omitted argument <${t}>`,{argument:e,reason:"positional-gap"})}function $n(e,t){let{args:n,flags:r,raw:s}=t,o=[],i=new Set,a;for(let u of e.args){let p=n&&Object.hasOwn(n,u.name)?n[u.name]:void 0;if(p===void 0){a=u.name;continue}if(a!==void 0)throw jn(u.name,a);if(u.variadic){if(!nt(p))throw new b("PARSE",`Expected an occurrence array for <${u.name}>`);if(o.push(...p),p.length>0)i.add(u.name)}else o.push(p),i.add(u.name)}for(let u of Object.keys(n??{}))if(!e.args.some((p)=>p.name===u)&&n?.[u]!==void 0)throw new b("PARSE",`Unknown argument "${u}"`,{argument:u,reason:"unknown-argument"});for(let u of Object.keys(r??{}))if(!Object.hasOwn(e.effectiveFlags,u)&&r?.[u]!==void 0)throw new b("PARSE",`Unknown flag "--${u}"`,{flag:u,reason:"unknown-flag"});let{args:c,flags:l,present:m}=In(e,o,r??{},Ue,oo),w=Object.keys(r??{}).filter((u)=>m.has(u));return{args:c,flags:l,excessArgs:[],rawArgs:[...s??[]],flagOrder:w,...i.size>0&&{suppliedArgs:i},sources:Object.freeze({args:me(e.args.map((u)=>[u.name,u]),(u)=>i.has(u)?"run":void 0),flags:me(Object.entries(e.effectiveFlags),(u)=>m.has(u)?"run":void 0),raw:s===void 0||s.length===0?void 0:"run"})}}function ao(e,t,n){let{sources:r}=t,s=(f,g)=>Object.fromEntries(Object.entries(f??{}).filter(([d,h])=>h!==void 0&&g[d]!=="argv")),o=s(n.args,r.args),i=s(n.flags,r.flags),a=r.raw==="argv"?void 0:n.raw,c;for(let{name:f}of e.args)if(!t.suppliedArgs?.has(f)&&!Object.hasOwn(o,f))c=f;else if(c!==void 0)throw jn(f,c);let l=$n({...e,args:e.args.filter(({name:f})=>Object.hasOwn(o,f)),effectiveFlags:Object.fromEntries(Object.entries(e.effectiveFlags).filter(([f])=>Object.hasOwn(i,f)))},{args:o,flags:i,raw:a}),m=(f,g)=>Object.fromEntries(Object.keys(g).map((d)=>[d,f[d]])),w=(f,g,d)=>Object.freeze(Object.fromEntries([...Object.entries(f).filter(([h])=>!Object.hasOwn(g,h)),...Object.entries(d).map(([h,v])=>[h,v==="run"?"bound":v])])),u=new Set(Object.keys(i).map((f)=>`--${f}`)),p=new Map([...t.valueErrors??[]].filter(([f])=>!u.has(f)));return{...t,args:{...t.args,...m(l.args,o)},flags:{...t.flags,...m(l.flags,i)},rawArgs:a===void 0?t.rawArgs:l.rawArgs,sources:Object.freeze({args:w(r.args,o,l.sources.args),flags:w(r.flags,i,l.sources.flags),raw:a===void 0?r.raw:l.sources.raw&&"bound"}),valueErrors:p}}function co(e,t){let[n]=t.valueErrors?.values()??[];if(n)throw n;if(t.excessArgs.length>0)throw new b("VALIDATION",`Unexpected positional argument${t.excessArgs.length===1?"":"s"}: ${t.excessArgs.map((r)=>JSON.stringify(r)).join(", ")}`);eo(e.args,t.args),Qs(e.effectiveFlags,t.flags)}function lo(e){if(e===null||typeof e!=="object"&&typeof e!=="function")return!1;let t=e;return typeof t[Symbol.asyncDispose]==="function"||typeof t[Symbol.dispose]==="function"}function uo(e,t,n){if(!lo(e)||n.has(e))return;n.add(e),t.use(e)}function fo(e,t,n,r,s){let o=new Map(e.map((d)=>[d.name,d])),i=new Map,a=new WeakSet,c,l=!0,m=!1;r.defer(()=>{m=!0});let w=(d,h,v=new Set)=>{if(d.name===h)return[d.name];if(v.has(d.name))return;v.add(d.name);for(let y of d.waitingOn){let x=i.get(y);if(!x)continue;let O=w(x,h,v);if(O)return[d.name,...O]}},u=(d)=>{try{let h=new Set;for(let v=d;v!=null&&!h.has(v);v=v.cause)if(h.add(v),v instanceof b&&v.code==="DEFINITION"&&v.details?.reason==="flags-before-validation")return!0;return!1}catch{return!1}};function p(d){let h=Promise.reject(d);return h.catch(()=>{}),h}let f=(d)=>(h)=>{let v=d?` (pulled while constructing Context "${d.name}")`:"";if(m)return p(new b("DEFINITION",`Context "${h}" cannot be pulled from onError because invocation Contexts have already been disposed.`,{subject:"context",name:h,reason:"context-after-disposal"}));let y=o.get(h);if(!y)return p(new b("DEFINITION",`No provider for Context "${h}". Add .provide(${h}(...)) to the app or an ancestor command.${v}`,{subject:"context",name:h,reason:"missing-context"}));if(!l&&!i.has(h))return p(new b("DEFINITION",`Context "${h}" cannot be constructed during invocation cleanup. Read it while setting up the Context whose cleanup needs it.`,{subject:"context",name:h,reason:"context-during-disposal"}));let x=Object.keys(y.ownedFlags).length>0;if(x&&!t.has(h))return p(new b("DEFINITION",`Context "${h}" owns flags that this command does not parse${v}. Declare it with .use(${h}) on the command that reads it.`,{subject:"context",name:h,reason:"context-flags-not-parsed"}));if(c===void 0&&x)return p(new b("DEFINITION",`Context "${h}" owns flags and cannot be pulled before flag validation${v}. Pull it from an action or a postRun hook after a validated invocation.`,{subject:"context",name:h,reason:"flags-before-validation"}));let O=i.get(h);if(!O){let S=Promise.withResolvers();S.promise.catch(()=>{}),O={name:h,promise:S.promise,resolve:S.resolve,reject:S.reject,waitingOn:new Set,settled:!1},i.set(h,O);let E=O;(async()=>{try{let I=Object.fromEntries(Object.keys(y.ownedFlags).map((A)=>[A,c?.[A]])),k=await y.setup({...n,signal:s,flags:I,ctx:g(y.use,E),defer(A){if(E.settled)throw new b("DEFINITION",`Context "${h}" cannot register cleanup after its setup has finished.`,{subject:"context",name:h,reason:"context-defer-after-setup"});r.defer(A)}});uo(k,r,a),E.resolve(k)}catch(I){if(u(I))i.delete(h);E.reject(I)}finally{E.settled=!0}})()}if(d&&!O.settled){let S=w(O,d.name);if(S)return p(new b("DEFINITION",`Context dependency cycle: ${[d.name,...S].map((E)=>`"${E}"`).join(" -> ")}`,{subject:"context",name:d.name,reason:"context-cycle"}));return d.waitingOn.add(h),O.promise.finally(()=>d.waitingOn.delete(h))}return O.promise},g=(d,h)=>{let v={},y=(x)=>{let O=xn(x);if(Object.hasOwn(v,O))return;Object.defineProperty(v,O,{enumerable:!0,get:()=>f(h)(O)});for(let S of x.use)y(S)};for(let x of d)y(x);return Object.defineProperty(v,On,{value:Object.freeze([...d])}),Object.freeze(v)};return{bag:(d)=>g(d,null),setValidatedFlags(d){c=d},async settle(){for(;;){let d=[...i.values()].filter((h)=>!h.settled);if(d.length===0){l=!1;return}await Promise.allSettled(d.map((h)=>h.promise))}}}}function Nn(e){return{meta:{name:e},localFlags:{},ownedFlags:{},flagContexts:new Map,effectiveFlags:{},flagSpellings:new Map,args:[],subCommands:{},contexts:[],providedContexts:[],demands:[],inheritedDemands:[],usedExtensions:[],extensions:[],run:void 0}}function P(e,t,n,r){n=Ze(t,n);let s=fe(t,n),o=Object.hasOwn(e.effectiveFlags,t)?t:s.map((a)=>e.flagSpellings.get(a)?.canonicalName).find((a)=>a!==void 0);if(o!==void 0)throw new b("DEFINITION",`Flag "${t}" collides with existing flag "${o}" on command "${e.meta.name}"`,{subject:"flag",name:t,reason:"flag-collision"});(r==="local"?e.localFlags:e.ownedFlags)[t]=n,e.effectiveFlags[t]=n;let i={canonicalName:t,def:n,negatable:gn(n)};if(e.flagSpellings.set(t,{...i,kind:"canonical"}),n.short!==void 0)e.flagSpellings.set(n.short,{...i,kind:"short"});for(let a of n.aliases??[])e.flagSpellings.set(a,{...i,kind:"alias"})}function rt(e,t){let n;for(let{contextName:r,ownedFlags:s}of st(t)){let o=(n??e.flagContexts).get(r)??[],i=Object.keys(s).filter((a)=>!o.includes(a));if(i.length===0)continue;for(let a of i)P(e,a,s[a],"owned");(n??=new Map(e.flagContexts)).set(r,[...o,...i])}if(n)e.flagContexts=n}function mo(e,t){if(t.length===0)return;let n=new Map;for(let{instance:i}of e.contexts)n.set(i.name,i);let r=st(t),s=new Set(r.map((i)=>i.contextName)),o=[];for(let i of r){let a=i.contextName;for(let[l,m]of Object.entries(i.ownedFlags)){if(An(e.ownedFlags[l],m))continue;throw new b("DEFINITION",`Flag "${l}" that command "${e.meta.name}" parses for Context "${a}" differs from the definition of the Context "${a}" it declares with .use(). Same-name Contexts on one command must own the same flags: change the declared Context, or use the same factory.`,{subject:"context",name:a,reason:"context-flags-not-parsed"})}let c=n.get(a);if(!c||c.factory===i)continue;if(!po(i.ownedFlags,c.ownedFlags))throw new b("DEFINITION",`Context "${a}" provided to command "${e.meta.name}" does not own the same flags as the Context "${a}" it declares with .use(). A provider of another factory must own exactly the declared flags: change the declared Context, or provide the same factory (for example its .of()).`,{subject:"context",name:a,reason:"context-flags-not-parsed"});o.push(...c.use)}for(let{contextName:i}of o){if(s.has(i))continue;s.add(i);let a=n.get(i);if(!a)continue;let c=e.flagContexts.get(i)??[],l=Object.keys(a.ownedFlags).find((m)=>!c.includes(m));if(l!==void 0)throw new b("DEFINITION",`Context "${i}", used by a replacement provider on command "${e.meta.name}", owns flag "${l}", which the command does not parse. Declare it with .use(${i}) too, or provide the declared Context's own factory.`,{subject:"context",name:i,reason:"context-flags-not-parsed"});o.push(...a.use)}}function Y(e){return e.map((t)=>("contextName"in t)?t:t.factory)}function st(e){let t=new Set,n=(r)=>{for(let s of r){if(t.has(s))continue;t.add(s),n(s.use)}};return n(e),[...t]}function _n(e){return new Set(st(e).map((t)=>t.contextName))}function po(e,t){let n=Object.keys(e);return n.length===Object.keys(t).length&&n.every((r)=>Object.hasOwn(t,r)&&An(e[r],t[r]))}function An(e,t){let{schema:n,...r}=e,{schema:s,...o}=t;return n===s&&We(r,o)}function We(e,t){if(e===t)return!0;if(Array.isArray(e))return Array.isArray(t)&&e.length===t.length&&e.every((r,s)=>We(r,t[s]));if(!cn(e)||!cn(t))return!1;let n=Object.keys(e);return n.length===Object.keys(t).length&&n.every((r)=>Object.hasOwn(t,r)&&We(e[r],t[r]))}function cn(e){if(typeof e!=="object"||e===null)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function G(e){return{localFlags:{...e.localFlags},ownedFlags:{...e.ownedFlags},effectiveFlags:{...e.effectiveFlags},flagSpellings:new Map(e.flagSpellings)}}function K(e){let t=e.subCommands,n=at.get(t),r=[...ct(t)].map(([s,o])=>({name:s,meta:o,resolve:()=>t[s],definition:n?.get(s)}));return r.push(...Tn(e)),r}function Tn(e){let t=[];for(let r=e.addedChildren;r;r=r.next)t.push(r);let n=[];for(let r=t.length-1;r>=0;r--)n.push(t[r]);return n}function kn(e,t){let n={},r=new Map,s=new Map,o=new Map;for(let i of e){if(i.definition)o.set(i.name,i.definition);Object.defineProperty(n,i.name,{enumerable:!0,get:()=>{let a=s.get(i.name);if(!a)s.set(i.name,a=t(i));return a}}),r.set(i.name,i.meta)}return ot.set(n,r),it.set(n,s),at.set(n,o),Object.freeze(n)}function Fn(e,t){let n=[{node:e,path:[e.meta.name]}];while(n.length>0){for(let{node:r,path:s}of n)for(let[o,i]of at.get(r.subCommands)??[])if(i===t)return Object.freeze([...s,o]);n=n.flatMap(({node:r,path:s})=>K(r).map((o)=>({node:o.resolve(),path:[...s,o.name]})))}}function ct(e){return ot.get(e)??Object.entries(e).map(([t,n])=>[t,n.meta])}function ho(e,t){let n=it.get(e);return n?n.get(t):e[t]}function go(e){if(e.addedChildren)return;let t=it.get(e.subCommands);if(!t)return Object.values(e.subCommands);return t.size===ot.get(e.subCommands).size?[...t.values()]:void 0}function lt(e){return{...e,meta:{...e.meta},...G(e),args:[...e.args],subCommands:kn(K(e),(t)=>lt(t.resolve())),addedChildren:void 0,contexts:e.contexts.map((t)=>({...t})),providedContexts:[...e.providedContexts],demands:[...e.demands],extensions:[...e.extensions]}}function pe(e){let t={};for(let n of Object.keys(e))if(e[n]!==void 0)t[n]=e[n];return Object.freeze(t)}function ut(e){if(e instanceof URL)return e.href;if(Array.isArray(e))return Object.freeze(e.map(ut));return e}function Pn(e){return e.default===void 0?e.required:void 0}function bo(e){return pe({name:e.name,type:e.type,description:e.description,required:Pn(e),variadic:e.variadic,choices:e.choices?Object.freeze([...e.choices]):void 0,default:ut(e.default),inputSchema:e.schema&&we(e.schema,"input")})}function wo(e){return pe({type:e.type,description:e.description,short:e.short,aliases:e.aliases?Object.freeze([...e.aliases]):void 0,required:Pn(e),multiple:e.multiple,negatable:gn(e),noNegate:"noNegate"in e?e.noNegate:void 0,choices:e.choices?Object.freeze([...e.choices]):void 0,default:ut(e.default),env:e.env?pe({name:e.env.name,delimiter:e.env.delimiter}):void 0,delimiter:e.delimiter,inputSchema:e.schema&&we(e.schema,"input")})}function ft(e){let t={};for(let[n,r]of Object.entries(e.subCommands))t[n]=ft(r);return Je(e,Ge(e),Object.freeze(t))}function Ve(e){if(e instanceof URL)return!0;if(Array.isArray(e))return!Object.isFrozen(e)||e.some(Ve);return!1}function vo(e,t){He.set(e,[...He.get(e)??[],t])}function Rn(e){let t=ln.get(e);if(t!==void 0)return t;let n=!e.args.some((r)=>Ve(r.default))&&!Object.values(e.effectiveFlags).some((r)=>Ve(r.default));if(n){let r=go(e);if(!r)return;for(let s of r){let o=Rn(s);if(o===void 0)return;n&&=o}}return ln.set(e,n),n}function dt(e,t=!1){let n=new Map,r,s=(c)=>{let l=un.get(c);if(l)return l;let m={};for(let[u,p]of Object.entries(c.subCommands))m[u]=s(p);let w=Je(c,Ge(c),Object.freeze(m));return un.set(c,w),w},o=(c)=>{if(r??=!t&&Rn(e)===!0,r)return s(c);let l=n.get(c);if(l)return l;let m=i(c);return n.set(c,m),m},i=(c)=>{let l={};for(let[m,w]of ct(c.subCommands)){let u;Object.defineProperty(l,m,{enumerable:!0,get:()=>u??=a(c,m,w)})}return Je(c,Ge(c),Object.freeze(l),t)},a=(c,l,m)=>{let w=ho(c.subCommands,l);if(w)return o(w);let u,p=()=>{if(u)return u;let g=c.subCommands[l];if(u=n.get(g)??i(g),!n.has(g))n.set(g,f);return u},f=Object.freeze(Object.defineProperties({},{meta:{enumerable:!0,value:Object.freeze(Object.defineProperty({...Mn(m,void 0)},"sections",{enumerable:!0,get:()=>p().meta.sections}))},hasAction:{enumerable:!0,get:()=>p().hasAction},args:{enumerable:!0,get:()=>p().args},flags:{enumerable:!0,get:()=>p().flags},outputSchema:{enumerable:!0,get:()=>p().outputSchema},output:{enumerable:!0,get:()=>p().output},subCommands:{enumerable:!0,get:()=>p().subCommands}}));return f};return o}function Ge(e){let t={};for(let[n,r]of Object.entries(e.effectiveFlags))t[n]=wo(r);return t}function Mn(e,t){return pe({name:e.name,description:e.description,version:e.version,usage:e.usage,sections:t?Object.freeze(t.map((n)=>Object.freeze({...n}))):void 0,aliases:e.aliases?Object.freeze([...e.aliases]):void 0,hidden:e.hidden})}function Je(e,t,n,r=!1){let s=r?void 0:He.get(e),o=s?[...e.meta.sections??[],...s]:e.meta.sections,i=e.outputSchema&&we(e.outputSchema,"output");return Object.freeze({meta:Mn(e.meta,o),hasAction:e.run!==void 0,args:Object.freeze(e.args.map(bo)),flags:Object.freeze(t),...i?{outputSchema:i}:{},...e.outputSchema?{output:!0}:{},subCommands:n})}function yo(e,t,n){let r=e;for(let s of t){let o=Object.hasOwn(r.subCommands,s)?r.subCommands[s]:void 0;if(!o)throw new b("DEFINITION",`Extension "${n.id}" section target "${t.join(" ")}" is not a canonical command path`,{subject:"extension",name:n.id,reason:"invalid-section-path"});r=o}return r}function Oo(e,t){if(!t.some((r)=>r.sections!==void 0))return;let n=dt(e,!0)(e);for(let r of t){if(!r.sections)continue;let s={subject:"extension",name:r.id};for(let o of r.sections(n)){let i=wn(o,s);vo(yo(e,o.command,r),i)}}}function xo(e,t,n){let r=[...new Map(n.map((o)=>[o.name,o])).values()];if(!r.some((o)=>o.sections.length>0))return;let s=new Set((e.meta.sections??[]).map(({title:o})=>o));for(let o of r){for(let{title:i}of o.sections)if(s.has(i))throw new b("DEFINITION",`Context "${o.name}" section "${i}" duplicates a section on command "${t}"`,{subject:"context",name:o.name,reason:"duplicate-section"});for(let{title:i}of o.sections)s.add(i)}e.meta.sections=[...e.meta.sections??[],...r.flatMap((o)=>o.sections)]}function So(e,t){return t?e.contexts.map(({instance:n})=>n):e.providedContexts}function Eo(e,t){if(t.length===0)return e;let n=[],r=0;for(let{instance:i,position:a,extension:c}of t){while(r<a&&r<e.contexts.length)n.push({...e.contexts[r++]});n.push({instance:i,extension:c})}for(let i of e.contexts.slice(r))n.push({...i});let s=new Map;for(let[i,a]of[...t.map(({instance:c})=>[c.name,Object.keys(c.ownedFlags)]),...e.flagContexts])if(a.length>0)s.set(i,[...s.get(i)??[],...a]);let o={...e,localFlags:{},ownedFlags:{},flagContexts:s,effectiveFlags:{},flagSpellings:new Map,contexts:n};for(let{instance:i}of t)for(let[a,c]of Object.entries(i.ownedFlags))P(o,a,c,"owned");for(let[i,a]of Object.entries(e.effectiveFlags))P(o,i,a,Object.hasOwn(e.localFlags,i)?"local":"owned");return o}function Dn(e,t,n){let r=dt(e)(e);return new b("COMMAND_NOT_FOUND",`Unknown command "${t}".`,{input:t,available:Object.entries(r.subCommands).flatMap(([s,o])=>Qe(o)?[s]:[]),commandPath:[...n],parentCommand:r})}function Co(e,t){for(let[n,r]of ct(e))if(r.aliases?.includes(t))return{canonicalName:n,node:e[n]};return null}function fn(e,t){let n=Cn(e,t);if(n===void 0||n instanceof b)return null;let r=n.occurrences.find(({value:o})=>typeof o==="string")?.value,s=typeof r==="string"?t.slice(0,t.length-r.length-(t.startsWith("--")?1:0)):t;return{consumesValue:n.pending!==void 0,spelling:s}}function mt(e,t){let n=[e.meta.name],r=e,s=t,o=[],i=[],a=(c,l)=>{if(i.length===0)return;let m=c.flagSpellings;for(let{token:w,spelling:u,consumesValue:p}of i){let f=fn(m,w);if(f!==null&&f.consumesValue===p)continue;throw new b("PARSE",`Flag "${u}" cannot be used before subcommand "${l}" because "${l}" does not accept it.`,{flag:u,reason:"flag-not-forwardable"})}};while(s.length>0){let c=r.subCommands;if(Object.keys(c).length===0)break;let l=s[0];if(!l)break;if(l.startsWith("-")){let w=fn(r.flagSpellings,l);if(!w)break;o.push(l),i.push({token:l,spelling:w.spelling,consumesValue:w.consumesValue}),s=s.slice(1);let u=s[0];if(w.consumesValue&&u!==void 0)o.push(u),s=s.slice(1);continue}if(Object.hasOwn(c,l)&&c[l]){a(c[l],l),r=c[l],n.push(l),s=s.slice(1);continue}let m=Co(c,l);if(m){a(m.node,l),r=m.node,n.push(m.canonicalName),s=s.slice(1);continue}if(r.run)break;throw Dn(r,l,n)}return{command:r,argv:[...o,...s],commandPath:n}}function Ln(e){let t=[],n,r=(s,o)=>{if(n)n[s](o);else t.push([s,o])};return{io:e,routed:{...e,stdout:(s)=>r("text",s),stderr:(s)=>r("diag",s)},get renderer(){return n},choose(s){let o=s??{text:e.stdout,diag:e.stderr};n=o;let i=t;t=[];for(let[a,c]of i)o[a](c)}}}function zn(e){if(!(e instanceof Error))return!1;return e.name==="AbortError"}function pt(e){return Bn(e)&&"error"in e&&"suppressed"in e&&e.name==="SuppressedError"}function Ye(e){let t=[],n=new Set;try{let r=e;while(!zn(r)){if(!pt(r)||n.has(r))return;n.add(r),t.push(r.error),r=r.suppressed}}catch{return}return t}function Bn(e){return typeof e==="object"&&e!==null}function Un(e){let t=[],n=new Set,r=256,s=!1,o=(a)=>{if(s)return;if(r===0){s=!0,t.push(Error("[additional failures omitted]"));return}r--;let c;try{c=a()}catch{t.push(Error("[unreadable failure]"));return}i(c)},i=(a)=>{try{if(Bn(a)){if(n.has(a))return;n.add(a)}let c=t.length;if(pt(a)){if(o(()=>a.error),o(()=>a.suppressed),t.length>c)return}else if(a instanceof AggregateError){let l=a.errors;if(Array.isArray(l)){for(let m=0;m<l.length;m++)if(o(()=>l[m]),s)break;if(t.length>c)return}}t.push(a)}catch{t.push(Error("[unreadable failure]"))}};return o(()=>e),t}function Wn(e){try{return String(e instanceof Error&&e.message||e)}catch{return"[unreadable failure]"}}function ht(e,t="Error"){return Un(e).map((n)=>`${t}: ${Wn(n)}`).join(`
10
+ `)}function $o(e){if(Object.freeze(e),Object.freeze(e.localFlags),Object.freeze(e.ownedFlags),Object.freeze(e.effectiveFlags),e.meta.sections)Object.freeze(e.meta.sections);Object.freeze(e.meta),Object.freeze(e.contexts),Object.freeze(e.extensions),Object.freeze(e.args)}function No(e){return typeof e==="symbol"}function _o(e,t){let n=Object.freeze([...e.extensions]),r=n.flatMap((f)=>Object.entries(f.flags).map(([g,{recursive:d=!0,...h}])=>({name:g,def:h,recursive:d}))).sort((f,g)=>f.name<g.name?-1:f.name>g.name?1:0),s=new Map,o,i;for(let f of n){for(let[g,d]of Object.entries(f.handlers)){let h=f.flags[g];s.set(g,{...d,by:f.id,rootOnly:h?.recursive===!1,boolean:h?.type==="boolean"})}if(f.hooks.renderer){if(i)throw new b("DEFINITION",`Extensions "${i.by}" and "${f.id}" both set renderer; an application can have one`,{subject:"extension",name:f.id,reason:"duplicate-renderer"});i={by:f.id,select:f.hooks.renderer}}if(!f.hooks.noAction)continue;if(o)throw new b("DEFINITION",`Extensions "${o.by}" and "${f.id}" both set noAction; an application can have one`,{subject:"extension",name:f.id,reason:"duplicate-no-action"});o={by:f.id,run:f.hooks.noAction}}let a=n.flatMap((f)=>{let g=e.extensionPositions.get(f.id);return f.provide.map((d)=>({instance:d,position:g,extension:f.id}))}),c=n.flatMap((f)=>f.use),l=new Map,m=(f)=>{let g=l.get(f);if(!g)l.set(f,g=Eo(f,a));return g},w=(f)=>{if(a.length===0)return f.resolve();let g=pn.get(e.extensions);if(!g)pn.set(e.extensions,g=new WeakMap);let d=g.get(f);if(!d)d=t(f.definition,m(f.parent)),g.set(f,d);return d},u=(f,g,d)=>{for(let y of f.usedExtensions)if(!n.some((x)=>x.id===y))throw new b("DEFINITION",`Command "${g}" uses Extension "${y}", which the application does not extend`,{subject:"extension",name:y,reason:"missing-extension"});let h=new Map(d?Tn(f).map((y)=>[y.name,{name:y.name,meta:y.meta,resolve:()=>w(y),definition:y.definition}]):K(f).map((y)=>[y.name,y]));if(d){let y=new Set;for(let{meta:x}of h.values()){y.add(x.name);for(let O of x.aliases??[])y.add(O)}for(let x of n)for(let O of x.commands){let S={name:O.name,...O[M].meta},E=[S.name,...S.aliases??[]];if(E.some((k)=>y.has(k)))throw new b("DEFINITION",`Extension "${x.id}" command "${O.name}" collides with an existing command`,{subject:"command",name:O.name,reason:"command-collision"});for(let k of E)y.add(k);let I;h.set(O.name,{name:O.name,meta:S,resolve:()=>I??=t(O,f,x.id),definition:O})}}let v={...f,meta:{...f.meta},...G(f),args:[...f.args],subCommands:kn(h.values(),(y)=>u(y.resolve(),`${g} ${y.name}`,!1)),addedChildren:void 0,contexts:f.contexts.map((y)=>({...y})),providedContexts:[...f.providedContexts],demands:[...f.demands],extensions:[...f.extensions]};for(let{name:y,def:x,recursive:O}of r)if(d||O)P(v,y,x,"owned");return rt(v,c),mo(v,[...v.inheritedDemands,...Y(v.demands),...c]),xo(v,g,So(v,d)),$o(v),v},p=m(e);return be(p.contexts.map(({instance:f})=>f),n.flatMap((f)=>[...f.use,...f.provide])),{rootNode:u(p,e.meta.name,!0),extensions:n,handlers:s,...o&&{noAction:o},...i&&{renderer:i}}}function X(e,t){let n=mn.get(e);if(n)return n;let r=_o(e,t);return Oo(r.rootNode,r.extensions),mn.set(e,r),r}function Ao(e,t){let n=mt(e,t);return{argv:t,route:n,parsed:io(n.command,n.argv)}}function gt(e,t){let n=mt(e,t);if(n.argv.length>0)throw Dn(n.command,n.argv[0],n.commandPath);return n}function To(e,t,n){let r=gt(e,t);return{argv:t,route:r,parsed:$n(r.command,n)}}function Vn(e,t){let n=dt(e.rootNode);return{get rootCommand(){return n(e.rootNode)},get command(){return n(t)}}}function ko(e,t,n){let r;for(let s of t.flagOrder){let o=e.get(s),i=t.flags[s];if(!o||o.rootOnly&&!n||i===void 0)continue;if(o.boolean&&(i===!1||Array.isArray(i)&&i.every((a)=>a===!1)))continue;if(o.eager)return o;r??=o}return r}function Fo(e){if(typeof e!=="object"||e===null)return!1;let t=e;try{return Symbol.asyncIterator in t&&typeof t[Symbol.asyncIterator]==="function"&&typeof t.next==="function"&&typeof t.return==="function"&&typeof t.throw==="function"}catch{return!1}}async function Hn(e,t,n,r,s,o,i){let E=[];try{let{rootNode:a,extensions:c}=t;if(!t.renderer)n.choose(void 0);let{argv:l,route:m,parsed:w}="argv"in e?Ao(a,e.argv):To(a,e.path,e.input);let u=m.command;let p=w;const f=Gt(E,new AsyncDisposableStack,1);let g=u.contexts.map(({instance:C})=>C);let d=fo(g,u.flagContexts,n.routed,f,r);let h=Vn(t,u);let v=!1;let y=Object.freeze({argv:[...l],get rootCommand(){return h.rootCommand},get command(){return h.command},commandPath:Object.freeze([...m.commandPath]),commandPathOf:(C)=>Fn(a,C),get args(){return p.args},get flags(){return p.flags},get rawArgs(){return p.rawArgs},get sources(){return p.sources},signal:r,ctx:d.bag(c.flatMap((C)=>C.use)),bindInput(C){p=ao(u,w,C)},stdout:n.io.stdout,stderr:n.io.stderr,defer(C){if(!v)throw new b("DEFINITION","Extension cleanup can only be registered while Extension setups run.",{subject:"extension",reason:"extension-defer-after-setup"});f.defer(C)}});o?.(y);let x=async()=>{co(u,p);let C=await Hs(u,p);d.setValidatedFlags(C.flags);let j;if(u.run){let T={args:C.args,flags:C.flags,ctx:d.bag(g),rawArgs:p.rawArgs,signal:r,get command(){return h.command},get rootCommand(){return h.rootCommand},stdout:n.routed.stdout,stderr:n.routed.stderr};if(j=await u.run(T),Fo(j))j=await O(j,s.events=[])}let N=u.outputSchema?await Gs(u.outputSchema,j):j;if(u.run)n.renderer?.result?.(N);return N};let O=async(C,j)=>{let N=!1;try{n.renderer?.stream?.();for(;;){r.throwIfAborted();let T=await C.next();if(N=T.done===!0,r.throwIfAborted(),T.done)return T.value;j.push(T.value),n.renderer?.event?.(T.value),s.onEvent?.(T.value)}}catch(T){if(N)throw T;try{for(let re=await C.return(void 0);!re.done;)re=await C.next()}catch(re){throw new SuppressedError(re,T,"Closing the action's generator failed.")}throw T}};let S;try{try{v=!0;try{for(let N of c)await N.hooks.setup?.(y)}catch(N){v=!1;try{if(t.renderer)n.choose(await t.renderer.select(y))}catch{}throw N}finally{v=!1}if(t.renderer)n.choose(await t.renderer.select(y));let j=ko(t.handlers,w,u===a)??(u.run?void 0:t.noAction);if(j)await j.run(y),S={status:"handled",by:j.by};else{if(u.run)for(let N of c)await N.hooks.preRun?.(y);S={status:"completed",result:await x(),...ue(s)}}}catch(j){if(!n.renderer)n.choose(void 0);let N=await i?.(j,y);S={status:"failed",error:j,...N===void 0?{}:{by:N},...ue(s)}}Object.freeze(S);let C;for(let j of c.toReversed())try{await j.hooks?.postRun?.(y,S)}catch(N){if(S.status!=="failed")C??={error:N}}if(S.status==="failed")throw S.error;if(C)throw C.error}finally{await d.settle()}return S.status==="handled"?{status:"handled",by:S.by}:{status:"completed",result:S.result,...ue(s)}}catch(I){var k=I,A=1}finally{var ne=Jt(E,k,A);ne&&await ne}}function ue(e){return e.events?{events:Object.freeze(e.events)}:{}}async function hn(e,t,n,r,s,o){let i=o;if(!i){let l=function(p){return Promise.reject(new b("DEFINITION",`Context "${String(p)}" cannot be pulled from onError because invocation Contexts have already been disposed.`,{subject:"context",name:String(p),reason:"context-after-disposal"}))},m=new Proxy({},{get:(p,f)=>f==="then"||No(f)?void 0:l(f)}),w;try{w=mt(n.rootNode,t)}catch{}let u=Vn(n,w?.command??n.rootNode);i=Object.freeze({argv:[...t],get rootCommand(){return u.rootCommand},get command(){return u.command},commandPath:Object.freeze(w?[...w.commandPath]:[n.rootNode.meta.name]),commandPathOf:(p)=>Fn(n.rootNode,p),args:Object.freeze({}),flags:Object.freeze({}),rawArgs:[],sources:Object.freeze({args:Object.freeze({}),flags:Object.freeze({}),raw:void 0}),signal:s,stdout:r.io.stdout,stderr:r.io.stderr,bindInput(){},ctx:m})}try{for(let l of n.extensions)if(await l.hooks?.onError?.(e,i))return l.id}catch{}let a=Ye(e);if(a){for(let l of a)Gn(l,r,"Error");return}let c=r.renderer;if(c?.error)try{c.error(e);return}catch{}r.io.stderr(ht(e))}function Gn(e,t,n){let r=t.renderer;if(!r?.cleanup){t.io.stderr(ht(e,n));return}for(let s of Un(e))try{r.cleanup(s)}catch{t.io.stderr(`${n}: ${Wn(s)}`)}}function Po(e){return e!==void 0&&Object.keys(e).length>0}async function Jn(e,t,n,r){let s=[],o=[],i={onEvent:n?.onEvent};try{let{signal:a=new AbortController().signal,...c}=n??{},l={stdout(m){s.push(m),c.stdout?.(m)},stderr(m){o.push(m),c.stderr?.(m)}};return{...await Pe(l,async()=>await Hn(t,X(e,r),Ln(l),a,i)),stdout:s.join(`
9
11
  `),stderr:o.join(`
10
- `)}}catch(i){return{status:"failed",error:i,stdout:s.join(`
12
+ `)}}catch(a){return{status:"failed",error:a,...ue(i),stdout:s.join(`
11
13
  `),stderr:o.join(`
12
- `)}}}async function Ft(e,t,n){let r=t?.argv??process.argv.slice(2),s={...as,...t?.io},o=new AbortController,i=t?.signal?AbortSignal.any([t.signal,o.signal]):o.signal;if(!ge());let a=async()=>{let c;try{c=R(e,n)}catch(d){if(ve(d))return process.exitCode=F,F;return s.stderr(Ce(d)),process.exitCode=1,1}let l=()=>{if(!o.signal.aborted){o.abort(new DOMException("Interrupted by SIGINT.","AbortError"));return}if(process.removeListener("SIGINT",l),process.listenerCount("SIGINT")===0)process.kill(process.pid,"SIGINT")};process.on("SIGINT",l);let u,f;try{await At({argv:r},c,s,i,(d)=>{u=d},async(d,p)=>{f={error:d};let b=ve(d);return process.exitCode=b?F:1,xe(d,r,c,s,i,p,b)})}catch(d){let p;try{if(f&&!Object.is(d,f.error)&&_t(d)&&Object.is(d.suppressed,f.error))p={error:d.error}}catch{}if(p)s.stderr(Ce(p.error,"Cleanup failed"));if(ve(d)){if(!f)await xe(d,r,c,s,i,u,!0);return process.exitCode=F,F}if(process.exitCode=1,!f)await xe(d,r,c,s,i,u);return 1}finally{process.removeListener("SIGINT",l)}return 0};return await(ms(t?.io)?we(s,a):a())}var Te=Symbol.for("crust.commandDefinition");function D(e,t,n){let r=e[Te],s=e.name,o=n?`Extension "${n}" command "${s}"`:`Command "${s}"`,i=(u)=>({subject:n?"extension":"command",name:n??s,reason:u}),a=new Z(s);for(let[u,f]of Object.entries(t.ownedFlags))N(a._node,u,f,"owned");a._node.contexts=t.contexts.map((u)=>({...u}));let c=r.recipe(a);if(!(c instanceof Z)||c._ancestorOwnedFlags!==a._ancestorOwnedFlags)throw new h("DEFINITION",`${o} definition must return the same command builder it received`,i("foreign-command-builder"));if(c._node.extensions.length>0)throw new h("DEFINITION",`${o} cannot register Extensions inside command definitions`,i("nested-command-extension"));let l=P(c._node);return J(l.contexts.map(({instance:u})=>u),l.demands),l.meta={name:s,...r.meta},l}function Ae(e,t=[]){if(e.trim()==="")throw new h("DEFINITION","Command name must be a non-empty string",{subject:"command",name:e,reason:"empty-name"});if(e==="__proto__")throw new h("DEFINITION",'Command name "__proto__" is reserved',{subject:"command",name:e,reason:"reserved-name"});if(t.includes(e))throw new h("DEFINITION",`Command "${e}" must not list its own canonical name as an alias`,{subject:"command",name:e,reason:"alias-collision"});return e}function Pt(e){return typeof e==="function"}function ps(e,t,n){let r=!Pt(t),s=r?t:{},o=r?n:t,i=Ae(e,s.aliases);if(!Pt(o))throw new h("DEFINITION",`Command "${i}" requires a recipe`,{subject:"command",name:i,reason:"missing-recipe"});for(let p of s.aliases??[])if(p===""||/[ \t\n\r\v\f]/.test(p)||p.startsWith("-"))throw new h("DEFINITION",`Command "${i}" has an invalid alias "${p}"`,{subject:"command",name:i,reason:"invalid-alias"});let{sections:a,version:c,...l}=s,u={...l,...s.aliases?{aliases:[...s.aliases]}:{},...a?{sections:je(i,a)}:{}},f={name:i,recipe:o,meta:u},d=(p)=>Object.freeze({name:p,as:(b)=>d(Ae(b,u.aliases)),[Te]:Object.freeze({...f,name:p})});return d(i)}function gs(e){return e.filter((t,n)=>e.findLastIndex((r)=>r.id===t.id)===n)}async function Rt(e,t,n){let r=n[0]??{},s=n[1];return await Tt(e,{path:t,input:r},s,D)}var Z=class{_node;_ancestorOwnedFlags;constructor(e,...t){let n=t[0]??{},r=Ae(e);if(this._node=St(r),n.description!==void 0)this._node.meta.description=n.description;if(n.version!==void 0)this._node.meta.version=n.version;if(n.usage!==void 0)this._node.meta.usage=n.usage;if(n.sections!==void 0)this._node.meta.sections=je(r,n.sections);this._ancestorOwnedFlags={}}_clone(e){let t=Object.create(Object.getPrototypeOf(this));return t._node={...this._node,...e},t._ancestorOwnedFlags=this._ancestorOwnedFlags,t}flags(...e){let t=this._clone(X(this._node));for(let n of e){let{name:r,...s}=n;N(t._node,r,s,"local")}return t}args(...e){let t=[...this._node.args,...e.map(wt)],n=new Set;for(let[r,s]of t.entries()){if(n.has(s.name))throw new h("DEFINITION",`Argument name "${s.name}" is already defined`,{subject:"argument",name:s.name,reason:"duplicate-arg"});if(n.add(s.name),s.variadic===!0&&r!==t.length-1)throw new h("DEFINITION",`Only the last positional argument can be variadic; "${s.name}" is not last`,{subject:"argument",name:s.name,reason:"variadic-position"})}return this._clone({args:t})}use(...e){return this._clone({demands:[...this._node.demands,...e.map(Y)]})}provide(...e){let t=e.map(Y);J([...this._node.contexts.map(({instance:r})=>r),...t],t);let n=this._clone({...X(this._node),contexts:[...this._node.contexts,...t.map((r)=>({instance:r}))],providedContexts:[...this._node.providedContexts,...t]});for(let r of t)for(let[s,o]of Object.entries(r.ownedFlags))N(n._node,s,o,"owned");return n}action(e){return this._clone({run:e})}extend(...e){let t=e.map(Y),n=gs([...this._node.extensions,...t]),r=$t(this._node,n,new Set(t.map((s)=>s.id)));return J(r.contexts.map(({instance:s})=>s),n.flatMap((s)=>[...s.use,...s.provide])),this._clone({...r,extensions:n})}add(...e){return this._addDefinitions(e)}command(e,t){let n=ps(e,t);return this._addDefinitions([n])}_addDefinitions(e){let t={...this._node.subCommands};for(let n of e){let r=[n.name,...n[Te].meta.aliases??[]];for(let o of Object.values(t))if([o.meta.name,...o.meta.aliases??[]].some((i)=>r.includes(i)))throw new h("DEFINITION",`Command name "${n.name}" is already registered on this command`,{subject:"command",name:n.name,reason:"command-collision"});let s=D(n,this._node);t[n.name]=s}return this._clone({subCommands:t})}async snapshot(){return A(R(this._node,D).rootNode)}async run(e,...t){return await Rt(this._node,e,t)}at(e){Ne(R(this._node,D).rootNode,e);let t=this._node,n=Object.freeze([...e]);return{path:n,async run(...r){return await Rt(t,n,r)}}}async execute(e){return await Ft(this._node,e,D)}};var hs=/^[A-Za-z0-9][A-Za-z0-9._-]*$/,Dt='letters, digits, ".", "_", and "-", starting with a letter or digit';function Mt(e){return hs.test(e)}import{existsSync as Rs,lstatSync as Gt,mkdirSync as Ut,readFileSync as Ds,readdirSync as Kt,realpathSync as Re,statSync as Yt,writeFileSync as Ms}from"node:fs";import{dirname as Jt,join as T,resolve as Vt,sep as Ls}from"node:path";import{fileURLToPath as zs}from"node:url";function Q(e){return e instanceof Error&&"code"in e&&typeof e.code==="string"}import{isAbsolute as bs,relative as ws,sep as ys}from"node:path";function Lt(e,t){let n=ws(e,t);return n===""||!bs(n)&&n!==".."&&!n.startsWith(`..${ys}`)}import{spawn as Bs,spawnSync as Ws}from"node:child_process";import{once as Us}from"node:events";import{accessSync as vs,constants as xs,statSync as Ss}from"node:fs";import{delimiter as Os,extname as $s,join as Es,resolve as Is,sep as Cs,win32 as js}from"node:path";import{spawn as _s,spawnSync as ks}from"node:child_process";import{once as Ns}from"node:events";import{text as zt}from"node:stream/consumers";function Wt(e){if(e?.startsWith("bun"))return"bun";if(e?.startsWith("pnpm"))return"pnpm";if(e?.startsWith("yarn"))return"yarn";if(e?.startsWith("npm"))return"npm";return null}var As=/[\0\r\n"%!^`<>&|]/,Fe=/([()\][%!^"`<>&|;, *?])/g;function Ts(e){let t=e.replace(/(?=(\\+?)?)\1"/g,"$1$1\\\"");return t=t.replace(/(?=(\\+?)?)\1$/g,"$1$1"),t=`"${t}"`.replace(Fe,"^$1"),t.replace(Fe,"^$1")}function Fs(e,t,n,r=process.platform){if(n||r!=="win32"||!/\.(cmd|bat)$/i.test(e))return null;let s=js.normalize(e);for(let[i,a]of[s,...t].entries())if(As.test(a)){let c=i===0?"command":`argument ${i}`;throw Error(`Windows command shim ${c} ${JSON.stringify(a)} contains unsafe shell characters`)}let o=[s.replace(Fe,"^$1"),...t.map(Ts)].join(" ");return{command:process.env.ComSpec??"cmd.exe",args:["/d","/s","/c",`"${o}"`],windowsVerbatimArguments:!0}}function Ps(e){if(e.pid===void 0)return;if(process.platform==="win32"){if(e.exitCode===null&&e.signalCode===null){let t=ks("taskkill",["/pid",String(e.pid),"/T","/F"],{stdio:"ignore",timeout:1e4});if(t.error||t.status!==0)e.kill("SIGKILL")}return}try{process.kill(-e.pid,"SIGKILL")}catch(t){if(Q(t)&&t.code==="ESRCH")return;throw e.kill("SIGKILL"),t}}async function M(e,t=[],n={}){let r=Fs(e,t,n.shell),s=(n.stdio??"collect")==="collect",o=s&&n.stdout!=="ignore",i=_s(r?.command??e,r?.args??t,{cwd:n.cwd,env:n.env,shell:n.shell,stdio:s?["ignore",o?"pipe":"ignore","pipe"]:"inherit",detached:n.timeout!==void 0&&process.platform!=="win32",windowsVerbatimArguments:r?.windowsVerbatimArguments}),a,c=new Promise((l,u)=>{if(n.timeout===void 0)return;let f=n.timeout;a=setTimeout(()=>{let d=Error(`${[e,...t].join(" ")} did not exit within ${f} ms and was killed.`);try{Ps(i)}catch(p){d=Error("Process-tree cleanup failed after timeout.",{cause:p})}i.stdout?.destroy(),i.stderr?.destroy(),u(d)},f)});try{let[l,u,[f]]=await Promise.race([Promise.all([o?zt(i.stdout):"",s?zt(i.stderr):"",Ns(i,"close")]),c]);return{exitCode:f,stdout:l,stderr:u}}finally{clearTimeout(a)}}function Bt(e){try{return vs(e,xs.X_OK),Ss(e).isFile()}catch{return!1}}function Pe(e){if(e.includes(Cs)||e.includes("/"))return Bt(e)?e:null;let t=process.platform==="win32"&&!$s(e)?(process.env.PATHEXT??".EXE;.CMD;.BAT;.COM").split(";"):[""];for(let n of process.env.PATH?.split(Os)??[])for(let r of t){let s=Is(Es(n,e+r));if(Bt(s))return s}return null}function Vs(e,t){return e.replace(/\{\{\s*(\w+)\s*\}\}/g,(n,r)=>Object.hasOwn(t,r)?t[r]??n:n)}function qs(e){let t=Jt(e),n=e.slice(t==="."?0:t.length+1);if(n.startsWith("_")&&!n.startsWith("__")){let r=`.${n.slice(1)}`;return t==="."?r:T(t,r)}return e}function Hs(e){return Yt(e,{throwIfNoEntry:!1})?.isDirectory()===!0&&Kt(e).length>0}function qt(e,t){if(Re(e)!==e)throw Error(`Destination root "${e}" was redirected outside the destination.`);let n=e;for(let r of t.split(Ls)){n=T(n,r);let s;try{s=Gt(n).isSymbolicLink()}catch(i){if(Q(i)&&i.code==="ENOENT")return;throw i}if(!s)continue;let o;try{o=Re(n)}catch{}if(o===void 0||!Lt(e,o))throw Error(`Destination path "${n}" is a symlink${o===void 0?" to a missing target":` to "${o}"`} outside the destination "${e}". Remove the link or choose another destination.`)}}async function Xt(e){let{template:t,dest:n,context:r,conflict:s="abort",render:o=Vs}=e,i=t instanceof URL?zs(t):Vt(t),a=Vt(n),c=Yt(i,{throwIfNoEntry:!1});if(!c)throw Error(`Template directory "${i}" does not exist (from template: "${String(t)}").`);if(!c.isDirectory())throw Error(`Template path "${i}" is not a directory (from template: "${String(t)}").`);if(s==="abort"&&Hs(a))throw Error(`Destination directory "${a}" already exists and is non-empty. Use conflict: "overwrite" to proceed.`);let l=Kt(i,{recursive:!0,encoding:"utf8"}).filter((p)=>Gt(T(i,p)).isFile());Ut(a,{recursive:!0});let u=Re(a),f=l.map((p)=>({relFromTemplate:p,destRelPath:qs(p)}));for(let{destRelPath:p}of f)qt(u,p);let d=[];for(let{relFromTemplate:p,destRelPath:b}of f){let m=T(i,p),g=T(u,b),w=Ds(m),S=w.subarray(0,8192).includes(0)?w:await o(w.toString("utf-8"),r);qt(u,b),Ut(Jt(g),{recursive:!0}),Ms(g,S,"utf-8"),d.push(b)}return{files:d}}var Gs=[["bun.lock","bun"],["bun.lockb","bun"],["pnpm-lock.yaml","pnpm"],["yarn.lock","yarn"],["package-lock.json","npm"]];function De(e){let t=e??process.cwd();for(let[n,r]of Gs)if(Rs(T(t,n)))return r;return Wt(process.env.npm_config_user_agent)??"npm"}function Zt(e){try{return Ws("git",["rev-parse","--is-inside-work-tree"],{cwd:e??process.cwd(),stdio:"ignore"}).status===0}catch{return!1}}async function Me(e,t){for(let n of e)switch(n.type){case"install":await Ks(t);break;case"git-init":await Ys(t,n.commit);break;case"open-editor":await Js(t);break;case"command":await Xs(n.cmd,n.cwd??t)}}async function Ks(e){let t=De(e),n=Pe(t);if(!n)throw Error(`Package manager "${t}" was not found on PATH. Install ${t} and try again.`);let{exitCode:r}=await M(n,["install"],{cwd:e,stdio:"inherit"});if(r!==0)throw Error(`"${t} install" exited with code ${r}`)}async function Ys(e,t){let n=Pe("git");if(!n)throw Error('"git" was not found on PATH. Install Git and try again.');if(await L(n,["init"],e,"git init"),t)await Zs(e,n),await L(n,["add","."],e,"git add"),await L(n,["commit","-m",t],e,"git commit")}async function Js(e){let t=process.env.EDITOR||"code";try{let n=Bs(t,[e],{stdio:"ignore",shell:process.platform==="win32"});n.unref();let r=await Promise.race([Us(n,"close").then(([s])=>({kind:"exited",code:s})),new Promise((s)=>setTimeout(()=>s({kind:"timeout"}),500))]);if(r.kind==="exited"&&r.code!==0)console.warn(`Warning: could not open editor "${t}" (exit code ${r.code})`)}catch{console.warn(`Warning: could not open editor "${t}"`)}}async function Xs(e,t){let{exitCode:n}=await M(e,[],{cwd:t,shell:!0,stdio:"inherit"});if(n!==0)throw Error(`Command "${e}" exited with code ${n}`)}async function Zs(e,t){if(!await Ht(t,"user.name",e))await L(t,["config","user.name","Crust"],e,"git config user.name");if(!await Ht(t,"user.email",e))await L(t,["config","user.email","crust@scaffolded.project"],e,"git config user.email")}async function Ht(e,t,n){let{exitCode:r}=await M(e,["config",t],{cwd:n,stdio:"collect",stdout:"ignore"});return r===0}async function L(e,t,n,r){let{exitCode:s,stderr:o}=await M(e,t,{cwd:n,stdio:"collect",stdout:"ignore"});if(s!==0)throw Error(`"${r}" failed with exit code ${s}${o?`: ${o.trim()}`:""}`)}var Qs=new Intl.Segmenter(void 0,{granularity:"grapheme"}),eo=/[\p{Cc}\p{Cf}\p{Mn}\p{Me}]/u,to=/\p{Emoji_Presentation}|\p{Emoji}\uFE0F/u,no=new RegExp([String.raw`(?:\x1b\[|\x9b)[^\x1b\x18\x1a\x9c\x40-\x7e]*[\x40-\x7e\x18\x1a\x9c]?`,String.raw`(?:\x1b\]|\x9d)[^\x07\x1b\x18\x1a\x9c]*(?:\x07|\x1b\\|[\x18\x1a\x9c])?`,String.raw`(?:\x1b[PX^_]|[\x90\x98\x9e\x9f])[^\x1b\x18\x1a\x9c]*(?:\x1b\\|[\x18\x1a\x9c])?`,String.raw`\x1b[\x20-\x2f][^\x1b]?`,String.raw`\x1b[\x18\x1a\x9c\x30-\x7e]?`].join("|"),"g");function ro(e){return e>=4352&&(e<=4447||e===9001||e===9002||e>=11904&&e<=42191&&e!==12351||e>=44032&&e<=55203||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65135||e>=65280&&e<=65376||e>=65504&&e<=65510||e>=94176&&e<=111355||e>=127488&&e<=127743||e>=131072&&e<=262141)}function so(e){return eo.test(String.fromCodePoint(e))||e>=4448&&e<=4607||e>=55216&&e<=55295}function oo(e){if(!/[^\x20-\x7e]/.test(e))return e.length;let t=0;for(let{segment:n}of Qs.segment(e.replace(no,""))){if(to.test(n)){let r=n.codePointAt(0);t+=n.length===2&&r>=127462&&r<=127487?1:2;continue}for(let r of n){let s=r.codePointAt(0);if(so(s))continue;t+=ro(s)?2:1;break}}return t}function nn(e){return globalThis.Bun?.stringWidth(e,{countAnsiEscapeCodes:!1})??oo(e)}var rn={bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},io={black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],gray:[90,39],brightRed:[91,39],brightGreen:[92,39],brightYellow:[93,39],brightBlue:[94,39],brightMagenta:[95,39],brightCyan:[96,39],brightWhite:[97,39],bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBrightBlack:[100,49],bgBrightRed:[101,49],bgBrightGreen:[102,49],bgBrightYellow:[103,49],bgBrightBlue:[104,49],bgBrightMagenta:[105,49],bgBrightCyan:[106,49],bgBrightWhite:[107,49]},sn={...rn,...io},Le=Object.freeze(Object.keys(sn)),ao=Object.freeze(Object.fromEntries(Le.map((e)=>{let[t,n]=sn[e];return[e,{open:`\x1B[${t}m`,close:`\x1B[${n}m`}]})));function co(e){return Object.hasOwn(rn,e)}function z(e,t,n){return e!==void 0&&t in e?e[t]:n}function on(e){return z(e,"isTTY",process.stdout?.isTTY)??!1}function an(e){return z(e,"forceColor",process.env.FORCE_COLOR)}function cn(e){return e==="0"||e==="false"}function lo(e){let t=e.toLowerCase();return t.includes("24bit")||t.includes("truecolor")||t.endsWith("-direct")}function ln(e,t){if(e!==void 0){let n=e.toLowerCase();if(n==="truecolor"||n==="24bit")return!0}return t!==void 0&&lo(t)}function Qt(e,t){if(ln(e,t))return"truecolor";if(t!==void 0&&t.toLowerCase().includes("256color"))return"256";return"16"}function uo(e,t){if(e==="never")return"none";if(e==="always")return"truecolor";let n=z(t,"colorTerm",process.env.COLORTERM),r=z(t,"term",process.env.TERM),s=an(t);if(s!==void 0){if(cn(s))return"none";if(s==="1")return"16";if(s==="2")return"256";if(s==="3")return"truecolor";return Qt(n,r)}if(!on(t))return"none";let o=z(t,"noColor",process.env.NO_COLOR);if(o!==void 0&&o!=="")return"none";if(r!==void 0&&r.toLowerCase()==="dumb"&&!ln(n,r))return"none";return Qt(n,r)}function fo(e,t){if(e==="always")return!0;if(e==="never")return!1;let n=an(t);if(n!==void 0)return!cn(n);return on(t)}var un={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]};function ze(e,t){if(e==null)return"";let n=String(e);if(n==="")return"";let{open:r,close:s}=t;if(n.includes(s))n=n.replaceAll(s,s+r);return r+n+s}var mo="\x1B[39m",po="\x1B[49m",go="\x1B[38;",ho="\x1B[48;";function bo(e){try{return JSON.stringify(e)??String(e)}catch{return String(e)}}function wo(e){return Object.hasOwn(un,e)}function Be(e){if(Array.isArray(e)){if(e.length===3&&e.every((t)=>Number.isInteger(t)&&t>=0&&t<=255))return[e[0],e[1],e[2]]}else if(typeof e==="string"){let t=e.toLowerCase();if(wo(t))return un[t];let n=/^#([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(t)?.[1];if(n){let s=n.length===3?n.split("").map((o)=>o+o).join(""):n;return[Number.parseInt(s.slice(0,2),16),Number.parseInt(s.slice(2,4),16),Number.parseInt(s.slice(4,6),16)]}let r=/^rgb\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)$/.exec(t)??/^rgb\(\s*(\d{1,3})\s+(\d{1,3})\s+(\d{1,3})\s*\)$/.exec(t);if(r){let s=[Number(r[1]),Number(r[2]),Number(r[3])];if(s.every((o)=>o<=255))return s}}throw TypeError(`Invalid color input: ${bo(e)}`)}function yo(e,t,n){let r=[0,95,135,175,215,255],s=(f)=>r.reduce((d,p,b)=>Math.abs(p-f)<Math.abs(r[d]-f)?b:d,0),[o,i,a]=[s(e),s(t),s(n)],c=Math.min(23,Math.max(0,Math.round(((e+t+n)/3-8)/10))),l=8+c*10,u=(f,d,p)=>(e-f)**2+(t-d)**2+(n-p)**2;return u(l,l,l)<u(r[o],r[i],r[a])?232+c:16+36*o+6*i+a}function fn(e,t,n){let r=Math.round(Math.max(e,t,n)/127.5);if(r===0)return 30;let s=30+((Math.round(n/255)<<2|Math.round(t/255)<<1|Math.round(e/255))&7);if(r===2)s+=60;return s}function dn(e,t){let[n,r,s]=Be(e);if(t==="16")return`\x1B[${fn(n,r,s)}m`;if(t==="256")return`\x1B[38;5;${yo(n,r,s)}m`;return`\x1B[38;2;${n};${r};${s}m`}function vo(e,t){if(t==="16"){let[n,r,s]=Be(e);return`\x1B[${fn(n,r,s)+10}m`}return dn(e,t).replace(go,ho)}function mn(e,t,n){if(n==="none")return Be(t),{open:"",close:""};return{open:e==="fg"?dn(t,n):vo(t,n),close:e==="fg"?mo:po}}function xo(e,t,n,r){let s=mn(e,n,r);return r==="none"?t:ze(t,s)}var pn="\x1B]",gn="\x1B\\",So=`${pn}8;;${gn}`;function hn(e,t,n,r=""){if(!n.test(e))throw TypeError(`Invalid ${t}: ${JSON.stringify(e)} must contain only printable ASCII characters${r}.`)}function Oo(e){let t=e?.id;if(t===void 0||t==="")return"";if(hn(t,"hyperlink id",/^[\x20-\x7e]*$/),t.includes(":")||t.includes(";"))throw TypeError('Invalid hyperlink id: ":" and ";" are reserved by the OSC 8 format.');return`id=${t}`}function bn(e,t){hn(e,"hyperlink URL",/^[\x21-\x7e]*$/," without spaces");let n=Oo(t);return{open:`${pn}8;${n};${e}${gn}`,close:So}}function $o(e,t,n){return ze(e,bn(t,n))}var wn=["fg","bg"];function Eo(e){return e.kind==="named"&&co(e.name)}function ee(e,t){return e.kind==="named"?ao[e.name]:mn(e.kind,e.input,t)}function yn(e,t){let n={kind:e,input:t};return ee(n,"truecolor"),Array.isArray(t)?{kind:e,input:[t[0],t[1],t[2]]}:n}function en(e,t,n){if(e==null)return"";let r=String(e);if(r==="")return r;let s=n(),{modifiersEnabled:o,colorsEnabled:i}=s;for(let a=t.length-1;a>=0;a--){let c=t[a];if(c===void 0)continue;if(Eo(c)?!o:!i)continue;r=ze(r,ee(c,s.colorDepth))}return r}function Io(e){return Array.isArray(e)&&"raw"in e&&Array.isArray(e.raw)}function Co(e,t){let n=new Map,r=t?"truecolor":e().colorDepth;function s(o){let i=o.map((f)=>f.kind==="named"?f.name:`~${ee(f,"truecolor").open}`).join("|"),a=n.get(i);if(a)return a;let c=(f,...d)=>{if(Io(f)){let p="";for(let b=0;b<f.length;b++)if(p+=f[b]??"",b<d.length)p+=String(d[b]);return en(p,o,e)}return en(f,o,e)};if(n.size>=1024)n.delete(n.keys().next().value);n.set(i,c);for(let f of Le)Object.defineProperty(c,f,{configurable:!1,enumerable:!0,get(){return s([...o,{kind:"named",name:f}])}});for(let f of wn)Object.defineProperty(c,f,{configurable:!1,enumerable:!0,value:(d)=>s([...o,yn(f,d)]),writable:!1});let l="",u="";for(let f of o){let d=ee(f,r);l+=d.open,u=d.close+u}return Object.defineProperty(c,"open",{value:l,writable:!1,configurable:!1,enumerable:!0}),Object.defineProperty(c,"close",{value:u,writable:!1,configurable:!1,enumerable:!0}),Object.freeze(c)}return s}function jo(e){let t={};for(let n of Le)t[n]=e([{kind:"named",name:n}]);return t}function tn(e){let t=e?.mode??"auto",n=fo(t,e?.overrides),r=uo(t,e?.overrides);return{modifiersEnabled:n,colorDepth:r,colorsEnabled:r!=="none",trueColorEnabled:r==="truecolor"}}function _o(e,t){let n=t?tn:(()=>{let i=tn(e);return()=>i})(),r=Co(n,t),s=jo(r),o={get enabled(){let{modifiersEnabled:i,colorsEnabled:a}=n();return i||a},get colorsEnabled(){return n().colorsEnabled},get trueColorEnabled(){return n().trueColorEnabled},get colorDepth(){return n().colorDepth},link(i,a,c){if(n().modifiersEnabled)return $o(i,a,c);return bn(a,c),i},...Object.fromEntries(wn.map((i)=>[i,(...a)=>{if(a.length===1)return r([yn(i,a[0])]);return xo(i,a[0],a[1],n().colorDepth)}])),...s};return Object.freeze(o)}var y=_o(void 0,!0),{black:Da,red:te,green:ne,yellow:Ma,blue:La,magenta:vn,cyan:B,white:za,gray:Ba,brightRed:Wa,brightGreen:Ua,brightYellow:Va,brightBlue:qa,brightMagenta:Ha,brightCyan:Ga,brightWhite:Ka,bgBlack:Ya,bgRed:Ja,bgGreen:Xa,bgYellow:Za,bgBlue:Qa,bgMagenta:ec,bgCyan:tc,bgWhite:nc,bgBrightBlack:rc,bgBrightRed:sc,bgBrightGreen:oc,bgBrightYellow:ic,bgBrightBlue:ac,bgBrightMagenta:cc,bgBrightCyan:lc,bgBrightWhite:uc,bold:re,dim:se,italic:fc,underline:dc,inverse:mc,hidden:pc,strikethrough:gc,link:hc,fg:bc,bg:wc}=y;var xn={spinner:vn,message:re,success:ne,error:te},Ve="\x1B[",ko=`${Ve}?25l`,Sn=`${Ve}?25h`,$n=`${Ve}2K`,En="\r",On={dots:{frames:["⠋","⠙","⠹","⠸","⠼","⠴","⠦","⠧","⠇","⠏"],interval:80},line:{frames:["-","\\","|","/"],interval:130},arc:{frames:["◐","◓","◑","◒"],interval:100},bounce:{frames:["⠁","⠂","⠄","⡀","⢀","⠠","⠐","⠈"],interval:120}},No="✓",Ao="✗";function To(e){if(e===void 0)return On.dots;if(typeof e==="string")return On[e];if(e.frames.length===0)throw Error("A custom spinner requires at least one frame");return e}function We(e,t){let n=e[t];if(n===void 0)throw Error("Spinner frame index is out of bounds");return n}function Ue(e,t,n){return`${$n}${En}${n.spinner(e)} ${n.message(t)}`}function Fo(e,t,n,r){let s=n==="success"?No:Ao,o=`${(n==="success"?t.success:t.error)(s)} ${t.message(e)}
13
- `;return r?$n+En+o:o}function Po(e){let t=e.sink??q()?.output??process.stderr,n=e.theme?{...xn,...e.theme}:xn,r=t.isTTY??!1,{frames:s,interval:o}=To(e.spinner),i=e.sigint??"exit",a=e.message,c=0,l=!1,u=!1,f,d;function p(){if(f!==void 0)clearInterval(f),f=void 0;if(d)process.removeListener("SIGINT",d),d=void 0}return{start(){if(l||u)return;if(l=!0,!r)return;if(t.write(ko),t.write(Ue(We(s,0),a,n)),f=setInterval(()=>{c=(c+1)%s.length,t.write(Ue(We(s,c),a,n))},o),i==="exit")d=()=>{if(p(),u=!0,t.write(Sn),process.listenerCount("SIGINT")===0)process.kill(process.pid,"SIGINT")},process.once("SIGINT",d)},updateMessage(b){if(u)return;if(a=b,l&&r)t.write(Ue(We(s,c),a,n))},stop(b="success",m){if(u)return;if(u=!0,m!==void 0)a=m;p();let g;try{t.write(Fo(a,n,b,l&&r))}catch(w){g={error:w}}if(l&&r)try{t.write(Sn)}catch(w){if(!g)throw w}if(g)throw g.error}}}function qe(e){let t=Po(e),{task:n}=e;if(!n)return t;return t.start(),Promise.resolve().then(()=>n(t)).then((r)=>(t.stop("success"),r),(r)=>{throw t.stop("error"),r})}import*as k from"node:readline";var In={prefix:B,message:re,placeholder:se,cursor:B,selected:B,unselected:se,error:te,success:ne,hint:se,filterMatch:B};function ie(e){let t=q();return{input:e?.input??t?.input??process.stdin,output:e?.output??t?.output??process.stderr}}var Ke=Symbol("submit");function Ye(e){return{[Ke]:e}}var He=new WeakSet,Ge=new WeakSet,_n="\x1B[",Ro=`${_n}?25l`,Do=`${_n}?25h`;function Mo(e,t){let n=e.split(`
14
- `),r=0;for(let s of n){let o=nn(s);r+=o===0?1:Math.ceil(o/t)}return r}var Lo=class extends Error{constructor(e){super(e??"Prompts require an interactive terminal (TTY).");this.name="NonInteractiveError"}};function kn(e=ie().input){return!!e.isTTY}function zo(e=ie().input){if(!kn(e))throw new Lo}function Bo(e){return typeof e==="object"&&e!==null&&Ke in e}function Je(e,t){let{render:n,handleKey:r,initialState:s,renderSubmitted:o}=e,i=e.theme?{...In,...e.theme}:In,{input:a,output:c}=ie(t),l=c;return new Promise((u,f)=>{if(He.has(a)||Ge.has(c)){f(Error("Cannot run multiple prompts concurrently on the same input or output stream. Await each prompt before starting the next."));return}zo(a),He.add(a),Ge.add(c);let d=s,p=0,b=!1,m=!1;function g(){if(b)return;if(b=!0,He.delete(a),Ge.delete(c),a.removeListener("keypress",_),m)a.setRawMode?.(!1);a.pause(),c.write(Do)}function w(C){let I=c.columns||80;if(p>0)k.cursorTo(l,0),k.moveCursor(l,0,-(p-1)),k.clearScreenDown(l);c.write(C),p=Mo(C,I)}let S=Promise.resolve(),x=null;function v(){if(x!==null)return;x=setTimeout(()=>{if(x=null,b)return;try{w(n(d,i))}catch(C){g(),f(C)}},0)}function E(){if(x!==null)clearTimeout(x),x=null}function _(C,I){if(I?.ctrl&&I.name==="c"){E(),c.write(`
15
- `),g(),f(new DOMException("Prompt was cancelled.","AbortError"));return}let me={char:C??"",name:I?.name??"",ctrl:I?.ctrl??!1,meta:I?.meta??!1,shift:I?.shift??!1};S=S.then(async()=>{if(b)return;try{let O=await r(me,d);if(b)return;if(Bo(O)){E();let j=O[Ke];if(o)w(o(d,j,i));c.write(`
16
- `),g(),u(j)}else d=O,v()}catch(O){E(),g(),f(O)}})}try{if(k.emitKeypressEvents(a),a.setRawMode)a.setRawMode(!0),m=!0;a.resume(),c.write(Ro),w(n(d,i)),a.on("keypress",_)}catch(C){g(),f(C)}})}async function Nn(e,t){let n=await e["~standard"].validate(t),r=n.issues?.[0];if(r)return{ok:!1,error:r.message||"Validation failed"};if("value"in n)return{ok:!0,value:n.value};return{ok:!1,error:"Validation failed"}}async function Wo(e,t,n){if(t)return Nn(t,e);if(n)try{await n(e)}catch(r){return{ok:!1,error:r instanceof Error?r.message:"Validation failed"}}return{ok:!0,value:e}}async function oe(e,t,n){if(e.initial!==void 0)return{shortCircuited:!0,value:n?await n(e.initial,"initial"):e.initial};let r=ie(t);if(!kn(r.input)&&e.default!==void 0)return{shortCircuited:!0,value:n?await n(e.default,"default"):e.default};return{shortCircuited:!1,promptIO:r}}async function Uo(e,t,n){if(t.schema!==void 0&&t.validate!==void 0)throw Error(`${e}() cannot combine "schema" with "validate"`);let r=t.schema;if(!r)return oe(t,n);return oe(t,n,async(s,o)=>{let i=await Nn(r,s);if(!i.ok)throw Error(`${o} value rejected by schema: ${i.error}`);return i.value})}function Xe(e,t,n){let r=[e];if(t)r.push(t);if(n)r.push(n);return r.join(" ")}function An(e,t,n,r){let s=t?`${e} ${t}`:e,o=r??"";if(t)return`${s}${o}
17
- ${n}`;return`${s}${o} ${n}`}function Vo(e,t,n,r,s){let o=Math.min(e.length,n),i=[];if(t>0)i.push(s("..."));for(let a=t;a<t+o;a++){let c=e[a];if(c===void 0)break;i.push(r(c,a))}if(t+o<e.length)i.push(s("..."));return i}function Tn(e,t,n,r){let s=Math.min(n,r);if(s===0)return 0;if(e<t)return e;if(e>=t+s)return e-s+1;return t}function qo(e,t,n,r,s){if(t===0)return{cursor:0,scrollOffset:0};let o=n===-1?e<=0?t-1:e-1:e>=t-1?0:e+1;return{cursor:o,scrollOffset:Tn(o,r,t,s)}}function Ho(e){return e.map((t)=>{if(typeof t==="string")return{label:t,value:t};return t})}function Go(e,t){if(e.name==="return")return Ye(t.value);if(e.name==="left"||e.name==="right"||e.name==="tab")return{value:!t.value};if(e.name==="h"||e.char==="y"||e.char==="Y")return{value:!0};if(e.name==="l"||e.char==="n"||e.char==="N")return{value:!1};return t}var Ko=" · ";function Yo(e,t,n,r,s){let o=t.prefix("┃"),i=t.message(n??"Are you sure?"),a=e.value?`${t.selected("●")} ${t.selected(r)}`:`${t.unselected("○")} ${t.unselected(r)}`,c=e.value?`${t.unselected("○")} ${t.unselected(s)}`:`${t.selected("●")} ${t.selected(s)}`;return An(o,i,`${a}${Ko}${c}`)}function Jo(e,t,n,r,s){let o=t.success("✓"),i=t.message(n??"Are you sure?"),a=e?r:s;return Xe(o,i,t.success(a))}async function ae(e,t){let n=await oe(e,t);if(n.shortCircuited)return n.value;let{promptIO:r}=n,s=e.active??"Yes",o=e.inactive??"No";return Je({initialState:{value:e.default??!0},theme:e.theme,render:(i,a)=>Yo(i,a,e.message,s,o),handleKey:Go,renderSubmitted:(i,a,c)=>Jo(a,c,e.message,s,o)},r)}function Xo(e,t,n,r){if(e==="")return r?n.placeholder(r):n.cursor("│");return`${e.slice(0,t)}${n.cursor("│")}${e.slice(t)}`}function Cn(e,t){return(e.codePointAt(t)??0)>65535?2:1}function jn(e,t){return t>=2&&(e.codePointAt(t-2)??0)>65535?2:1}function Zo(e){let t=e.codePointAt(0);return t!==void 0&&e.length===(t>65535?2:1)&&(t<55296||t>57343)}function Qo(e,t,n){if(e.name==="backspace"){if(n===0)return{text:t,cursorPos:n};let r=n-jn(t,n);return{text:t.slice(0,r)+t.slice(n),cursorPos:r}}if(e.name==="delete"){if(n>=t.length)return{text:t,cursorPos:n};let r=n+Cn(t,n);return{text:t.slice(0,n)+t.slice(r),cursorPos:n}}if(e.name==="left"){if(n===0)return{text:t,cursorPos:n};return{text:t,cursorPos:n-jn(t,n)}}if(e.name==="right"){if(n>=t.length)return{text:t,cursorPos:n};return{text:t,cursorPos:n+Cn(t,n)}}if(e.name==="home")return{text:t,cursorPos:0};if(e.name==="end")return{text:t,cursorPos:t.length};if(Zo(e.char)&&!e.ctrl&&!e.meta){let r=t.slice(0,n),s=t.slice(n);return{text:r+e.char+s,cursorPos:n+e.char.length}}return null}function ei(e,t,n){return async(r,s)=>{if(r.name==="return"){let i=await Wo(s.value===""&&n!==void 0?n:s.value,e,t);return i.ok?Ye(i.value):{...s,error:i.error}}let o=Qo(r,s.value,s.cursorPos);return o?{value:o.text,cursorPos:o.cursorPos,error:null}:s}}async function ti(e,t,n){let r=await oe(e,n);if(r.shortCircuited)return r;let s=Ho(e.choices),o=e.maxVisible??10,i=new Set(t.flatMap((l)=>{let u=s.findIndex((f)=>f.value===l);return u===-1?[]:[u]})),a=t.length===0?-1:s.findIndex((l)=>l.value===t[0]),c=a===-1?0:a;return{shortCircuited:!1,choices:s,maxVisible:o,cursor:c,scrollOffset:Tn(c,0,s.length,o),selected:i,promptIO:r.promptIO}}function ni(e,t,n,r,s){let o=t.prefix("┃"),i=t.message(n??"Enter a value"),a=r??s,c=s!==void 0&&r!==void 0&&e.value===""?` ${t.hint(`(${s})`)}`:"",l=An(o,i,Xo(e.value,e.cursorPos,t,a),c);if(e.error!==null)l+=`
18
- ${t.error(e.error)}`;return l}function ri(e,t,n){return Xe(t.success("✓"),t.message(n??"Enter a value"),t.success(String(e)))}async function Fn(e={},t){let n=await Uo("input",e,t);if(n.shortCircuited)return n.value;let{promptIO:r}=n;return Je({initialState:{value:"",cursorPos:0,error:null},theme:e.theme,render:(s,o)=>ni(s,o,e.message,e.placeholder,e.default),handleKey:ei(e.schema,e.validate,e.default),renderSubmitted:(s,o,i)=>ri(o,i,e.message)},r)}function si(e){return(t,n)=>{let r=n.choices.length;if(t.name==="return"){let s=n.choices[n.cursor];if(s)return Ye(s.value);return n}if(["up","down","k","j"].includes(t.name)){let s=t.name==="up"||t.name==="k"?-1:1;return{...n,...qo(n.cursor,r,s,n.scrollOffset,e)}}return n}}function oi(e,t,n,r){let s=[`${t.prefix("┃")} ${t.message(n??"Pick an option")}`];return s.push(...Vo(e.choices,e.scrollOffset,r,(o,i)=>{let a=o.hint?` ${t.hint(o.hint)}`:"";return i===e.cursor?`${t.cursor("›")} ${t.selected(o.label)}${a}`:` ${t.unselected(o.label)}${a}`},t.hint)),s.join(`
19
- `)}function ii(e,t,n){let r=t.success("✓"),s=t.message(n??"Pick an option"),o=e.choices[e.cursor],i=o?o.label:"";return Xe(r,s,t.success(i))}async function Ze(e,t){let n=await ti(e,e.default===void 0?[]:[e.default],t);if(n.shortCircuited)return n.value;let{choices:r,cursor:s,maxVisible:o,promptIO:i,scrollOffset:a}=n;return Je({initialState:{cursor:s,choices:r,scrollOffset:a},theme:e.theme,render:(c,l)=>oi(c,l,e.message,o),handleKey:si(o),renderSubmitted:(c,l,u)=>ii(c,u,e.message)},i)}var de=class extends Error{constructor(e){super(e),this.name="Eta Error"}},Dn=class extends de{constructor(e){super(e),this.name="EtaParser Error"}},ai=class extends de{constructor(e){super(e),this.name="EtaRuntime Error"}};var ci=class extends de{constructor(e){super(e),this.name="EtaNameResolution Error"}};function W(e,t,n){let r=t.slice(0,n).split(/\n/),s=r.length,o=r[s-1].length+1;throw e+=" at line "+s+" col "+o+`:
14
+ `)}}}async function qn(e,t,n){let r=t?.argv??process.argv.slice(2),s={...Io,...t?.io},o=new AbortController,i=t?.signal?AbortSignal.any([t.signal,o.signal]):o.signal,a=void 0,c=async()=>{let l;try{l=X(e,n)}catch(d){if(zn(d))return process.exitCode=le,le;return s.stderr(ht(d)),process.exitCode=1,1}let m=Number.NEGATIVE_INFINITY,w=le,u=(d)=>{if(!o.signal.aborted){if(m=performance.now(),!i.aborted)w=qe[d].exitCode;o.abort(new DOMException(qe[d].message,"AbortError"));return}if(performance.now()-m<jo)return;if(process.removeListener(d,u),process.listenerCount(d)===0)process.kill(process.pid,d)};for(let d of dn)if(!se(d))process.on(d,u);let p=Ln(s),f,g;try{await Hn({argv:r},l,p,i,{onEvent:t?.onEvent},(d)=>{f=d},async(d,h)=>{g={error:d};let v=Ye(d)!==void 0;return process.exitCode=v?w:1,hn(d,r,l,p,i,h)})}catch(d){let h;try{if(g&&!Object.is(d,g.error)&&pt(d)&&Object.is(d.suppressed,g.error))h={error:d.error}}catch{}if(h)Gn(h.error,p,"Cleanup failed");let v=Ye(d)===void 0?1:w;if(process.exitCode=v,!g)await hn(d,r,l,p,i,f),process.exitCode=v;return v}finally{for(let d of dn)process.removeListener(d,u)}return 0};return await(Po(t?.io)?Pe(s,c):c())}var b,Ls,Us,vn,On,ro,M,ot,it,at,He,ln,un,Io,jo=50,le=130,qe,dn,mn,pn;var bt=_(()=>{ke();q();tn();rn();b=class extends Error{code;details;cause;constructor(e,t,...n){super(t);this.name="CrustError",this.code=e,this.details=n[0]}static[Symbol.hasInstance](e){return Function.prototype[Symbol.hasInstance].call(this,e)}is(e){return Object.is(this.code,e)}withCause(e){return this.cause=e,this}toJSON(){return{code:this.code,message:this.message,details:this.details}}},Ls=/^(0|[1-9]\d*)$/;Us={command:"Command",context:"Context",extension:"Extension"};vn=Symbol("crust.defining");On=Symbol.for("crust.contextSources");ro={string:"a string",path:"a string",number:"a number",boolean:"a boolean",url:"a URL",json:"a JSON value"};M=Symbol.for("crust.commandDefinition");ot=new WeakMap,it=new WeakMap,at=new WeakMap;He=new WeakMap;ln=new WeakMap,un=new WeakMap;Io={stdout:(e)=>H(1,`${e}
15
+ `),stderr:(e)=>H(2,`${e}
16
+ `)};qe={SIGINT:{message:"Interrupted by SIGINT.",exitCode:le},SIGTERM:{message:"Terminated by SIGTERM.",exitCode:143}},dn=Object.keys(qe);mn=new WeakMap,pn=new WeakMap});function Yn(e){let{existsSync:t,statSync:n}=process.getBuiltinModule("node:fs"),{dirname:r,join:s,resolve:o}=process.getBuiltinModule("node:path"),i=o(e);if(t(i)&&!n(i).isDirectory())i=r(i);while(!0){if(t(s(i,"package.json")))return i;let a=r(i);if(a===i)return null;i=a}}var Kn=()=>{};function Mo(){let{Bun:e}=globalThis,t=e?.main??"";return t.startsWith("/$bunfs/")||/^[A-Za-z]:[\\/]~BUN[\\/]/.test(t)||process.getBuiltinModule?.("node:sea")?.isSea()===!0}function Do(){return!0}function wt(e){if(e===""||e==="."||e===".."||/[\\/]/.test(e))throw Error(`Artifact name must be a single directory name, got ${JSON.stringify(e)}.`);let{dirname:t,join:n,resolve:r}=process.getBuiltinModule("node:path");if(Mo())return n(t(process.execPath),e);if(Do())return r(process.getBuiltinModule("node:url").fileURLToPath(import.meta.url),"..","..",e);let s=process.env[Ro];if(s)return n(s,e);let o=process.argv[1],i=o;if(o)try{i=process.getBuiltinModule("node:fs").realpathSync(o)}catch(c){throw Error(`Could not resolve artifact "${e}": could not resolve source entrypoint "${o}".`,{cause:c})}let a=i?Yn(i):null;if(!a)throw Error(`Could not resolve artifact "${e}": no package.json was found above ${o?`entrypoint "${o}"`:"process.argv[1] (unset)"}.`);return n(a,".crust","root",e)}var Ro="CRUST_INTERNAL_BUILD_OUT_DIR";var Xn=_(()=>{Kn()});function er(e){let t=Object.freeze(Xe(e.flags));Xe(e.provide.flatMap((i)=>Object.entries(i.ownedFlags)),t);let n=Object.freeze({id:e.id,flags:t,commands:Object.freeze([...e.commands]),use:Object.freeze([...e.use]),provide:Object.freeze([...e.provide]),hooks:Object.freeze({...e.hooks}),handlers:Object.freeze({...e.handlers}),...e.sections?{sections:e.sections}:{},...e.build?{build:e.build}:{}}),r=(i)=>er({...e,...i}),s={id:e.id,use:(...i)=>r({use:[...e.use,...i.map(R)]}),provide:(...i)=>r({provide:[...e.provide,...i.map(R)]}),flags:(i)=>r({flags:[...e.flags,...Ke(i).map(([a,c])=>[a,ge(c,"flag",a)])]}),add:(...i)=>r({commands:[...e.commands,...i]}),setup:(i)=>r({hooks:{...e.hooks,setup:i}}),renderer:(i)=>r({hooks:{...e.hooks,renderer:i}}),preRun:(i)=>r({hooks:{...e.hooks,preRun:i}}),handle:(i,a,c={})=>{if(!Object.hasOwn(t,i))throw new b("DEFINITION",`Extension "${e.id}" handles flag "--${i}", which it does not own`,{subject:"extension",name:e.id,reason:"unknown-handle-flag"});return r({handlers:{...e.handlers,[i]:{eager:c.eager??!1,run:a}}})},noAction:(i)=>r({hooks:{...e.hooks,noAction:i}}),postRun:(i)=>r({hooks:{...e.hooks,postRun:i}}),onError:(i)=>r({hooks:{...e.hooks,onError:i}}),sections:(i)=>r({sections:i}),build:(i)=>r({build:i}),factory:(i)=>Object.assign((...a)=>{let c=i(o,...a),l=R(c).id;if(l!==e.id)throw new b("DEFINITION",`Extension factory "${e.id}" returned Extension "${l}"; return an Extension built from the handle it receives`,{subject:"extension",name:e.id,reason:"factory-id-mismatch"});return c},{id:e.id})},o=yn(s,n);return o}function yt(e){return er({id:e,use:[],provide:[],flags:[],commands:[],hooks:{},handlers:{}})}function Ot(e){if(!e||e!==e.trim())throw new b("DEFINITION","Extension id must be a non-empty, trimmed string",{subject:"extension",reason:"empty-id"});return e}function zo(e){let t=e.addedChildren,n=t===void 0?void 0:vt.get(t);if(n!==void 0)return vt.delete(t),n;let r=new Set;for(let{meta:s}of K(e)){r.add(s.name);for(let o of s.aliases??[])r.add(o)}return r}function Z(e,t,n){let r=e[M],s=e.name,o=n?`Extension "${n}" command "${s}"`:`Command "${s}"`,i=(m)=>({subject:n?"extension":"command",name:n??s,reason:m}),a=new ve(s);if(r.inline){for(let[m,w]of Object.entries(t.ownedFlags))P(a._node,m,w,"owned");a._node.flagContexts=t.flagContexts,a._node.inheritedDemands=[...t.inheritedDemands,...Y(t.demands)]}a._node.contexts=t.contexts.map((m)=>({...m}));let c=r.recipe(a);if(!(c instanceof ve)||c._ancestorOwnedFlags!==a._ancestorOwnedFlags)throw new b("DEFINITION",`${o} definition must return the same command builder it received`,i("foreign-command-builder"));if(c._node.extensions.length>0)throw new b("DEFINITION",`${o} cannot register Extensions inside command definitions`,i("nested-command-extension"));let l=lt(c._node);return be(l.contexts.map(({instance:m})=>m),l.demands),l.meta={name:s,...r.meta},l}function tr(e,t=[]){if(e.trim()==="")throw new b("DEFINITION","Command name must be a non-empty string",{subject:"command",name:e,reason:"empty-name"});if(e==="__proto__")throw new b("DEFINITION",'Command name "__proto__" is reserved',{subject:"command",name:e,reason:"reserved-name"});if(t.includes(e))throw new b("DEFINITION",`Command "${e}" must not list its own canonical name as an alias`,{subject:"command",name:e,reason:"alias-collision"});return e}function Zn(e,t=[]){if(tr(e,t),!he(e))throw new b("DEFINITION",`Command name "${e}" must not contain whitespace or start with "-"`,{subject:"command",name:e,reason:"invalid-name"});return e}function Bo(e){return typeof e==="function"}function nr(e,t,n){let r=!Bo(t),s=r?t:{},o=r?n:t,i=Zn(e,s.aliases);for(let p of s.aliases??[])if(!he(p))throw new b("DEFINITION",`Command "${i}" has an invalid alias "${p}"`,{subject:"command",name:i,reason:"invalid-alias"});let{sections:a,version:c,...l}=s,m={...l,...s.aliases?{aliases:[...s.aliases]}:{},...a?{sections:tt(i,a)}:{}},w={name:i,recipe:o,meta:m},u=(p)=>Object.freeze({name:p,as:(f)=>u(Zn(f,m.aliases)),[M]:Object.freeze({...w,name:p})});return u(i)}function Uo(e){return e.filter((t,n)=>e.findLastIndex((r)=>r.id===t.id)===n)}async function Qn(e,t,n){let r=n[0]??{},s=n[1];return await Jn(e,{path:t,input:r},s,Z)}var vt,ve=class{_node;_ancestorOwnedFlags;constructor(e,...t){let n=t[0]??{},r=tr(e);if(this._node=Nn(r),n.description!==void 0)this._node.meta.description=n.description;if(n.version!==void 0)this._node.meta.version=n.version;if(n.usage!==void 0)this._node.meta.usage=n.usage;if(n.sections!==void 0)this._node.meta.sections=tt(r,n.sections);this._ancestorOwnedFlags={}}_clone(e){let t=Object.create(Object.getPrototypeOf(this));return t._node={...this._node,...e},t._ancestorOwnedFlags=this._ancestorOwnedFlags,t}flags(e){let t=this._clone(G(this._node));for(let[n,r]of Ke(e))P(t._node,n,r,"local");return t}args(...e){let t=[...this._node.args,...e.map(bn)],n=new Set;for(let[r,s]of t.entries()){if(n.has(s.name))throw new b("DEFINITION",`Argument name "${s.name}" is already defined`,{subject:"argument",name:s.name,reason:"duplicate-arg"});if(n.add(s.name),s.variadic===!0&&r!==t.length-1)throw new b("DEFINITION",`Only the last positional argument can be variadic; "${s.name}" is not last`,{subject:"argument",name:s.name,reason:"variadic-position"})}return this._clone({args:t})}use(...e){let t=[],n=[];for(let s of e){if("contextName"in s){t.push(R(s));continue}if(typeof s==="function"){n.push(s.id);for(let{instance:a,extension:c}of this._node.contexts)if(c===s.id)t.push(a);continue}let{id:o,provide:i}=R(s);n.push(o),t.push(...i)}let r=this._clone({...G(this._node),demands:[...this._node.demands,...t],usedExtensions:[...this._node.usedExtensions,...n]});return rt(r._node,Y(t)),r}provide(...e){let t=e.map(R);be([...this._node.extensions.flatMap((o)=>o.provide),...this._node.contexts.map(({instance:o})=>o),...t],t);let n=this._clone({...G(this._node),contexts:[...this._node.contexts,...t.map((o)=>({instance:o}))],providedContexts:[...this._node.providedContexts,...t]}),r=_n([...this._node.inheritedDemands,...Y(this._node.demands)]),s;for(let o of t){let i=Object.keys(o.ownedFlags);if(i.length===0||r.has(o.name))continue;for(let a of i)P(n._node,a,o.ownedFlags[a],"owned");s??=new Map(this._node.flagContexts),s.set(o.name,[...s.get(o.name)??[],...i])}if(s)n._node.flagContexts=s;return n}output(e){return this._clone({outputSchema:e})}action(e){return this._clone({run:e})}extend(...e){let t=e.map(R),n=Uo([...this._node.extensions,...t]),r=new Map(this._node.extensionPositions);for(let s of t)r.set(s.id,this._node.contexts.length);return this._clone({extensions:n,extensionPositions:r})}add(...e){return this._addDefinitions(e)}command(e,t){let n=nr(e,t),r=Object.freeze({...n[M],inline:!0});return this._addDefinitions([{...n,[M]:r}])}_addDefinitions(e){let t=this._node.addedChildren,n=zo(this._node),r=this._node;for(let s of e){let o=[s.name,...s[M].meta.aliases??[]];if(o.some((a)=>n.has(a)))throw new b("DEFINITION",`Command name "${s.name}" is already registered on this command`,{subject:"command",name:s.name,reason:"command-collision"});let i;t={name:s.name,meta:{name:s.name,...s[M].meta},resolve:()=>i??=Z(s,r),next:t,definition:s,parent:r};for(let a of o)n.add(a)}if(t!==void 0)vt.set(t,n);return this._clone({addedChildren:t})}async snapshot(){return ft(X(this._node,Z).rootNode)}async run(e,...t){return await Qn(this._node,e,t)}at(e){gt(X(this._node,Z).rootNode,e);let t=this._node,n=Object.freeze([...e]);return{path:n,async run(...r){return await Qn(t,n,r)}}}async execute(e){return await qn(this._node,e,Z)}};var xt=_(()=>{bt();Xn();vt=new WeakMap});function Wo(e){return typeof e==="number"&&!Number.isFinite(e)}function Vo(e){if(Wo(e))return String(e);if(Array.isArray(e))return e.map(String).join(", ");return JSON.stringify(e)??String(e)}function St(e,t,n,r=(o)=>o,s){let o=e?[e]:[];if(s!==void 0)o.push(r(`[env: ${s}]`));if(t!==void 0)o.push(r(`[default: ${Vo(t)}]`));if(n?.length)o.push(r(`[choices: ${n.join(", ")}]`));return o.join(" ")}function Ho(e){let t=e.variadic?`${e.name}...`:e.name;return e.required?`<${t}>`:`[${t}]`}function Go(e){return Object.entries(e).map(([t,n])=>{let r=[t,...n.aliases??[]];return Object.freeze({name:t,spellings:Object.freeze([...n.short?[`-${n.short}`]:[],...r.flatMap((s)=>s.length===1?[`-${s}`]:[]),...r.map((s)=>`--${s}`),...n.negatable?r.map((s)=>`--no-${s}`):[]]),short:n.short,aliases:Object.freeze([...n.aliases??[]]),negatable:n.negatable,type:n.type,description:n.description,required:n.required===!0,multiple:n.multiple===!0,choices:n.choices,default:n.default,env:n.env,delimiter:n.delimiter})})}function Et(e,t=[e.meta.name]){let n=e.args.map((a)=>Object.freeze({...a,token:Ho(a),required:a.required===!0,variadic:a.variadic===!0})),r=Object.entries(e.subCommands).flatMap(([a,c])=>Qe(c)?[Et(c,[...t,a])]:[]),s=Go(e.flags),o=e.meta.usage?[{kind:"custom",text:e.meta.usage}]:[{kind:"path",text:t.join(" ")},...r.length>0&&!e.hasAction?[{kind:"command",text:"<command>"}]:[],...n.map((a)=>({kind:"arg",text:a.token,required:a.required})),...s.length>0?[{kind:"options",text:"[options]"}]:[]],i=o.map((a)=>a.text).join(" ");return Object.freeze({name:e.meta.name,path:Object.freeze([...t]),description:e.meta.description,aliases:Object.freeze([...e.meta.aliases??[]]),usage:i,usageSegments:Object.freeze(o.map((a)=>Object.freeze(a))),hasAction:e.hasAction,args:Object.freeze(n),flags:Object.freeze(s),sections:Object.freeze([...e.meta.sections??[]]),children:Object.freeze(r)})}function sr(e){return Jo.test(e)}var Jo,rr='letters, digits, ".", "_", and "-", starting with a letter or digit';var Ct=_(()=>{bt();Jo=/^[A-Za-z0-9][A-Za-z0-9._-]*$/});function lr(e){let t=[...B];B.clear(),fr();for(let n of t)n.onSignal(e);if(process.listenerCount(e)===0)process.kill(process.pid,e)}function ur(){for(let e of B)e.onExit()}function fr(){for(let e of cr)process.removeListener(e,lr);process.removeListener("exit",ur)}function qo(e){if(B.size===0){for(let t of cr)if(!se(t))process.prependListener(t,lr);process.on("exit",ur)}return B.add(e),()=>{if(B.delete(e)&&B.size===0)fr()}}function Ko(e){let t=e.replace(/(?=(\\+?)?)\1"/g,"$1$1\\\"");return t=t.replace(/(?=(\\+?)?)\1$/g,"$1$1"),t=`"${t}"`.replace(It,"^$1"),t.replace(It,"^$1")}function Xo(e,t,n,r=process.platform){if(n||r!=="win32"||!/\.(cmd|bat)$/i.test(e))return null;let s=process.getBuiltinModule("node:path").win32.normalize(e);for(let[i,a]of[s,...t].entries())if(Yo.test(a)){let c=i===0?"command":`argument ${i}`;throw Error(`Windows command shim ${c} ${JSON.stringify(a)} contains unsafe shell characters`)}let o=[s.replace(It,"^$1"),...t.map(Ko)].join(" ");return{command:process.env.ComSpec??"cmd.exe",args:["/d","/s","/c",`"${o}"`],windowsVerbatimArguments:!0}}function ir(e){if(e.pid===void 0)return;if(process.platform==="win32"){if(e.exitCode===null&&e.signalCode===null){let{spawnSync:t}=process.getBuiltinModule("node:child_process"),n=t("taskkill",["/pid",String(e.pid),"/T","/F"],{stdio:"ignore",timeout:1e4});if(n.error||n.status!==0)e.kill("SIGKILL")}return}try{process.kill(-e.pid,"SIGKILL")}catch(t){if(V(t)&&t.code==="ESRCH")return;throw e.kill("SIGKILL"),t}}async function Q(e,t=[],n={}){let r=Xo(e,t,n.shell),s=(n.stdio??"collect")==="collect",o=s&&n.stdout!=="ignore",i=n.timeout!==void 0&&process.platform!=="win32",{spawn:a}=process.getBuiltinModule("node:child_process"),c=a(r?.command??e,r?.args??t,{cwd:n.cwd,env:n.env,shell:n.shell,stdio:s?["ignore",o?"pipe":"ignore","pipe"]:"inherit",detached:i,windowsVerbatimArguments:r?.windowsVerbatimArguments}),l=[e,...t].join(" "),m,w=new Promise((h,v)=>{m=(y,x)=>{let O=Error(y);try{ir(c)}catch(S){O=Error(`Process-tree cleanup failed after ${x}.`,{cause:S})}c.stdout?.destroy(),c.stderr?.destroy(),v(O)}}),u=n.timeout,p=u===void 0?void 0:setTimeout(()=>m(`${l} did not exit within ${u} ms and was killed.`,"timeout"),u),f=i?qo({onSignal:(h)=>m(`${l} was interrupted by ${h}.`,h),onExit:()=>{try{ir(c)}catch{}}}):()=>{},{text:g}=process.getBuiltinModule("node:stream/consumers"),{once:d}=process.getBuiltinModule("node:events");try{let[h,v,[y]]=await Promise.race([Promise.all([o?g(c.stdout):"",s?g(c.stderr):"",d(c,"close")]),w]);return{exitCode:y,stdout:h,stderr:v}}finally{clearTimeout(p),f()}}function ar(e){let{accessSync:t,constants:n,statSync:r}=process.getBuiltinModule("node:fs");try{return t(e,n.X_OK),r(e).isFile()}catch{return!1}}function jt(e){let{delimiter:t,extname:n,join:r,resolve:s,sep:o}=process.getBuiltinModule("node:path");if(e.includes(o)||e.includes("/"))return ar(e)?e:null;let i=process.platform==="win32"&&!n(e)?(process.env.PATHEXT??".EXE;.CMD;.BAT;.COM").split(";"):[""];for(let a of process.env.PATH?.split(t)??[])for(let c of i){let l=s(r(a,e+c));if(ar(l))return l}return null}var cr,B,Yo,It;var dr=_(()=>{oe();ke();cr=["SIGINT","SIGTERM","SIGHUP","SIGQUIT"],B=new Set;Yo=/[\0\r\n"%!^`<>&|]/,It=/([()\][%!^"`<>&|;, *?])/g});function mr(e){if(e?.startsWith("bun"))return"bun";if(e?.startsWith("pnpm"))return"pnpm";if(e?.startsWith("yarn"))return"yarn";if(e?.startsWith("npm"))return"npm";return null}var pr=()=>{};function wi(e){return e>=4352&&(e<=4447||e===9001||e===9002||e>=11904&&e<=42191&&e!==12351||e>=44032&&e<=55203||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65135||e>=65280&&e<=65376||e>=65504&&e<=65510||e>=94176&&e<=111355||e>=127488&&e<=127743||e>=131072&&e<=262141)}function vi(e){return hi.test(String.fromCodePoint(e))||e>=4448&&e<=4607||e>=55216&&e<=55295}function yi(e){if(!Ir.test(e))return e.length;let t=e.replace(bi,"");if(!Ir.test(t))return t.length;Cr??=new Intl.Segmenter(void 0,{granularity:"grapheme"});let n=0;for(let{segment:r}of Cr.segment(t)){if(gi.test(r)){let s=r.codePointAt(0);n+=r.length===2&&s>=127462&&s<=127487?1:2;continue}for(let s of r){let o=s.codePointAt(0);if(vi(o))continue;n+=wi(o)?2:1;break}}return n}function D(e){return globalThis.Bun?.stringWidth(e,{countAnsiEscapeCodes:!1})??yi(e)}function $r(e,t,n=" "){let r=D(e);if(r>=t)return e;return e+n.repeat(t-r)}function xi(e){return Object.hasOwn(Nr,e)}function ye(e,t,n){return e!==void 0&&t in e?e[t]:n}function Tr(e){return(e!==void 0&&"isTTY"in e?e.isTTY:process.stdout?.isTTY)??!1}function kr(e){return ye(e,"forceColor",process.env.FORCE_COLOR)}function Fr(e){return e==="0"||e==="false"}function Si(e){let t=e.toLowerCase();return t.includes("24bit")||t.includes("truecolor")||t.endsWith("-direct")}function Pr(e,t){if(e!==void 0){let n=e.toLowerCase();if(n==="truecolor"||n==="24bit")return!0}return t!==void 0&&Si(t)}function jr(e,t){if(Pr(e,t))return"truecolor";if(t!==void 0&&t.toLowerCase().includes("256color"))return"256";return"16"}function Rr(e,t){if(e==="never")return"none";if(e==="always")return"truecolor";let n=ye(t,"colorTerm",process.env.COLORTERM),r=ye(t,"term",process.env.TERM),s=kr(t);if(s!==void 0){if(Fr(s))return"none";if(s==="1")return"16";if(s==="2")return"256";if(s==="3")return"truecolor";return jr(n,r)}if(!Tr(t))return"none";let o=ye(t,"noColor",process.env.NO_COLOR);if(o!==void 0&&o!=="")return"none";if(r!==void 0&&r.toLowerCase()==="dumb"&&!Pr(n,r))return"none";return jr(n,r)}function Mr(e,t){if(e==="always")return!0;if(e==="never")return!1;let n=kr(t);if(n!==void 0)return!Fr(n);return Tr(t)}function Ei(e,t){if(e==null)return"";let n=String(e);if(n==="")return"";let{open:r,close:s}=t;if(n.includes(s))n=n.replaceAll(s,s+r);return r+n+s}function Ci(e){return Array.isArray(e)&&"raw"in e&&Array.isArray(e.raw)}function Ii(e,t){if(!Ci(e))return e;let n="";for(let r=0;r<e.length;r++)if(n+=e[r]??"",r<t.length)n+=String(t[r]);return n}function Tt(e,t){return(n,...r)=>{let s=Ii(n,r);return t()?Ei(s,e):s==null?"":String(s)}}function Oe(e){let t=e?.mode??"auto",n=Mr(t,e?.overrides),r=Rr(t,e?.overrides)!=="none",s=()=>n,o=()=>r;return Object.freeze(Object.fromEntries(Ar.map((i)=>[i,Tt(Oi[i],xi(i)?s:o)])))}function Dr(e,t){return Tt({open:`\x1B[${e}m`,close:`\x1B[${t}m`},Ni)}function ee(e,t){return Tt({open:`\x1B[${e}m`,close:`\x1B[${t}m`},_i)}var Cr,Ir,hi,gi,bi,Nr,_r,Ar,Oi,ji="\x1B]",$i="\x1B\\",Rc,Ni=()=>Mr("auto"),_i=()=>Rr("auto")!=="none",xe,U,kt,Lr,L,F,W;var Se=_(()=>{Ir=/[^\x20-\x7e]/,hi=/[\p{Cc}\p{Cf}\p{Mn}\p{Me}]/u,gi=/\p{Emoji_Presentation}|\p{Emoji}\uFE0F/u,bi=new RegExp([String.raw`(?:\x1b\[|\x9b)[^\x1b\x18\x1a\x9c\x40-\x7e]*[\x40-\x7e\x18\x1a\x9c]?`,String.raw`(?:\x1b\]|\x9d)[^\x07\x1b\x18\x1a\x9c]*(?:\x07|\x1b\\|[\x18\x1a\x9c])?`,String.raw`(?:\x1b[PX^_]|[\x90\x98\x9e\x9f])[^\x1b\x18\x1a\x9c]*(?:\x1b\\|[\x18\x1a\x9c])?`,String.raw`\x1b[\x20-\x2f][^\x1b]?`,String.raw`\x1b[\x18\x1a\x9c\x30-\x7e]?`].join("|"),"g");Nr={bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},_r=Object.assign({},Nr,{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],gray:[90,39],brightRed:[91,39],brightGreen:[92,39],brightYellow:[93,39],brightBlue:[94,39],brightMagenta:[95,39],brightCyan:[96,39],brightWhite:[97,39],bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBrightBlack:[100,49],bgBrightRed:[101,49],bgBrightGreen:[102,49],bgBrightYellow:[103,49],bgBrightBlue:[104,49],bgBrightMagenta:[105,49],bgBrightCyan:[106,49],bgBrightWhite:[107,49]}),Ar=Object.freeze(Object.keys(_r)),Oi=Object.freeze(Object.fromEntries(Ar.map((e)=>{let[t,n]=_r[e];return[e,{open:`\x1B[${t}m`,close:`\x1B[${n}m`}]})));Rc=`${ji}8;;${$i}`;xe=ee(31,39),U=ee(32,39),kt=ee(33,39),Lr=ee(35,39),L=ee(36,39),F=Dr(1,22),W=Dr(2,22)});function zr(e,t){return t?kt(e):W(kt(e))}function Fi(e){switch(e.kind){case"path":case"custom":return U(e.text);case"command":case"options":return L(e.text);case"arg":return zr(e.text,e.required)}}function Ft(e,t,n){if(n.length===0)return[];let r=Math.max(t,...n.map(([s])=>D(s)+1));return[F(L(`${e}:`)),...n.map(([s,o])=>` ${$r(s,r)} ${o}`.trimEnd())]}function Pi(e){let t=U(e.name);return e.aliases.length===0?t:`${t} (${e.aliases.join(", ")})`}function Br(e,t,n){let r=Et({...e,subCommands:Object.fromEntries(Object.entries(e.subCommands).map(([i,{meta:a}])=>[i,{meta:{name:a.name,description:a.description,aliases:a.aliases,hidden:a.hidden},hasAction:!1,args:[],flags:{},subCommands:{}}]))},t),s=r.path.join(" "),o=[r.description?`${F(s)} - ${W(r.description)}`:F(s),"",F(L("Usage:")),` ${r.usageSegments.map(Fi).join(" ")}`];for(let i of[Ft("Commands",ki,r.children.map((a)=>[Pi(a),a.description??""])),Ft("Arguments",Ti,r.args.map((a)=>[zr(a.token,a.required),St(a.description,a.default,a.choices,W)])),Ft("Options",Ai,r.flags.map((a)=>[L(a.spellings.join(", ")+(a.type==="boolean"?"":` <${a.type}>`)),St(a.description,a.default,a.choices,W,a.env?.name)]))])if(i.length>0)o.push("",...i);for(let i of et(r.sections,n))o.push("",F(L(`${i.title}:`)),...i.body.split(`
17
+ `).map((a)=>` ${a}`));return o.join(`
18
+ `)}var Ai=28,Ti=18,ki=10;var Ur=_(()=>{Ct();Se()});import*as z from"node:readline";function rs(e){return{prefix:e.cyan,message:e.bold,placeholder:e.dim,cursor:e.cyan,selected:e.cyan,unselected:e.dim,error:e.red,success:e.green,hint:e.dim,filterMatch:e.cyan}}function Ki(e){if((e.isTTY??!1)===(process.stdout?.isTTY??!1))return Yi;return rs(Oe({overrides:{isTTY:e.isTTY}}))}function Ie(e){let t=ae();return{input:e?.input??t?.input??process.stdin,output:e?.output??t?.output??process.stderr}}function Bt(e){return{[zt]:e}}function Qi(e,t){let n=e.split(`
19
+ `),r=0;for(let s of n){let o=D(s);r+=o===0?1:Math.ceil(o/t)}return r}function Lt(e=Ie().input){return!!e.isTTY}function es(e=Ie().input){if(!Lt(e))throw new ea}function ta(e){return typeof e==="object"&&e!==null&&zt in e}function Ut(e,t){let{render:n,handleKey:r,initialState:s,renderSubmitted:o}=e,{input:i,output:a}=Ie(t),c={...Ki(a),...e.theme},l=a;return new Promise((m,w)=>{if(Mt.has(i)||Dt.has(a)){w(Error("Cannot run multiple prompts concurrently on the same input or output stream. Await each prompt before starting the next."));return}es(i),es(a),Mt.add(i),Dt.add(a);let u=s,p=0,f=!1,g=!1;function d(){if(f)return;if(f=!0,process.removeListener("exit",d),Mt.delete(i),Dt.delete(a),i.removeListener("keypress",S),g)i.setRawMode?.(!1);i.pause(),a.write(Zi)}function h(E){let I=a.columns||80;if(p>0)z.cursorTo(l,0),z.moveCursor(l,0,-(p-1)),z.clearScreenDown(l);a.write(E),p=Qi(E,I)}let v=Promise.resolve(),y=null;function x(){if(y!==null)return;y=setTimeout(()=>{if(y=null,f)return;try{h(n(u,c))}catch(E){d(),w(E)}},0)}function O(){if(y!==null)clearTimeout(y),y=null}function S(E,I){if(I?.ctrl&&I.name==="c"){O(),a.write(`
20
+ `),d(),w(new DOMException("Prompt was cancelled.","AbortError"));return}let k={char:E??"",name:I?.name==="enter"?"return":I?.name??"",ctrl:I?.ctrl??!1,meta:I?.meta??!1,shift:I?.shift??!1};v=v.then(async()=>{if(f)return;try{let A=await r(k,u);if(f)return;if(ta(A)){O();let ne=A[zt];if(o)h(o(u,ne,c));a.write(`
21
+ `),d(),m(ne)}else u=A,x()}catch(A){O(),d(),w(A)}})}try{if(z.emitKeypressEvents(i),i.setRawMode)i.setRawMode(!0),g=!0;i.resume(),a.write(Xi),process.once("exit",d),h(n(u,c)),i.on("keypress",S)}catch(E){d(),w(E)}})}async function na(e,t){let n=await e["~standard"].validate(t),r=n.issues?.[0];if(r)return{ok:!1,error:r.message||"Validation failed"};if("value"in n)return{ok:!0,value:n.value};return{ok:!1,error:"Validation failed"}}async function os(e,t,n){if(t)return na(t,e);if(n)try{await n(e)}catch(r){return{ok:!1,error:r instanceof Error?r.message:"Validation failed"}}return{ok:!0,value:e}}async function Ce(e,t,n){if(e.initial!==void 0)return{shortCircuited:!0,value:n?await n(e.initial,"initial"):e.initial};let r=Ie(t);if(!(Lt(r.input)&&Lt(r.output))&&e.default!==void 0)return{shortCircuited:!0,value:n?await n(e.default,"default"):e.default};return{shortCircuited:!1,promptIO:r}}async function ra(e,t,n){if(t.schema!==void 0&&t.validate!==void 0)throw Error(`${e}() cannot combine "schema" with "validate"`);let{schema:r,validate:s}=t;if(!r&&!s)return Ce(t,n);return Ce(t,n,async(o,i)=>{let a=await os(o,r,s);if(!a.ok)throw Error(`${i} value rejected${r?" by schema":""}: ${a.error}`);return a.value})}function Wt(e,t,n){let r=[e];if(t)r.push(t);if(n)r.push(n);return r.join(" ")}function is(e,t,n,r){let s=t?`${e} ${t}`:e,o=r??"";if(t)return`${s}${o}
22
+ ${n}`;return`${s}${o} ${n}`}function sa(e,t,n,r,s){let o=Math.min(e.length,n),i=[];if(t>0)i.push(s("..."));for(let a=t;a<t+o;a++){let c=e[a];if(c===void 0)break;i.push(r(c,a))}if(t+o<e.length)i.push(s("..."));return i}function as(e,t,n,r){let s=Math.min(n,r);if(s===0)return 0;if(e<t)return e;if(e>=t+s)return e-s+1;return t}function oa(e,t,n,r,s){if(t===0)return{cursor:0,scrollOffset:0};let o=n===-1?e<=0?t-1:e-1:e>=t-1?0:e+1;return{cursor:o,scrollOffset:as(o,r,t,s)}}function ia(e){return e.map((t)=>{if(typeof t==="string")return{label:t,value:t};return t})}function aa(e,t){if(e.name==="return")return Bt(t.value);if(e.name==="left"||e.name==="right"||e.name==="tab")return{value:!t.value};if(e.name==="h"||e.char==="y"||e.char==="Y")return{value:!0};if(e.name==="l"||e.char==="n"||e.char==="N")return{value:!1};return t}function la(e,t,n,r,s){let o=t.prefix("┃"),i=t.message(n??"Are you sure?"),a=e.value?`${t.selected("●")} ${t.selected(r)}`:`${t.unselected("○")} ${t.unselected(r)}`,c=e.value?`${t.unselected("○")} ${t.unselected(s)}`:`${t.selected("●")} ${t.selected(s)}`;return is(o,i,`${a}${ca}${c}`)}function ua(e,t,n,r,s){let o=t.success("✓"),i=t.message(n??"Are you sure?"),a=e?r:s;return Wt(o,i,t.success(a))}async function je(e,t){let n=await Ce(e,t);if(n.shortCircuited)return n.value;let{promptIO:r}=n,s=e.active??"Yes",o=e.inactive??"No";return Ut({initialState:{value:e.default??!0},theme:e.theme,render:(i,a)=>la(i,a,e.message,s,o),handleKey:aa,renderSubmitted:(i,a,c)=>ua(a,c,e.message,s,o)},r)}function fa(e,t,n,r){if(e==="")return r?n.placeholder(r):n.cursor("│");return`${e.slice(0,t)}${n.cursor("│")}${e.slice(t)}`}function ts(e,t){return(e.codePointAt(t)??0)>65535?2:1}function ns(e,t){return t>=2&&(e.codePointAt(t-2)??0)>65535?2:1}function da(e){let t=e.codePointAt(0);return t!==void 0&&e.length===(t>65535?2:1)&&(t<55296||t>57343)&&t>=32&&(t<127||t>159)}function ma(e,t,n){if(e.name==="backspace"){if(n===0)return{text:t,cursorPos:n};let r=n-ns(t,n);return{text:t.slice(0,r)+t.slice(n),cursorPos:r}}if(e.name==="delete"){if(n>=t.length)return{text:t,cursorPos:n};let r=n+ts(t,n);return{text:t.slice(0,n)+t.slice(r),cursorPos:n}}if(e.name==="left"){if(n===0)return{text:t,cursorPos:n};return{text:t,cursorPos:n-ns(t,n)}}if(e.name==="right"){if(n>=t.length)return{text:t,cursorPos:n};return{text:t,cursorPos:n+ts(t,n)}}if(e.name==="home")return{text:t,cursorPos:0};if(e.name==="end")return{text:t,cursorPos:t.length};if(da(e.char)&&!e.ctrl&&!e.meta){let r=t.slice(0,n),s=t.slice(n);return{text:r+e.char+s,cursorPos:n+e.char.length}}return null}function pa(e,t,n){return async(r,s)=>{if(r.name==="return"){let i=await os(s.value===""&&n!==void 0?n:s.value,e,t);return i.ok?Bt(i.value):{...s,error:i.error}}let o=ma(r,s.value,s.cursorPos);return o?{value:o.text,cursorPos:o.cursorPos,error:null}:s}}async function ha(e,t,n){let r=await Ce(e,n);if(r.shortCircuited)return r;let s=ia(e.choices),o=e.maxVisible??10,i=new Set(t.flatMap((l)=>{let m=s.findIndex((w)=>w.value===l);return m===-1?[]:[m]})),a=t.length===0?-1:s.findIndex((l)=>l.value===t[0]),c=a===-1?0:a;return{shortCircuited:!1,choices:s,maxVisible:o,cursor:c,scrollOffset:as(c,0,s.length,o),selected:i,promptIO:r.promptIO}}function ga(e,t,n,r,s){let o=t.prefix("┃"),i=t.message(n??"Enter a value"),a=r??s,c=s!==void 0&&r!==void 0&&e.value===""?` ${t.hint(`(${s})`)}`:"",l=is(o,i,fa(e.value,e.cursorPos,t,a),c);if(e.error!==null)l+=`
23
+ ${t.error(e.error)}`;return l}function ba(e,t,n){return Wt(t.success("✓"),t.message(n??"Enter a value"),t.success(e))}async function cs(e={},t){let n=await ra("input",e,t);if(n.shortCircuited)return n.value;let{promptIO:r}=n;return Ut({initialState:{value:"",cursorPos:0,error:null},theme:e.theme,render:(s,o)=>ga(s,o,e.message,e.placeholder,e.default),handleKey:pa(e.schema,e.validate,e.default),renderSubmitted:(s,o,i)=>ba(s.value===""&&e.default!==void 0?e.default:s.value,i,e.message)},r)}function wa(e){return(t,n)=>{let r=n.choices.length;if(t.name==="return"){let s=n.choices[n.cursor];if(s)return Bt(s.value);return n}if(["up","down","k","j"].includes(t.name)){let s=t.name==="up"||t.name==="k"?-1:1;return{...n,...oa(n.cursor,r,s,n.scrollOffset,e)}}return n}}function va(e,t,n,r){let s=[`${t.prefix("┃")} ${t.message(n??"Pick an option")}`];return s.push(...sa(e.choices,e.scrollOffset,r,(o,i)=>{let a=o.hint?` ${t.hint(o.hint)}`:"";return i===e.cursor?`${t.cursor("›")} ${t.selected(o.label)}${a}`:` ${t.unselected(o.label)}${a}`},t.hint)),s.join(`
24
+ `)}function ya(e,t,n){let r=t.success("✓"),s=t.message(n??"Pick an option"),o=e.choices[e.cursor],i=o?o.label:"";return Wt(r,s,t.success(i))}async function Vt(e,t){let n=await ha(e,e.default===void 0?[]:[e.default],t);if(n.shortCircuited)return n.value;let{choices:r,cursor:s,maxVisible:o,promptIO:i,scrollOffset:a}=n;return Ut({initialState:{cursor:s,choices:r,scrollOffset:a},theme:e.theme,render:(c,l)=>va(c,l,e.message,o),handleKey:wa(o),renderSubmitted:(c,l,m)=>ya(c,m,e.message)},i)}var Yi,zt,Mt,Dt,ss="\x1B[",Xi,Zi,ea,ca=" · ";var ls=_(()=>{Se();q();Yi=rs({bold:F,cyan:L,dim:W,green:U,red:xe});zt=Symbol("submit");Mt=new WeakSet,Dt=new WeakSet,Xi=`${ss}?25l`,Zi=`${ss}?25h`;ea=class extends Error{constructor(e){super(e??"Prompts require an interactive terminal (TTY).");this.name="NonInteractiveError"}}});xt();Ct();import{existsSync as ys,readdirSync as Ba}from"node:fs";import{basename as xs,dirname as Os,isAbsolute as Ua,join as Wa,resolve as Ss}from"node:path";oe();import{existsSync as Zo,lstatSync as vr,mkdirSync as hr,readFileSync as Qo,readdirSync as yr,realpathSync as Nt,statSync as Or,writeFileSync as ei}from"node:fs";import{dirname as xr,join as J,resolve as gr,sep as ti}from"node:path";import{fileURLToPath as ni}from"node:url";function or(e,t){let{isAbsolute:n,relative:r,sep:s}=process.getBuiltinModule("node:path"),o=r(e,t);return o===""||!n(o)&&o!==".."&&!o.startsWith(`..${s}`)}dr();q();pr();import{spawn as ri,spawnSync as si}from"node:child_process";import{once as oi}from"node:events";function ii(e,t){return e.replace(/\{\{\s*(\w+)\s*\}\}/g,(n,r)=>Object.hasOwn(t,r)?t[r]??n:n)}function ai(e){let t=xr(e),n=e.slice(t==="."?0:t.length+1);if(n.startsWith("_")&&!n.startsWith("__")){let r=`.${n.slice(1)}`;return t==="."?r:J(t,r)}return e}function ci(e){return Or(e,{throwIfNoEntry:!1})?.isDirectory()===!0&&yr(e).length>0}function br(e,t){if(Nt(e)!==e)throw Error(`Destination root "${e}" was redirected outside the destination.`);let n=e;for(let r of t.split(ti)){n=J(n,r);let s;try{s=vr(n).isSymbolicLink()}catch(i){if(V(i)&&i.code==="ENOENT")return;throw i}if(!s)continue;let o;try{o=Nt(n)}catch{}if(o===void 0||!or(e,o))throw Error(`Destination path "${n}" is a symlink${o===void 0?" to a missing target":` to "${o}"`} outside the destination "${e}". Remove the link or choose another destination.`)}}async function Sr(e){let{template:t,dest:n,context:r,conflict:s="abort",render:o=ii}=e,i=t instanceof URL?ni(t):gr(t),a=gr(n),c=Or(i,{throwIfNoEntry:!1});if(!c)throw Error(`Template directory "${i}" does not exist (from template: "${String(t)}").`);if(!c.isDirectory())throw Error(`Template path "${i}" is not a directory (from template: "${String(t)}").`);if(s==="abort"&&ci(a))throw Error(`Destination directory "${a}" already exists and is non-empty. Use conflict: "overwrite" to proceed.`);let l=yr(i,{recursive:!0,encoding:"utf8"}).filter((p)=>vr(J(i,p)).isFile());hr(a,{recursive:!0});let m=Nt(a),w=l.map((p)=>({relFromTemplate:p,destRelPath:ai(p)}));for(let{destRelPath:p}of w)br(m,p);let u=[];for(let{relFromTemplate:p,destRelPath:f}of w){let g=J(i,p),d=J(m,f),h=Qo(g),v=h.subarray(0,8192).includes(0)?h:await o(h.toString("utf-8"),r);br(m,f),hr(xr(d),{recursive:!0}),ei(d,v,"utf-8"),u.push(f)}return{files:u}}var li=[["bun.lock","bun"],["bun.lockb","bun"],["pnpm-lock.yaml","pnpm"],["yarn.lock","yarn"],["package-lock.json","npm"]];function _t(e){let t=e??process.cwd();for(let[n,r]of li)if(Zo(J(t,n)))return r;return mr(process.env.npm_config_user_agent)??"npm"}function Er(e){try{return si("git",["rev-parse","--is-inside-work-tree"],{cwd:e??process.cwd(),stdio:"ignore"}).status===0}catch{return!1}}async function At(e,t,n={}){let r=n.stderr??((s)=>H(2,`${s}
25
+ `));for(let s of e)switch(s.type){case"install":await ui(t);break;case"git-init":await fi(t,s.commit);break;case"open-editor":await di(t,r);break;case"command":await mi(s.cmd,s.cwd??t)}}async function ui(e){let t=_t(e),n=jt(t);if(!n)throw Error(`Package manager "${t}" was not found on PATH. Install ${t} and try again.`);let{exitCode:r}=await Q(n,["install"],{cwd:e,stdio:"inherit"});if(r!==0)throw Error(`"${t} install" exited with code ${r}`)}async function fi(e,t){let n=jt("git");if(!n)throw Error('"git" was not found on PATH. Install Git and try again.');if(await $t(n,["init"],e,"git init"),t){let r=await pi(e,n);await $t(n,["add","."],e,"git add"),await $t(n,[...r,"commit","-m",t],e,"git commit")}}async function di(e,t){let n=process.env.EDITOR||"code",r;try{let s=ri(n,[e],{stdio:"ignore",shell:process.platform==="win32"});s.unref();let o=await Promise.race([oi(s,"close").then(([i])=>({kind:"exited",code:i})),new Promise((i)=>setTimeout(()=>i({kind:"timeout"}),500))]);if(o.kind==="exited"&&o.code!==0)r=`Warning: could not open editor "${n}" (exit code ${o.code})`}catch{r=`Warning: could not open editor "${n}"`}if(r!==void 0)t(r)}async function mi(e,t){let{exitCode:n}=await Q(e,[],{cwd:t,shell:!0,stdio:"inherit"});if(n!==0)throw Error(`Command "${e}" exited with code ${n}`)}async function pi(e,t){let n=[];if(!await wr(t,"user.name",e))n.push("-c","user.name=Crust");if(!await wr(t,"user.email",e))n.push("-c","user.email=crust@scaffolded.project");return n}async function wr(e,t,n){let{exitCode:r}=await Q(e,["config",t],{cwd:n,stdio:"collect",stdout:"ignore"});return r===0}async function $t(e,t,n,r){let{exitCode:s,stderr:o}=await Q(e,t,{cwd:n,stdio:"collect",stdout:"ignore"});if(s!==0)throw Error(`"${r}" failed with exit code ${s}${o?`: ${o.trim()}`:""}`)}xt();var Vr=Ot("crust:help");async function Ri(e,t){await Promise.resolve().then(() => Ur());return Br(e,t,Vr)}var Mi={help:{type:"boolean",short:"h",noNegate:!0,description:"Show help"}};async function Wr(e){e.stdout(await Ri(e.command,e.commandPath))}var Hr=yt(Vr).factory((e)=>e.flags(Mi).handle("help",Wr,{eager:!0}).noAction(Wr));var Di=Ot("crust:version"),Li={version:{type:"boolean",short:"v",noNegate:!0,description:"Show version number",recursive:!1}},Gr=yt(Di).factory((e,t,n={})=>{let{format:r}=n;return e.flags(Li).handle("version",(s)=>{let o=typeof t==="function"?t():t??s.rootCommand.meta.version,i=r==="plain"?o:r?r(o,s):`${s.rootCommand.meta.name} v${o}`;s.stdout(i)},{eager:!0})});Se();q();function Qr(e){return{spinner:e.magenta,message:e.bold,success:e.green,error:e.red}}var Hc=Qr({bold:F,green:U,magenta:Lr,red:xe});function zi(e){return Qr(Oe({overrides:{isTTY:e.isTTY}}))}var Pt="\x1B[",Bi=`${Pt}?25l`,Ee=`${Pt}?25h`,Jr=`${Pt}2K`,qr="\r",Yr={dots:{frames:["⠋","⠙","⠹","⠸","⠼","⠴","⠦","⠧","⠇","⠏"],interval:80},line:{frames:["-","\\","|","/"],interval:130},arc:{frames:["◐","◓","◑","◒"],interval:100},bounce:{frames:["⠁","⠂","⠄","⡀","⢀","⠠","⠐","⠈"],interval:120}},Ui="✓",Wi="✗";function Vi(e){if(e===void 0)return Yr.dots;if(typeof e==="string")return Yr[e];if(e.frames.length===0)throw Error("A custom spinner requires at least one frame");return e}function Hi(e,t){let n=e[t];if(n===void 0)throw Error("Spinner frame index is out of bounds");return n}var Kr,Xr=/\x1B\[[0-?]*[ -/]*[@-~]|\x1B\][^\x07\x1B]*(?:\x07|\x1B\\)/g,Gi=/[\n\v\f\x85]/;function Zr(e,t){Kr??=new Intl.Segmenter;let n=0,r=0,s=0;for(let o of[...e.matchAll(Xr),void 0]){let i=o?.index??e.length;for(let{segment:a,index:c}of Kr.segment(e.slice(s,i))){if(a==="\r")n=0;else if(Gi.test(a)||(n+=D(a))>t){let l=e.slice(r).match(Xr)?.join("")??"";return`${e.slice(0,r)}${t>0?"…":""}${l}`}if(n<t)r=s+c+a.length}if(o)s=i+o[0].length}return e}function Ji(e,t,n,r){let s=n==="success"?Ui:Wi;return`${r}${(n==="success"?t.success:t.error)(s)} ${t.message(e)}
26
+ `}function qi(e,t=()=>""){let n=e.sink??ae()?.output??Xt,r={...zi(n),...e.theme},s=n.isTTY??!1,{frames:o,interval:i}=Vi(e.spinner),a=e.sigint??"exit",c=e.message,l=0,m=!1,w=!1,u,p,f;function g(){let h=(n.columns||80)-1,v=`${r.spinner(Hi(o,l))} `,y=t(),x=h-D(v+r.message(y)),O=v+r.message(Zr(c,x)+y);n.write(Jr+qr+Zr(O,h))}function d(){if(u!==void 0)clearInterval(u),u=void 0;if(p)process.removeListener("SIGINT",p),p=void 0;if(f)process.removeListener("exit",f),f=void 0}return{start(){if(m||w)return;if(m=!0,!s)return;n.write(Bi),f=()=>n.write(Ee),process.once("exit",f);try{g()}catch(h){d();try{n.write(Ee)}catch{}throw h}if(u=setInterval(()=>{l=(l+1)%o.length,g()},i),a==="exit")p=()=>{if(d(),w=!0,n.write(Ee),process.listenerCount("SIGINT")===0)process.kill(process.pid,"SIGINT")},process.once("SIGINT",p)},updateMessage(h){if(w)return;if(c=h,m&&s)g()},stop(h="success",v){if(w)return;if(w=!0,v!==void 0)c=v;d();let y;try{let x=m&&s?Jr+qr:"";n.write(Ji(c+t(),r,h,x))}catch(x){y={error:x}}if(m&&s)try{n.write(Ee)}catch(x){if(!y)throw x}if(y)throw y.error}}}function Rt(e){let t=qi(e),{task:n}=e;if(!n)return t;return t.start(),Promise.resolve().then(()=>n(t)).then((r)=>(t.stop("success"),r),(r)=>{throw t.stop("error"),r})}ls();var Te=class extends Error{constructor(e){super(e),this.name="Eta Error"}},ds=class extends Te{constructor(e){super(e),this.name="EtaParser Error"}},Oa=class extends Te{constructor(e){super(e),this.name="EtaRuntime Error"}};var xa=class extends Te{constructor(e){super(e),this.name="EtaNameResolution Error"}};function te(e,t,n){let r=t.slice(0,n).split(/\n/),s=r.length,o=r[s-1].length+1;throw e+=" at line "+s+" col "+o+`:
20
27
 
21
28
  `+t.split(/\n/)[s-1]+`
22
- `+Array(o).join(" ")+"^",new Dn(e)}function li(e,t,n,r){let s=t.split(`
23
- `),o=Math.max(n-3,0),i=Math.min(s.length,n+3),a=r,c=s.slice(o,i).map((u,f)=>{let d=f+o+1;return(d===n?" >> ":" ")+d+"| "+u}).join(`
24
- `),l=new ai((a?a+":"+n+`
29
+ `+Array(o).join(" ")+"^",new ds(e)}function Sa(e,t,n,r){let s=t.split(`
30
+ `),o=Math.max(n-3,0),i=Math.min(s.length,n+3),a=r,c=s.slice(o,i).map((m,w)=>{let u=w+o+1;return(u===n?" >> ":" ")+u+"| "+m}).join(`
31
+ `),l=new Oa((a?a+":"+n+`
25
32
  `:"line "+n+`
26
33
  `)+c+`
27
34
 
28
- `+e.message);throw l.name=e.name,l.cause=e,l}var ui=(async()=>{}).constructor;function fi(e,t){let n=this.config,r=t?.async?ui:Function;try{return new r(n.varName,"options",this.compileToString.call(this,e,t))}catch(s){throw s instanceof SyntaxError?new Dn(`Bad template syntax
35
+ `+e.message);throw l.name=e.name,l.cause=e,l}var Ea=(async()=>{}).constructor;function Ca(e,t){let n=this.config,r=t?.async?Ea:Function;try{return new r(n.varName,"options",this.compileToString.call(this,e,t))}catch(s){throw s instanceof SyntaxError?new ds(`Bad template syntax
29
36
 
30
37
  `+s.message+`
31
38
  `+Array(s.message.length+1).join("=")+`
32
39
  `+this.compileToString.call(this,e,t)+`
33
- `):s}}function di(e,t){let n=this.config,r=t?.async,s=this.compileBody,o=this.parse.call(this,e),i=`${n.functionHeader}
40
+ `):s}}function Ia(e,t){let n=this.config,r=t?.async,s=this.compileBody,o=this.parse.call(this,e),i=`${n.functionHeader}
34
41
  let include = (__eta_t, __eta_d) => this.render(__eta_t, {...${n.varName}, ...(__eta_d ?? {})}, options);
35
42
  let includeAsync = (__eta_t, __eta_d) => this.renderAsync(__eta_t, {...${n.varName}, ...(__eta_d ?? {})}, options);
36
43
 
@@ -53,15 +60,15 @@ if (__eta.layout) {
53
60
  }
54
61
  ${n.useWith?"}":""}${n.debug?"} catch (e) { this.RuntimeErr(e, __eta.templateStr, __eta.line, options.filepath) }":""}
55
62
  return __eta.res;
56
- `;if(n.plugins)for(let a=0;a<n.plugins.length;a++){let c=n.plugins[a];c.processFnString&&(i=c.processFnString(i,n))}return i}function mi(e){let t=this.config,n=0,r=e.length,s="";for(;n<r;n++){let o=e[n];if(typeof o=="string")s+="__eta.res+='"+o+`';
63
+ `;if(n.plugins)for(let a=0;a<n.plugins.length;a++){let c=n.plugins[a];c.processFnString&&(i=c.processFnString(i,n))}return i}function ja(e){let t=this.config,n=0,r=e.length,s="";for(;n<r;n++){let o=e[n];if(typeof o=="string")s+="__eta.res+='"+o+`';
57
64
  `;else{let i=o.t,a=o.val||"";t.debug&&(s+="__eta.line="+o.lineNo+`
58
65
  `),i==="r"?(t.autoFilter&&(a="__eta.f("+a+")"),s+="__eta.res+="+a+`;
59
66
  `):i==="i"?(t.autoFilter&&(a="__eta.f("+a+")"),t.autoEscape&&(a="__eta.e("+a+")"),s+="__eta.res+="+a+`;
60
67
  `):i==="e"?s+=a+`
61
68
  `:Object.hasOwn(t.customTags,i)&&(s+=`__eta.res+=this.config.customTags[${JSON.stringify(i)}](${JSON.stringify(a)},${t.varName});
62
- `)}}return s}function pi(e,t,n,r){let s,o;return Array.isArray(t.autoTrim)?(s=t.autoTrim[1],o=t.autoTrim[0]):s=o=t.autoTrim,(n||n===!1)&&(s=n),(r||r===!1)&&(o=r),!o&&!s?e:s==="slurp"&&o==="slurp"?e.trim():(s==="_"||s==="slurp"?e=e.trimStart():(s==="-"||s==="nl")&&(e=e.replace(/^(?:\r\n|\n|\r)/,"")),o==="_"||o==="slurp"?e=e.trimEnd():(o==="-"||o==="nl")&&(e=e.replace(/(?:\r\n|\n|\r)$/,"")),e)}var gi={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"};function hi(e){return gi[e]}function bi(e){let t=String(e);return/[&<>"']/.test(t)?t.replace(/[&<>"']/g,hi):t}var Pn={autoEscape:!0,autoFilter:!1,autoTrim:[!1,"nl"],cache:!1,cacheFilepaths:!0,customTags:{},debug:!1,escapeFunction:bi,filterFunction:(e)=>String(e),outputFunctionName:"output",functionHeader:"",parse:{exec:"",interpolate:"=",raw:"~"},plugins:[],rmWhitespace:!1,tags:["<%","%>"],useWith:!1,varName:"it",defaultExtension:".eta"},ce=/`(?:\\[\s\S]|\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})*}|(?!\${)[^\\`])*`/g,le=/'(?:\\[\s\w"'\\`]|[^\n\r'\\])*?'/g,ue=/"(?:\\[\s\w"'\\`]|[^\n\r"\\])*?"/g;function fe(e){return e.replace(/[.*+\-?^${}()|[\]\\]/g,"\\$&")}function wi(e,t){return e.slice(0,t).split(`
63
- `).length}function yi(e){let t=this.config,n=[],r=!1,s=0,o=t.parse,i=Object.keys(t.customTags);if(t.plugins)for(let d=0;d<t.plugins.length;d++){let p=t.plugins[d];p.processTemplate&&(e=p.processTemplate(e,t))}t.rmWhitespace&&(e=e.replace(/[\r\n]+/g,`
64
- `).replace(/^\s+|\s+$/gm,"")),ce.lastIndex=0,le.lastIndex=0,ue.lastIndex=0;function a(d,p){d&&(d=pi(d,t,r,p),d&&(d=d.replace(/\\|'/g,"\\$&").replace(/\r\n|\n|\r/g,"\\n"),n.push(d)))}let c=[o.exec,o.interpolate,o.raw,...i].reduce((d,p)=>d&&p?d+"|"+fe(p):p?fe(p):d,""),l=RegExp(fe(t.tags[0])+"(-|_)?\\s*("+c+")?\\s*","g"),u=RegExp("'|\"|`|\\/\\*|(\\s*(-|_)?"+fe(t.tags[1])+")","g"),f;for(;f=l.exec(e);){let d=e.slice(s,f.index);s=f[0].length+f.index;let p=f[1],b=f[2]||"";a(d,p),u.lastIndex=s;let m,g=!1;for(;m=u.exec(e);)if(m[1]){let w=e.slice(s,m.index);l.lastIndex=s=u.lastIndex,r=m[2],g={t:b===o.exec?"e":b===o.raw?"r":b===o.interpolate?"i":i.includes(b)?b:"",val:w};break}else{let w=m[0];if(w==="/*"){let S=e.indexOf("*/",u.lastIndex);S===-1&&W("unclosed comment",e,m.index),u.lastIndex=S}else w==="'"?(le.lastIndex=m.index,le.exec(e)?u.lastIndex=le.lastIndex:W("unclosed string",e,m.index)):w==='"'?(ue.lastIndex=m.index,ue.exec(e)?u.lastIndex=ue.lastIndex:W("unclosed string",e,m.index)):w==="`"&&(ce.lastIndex=m.index,ce.exec(e)?u.lastIndex=ce.lastIndex:W("unclosed string",e,m.index))}g?(t.debug&&(g.lineNo=wi(e,f.index)),n.push(g)):W("unclosed tag",e,f.index)}if(a(e.slice(s,e.length),!1),t.plugins)for(let d=0;d<t.plugins.length;d++){let p=t.plugins[d];p.processAST&&(n=p.processAST(n,t))}return n}function Mn(e,t){let n=t?.async?this.templatesAsync:this.templatesSync;if(this.resolvePath&&this.readFile&&!e.startsWith("@")){let r=t.filepath,s=n.get(r);if(this.config.cache&&s)return s;{let o=this.readFile(r),i=this.compile(o,t);return this.config.cache&&n.define(r,i),i}}else{let r=n.get(e);if(r)return r;throw new ci(`Failed to get template '${e}'`)}}function Ln(e,t,n){let r,s={...n,async:!1};return typeof e=="string"?(this.resolvePath&&this.readFile&&!e.startsWith("@")&&(s.filepath=this.resolvePath(e,s)),r=Mn.call(this,e,s)):r=e,r.call(this,t,s)}function zn(e,t,n){let r,s={...n,async:!0};typeof e=="string"?(this.resolvePath&&this.readFile&&!e.startsWith("@")&&(s.filepath=this.resolvePath(e,s)),r=Mn.call(this,e,s)):r=e;let o=r.call(this,t,s);return Promise.resolve(o)}function vi(e,t){let n=this.compile(e,{async:!1});return Ln.call(this,n,t)}function xi(e,t){let n=this.compile(e,{async:!0});return zn.call(this,n,t)}var Rn=class{constructor(e){this.cache=e}define(e,t){this.cache[e]=t}get(e){return this.cache[e]}remove(e){delete this.cache[e]}reset(){this.cache={}}load(e){this.cache={...this.cache,...e}}},Si=class{constructor(e){e?this.config={...Pn,...e}:this.config={...Pn};let t=[this.config.parse.exec,this.config.parse.interpolate,this.config.parse.raw,"-","_"];for(let n of Object.keys(this.config.customTags))if(t.includes(n))throw new de(`Custom tag prefix "${n}" conflicts with a built-in prefix`)}config;RuntimeErr=li;compile=fi;compileToString=di;compileBody=mi;parse=yi;render=Ln;renderAsync=zn;renderString=vi;renderStringAsync=xi;filepathCache={};templatesSync=new Rn({});templatesAsync=new Rn({});resolvePath=null;readFile=null;configure(e){this.config={...this.config,...e}}withConfig(e){return{...this,config:{...this.config,...e}}}loadTemplate(e,t,n){if(typeof t=="string")((n?.async)?this.templatesAsync:this.templatesSync).define(e,this.compile(t,n));else{let r=this.templatesSync;(t.constructor.name==="AsyncFunction"||n?.async)&&(r=this.templatesAsync),r.define(e,t)}}},Bn=class extends Si{};var Wn={name:"@crustjs/core",version:"0.5.5",description:"Define, parse, route, and run type-safe CLI commands with Contexts and Extensions",type:"module",sideEffects:!1,license:"MIT",author:"chenxin-yan",repository:{type:"git",url:"git+https://github.com/chenxin-yan/crust.git",directory:"packages/core"},homepage:"https://crustjs.com",bugs:{url:"https://github.com/chenxin-yan/crust/issues"},keywords:["cli","command","framework","parser","bun","typescript"],files:["dist"],types:"./dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./tooling":{types:"./dist/tooling.d.ts",import:"./dist/tooling.js"}},publishConfig:{access:"public"},scripts:{build:"vp run build:task",dev:"vp pack --watch","check:types":"vp run check:types:task",test:"vp run test:task",prepack:"cp ../../LICENSE LICENSE",postpack:"rm -f LICENSE"},dependencies:{"@crustjs/utils":"workspace:^"},devDependencies:{"@crustjs/config":"workspace:*","vite-plus":"catalog:"},peerDependencies:{typescript:"^7.0.0"},peerDependenciesMeta:{typescript:{optional:!0}},engines:{bun:">=1.4.0",node:">=24",deno:">=2.8"}};var Un={name:"@crustjs/crust",version:"0.5.5",description:"CLI to build and publish Crust apps as npm packages or standalone binaries",type:"module",license:"MIT",author:"chenxin-yan",repository:{type:"git",url:"git+https://github.com/chenxin-yan/crust.git",directory:"packages/crust"},homepage:"https://crustjs.com",bugs:{url:"https://github.com/chenxin-yan/crust/issues"},keywords:["cli","build","compile","standalone","bun","typescript"],publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"}},crust:{artifact:"binary",include:["schema","dist"]},bin:{crust:"src/cli.ts"},scripts:{build:"vp run build:task",release:"bun src/cli.ts publish",dev:"bun src/cli.ts",start:"bun .crust/root/bin/crust.js","check:types":"vp run check:types:task",test:"vp run test:task"},dependencies:{"@crustjs/core":"workspace:^","@crustjs/extensions":"workspace:^","@crustjs/style":"workspace:^"},optionalDependencies:{"@tsdown/exe":"0.23.0",tsdown:"0.23.0"},peerDependencies:{"@crustjs/core":"^0.5.0"},devDependencies:{"@arethetypeswrong/core":"^0.18.5","@crustjs/config":"workspace:*","@crustjs/testing":"workspace:*","@crustjs/utils":"workspace:*","@types/semver":"^7.8.0",publint:"^0.3.24",semver:"^7.8.5","vite-plus":"catalog:"},engines:{bun:">=1.4.0"}};var Vn={name:"@crustjs/extensions",version:"0.5.5",description:"Official Crust Extensions for help, version, completion, typo hints, color, and updates",type:"module",sideEffects:!1,license:"MIT",author:"chenxin-yan",repository:{type:"git",url:"git+https://github.com/chenxin-yan/crust.git",directory:"packages/extensions"},homepage:"https://crustjs.com",bugs:{url:"https://github.com/chenxin-yan/crust/issues"},keywords:["cli","extension","help","version","completion","did-you-mean","bun","typescript"],files:["dist"],exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"}},publishConfig:{access:"public"},scripts:{build:"vp run build:task",dev:"vp pack --watch","check:types":"vp run check:types:task",test:"vp run test:task",prepack:"cp ../../LICENSE LICENSE",postpack:"rm -f LICENSE"},dependencies:{"@crustjs/store":"workspace:^","@crustjs/style":"workspace:^","@crustjs/utils":"workspace:^"},devDependencies:{"@crustjs/config":"workspace:*","@crustjs/core":"workspace:*","@crustjs/testing":"workspace:*","vite-plus":"catalog:"},peerDependencies:{"@crustjs/core":"workspace:^",typescript:"^7.0.0"},peerDependenciesMeta:{typescript:{optional:!0}},engines:{bun:">=1.4.0",node:">=24",deno:">=2.8"}};var qn={name:"create-crust",version:"0.5.5",description:"Scaffold a new Crust CLI project for Bun, Node.js, or Deno",type:"module",sideEffects:!1,license:"MIT",author:"chenxin-yan",repository:{type:"git",url:"git+https://github.com/chenxin-yan/crust.git",directory:"packages/create-crust"},homepage:"https://crustjs.com",bugs:{url:"https://github.com/chenxin-yan/crust/issues"},keywords:["cli","scaffold","create","generator","bun","typescript","crust"],publishConfig:{access:"public"},crust:{runtime:"node",artifact:"package",include:["templates"]},bin:{"create-crust":"src/index.ts"},scripts:{build:"vp run build:task",dev:"pnpm run build && bun src/index.ts",release:"crust publish","check:types":"vp run check:types:task",test:"vp run test:task","test:smoke":"vp test tests/cli.smoke.test.ts"},dependencies:{"@crustjs/core":"workspace:^","@crustjs/create":"workspace:^","@crustjs/progress":"workspace:^","@crustjs/prompts":"workspace:^",eta:"^4.6.0"},devDependencies:{"@crustjs/config":"workspace:*","@crustjs/crust":"workspace:*","@crustjs/extensions":"workspace:*","vite-plus":"catalog:"},engines:{bun:">=1.4.0",node:">=24",deno:">=2.8"}};var ki={bun:{shebang:"#!/usr/bin/env bun",tsLib:'"ESNext"',tsTypes:'"bun"'},node:{shebang:"#!/usr/bin/env node",tsLib:'"ESNext"',tsTypes:'"node"'},deno:{shebang:"#!/usr/bin/env -S deno run -A",tsLib:'"ESNext", "deno.window"',tsTypes:""}},Ni=new Bn({autoEscape:!1,autoTrim:!1});function Jn(e){if(!Mt(e))throw Error(`Project name ${JSON.stringify(e)} is not safe for the generated project.
65
- The directory basename becomes the package and command name: use ${Dt}.`)}var Ai=/[<>:"|?*\\]/;function Ti(e){if(!e)throw Error("Project directory cannot be empty");if(Ai.test(e))throw Error(`Project directory contains invalid characters: ${e}`);Jn(Kn(Yn(e)))}var Fi=new Z("create-crust",{description:qn.description}).flags({name:"runtime",type:"string",choices:["bun","node","deno"],description:'Runtime to develop and build for ("bun", "node", or "deno")'},{name:"artifact",type:"string",choices:["package","binary"],description:"Build output: runtime package or standalone binary"},{name:"install",type:"boolean",description:"Install dependencies after scaffolding"},{name:"git",type:"boolean",description:"Initialize a git repository after scaffolding"},{name:"overwrite",type:"boolean",description:"Overwrite the destination directory if it already exists"}).args({name:"directory",type:"string",description:"Project directory to scaffold into"}).action(async({args:e,flags:t})=>{let n=e.directory??await Fn({message:"Project directory",default:"my-cli",validate:Ti}),r=Yn(process.cwd(),n),s=r===process.cwd(),o=Kn(r);Jn(o);let i=s?Ci(r).length>0:Hn(r),a=!1;if(i){if(a=await ae({message:s?"Current directory is not empty. Overwrite conflicting files?":`Directory "${o}" already exists. Overwrite?`,default:!1,initial:t.overwrite}),!a){console.log("Aborted.");return}}let c=await Ze({message:"Runtime",choices:[{label:"Bun (recommended)",value:"bun",hint:"Bun APIs and TypeScript execution"},{label:"Node.js",value:"node",hint:"Node.js APIs and ecosystem"},{label:"Deno",value:"deno",hint:"Deno APIs and permission model"}],default:"bun",initial:t.runtime}),l=await Ze({message:"Build output",choices:[{label:"Standalone binary",value:"binary",hint:"Embeds the runtime; users need no separate JavaScript runtime"},{label:"Runtime package",value:"package",hint:c==="deno"?"Requires Deno installed; experimental bundling":"JavaScript bundle; requires the selected runtime installed"}],default:c==="node"?"package":"binary",initial:t.artifact}),u=await ae({message:"Install dependencies?",default:!0,initial:t.install}),f=r;while(!Hn(f)&&Gn(f)!==f)f=Gn(f);let p=Zt(f)?!1:await ae({message:"Initialize a git repository?",default:!0,initial:t.git}),b=c==="deno"?"deno":De(r),m={name:o,runtime:c,artifact:l,run:b==="deno"?"deno task":`${b} run`,install:`${b} install`,...ki[c],coreVersion:Wn.version,extensionsVersion:Vn.version,crustVersion:Un.version};if(await qe({message:"Scaffolding project...",task:()=>Xt({template:_i(he("templates"),"base"),dest:r,context:m,render:(g,w)=>Ni.renderString(g,w),conflict:a?"overwrite":"abort"})}),u)await Me([c==="deno"?{type:"command",cmd:"deno install"}:{type:"install"}],r);if(p)await qe({message:"Initializing git repository...",task:()=>Me([{type:"git-init",commit:"chore: initial commit"}],r)});if(console.log(`
66
- Created ${o}!
67
- `),console.log("Next steps:"),!s){let g=ji(n)||n.startsWith(".")?n:`./${n}`;console.log(` cd ${g}`)}if(!u)console.log(` ${m.install}`);console.log(` ${m.run} dev`),console.log(` ${m.run} build`)});await Fi.execute();
69
+ `)}}return s}function $a(e,t,n,r){let s,o;return Array.isArray(t.autoTrim)?(s=t.autoTrim[1],o=t.autoTrim[0]):s=o=t.autoTrim,(n||n===!1)&&(s=n),(r||r===!1)&&(o=r),!o&&!s?e:s==="slurp"&&o==="slurp"?e.trim():(s==="_"||s==="slurp"?e=e.trimStart():(s==="-"||s==="nl")&&(e=e.replace(/^(?:\r\n|\n|\r)/,"")),o==="_"||o==="slurp"?e=e.trimEnd():(o==="-"||o==="nl")&&(e=e.replace(/(?:\r\n|\n|\r)$/,"")),e)}var Na={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"};function _a(e){return Na[e]}function Aa(e){let t=String(e);return/[&<>"']/.test(t)?t.replace(/[&<>"']/g,_a):t}var us={autoEscape:!0,autoFilter:!1,autoTrim:[!1,"nl"],cache:!1,cacheFilepaths:!0,customTags:{},debug:!1,escapeFunction:Aa,filterFunction:(e)=>String(e),outputFunctionName:"output",functionHeader:"",parse:{exec:"",interpolate:"=",raw:"~"},plugins:[],rmWhitespace:!1,tags:["<%","%>"],useWith:!1,varName:"it",defaultExtension:".eta"},$e=/`(?:\\[\s\S]|\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})*}|(?!\${)[^\\`])*`/g,Ne=/'(?:\\[\s\w"'\\`]|[^\n\r'\\])*?'/g,_e=/"(?:\\[\s\w"'\\`]|[^\n\r"\\])*?"/g;function Ae(e){return e.replace(/[.*+\-?^${}()|[\]\\]/g,"\\$&")}function Ta(e,t){return e.slice(0,t).split(`
70
+ `).length}function ka(e){let t=this.config,n=[],r=!1,s=0,o=t.parse,i=Object.keys(t.customTags);if(t.plugins)for(let u=0;u<t.plugins.length;u++){let p=t.plugins[u];p.processTemplate&&(e=p.processTemplate(e,t))}t.rmWhitespace&&(e=e.replace(/[\r\n]+/g,`
71
+ `).replace(/^\s+|\s+$/gm,"")),$e.lastIndex=0,Ne.lastIndex=0,_e.lastIndex=0;function a(u,p){u&&(u=$a(u,t,r,p),u&&(u=u.replace(/\\|'/g,"\\$&").replace(/\r\n|\n|\r/g,"\\n"),n.push(u)))}let c=[o.exec,o.interpolate,o.raw,...i].reduce((u,p)=>u&&p?u+"|"+Ae(p):p?Ae(p):u,""),l=RegExp(Ae(t.tags[0])+"(-|_)?\\s*("+c+")?\\s*","g"),m=RegExp("'|\"|`|\\/\\*|(\\s*(-|_)?"+Ae(t.tags[1])+")","g"),w;for(;w=l.exec(e);){let u=e.slice(s,w.index);s=w[0].length+w.index;let p=w[1],f=w[2]||"";a(u,p),m.lastIndex=s;let g,d=!1;for(;g=m.exec(e);)if(g[1]){let h=e.slice(s,g.index);l.lastIndex=s=m.lastIndex,r=g[2],d={t:f===o.exec?"e":f===o.raw?"r":f===o.interpolate?"i":i.includes(f)?f:"",val:h};break}else{let h=g[0];if(h==="/*"){let v=e.indexOf("*/",m.lastIndex);v===-1&&te("unclosed comment",e,g.index),m.lastIndex=v}else h==="'"?(Ne.lastIndex=g.index,Ne.exec(e)?m.lastIndex=Ne.lastIndex:te("unclosed string",e,g.index)):h==='"'?(_e.lastIndex=g.index,_e.exec(e)?m.lastIndex=_e.lastIndex:te("unclosed string",e,g.index)):h==="`"&&($e.lastIndex=g.index,$e.exec(e)?m.lastIndex=$e.lastIndex:te("unclosed string",e,g.index))}d?(t.debug&&(d.lineNo=Ta(e,w.index)),n.push(d)):te("unclosed tag",e,w.index)}if(a(e.slice(s,e.length),!1),t.plugins)for(let u=0;u<t.plugins.length;u++){let p=t.plugins[u];p.processAST&&(n=p.processAST(n,t))}return n}function ms(e,t){let n=t?.async?this.templatesAsync:this.templatesSync;if(this.resolvePath&&this.readFile&&!e.startsWith("@")){let r=t.filepath,s=n.get(r);if(this.config.cache&&s)return s;{let o=this.readFile(r),i=this.compile(o,t);return this.config.cache&&n.define(r,i),i}}else{let r=n.get(e);if(r)return r;throw new xa(`Failed to get template '${e}'`)}}function ps(e,t,n){let r,s={...n,async:!1};return typeof e=="string"?(this.resolvePath&&this.readFile&&!e.startsWith("@")&&(s.filepath=this.resolvePath(e,s)),r=ms.call(this,e,s)):r=e,r.call(this,t,s)}function hs(e,t,n){let r,s={...n,async:!0};typeof e=="string"?(this.resolvePath&&this.readFile&&!e.startsWith("@")&&(s.filepath=this.resolvePath(e,s)),r=ms.call(this,e,s)):r=e;let o=r.call(this,t,s);return Promise.resolve(o)}function Fa(e,t){let n=this.compile(e,{async:!1});return ps.call(this,n,t)}function Pa(e,t){let n=this.compile(e,{async:!0});return hs.call(this,n,t)}var fs=class{constructor(e){this.cache=e}define(e,t){this.cache[e]=t}get(e){return this.cache[e]}remove(e){delete this.cache[e]}reset(){this.cache={}}load(e){this.cache={...this.cache,...e}}},Ra=class{constructor(e){e?this.config={...us,...e}:this.config={...us};let t=[this.config.parse.exec,this.config.parse.interpolate,this.config.parse.raw,"-","_"];for(let n of Object.keys(this.config.customTags))if(t.includes(n))throw new Te(`Custom tag prefix "${n}" conflicts with a built-in prefix`)}config;RuntimeErr=Sa;compile=Ca;compileToString=Ia;compileBody=ja;parse=ka;render=ps;renderAsync=hs;renderString=Fa;renderStringAsync=Pa;filepathCache={};templatesSync=new fs({});templatesAsync=new fs({});resolvePath=null;readFile=null;configure(e){this.config={...this.config,...e}}withConfig(e){return{...this,config:{...this.config,...e}}}loadTemplate(e,t,n){if(typeof t=="string")((n?.async)?this.templatesAsync:this.templatesSync).define(e,this.compile(t,n));else{let r=this.templatesSync;(t.constructor.name==="AsyncFunction"||n?.async)&&(r=this.templatesAsync),r.define(e,t)}}},gs=class extends Ra{};var bs={name:"@crustjs/core",version:"0.6.0",description:"Define, parse, route, and run type-safe CLI commands with Contexts and Extensions",type:"module",sideEffects:!1,license:"MIT",author:"chenxin-yan",repository:{type:"git",url:"git+https://github.com/chenxin-yan/crust.git",directory:"packages/core"},homepage:"https://crustjs.com",bugs:{url:"https://github.com/chenxin-yan/crust/issues"},keywords:["cli","command","framework","parser","bun","typescript"],files:["dist"],exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./tooling":{types:"./dist/tooling.d.ts",import:"./dist/tooling.js"}},publishConfig:{access:"public"},scripts:{build:"vp run build:task",dev:"vp pack --watch","check:types":"vp run check:types:task",test:"vp run test:task",prepack:"cp ../../LICENSE LICENSE",postpack:"rm -f LICENSE"},dependencies:{"@crustjs/utils":"workspace:^"},devDependencies:{"@crustjs/config":"workspace:*","vite-plus":"catalog:",zod:"^4.6.7"},peerDependencies:{typescript:"^7.0.0"},peerDependenciesMeta:{typescript:{optional:!0}},engines:{bun:">=1.4.0",node:">=24"}};var ws={name:"@crustjs/crust",version:"0.6.0",description:"CLI to build and publish Crust apps as npm packages or standalone binaries",type:"module",license:"MIT",author:"chenxin-yan",repository:{type:"git",url:"git+https://github.com/chenxin-yan/crust.git",directory:"packages/crust"},homepage:"https://crustjs.com",bugs:{url:"https://github.com/chenxin-yan/crust/issues"},keywords:["cli","build","compile","standalone","bun","typescript"],publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"}},crust:{artifact:"binary",include:["schema","dist"]},bin:{crust:"src/cli.ts"},scripts:{build:"vp run build:task",release:"bun src/cli.ts publish",dev:"bun src/cli.ts",start:"bun .crust/root/bin/crust.js","check:types":"vp run check:types:task",test:"vp run test:task"},dependencies:{"@crustjs/core":"workspace:^","@crustjs/extensions":"workspace:^","@crustjs/style":"workspace:^"},optionalDependencies:{"@tsdown/exe":"0.23.4",tsdown:"0.23.4"},peerDependencies:{"@crustjs/core":"^0.6.0"},devDependencies:{"@arethetypeswrong/core":"^0.18.5","@crustjs/config":"workspace:*","@crustjs/testing":"workspace:*","@crustjs/utils":"workspace:*","@types/semver":"^7.8.0",publint:"^0.3.25",semver:"^7.8.5","vite-plus":"catalog:"},engines:{bun:">=1.4.0"}};var vs={name:"@crustjs/extensions",version:"0.6.0",description:"Official Crust Extensions for help, version, completion, typo hints, color, and updates",type:"module",sideEffects:!1,license:"MIT",author:"chenxin-yan",repository:{type:"git",url:"git+https://github.com/chenxin-yan/crust.git",directory:"packages/extensions"},homepage:"https://crustjs.com",bugs:{url:"https://github.com/chenxin-yan/crust/issues"},keywords:["cli","extension","help","version","completion","did-you-mean","bun","typescript"],files:["dist"],exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"}},publishConfig:{access:"public"},scripts:{build:"vp run build:task",dev:"vp pack --watch","check:types":"vp run check:types:task",test:"vp run test:task",prepack:"cp ../../LICENSE LICENSE",postpack:"rm -f LICENSE"},dependencies:{"@crustjs/prompts":"workspace:^","@crustjs/store":"workspace:^","@crustjs/style":"workspace:^","@crustjs/utils":"workspace:^"},devDependencies:{"@crustjs/config":"workspace:*","@crustjs/core":"workspace:*","@crustjs/testing":"workspace:*","vite-plus":"catalog:"},peerDependencies:{"@crustjs/core":"workspace:^",typescript:"^7.0.0"},peerDependenciesMeta:{typescript:{optional:!0}},engines:{bun:">=1.4.0",node:">=24"}};var Ht={name:"create-crust",version:"0.6.0",description:"Scaffold a new Crust CLI project for Bun or Node.js",type:"module",sideEffects:!1,license:"MIT",author:"chenxin-yan",repository:{type:"git",url:"git+https://github.com/chenxin-yan/crust.git",directory:"packages/create-crust"},homepage:"https://crustjs.com",bugs:{url:"https://github.com/chenxin-yan/crust/issues"},keywords:["cli","scaffold","create","generator","bun","typescript","crust"],publishConfig:{access:"public"},crust:{runtime:"node",artifact:"package",include:["templates"]},bin:{"create-crust":"src/cli.ts"},scripts:{build:"vp run build:task",dev:"pnpm run build && bun src/cli.ts",release:"crust publish","check:types":"vp run check:types:task",test:"vp run test:task","test:smoke":"vp test tests/cli.smoke.test.ts"},dependencies:{"@crustjs/core":"workspace:^","@crustjs/create":"workspace:^","@crustjs/progress":"workspace:^","@crustjs/prompts":"workspace:^",eta:"^4.6.0"},devDependencies:{"@crustjs/config":"workspace:*","@crustjs/crust":"workspace:*","@crustjs/extensions":"workspace:*","vite-plus":"catalog:"},engines:{bun:">=1.4.0",node:">=24"}};var Va={bun:{shebang:"#!/usr/bin/env bun",tsTypes:'"bun"'},node:{shebang:"#!/usr/bin/env node",tsTypes:'"node"'}},Ha=new gs({autoEscape:!1,autoTrim:!1});function Es(e){if(!sr(e))throw Error(`Project name ${JSON.stringify(e)} is not safe for the generated project.
72
+ The directory basename becomes the package and command name: use ${rr}.`)}var Ga=/[<>:"|?*\\]/;function Ja(e){if(!e)throw Error("Project directory cannot be empty");if(Ga.test(e))throw Error(`Project directory contains invalid characters: ${e}`);Es(xs(Ss(e)))}var Cs=new ve("create-crust",{description:Ht.description,version:Ht.version}).extend(Gr(),Hr()).flags({runtime:{type:"string",choices:["bun","node"],description:'Runtime to develop and build for ("bun" or "node")'},artifact:{type:"string",choices:["package","binary"],description:"Build output: runtime package or standalone binary"},install:{type:"boolean",description:"Install dependencies after scaffolding"},git:{type:"boolean",description:"Initialize a git repository after scaffolding"},overwrite:{type:"boolean",description:"Overwrite the destination directory if it already exists"}}).args({name:"directory",type:"string",description:"Project directory to scaffold into"}).action(async({args:e,flags:t,stdout:n,stderr:r})=>{let s=e.directory??await cs({message:"Project directory",default:"my-cli",validate:Ja}),o=Ss(process.cwd(),s),i=o===process.cwd(),a=xs(o);Es(a);let c=i?Ba(o).length>0:ys(o),l=!1;if(c){if(l=await je({message:i?"Current directory is not empty. Overwrite conflicting files?":`Directory "${a}" already exists. Overwrite?`,default:!1,initial:t.overwrite}),!l){n("Aborted.");return}}let m=await Vt({message:"Runtime",choices:[{label:"Bun (recommended)",value:"bun",hint:"Bun APIs and TypeScript execution"},{label:"Node.js",value:"node",hint:"Node.js APIs and ecosystem"}],default:"bun",initial:t.runtime}),w=await Vt({message:"Build output",choices:[{label:"Standalone binary",value:"binary",hint:"Embeds the runtime; users need no separate JavaScript runtime"},{label:"Runtime package",value:"package",hint:"JavaScript bundle; requires the selected runtime installed"}],default:m==="node"?"package":"binary",initial:t.artifact}),u=await je({message:"Install dependencies?",default:!0,initial:t.install}),p=o;while(!ys(p)&&Os(p)!==p)p=Os(p);let g=Er(p)?!1:await je({message:"Initialize a git repository?",default:!0,initial:t.git}),d=_t(o),h={name:a,runtime:m,artifact:w,run:`${d} run`,install:`${d} install`,...Va[m],coreVersion:bs.version,extensionsVersion:vs.version,crustVersion:ws.version};if(await Rt({message:"Scaffolding project...",task:()=>Sr({template:Wa(wt("templates"),"base"),dest:o,context:h,render:(v,y)=>Ha.renderString(v,y),conflict:l?"overwrite":"abort"})}),u)await At([{type:"install"}],o,{stderr:r});if(g)await Rt({message:"Initializing git repository...",task:()=>At([{type:"git-init",commit:"chore: initial commit"}],o,{stderr:r})});if(n(`
73
+ Created ${a}!
74
+ `),n("Next steps:"),!i){let v=Ua(s)||s.startsWith(".")?s:`./${s}`;n(` cd ${v}`)}if(!u)n(` ${h.install}`);n(` ${h.run} dev`),n(` ${h.run} build`)});await Cs.execute();
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "create-crust",
3
- "version": "0.5.5",
4
- "description": "Scaffold a new Crust CLI project for Bun, Node.js, or Deno",
3
+ "version": "0.6.0",
4
+ "description": "Scaffold a new Crust CLI project for Bun or Node.js",
5
5
  "license": "MIT",
6
6
  "author": "chenxin-yan",
7
7
  "homepage": "https://crustjs.com",
@@ -27,8 +27,7 @@
27
27
  },
28
28
  "engines": {
29
29
  "bun": ">=1.4.0",
30
- "node": ">=24",
31
- "deno": ">=2.8"
30
+ "node": ">=24"
32
31
  },
33
32
  "type": "module",
34
33
  "files": [
@@ -34,7 +34,7 @@ Install dependencies if you skipped installation or just cloned the project:
34
34
  - `package`: a JavaScript bundle in `.crust/root/` that requires the selected runtime installed.
35
35
  - `binary`: a standalone executable per platform, with its runtime embedded. Pass `--target host` to `crust build` to build only this machine's target.
36
36
 
37
- Bun is used for build preparation and Bun/Node bundling. Node binaries additionally need Node 26+ and Crust's optional compiler backend; Deno builds need Deno on PATH, with Deno 2.5+ required for experimental runtime-package bundling. Crust does not install or upgrade compilers. See [compiler requirements](https://crustjs.com/docs/guide/build-and-distribution#binary-runtime-version).
37
+ Bun is used for build preparation and Bun/Node bundling. Node binaries additionally need Node 26+ and Crust's optional compiler backend. Crust does not install or upgrade compilers. See [compiler requirements](https://crustjs.com/docs/guide/build-and-distribution#binary-runtime-version).
38
38
 
39
39
  `<%~ it.run %> release` publishes the staged packages to npm, but npm is optional. For direct downloads, Homebrew or Scoop, distribute the executable and adjacent assets from `.crust/<platform>/bin/`. Direct binaries need no separately installed JavaScript runtime; the generated npm binary launcher needs Node.js. Crust does not generate installer definitions or publish release archives. See [custom distribution](https://crustjs.com/docs/guide/build-and-distribution#custom-distribution).
40
40
 
@@ -1,9 +1,7 @@
1
1
  <%
2
- /* `dev` runs the source and `start` runs the built bin with the selected runtime.
3
- Deno type-checks natively, so it needs no TypeScript packages. */
4
- const dev = { bun: "bun run src/cli.ts", node: "node src/cli.ts", deno: "deno run -A src/cli.ts" }[it.runtime];
5
- const startRunner = { bun: "bun", node: "node", deno: "deno run -A" }[it.runtime];
6
- const checkTypes = it.runtime === "deno" ? "deno check src/cli.ts" : "tsc --noEmit";
2
+ /* `dev` runs the source and `start` runs the built bin with the selected runtime. */
3
+ const dev = { bun: "bun run src/cli.ts", node: "node src/cli.ts" }[it.runtime];
4
+ const startRunner = { bun: "bun", node: "node" }[it.runtime];
7
5
  -%>
8
6
  {
9
7
  "$schema": "./node_modules/@crustjs/crust/schema/package.json",
@@ -24,7 +22,7 @@ const checkTypes = it.runtime === "deno" ? "deno check src/cli.ts" : "tsc --noEm
24
22
  "build": "crust build",
25
23
  "release": "crust publish",
26
24
  "start": <%~ JSON.stringify(`${startRunner} .crust/root/bin/${it.name}.js`) %>,
27
- "check:types": <%~ JSON.stringify(checkTypes) %>
25
+ "check:types": "tsc --noEmit"
28
26
  },
29
27
  <% if (it.runtime === "node") { -%>
30
28
  "engines": {
@@ -44,8 +42,6 @@ const checkTypes = it.runtime === "deno" ? "deno check src/cli.ts" : "tsc --noEm
44
42
  "@crustjs/crust": <%~ JSON.stringify(`^${it.crustVersion}`) %>,
45
43
  "@types/node": "^24",
46
44
  "typescript": "^7.0.2"
47
- <% } else { -%>
48
- "@crustjs/crust": <%~ JSON.stringify(`^${it.crustVersion}`) %>
49
45
  <% } -%>
50
46
  }
51
47
  }
@@ -13,11 +13,12 @@ const app = new Crust(<%~ JSON.stringify(it.name) %>, { description: "A CLI buil
13
13
  default: "world",
14
14
  })
15
15
  .flags({
16
- name: "greet",
17
- type: "string",
18
- description: "Greeting to use",
19
- default: "Hello",
20
- short: "g",
16
+ greet: {
17
+ type: "string",
18
+ description: "Greeting to use",
19
+ default: "Hello",
20
+ short: "g",
21
+ },
21
22
  })
22
23
  .action(({ args, flags, stdout }) => {
23
24
  stdout(`${flags.greet}, ${args.name}!`);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "compilerOptions": {
3
- "lib": [<%~ it.tsLib %>],
3
+ "lib": ["ESNext"],
4
4
  "types": [<%~ it.tsTypes %>],
5
5
  "target": "ESNext",
6
6
  "module": "Preserve",