create-crust 0.6.0 → 0.6.1

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
@@ -9,60 +9,33 @@ npm create crust@latest my-cli
9
9
  # or
10
10
  pnpm create crust@latest my-cli
11
11
  # or
12
- bunx create-crust@latest my-cli
13
- # or
14
12
  bun create crust@latest my-cli
15
13
  ```
16
14
 
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.
18
-
19
- ## Options
15
+ The initializer prompts for the runtime, build output, dependency installation, and Git initialization. Pass flags to skip the prompts:
20
16
 
21
- ```text
22
- create-crust [directory] [--runtime bun|node] [--artifact package|binary] [--install|--no-install] [--git|--no-git] [--overwrite|--no-overwrite]
23
- create-crust --help | --version
17
+ ```sh
18
+ npx create-crust@latest my-cli --runtime node --artifact binary --no-git
24
19
  ```
25
20
 
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.
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.
30
- - `--git` / `--no-git` initializes or skips a Git repository when the destination is not already inside one. The default is to initialize.
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
-
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
-
36
- Every generated project includes:
37
-
38
- - `src/cli.ts` — entry point with a sample command
39
- - `package.json` — configured for the selected runtime and artifact, with `$schema` pointing at the `crust` block schema shipped by `@crustjs/crust` for editor completion
40
- - `tsconfig.json` — strict TypeScript config
41
- - `README.md` — getting started instructions
42
- - `.gitignore` — sensible defaults for Node/Bun projects
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 four combinations are selectable; the defaults preserve each runtime's established output:
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
-
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.
52
-
53
- For example, scaffold a Node binary:
21
+ ## Options
54
22
 
55
- ```sh
56
- npx create-crust@latest my-node-cli --runtime node --artifact binary
57
- ```
23
+ The initializer prompts for every option you don't pass. Without an interactive terminal, prompts take their defaults.
58
24
 
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.
25
+ | Option | Default | Effect |
26
+ | ------------------------------- | --------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
27
+ | `[directory]` | prompt, `my-cli` | Destination. Its basename (the current directory's for `.`) becomes the package and command name: letters, digits, `.`, `_`, and `-`, starting with a letter or digit |
28
+ | `--runtime` | `bun` | `bun` or `node`: the runtime used by the `dev` and `start` scripts and by `crust build`; saved as `crust.runtime` in `package.json` |
29
+ | `--artifact` | `binary` for Bun, `package` for Node.js | `binary`: a standalone executable with the runtime embedded. `package`: a JavaScript bundle that needs the runtime installed. Saved as `crust.artifact` |
30
+ | `--install`, `--no-install` | install | Install dependencies with the detected package manager |
31
+ | `--git`, `--no-git` | initialize | Initialize a Git repository; skipped inside an existing one |
32
+ | `--overwrite`, `--no-overwrite` | prompt, don't overwrite | When the destination exists (or the current directory is not empty), overwrite conflicting files or abort |
60
33
 
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.
34
+ Scripts in the next steps and generated README use the package manager detected from the destination's lockfiles, then the one running `create-crust`, defaulting to npm. Node.js binaries have extra build requirements; see [Build and distribution](https://crustjs.com/docs/guide/build-and-distribution#nodejs-binaries).
62
35
 
63
36
  ## Documentation
64
37
 
65
- See the full docs at [crustjs.com](https://crustjs.com).
38
+ Full docs: [crustjs.com/docs/quick-start](https://crustjs.com/docs/quick-start)
66
39
 
67
40
  ## License
68
41
 
@@ -1,43 +1,45 @@
1
1
  #!/usr/bin/env node
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(`
2
+ var T=(e,t,n)=>()=>{if(e)try{t=e(e=0)}catch(r){n=[r]}if(n)throw n[0];return t};var Ls=Symbol.dispose||Symbol.for("Symbol.dispose"),zs=Symbol.asyncDispose||Symbol.for("Symbol.asyncDispose"),rn=(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[zs];if(r===void 0)r=t[Ls];if(typeof r!=="function")throw TypeError("Object not disposable");e.push([n,r,t])}else if(n)e.push([n]);return t},sn=(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 J(e){if(process.platform!=="linux"||process.versions.bun===void 0)return!1;on??=Bs();let t=process.getBuiltinModule("node:os").constants.signals[e];return t!==void 0&&t<=32&&(on>>>t-1&1)===1}function Bs(){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 on;var le=()=>{};function q(e){return e instanceof Error&&"code"in e&&typeof e.code==="string"}var ue=()=>{};function Us(e,t){let n=()=>{if(e.listenerCount("error")===0)e.once("error",an)};try{n(),e.write(t,(r)=>{if(r)n()})}catch{}finally{e.removeListener("error",an)}}function Vs(e,t){if(cn.has(e))return;let{writeSync:n}=process.getBuiltinModule("node:fs"),r=typeof t==="string"?Buffer.from(t):t,s=0;while(s<r.length)try{s+=n(e,r,s)}catch(o){let i=q(o)?o.code:void 0;if(i!=="EAGAIN"){if(i==="EPIPE"||i==="EBADF")cn.add(e);return}Atomics.wait(Ws??=new Int32Array(new SharedArrayBuffer(4)),0,0,1)}}function Z(e,t){let n=F[de];if(n===void 0||ze||!process.getBuiltinModule("node:tty").isatty(e)){Be(e,t);return}ze=!0;try{if(n.clear(),Be(e,t),typeof t==="string"?t.endsWith(`
3
+ `):t.at(-1)===10)n.redraw()}finally{ze=!1}}function Be(e,t){if(process.platform==="win32")Us(e===1?process.stdout:process.stderr,t);else Vs(e,t)}function ln(e){return F[de]=e,()=>{if(F[de]===e)F[de]=void 0}}function me(){return F[fn]??=new(process.getBuiltinModule("node:async_hooks")).AsyncLocalStorage}function dn(){return F[Hs]??=new WeakMap}function Ue(e,t){let n=me().getStore();return me().run({input:e.input??n?.input,output:e.output??n?.output,signal:e.signal??n?.signal},t)}function Y(){return F[fn]?.getStore()?.signal??F[fe]}async function mn(e,t){let n=F[fe];F[fe]=e;try{return await t()}finally{F[fe]=n}}function pe(){return me().getStore()}function Gs(e){let t="",n=new(process.getBuiltinModule("node:stream")).Writable({decodeStrings:!1,write(r,s,o){t+=r.toString();let i=t.indexOf(`
3
4
  `);while(i!==-1)e.stderr(t.slice(0,i)),t=t.slice(i+1),i=t.indexOf(`
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
+ `);o()}});return dn().set(n,e),n}function We(e,t,n){let r=me().getStore();return Ue({input:r?.input,output:r?.output&&!dn().has(r.output)?r.output:Gs(e),signal:n},t)}var an=()=>{},Ws,cn,ze=!1,un,fn,Hs,fe,de,F;var Q=T(()=>{ue();cn=new Set;un={get isTTY(){return process.getBuiltinModule("node:tty").isatty(2)},get columns(){return process.stderr.columns},write:(e)=>Be(2,e)},fn=Symbol.for("crustjs.terminal.io"),Hs=Symbol.for("crustjs.terminal.ambient-callbacks"),fe=Symbol.for("crustjs.terminal.process-signal"),de=Symbol.for("crustjs.terminal.live-frame"),F=globalThis});function pn(e){if(e.trim()==="")return;let t=Number(e);return Number.isNaN(t)?void 0:t}function he(e){return e==="true"||e==="1"}var hn=()=>{};function Js(e){return typeof e==="number"}function qs(e){return e.map((t,n)=>Js(t)?`[${t}]`:n>0?`.${String(t)}`:String(t)).join("")}function Ys(e){return typeof e==="object"&&e!==null&&"key"in e}function Ks(e){if(!e)return[];return e.map((t)=>Ys(t)?t.key:t)}function gn(e,t=[]){return e.map((n)=>{let r=Ks(n.path),s=[...t,...r];return{message:n.message,path:qs(s)}})}var bn=()=>{};function Se(e){return e!==""&&!/[ \t\n\r\v\f]/.test(e)&&!e.startsWith("-")}function Ve(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"&&Xs.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(!Se(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 we(e,t){return[...e===void 0?[]:[e],...t.short===void 0?[]:[t.short],...t.aliases??[]]}function _n(e){return e.type==="boolean"&&e.noNegate!==!0}function Zs(e){return new b("DEFINITION",e,{subject:"flag",reason:"invalid-flags"})}function st(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 ot(e,t={}){let n={...t},r=new Set(Object.entries(t).flatMap(([s,o])=>we(s,o)));for(let[s,o]of e){let i=it(s,o);for(let a of we(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 Ee(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 Qs(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 it(e,t){let n=e===void 0?"Flag":`Flag "${e}"`,r=e===void 0?{}:{name:e};if(e!==void 0)Ve(e,"canonical");if(t.short!==void 0)Ve(t.short,"short");for(let o of t.aliases??[])Ve(o,"alias");let s=we(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&&!Qs(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 Ee(t,"flag",e)}function An(e){if(e.name==="")throw new b("DEFINITION","Argument names must be non-empty",{subject:"argument",name:e.name,reason:"empty-name"});return Ee(e,"argument",e.name)}function at(e){return e.meta.hidden!==!0}function ct(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}
6
+ ${s.body}`}:s)}return[...r.values()]}function to({subject:e,name:t}){let n=eo[e];return new b("DEFINITION",`${n} "${t}" contains invalid documentation sections`,{subject:e,name:t,reason:"invalid-sections"})}function Tn(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 to(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 lt(e,t,n="command"){return t.map((r)=>Tn(r,{subject:n,name:e}))}function M(e){return e[kn]}function Fn(e,t){return Object.freeze(Object.assign(e,{[kn]:t}))}function Pn(e){return"contextName"in e?e.contextName:e.name}function Ce(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=Pn(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 Rn(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 He(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 no(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 Ge(e,t,n,r){let s=await e["~standard"].validate(t);if(s.issues)return r.push(...gn(s.issues,n)),{ok:!1};return{ok:!0,value:s.value}}async function ro(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 Ge(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 Ge(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:
6
7
  ${n.map((o)=>` - ${o.path}: ${o.message}`).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
+ `)}`,{issues:n});return{args:Object.fromEntries(r),flags:Object.fromEntries(s)}}async function so(e,t){let n=[],r=await Ge(e,t,[],n);if(r.ok)return r.value;throw new b("OUTPUT",`Invalid command result:
8
9
  ${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(`
10
+ `)}`,{issues:n})}function Ie(e,t){let n=e["~standard"].jsonSchema;if(typeof n?.[t]!=="function")return;try{return JSON.parse(JSON.stringify(n[t]({target:"draft-2020-12"})))}catch{return}}function oo(e,t,n){if(t==="number"){let r=pn(e);if(r===void 0)throw new b("PARSE",`Expected a number for ${n}.`);return r}if(t==="boolean")return he(e);if(t==="url")return Rn(e,n);if(t==="path")return He(e,n);if(t==="json")return no(e,n);return e}function io(e,t,n){if(!t.includes(e))throw new b("PARSE",`Invalid value for ${n}. Expected one of: ${t.join(", ")}`)}function Je(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 qe(e,t){let{default:n,parse:r}=e;if(n===void 0)return;if(r){if(Array.isArray(n))return n.map((s,o)=>Je(r,String(s),t,o));return Je(r,String(n),t)}if(e.type==="path"){if(Array.isArray(n))return n.map((s)=>He(String(s),t));return He(String(n),t)}return"multiple"in e&&e.multiple&&Array.isArray(n)?[...n]:n}function ve(e,t,n,r){if(e.schema)return t;if(e.choices)io(t,e.choices,n);if(e.parse)return Je(e.parse,t,n,r);return oo(t,e.type,n)}function Ye(e,t,n){if(!t)return e();try{return e()}catch(r){if(!(r instanceof b))throw r;t(r,n);return}}function Mn(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)=>ve(t,s,r,o)):ve(t,n.value,r)}function Ln(e,t){if(t===void 0)return[...e];return e.flatMap((n)=>n.split(t)).filter((n)=>n!=="")}function ao(e,t,n){let r=t.multiple?Ln([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(he);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:he(n)}}function zn(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=Ln(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]=ao(s,o,a)}return r}function co(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]=Ye(()=>n(i,a,c),r,`--${i}`);continue}o[i]=qe(a,`--${i}`)}return o}function lo(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 uo(e,t){for(let n of e){if(n.required!==!0||n.default!==void 0)continue;let r=t[n.name],s=n.variadic?!Array.isArray(r)||r.length===0:r===void 0,o=n.afterDoubleDash?' (pass it after "--")':"";if(s)throw new b("VALIDATION",`Missing required argument "<${n.name}>"${o}`)}}function fo(e,t,n,r,s=[]){let o={},i=0,a=0;for(let c of e){let{name:l}=c,d=`<${l}>`;Object.defineProperty(o,l,{value:void 0,writable:!0,enumerable:!0,configurable:!0});let g=c.afterDoubleDash?s:t,p=c.afterDoubleDash?0:i,m=p;if(c.variadic){let w=g.slice(p);o[l]=w.length===0&&c.default!==void 0?[qe(c,d)]:Ye(()=>w.map((O,v)=>n(c,O,d,v)),r,d),m=g.length}else if(p<g.length)o[l]=Ye(()=>n(c,g[p],d),r,d),m++;else o[l]=qe(c,d);if(c.afterDoubleDash)a=m;else i=m}return{args:o,consumed:i,consumedAfterDoubleDash:a}}function wn(e,t){return new b("PARSE",`Unknown flag "${e}"`,{flag:t,reason:"unknown-flag"})}function vn(e){return new b("PARSE",`Flag "--${e}" does not take a value`,{flag:e,reason:"unexpected-value"})}function Bn(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 d=e.get(l);if(!d)return wn(l==="-"?t:`-${l}`,l);if(d.def.type==="boolean"){a.push({spelling:d,value:!0});continue}if(c===t.length)return{occurrences:a,pending:d};a.push({spelling:d,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 vn(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 vn(i.canonicalName);return{occurrences:[{spelling:i,value:!1}]}}return wn(`--${r}`,r)}function yn(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 mo(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=Bn(e.flagSpellings,o);if(i===void 0){n.push(o);continue}if(i instanceof b)throw i;for(let{spelling:l,value:d}of i.occurrences)yn(r,l,d);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"});yn(r,i.pending,c),s++}return{positionals:n,separatorIndex:n.length,flagValues:r}}function ut(e){return Array.isArray(e)}function ho(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(ut(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 ${po[r]} for ${n}.`);if(t===!1&&"noNegate"in e&&e.noNegate)throw new b("PARSE",`Flag "${n}" does not support negation`)}function Ke(e,t,n,r){if(ho(e,t,n),e.type!=="string"&&e.type!=="path")return t;return ve(e,String(t),n,r)}function go(e,t,n){let r=`--${e}`;if(t.multiple){if(!ut(n))throw new b("PARSE",`Expected an occurrence array for ${r}`);return n.map((s,o)=>Ke(t,s,r,o))}return Ke(t,n,r)}function ye(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 Un(e,t,n,r,s,o,i){let a=new Set,c=co(e.effectiveFlags,n,s,o,a);return{...fo(e.args,t,r,o,i),flags:c,present:a}}function bo(e,t,n=process.env){let r=mo(e,t),{separatorIndex:s,flagValues:o}=r,i=e.args.at(-1),a=i?.afterDoubleDash===!0,c=a?r.positionals.slice(0,s):r.positionals,l=a?r.positionals.slice(s):[],d=new Map,g=zn(e.effectiveFlags,o,n),{args:p,flags:m,consumed:w,consumedAfterDoubleDash:O,present:v}=Un(e,c,g,ve,Mn,(y,S)=>d.set(S,y),l),u=a?l.slice(O):c.slice(Math.max(w,s)),f=new Set(e.args.filter(({afterDoubleDash:y})=>!y).slice(0,c.length).map(({name:y})=>y));if(a&&l.length>0)f.add(i.name);let h=Object.freeze({args:ye(e.args.map((y)=>[y.name,y]),(y)=>f.has(y)?"argv":void 0),flags:ye(Object.entries(e.effectiveFlags),(y)=>{if(Object.hasOwn(o,y))return"argv";return Object.hasOwn(g,y)&&g[y]!==void 0?"env":void 0}),raw:u.length>0?"argv":void 0});return{args:p,flags:m,excessArgs:c.slice(w,s),rawArgs:u,flagOrder:[...Object.keys(o).filter((y)=>v.has(y)),...[...v].filter((y)=>!Object.hasOwn(o,y)).sort()],...f.size>0&&{suppliedArgs:f},sources:h,...d.size>0&&{valueErrors:d}}}function Wn(e,t){return new b("PARSE",`Argument <${e}> cannot be provided after omitted argument <${t}>`,{argument:e,reason:"positional-gap"})}function Vn(e,t,n={}){let{args:r,flags:s,raw:o}=t,i=[],a=[],c=new Set,l;for(let f of e.args){let h=r&&Object.hasOwn(r,f.name)?r[f.name]:void 0;if(h===void 0){l=f.name;continue}let y=f.afterDoubleDash?a:i;if(l!==void 0&&!f.afterDoubleDash)throw Wn(f.name,l);if(f.variadic){if(!ut(h))throw new b("PARSE",`Expected an occurrence array for <${f.name}>`);if(y.push(...h),h.length>0)c.add(f.name)}else y.push(h),c.add(f.name)}for(let f of Object.keys(r??{}))if(!e.args.some((h)=>h.name===f)&&r?.[f]!==void 0)throw new b("PARSE",`Unknown argument "${f}"`,{argument:f,reason:"unknown-argument"});for(let f of Object.keys(s??{}))if(!Object.hasOwn(e.effectiveFlags,f)&&s?.[f]!==void 0)throw new b("PARSE",`Unknown flag "--${f}"`,{flag:f,reason:"unknown-flag"});let d={},g={};for(let[f,h]of Object.entries(e.effectiveFlags)){let y=s&&Object.hasOwn(s,f)?s[f]:void 0;if(y===void 0)g[f]=h;else d[f]=y}let p=new Set;for(let[f,h]of Object.entries(zn(g,{},n))){if(h===void 0)continue;d[f]=h,p.add(f)}let m=new Map,{args:w,flags:O,present:v}=Un(e,i,d,Ke,(f,h,y)=>p.has(f)?Mn(f,h,y):go(f,h,y),(f,h)=>{if(!h.startsWith("--")||!p.has(h.slice(2)))throw f;m.set(h,f)},a),u=[...Object.keys(s??{}).filter((f)=>v.has(f)&&!p.has(f)),...[...p].filter((f)=>v.has(f)).sort()];return{args:w,flags:O,excessArgs:[],rawArgs:[...o??[]],flagOrder:u,...c.size>0&&{suppliedArgs:c},sources:Object.freeze({args:ye(e.args.map((f)=>[f.name,f]),(f)=>c.has(f)?"run":void 0),flags:ye(Object.entries(e.effectiveFlags),(f)=>v.has(f)?p.has(f)?"env":"run":void 0),raw:o===void 0||o.length===0?void 0:"run"}),...m.size>0&&{valueErrors:m}}}function wo(e,t,n){let{sources:r}=t,s=(w,O)=>Object.fromEntries(Object.entries(w??{}).filter(([v,u])=>u!==void 0&&O[v]!=="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:w,afterDoubleDash:O}of e.args)if(!t.suppliedArgs?.has(w)&&!Object.hasOwn(o,w))c=w;else if(c!==void 0&&!O)throw Wn(w,c);let l=Vn({...e,args:e.args.filter(({name:w})=>Object.hasOwn(o,w)),effectiveFlags:Object.fromEntries(Object.entries(e.effectiveFlags).filter(([w])=>Object.hasOwn(i,w)))},{args:o,flags:i,raw:a}),d=(w,O)=>Object.fromEntries(Object.keys(O).map((v)=>[v,w[v]])),g=(w,O,v)=>Object.freeze(Object.fromEntries([...Object.entries(w).filter(([u])=>!Object.hasOwn(O,u)),...Object.entries(v).map(([u,f])=>[u,f==="run"?"bound":f])])),p=new Set(Object.keys(i).map((w)=>`--${w}`)),m=new Map([...t.valueErrors??[]].filter(([w])=>!p.has(w)));return{...t,args:{...t.args,...d(l.args,o)},flags:{...t.flags,...d(l.flags,i)},rawArgs:a===void 0?t.rawArgs:l.rawArgs,sources:Object.freeze({args:g(r.args,o,l.sources.args),flags:g(r.flags,i,l.sources.flags),raw:a===void 0?r.raw:l.sources.raw&&"bound"}),valueErrors:m}}function vo(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(", ")}`);uo(e.args,t.args),lo(e.effectiveFlags,t.flags)}function yo(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 Oo(e,t,n){if(!yo(e)||n.has(e))return;n.add(e),t.use(e)}function xo(e,t,n,r,s){let o=new Map(e.map((v)=>[v.name,v])),i=new Map,a=new WeakSet,c,l=!0,d=!1;r.defer(()=>{d=!0});let g=(v,u,f=new Set)=>{if(v.name===u)return[v.name];if(f.has(v.name))return;f.add(v.name);for(let h of v.waitingOn){let y=i.get(h);if(!y)continue;let S=g(y,u,f);if(S)return[v.name,...S]}},p=(v)=>{try{let u=new Set;for(let f=v;f!=null&&!u.has(f);f=f.cause)if(u.add(f),f instanceof b&&f.code==="DEFINITION"&&f.details?.reason==="flags-before-validation")return!0;return!1}catch{return!1}};function m(v){let u=Promise.reject(v);return u.catch(()=>{}),u}let w=(v)=>(u)=>{let f=v?` (pulled while constructing Context "${v.name}")`:"";if(d)return m(new b("DEFINITION",`Context "${u}" cannot be pulled from onError because invocation Contexts have already been disposed.`,{subject:"context",name:u,reason:"context-after-disposal"}));let h=o.get(u);if(!h)return m(new b("DEFINITION",`No provider for Context "${u}". Add .provide(${u}(...)) to the app or an ancestor command.${f}`,{subject:"context",name:u,reason:"missing-context"}));if(!l&&!i.has(u))return m(new b("DEFINITION",`Context "${u}" cannot be constructed during invocation cleanup. Read it while setting up the Context whose cleanup needs it.`,{subject:"context",name:u,reason:"context-during-disposal"}));let y=Object.keys(h.ownedFlags).length>0;if(y&&!t.has(u))return m(new b("DEFINITION",`Context "${u}" owns flags that this command does not parse${f}. Declare it with .use(${u}) on the command that reads it.`,{subject:"context",name:u,reason:"context-flags-not-parsed"}));if(c===void 0&&y)return m(new b("DEFINITION",`Context "${u}" owns flags and cannot be pulled before flag validation${f}. Pull it from an action or a postRun hook after a validated invocation.`,{subject:"context",name:u,reason:"flags-before-validation"}));let S=i.get(u);if(!S){let I=Promise.withResolvers();I.promise.catch(()=>{}),S={name:u,promise:I.promise,resolve:I.resolve,reject:I.reject,waitingOn:new Set,settled:!1},i.set(u,S);let E=S;(async()=>{try{let x=Object.fromEntries(Object.keys(h.ownedFlags).map((C)=>[C,c?.[C]])),j=await h.setup({...n,signal:s,flags:x,ctx:O(h.use,E),defer(C){if(E.settled)throw new b("DEFINITION",`Context "${u}" cannot register cleanup after its setup has finished.`,{subject:"context",name:u,reason:"context-defer-after-setup"});r.defer(C)}});Oo(j,r,a),E.resolve(j)}catch(x){if(p(x))i.delete(u);E.reject(x)}finally{E.settled=!0}})()}if(v&&!S.settled){let I=g(S,v.name);if(I)return m(new b("DEFINITION",`Context dependency cycle: ${[v.name,...I].map((E)=>`"${E}"`).join(" -> ")}`,{subject:"context",name:v.name,reason:"context-cycle"}));return v.waitingOn.add(u),S.promise.finally(()=>v.waitingOn.delete(u))}return S.promise},O=(v,u)=>{let f={},h=(y)=>{let S=Pn(y);if(Object.hasOwn(f,S))return;Object.defineProperty(f,S,{enumerable:!0,get:()=>w(u)(S)});for(let I of y.use)h(I)};for(let y of v)h(y);return Object.defineProperty(f,Dn,{value:Object.freeze([...v])}),Object.freeze(f)};return{bag:(v)=>O(v,null),setValidatedFlags(v){c=v},async settle(){for(;;){let v=[...i.values()].filter((u)=>!u.settled);if(v.length===0){l=!1;return}await Promise.allSettled(v.map((u)=>u.promise))}}}}function Hn(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 R(e,t,n,r){n=it(t,n);let s=we(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:_n(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 ft(e,t){let n;for(let{contextName:r,ownedFlags:s}of dt(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)R(e,a,s[a],"owned");(n??=new Map(e.flagContexts)).set(r,[...o,...i])}if(n)e.flagContexts=n}function So(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=dt(t),s=new Set(r.map((i)=>i.contextName)),o=[];for(let i of r){let a=i.contextName;for(let[l,d]of Object.entries(i.ownedFlags)){if(Jn(e.ownedFlags[l],d))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(!Eo(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((d)=>!c.includes(d));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 ee(e){return e.map((t)=>("contextName"in t)?t:t.factory)}function dt(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 Gn(e){return new Set(dt(e).map((t)=>t.contextName))}function Eo(e,t){let n=Object.keys(e);return n.length===Object.keys(t).length&&n.every((r)=>Object.hasOwn(t,r)&&Jn(e[r],t[r]))}function Jn(e,t){let{schema:n,...r}=e,{schema:s,...o}=t;return n===s&&Xe(r,o)}function Xe(e,t){if(e===t)return!0;if(Array.isArray(e))return Array.isArray(t)&&e.length===t.length&&e.every((r,s)=>Xe(r,t[s]));if(!On(e)||!On(t))return!1;let n=Object.keys(e);return n.length===Object.keys(t).length&&n.every((r)=>Object.hasOwn(t,r)&&Xe(e[r],t[r]))}function On(e){if(typeof e!=="object"||e===null)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function K(e){return{localFlags:{...e.localFlags},ownedFlags:{...e.ownedFlags},effectiveFlags:{...e.effectiveFlags},flagSpellings:new Map(e.flagSpellings)}}function te(e){let t=e.subCommands,n=ht.get(t),r=[...gt(t)].map(([s,o])=>({name:s,meta:o,resolve:()=>t[s],definition:n?.get(s)}));return r.push(...qn(e)),r}function qn(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 Yn(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 mt.set(n,r),pt.set(n,s),ht.set(n,o),Object.freeze(n)}function Kn(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 ht.get(r.subCommands)??[])if(i===t)return Object.freeze([...s,o]);n=n.flatMap(({node:r,path:s})=>te(r).map((o)=>({node:o.resolve(),path:[...s,o.name]})))}}function gt(e){return mt.get(e)??Object.entries(e).map(([t,n])=>[t,n.meta])}function Co(e,t){let n=pt.get(e);return n?n.get(t):e[t]}function Io(e){if(e.addedChildren)return;let t=pt.get(e.subCommands);if(!t)return Object.values(e.subCommands);return t.size===mt.get(e.subCommands).size?[...t.values()]:void 0}function bt(e){return{...e,meta:{...e.meta},...K(e),args:[...e.args],subCommands:Yn(te(e),(t)=>bt(t.resolve())),addedChildren:void 0,contexts:e.contexts.map((t)=>({...t})),providedContexts:[...e.providedContexts],demands:[...e.demands],extensions:[...e.extensions]}}function Oe(e){let t={};for(let n of Object.keys(e))if(e[n]!==void 0)t[n]=e[n];return Object.freeze(t)}function wt(e){if(e instanceof URL)return e.href;if(Array.isArray(e))return Object.freeze(e.map(wt));return e}function Xn(e){return e.default===void 0?e.required:void 0}function jo(e){return Oe({name:e.name,type:e.type,description:e.description,required:Xn(e),variadic:e.variadic,afterDoubleDash:e.afterDoubleDash,choices:e.choices?Object.freeze([...e.choices]):void 0,default:wt(e.default),inputSchema:e.schema&&Ie(e.schema,"input")})}function $o(e,t){return Oe({type:e.type,description:e.description,short:e.short,aliases:e.aliases?Object.freeze([...e.aliases]):void 0,required:Xn(e),multiple:e.multiple,negatable:_n(e),noNegate:"noNegate"in e?e.noNegate:void 0,choices:e.choices?Object.freeze([...e.choices]):void 0,default:wt(e.default),env:e.env?Oe({name:e.env.name,delimiter:e.env.delimiter}):void 0,delimiter:e.delimiter,inputSchema:e.schema&&Ie(e.schema,"input"),extension:t})}function vt(e){let t={};for(let[n,r]of Object.entries(e.subCommands))t[n]=vt(r);return tt(e,et(e),Object.freeze(t))}function Ze(e){if(e instanceof URL)return!0;if(Array.isArray(e))return!Object.isFrozen(e)||e.some(Ze);return!1}function No(e,t){Qe.set(e,[...Qe.get(e)??[],t])}function Zn(e){let t=xn.get(e);if(t!==void 0)return t;let n=!e.args.some((r)=>Ze(r.default))&&!Object.values(e.effectiveFlags).some((r)=>Ze(r.default));if(n){let r=Io(e);if(!r)return;for(let s of r){let o=Zn(s);if(o===void 0)return;n&&=o}}return xn.set(e,n),n}function yt(e,t=!1){let n=new Map,r,s=(c)=>{let l=Sn.get(c);if(l)return l;let d={};for(let[p,m]of Object.entries(c.subCommands))d[p]=s(m);let g=tt(c,et(c),Object.freeze(d));return Sn.set(c,g),g},o=(c)=>{if(r??=!t&&Zn(e)===!0,r)return s(c);let l=n.get(c);if(l)return l;let d=i(c);return n.set(c,d),d},i=(c)=>{let l={};for(let[d,g]of gt(c.subCommands)){let p;Object.defineProperty(l,d,{enumerable:!0,get:()=>p??=a(c,d,g)})}return tt(c,et(c),Object.freeze(l),t)},a=(c,l,d)=>{let g=Co(c.subCommands,l);if(g)return o(g);let p,m=()=>{if(p)return p;let O=c.subCommands[l];if(p=n.get(O)??i(O),!n.has(O))n.set(O,w);return p},w=Object.freeze(Object.defineProperties({},{meta:{enumerable:!0,value:Object.freeze(Object.defineProperty({...Qn(d,void 0)},"sections",{enumerable:!0,get:()=>m().meta.sections}))},hasAction:{enumerable:!0,get:()=>m().hasAction},args:{enumerable:!0,get:()=>m().args},flags:{enumerable:!0,get:()=>m().flags},outputSchema:{enumerable:!0,get:()=>m().outputSchema},output:{enumerable:!0,get:()=>m().output},extension:{enumerable:!0,get:()=>m().extension},subCommands:{enumerable:!0,get:()=>m().subCommands}}));return w};return o}function et(e){let t={};for(let[n,r]of Object.entries(e.effectiveFlags))t[n]=$o(r,e.extensionFlags?.get(n));return t}function Qn(e,t){return Oe({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 tt(e,t,n,r=!1){let s=r?void 0:Qe.get(e),o=s?[...e.meta.sections??[],...s]:e.meta.sections,i=e.outputSchema&&Ie(e.outputSchema,"output");return Object.freeze({meta:Qn(e.meta,o),hasAction:e.run!==void 0,args:Object.freeze(e.args.map(jo)),flags:Object.freeze(t),...i?{outputSchema:i}:{},...e.outputSchema?{output:!0}:{},...e.extension?{extension:e.extension}:{},subCommands:n})}function _o(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 Ao(e,t){if(!t.some((r)=>r.sections!==void 0))return;let n=yt(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=Tn(o,s);No(_o(e,o.command,r),i)}}}function To(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 ko(e,t){return t?e.contexts.map(({instance:n})=>n):e.providedContexts}function Fo(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))R(o,a,c,"owned");for(let[i,a]of Object.entries(e.effectiveFlags))R(o,i,a,Object.hasOwn(e.localFlags,i)?"local":"owned");return o}function er(e,t,n){let r=yt(e)(e);return new b("COMMAND_NOT_FOUND",`Unknown command "${t}".`,{input:t,available:Object.entries(r.subCommands).flatMap(([s,o])=>at(o)?[s]:[]),commandPath:[...n],parentCommand:r})}function Do(e,t){for(let[n,r]of gt(e))if(r.aliases?.includes(t))return{canonicalName:n,node:e[n]};return null}function En(e,t){let n=Bn(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 Ot(e,t){let n=[e.meta.name],r=e,s=t,o=[],i=[],a=(c,l)=>{if(i.length===0)return;let d=c.flagSpellings;for(let{token:g,spelling:p,consumesValue:m}of i){let w=En(d,g);if(w!==null&&w.consumesValue===m)continue;throw new b("PARSE",`Flag "${p}" cannot be used before subcommand "${l}" because "${l}" does not accept it.`,{flag:p,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 g=En(r.flagSpellings,l);if(!g)break;o.push(l),i.push({token:l,spelling:g.spelling,consumesValue:g.consumesValue}),s=s.slice(1);let p=s[0];if(g.consumesValue&&p!==void 0)o.push(p),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 d=Do(c,l);if(d){a(d.node,l),r=d.node,n.push(d.canonicalName),s=s.slice(1);continue}if(r.run)break;throw er(r,l,n)}return{command:r,argv:[...o,...s],commandPath:n}}function tr(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 In(){let e=xe;if(xe=void 0,e&&process.exitCode===e.exitCode&&process.listenerCount(e.name)===0)process.kill(process.pid,e.name)}function nr(e){if(!(e instanceof Error))return!1;return e.name==="AbortError"}function xt(e){return rr(e)&&"error"in e&&"suppressed"in e&&e.name==="SuppressedError"}function rt(e){let t=[],n=new Set;try{let r=e;while(!nr(r)){if(!xt(r)||n.has(r))return;n.add(r),t.push(r.error),r=r.suppressed}}catch{return}return t}function rr(e){return typeof e==="object"&&e!==null}function sr(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(rr(a)){if(n.has(a))return;n.add(a)}let c=t.length;if(xt(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 d=0;d<l.length;d++)if(o(()=>l[d]),s)break;if(t.length>c)return}}t.push(a)}catch{t.push(Error("[unreadable failure]"))}};return o(()=>e),t}function or(e){try{return String(e instanceof Error&&e.message||e)}catch{return"[unreadable failure]"}}function St(e,t="Error"){return sr(e).map((n)=>`${t}: ${or(n)}`).join(`
11
+ `)}function Mo(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 Lo(e){return typeof e==="symbol"}function zo(e,t){let n=Object.freeze([...e.extensions]),r=n.flatMap((u)=>Object.entries(u.flags).map(([f,{recursive:h=!0,...y}])=>({name:f,def:y,recursive:h,by:u.id}))).sort((u,f)=>u.name<f.name?-1:u.name>f.name?1:0),s=(u)=>new Map(r.filter(({recursive:f})=>u||f).map(({name:f,by:h})=>[f,h])),o=s(!0),i=s(!1),a=new Map,c,l;for(let u of n){for(let[f,h]of Object.entries(u.handlers)){let y=u.flags[f];a.set(f,{...h,by:u.id,rootOnly:y?.recursive===!1,boolean:y?.type==="boolean"})}if(u.hooks.renderer){if(l)throw new b("DEFINITION",`Extensions "${l.by}" and "${u.id}" both set renderer; an application can have one`,{subject:"extension",name:u.id,reason:"duplicate-renderer"});l={by:u.id,select:u.hooks.renderer}}if(!u.hooks.noAction)continue;if(c)throw new b("DEFINITION",`Extensions "${c.by}" and "${u.id}" both set noAction; an application can have one`,{subject:"extension",name:u.id,reason:"duplicate-no-action"});c={by:u.id,run:u.hooks.noAction}}let d=n.flatMap((u)=>{let f=e.extensionPositions.get(u.id);return u.provide.map((h)=>({instance:h,position:f,extension:u.id}))}),g=n.flatMap((u)=>u.use),p=new Map,m=(u)=>{let f=p.get(u);if(!f)p.set(u,f=Fo(u,d));return f},w=(u)=>{if(d.length===0)return u.resolve();let f=$n.get(e.extensions);if(!f)$n.set(e.extensions,f=new WeakMap);let h=f.get(u);if(!h)h=t(u.definition,m(u.parent)),f.set(u,h);return h},O=(u,f,h,y)=>{for(let x of u.usedExtensions)if(!n.some((j)=>j.id===x))throw new b("DEFINITION",`Command "${f}" uses Extension "${x}", which the application does not extend`,{subject:"extension",name:x,reason:"missing-extension"});let S=new Map(h?qn(u).map((x)=>[x.name,{name:x.name,meta:x.meta,resolve:()=>w(x),definition:x.definition}]):te(u).map((x)=>[x.name,x])),I=new Map;if(h){let x=new Set;for(let{meta:j}of S.values()){x.add(j.name);for(let C of j.aliases??[])x.add(C)}for(let j of n)for(let C of j.commands){let W={name:C.name,...C[L].meta},D=[W.name,...W.aliases??[]];if(D.some((_)=>x.has(_)))throw new b("DEFINITION",`Extension "${j.id}" command "${C.name}" collides with an existing command`,{subject:"command",name:C.name,reason:"command-collision"});for(let _ of D)x.add(_);I.set(C.name,j.id);let N;S.set(C.name,{name:C.name,meta:W,resolve:()=>N??=t(C,u,j.id),definition:C})}}let E={...u,meta:{...u.meta},...K(u),args:[...u.args],subCommands:Yn(S.values(),(x)=>O(x.resolve(),`${f} ${x.name}`,!1,y??I.get(x.name))),addedChildren:void 0,contexts:u.contexts.map((x)=>({...x})),providedContexts:[...u.providedContexts],demands:[...u.demands],extensions:[...u.extensions],extensionFlags:h?o:i,extension:y};for(let{name:x,def:j,recursive:C}of r)if(h||C)R(E,x,j,"owned");return ft(E,g),So(E,[...E.inheritedDemands,...ee(E.demands),...g]),To(E,f,ko(E,h)),Mo(E),E},v=m(e);return Ce(v.contexts.map(({instance:u})=>u),n.flatMap((u)=>[...u.use,...u.provide])),{rootNode:O(v,e.meta.name,!0),extensions:n,handlers:a,...c&&{noAction:c},...l&&{renderer:l}}}function ne(e,t){let n=jn.get(e);if(n)return n;let r=zo(e,t);return Ao(r.rootNode,r.extensions),jn.set(e,r),r}function Bo(e,t,n){let r=Ot(e,t);return{argv:t,route:r,parsed:bo(r.command,r.argv,n)}}function Et(e,t){let n=Ot(e,t);if(n.argv.length>0)throw er(n.command,n.argv[0],n.commandPath);return n}function Uo(e,t,n,r){let s=Et(e,t);return{argv:t,route:s,parsed:Vn(s.command,n,r)}}function ir(e,t){let n=yt(e.rootNode);return{get rootCommand(){return n(e.rootNode)},get command(){return n(t)}}}function Wo(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 Vo(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 ar(e,t,n,r,s,o,i){let x=[];try{let{rootNode:a,extensions:c}=t;if(!t.renderer)n.choose(void 0);let l=e.env??process.env;let{argv:d,route:g,parsed:p}="argv"in e?Bo(a,e.argv,l):Uo(a,e.path,e.input,l);let m=g.command;let w=p;const O=rn(x,new AsyncDisposableStack,1);let v=m.contexts.map(({instance:N})=>N);let u=xo(v,m.flagContexts,n.routed,O,r);let f=ir(t,m);let h=!1;let y=Object.freeze({argv:[...d],get rootCommand(){return f.rootCommand},get command(){return f.command},commandPath:Object.freeze([...g.commandPath]),commandPathOf:(N)=>Kn(a,N),get args(){return w.args},get flags(){return w.flags},get rawArgs(){return w.rawArgs},get sources(){return w.sources},signal:r,ctx:u.bag(c.flatMap((N)=>N.use)),bindInput(N){w=wo(m,p,N)},stdout:n.io.stdout,stderr:n.io.stderr,defer(N){if(!h)throw new b("DEFINITION","Extension cleanup can only be registered while Extension setups run.",{subject:"extension",reason:"extension-defer-after-setup"});O.defer(N)}});o?.(y);let S=async()=>{vo(m,w);let N=await ro(m,w);u.setValidatedFlags(N.flags);let _;if(m.run){let k={args:N.args,flags:N.flags,ctx:u.bag(v),rawArgs:w.rawArgs,signal:r,get command(){return f.command},get rootCommand(){return f.rootCommand},stdout:n.routed.stdout,stderr:n.routed.stderr};if(_=await m.run(k),Vo(_))_=await I(_,s.events=[])}let A=m.outputSchema?await so(m.outputSchema,_):_;if(m.run)n.renderer?.result?.(A);return A};let I=async(N,_)=>{let A=!1;try{n.renderer?.stream?.();for(;;){r.throwIfAborted();let k=await N.next();if(A=k.done===!0,r.throwIfAborted(),k.done)return k.value;_.push(k.value),n.renderer?.event?.(k.value),s.onEvent?.(k.value)}}catch(k){if(A)throw k;try{for(let ce=await N.return(void 0);!ce.done;)ce=await N.next()}catch(ce){throw new SuppressedError(ce,k,"Closing the action's generator failed.")}throw k}};let E;try{try{h=!0;try{for(let A of c)await A.hooks.setup?.(y)}catch(A){h=!1;try{if(t.renderer)n.choose(await t.renderer.select(y))}catch{}throw A}finally{h=!1}if(t.renderer)n.choose(await t.renderer.select(y));let _=Wo(t.handlers,p,m===a)??(m.run?void 0:t.noAction);if(_)await _.run(y),E={status:"handled",by:_.by};else{if(m.run)for(let A of c)await A.hooks.preRun?.(y);E={status:"completed",result:await S(),...be(s)}}}catch(_){if(!n.renderer)n.choose(void 0);let A=await i?.(_,y);E={status:"failed",error:_,...A===void 0?{}:{by:A},...be(s)}}Object.freeze(E);let N;for(let _ of c.toReversed())try{await _.hooks?.postRun?.(y,E)}catch(A){if(E.status!=="failed")N??={error:A}}if(E.status==="failed")throw E.error;if(N)throw N.error}finally{await u.settle()}return E.status==="handled"?{status:"handled",by:E.by}:{status:"completed",result:E.result,...be(s)}}catch(j){var C=j,W=1}finally{var D=sn(x,C,W);D&&await D}}function be(e){return e.events?{events:Object.freeze(e.events)}:{}}async function Nn(e,t,n,r,s,o){let i=o;if(!i){let l=function(m){return Promise.reject(new b("DEFINITION",`Context "${String(m)}" cannot be pulled from onError because invocation Contexts have already been disposed.`,{subject:"context",name:String(m),reason:"context-after-disposal"}))},d=new Proxy({},{get:(m,w)=>w==="then"||Lo(w)?void 0:l(w)}),g;try{g=Ot(n.rootNode,t)}catch{}let p=ir(n,g?.command??n.rootNode);i=Object.freeze({argv:[...t],get rootCommand(){return p.rootCommand},get command(){return p.command},commandPath:Object.freeze(g?[...g.commandPath]:[n.rootNode.meta.name]),commandPathOf:(m)=>Kn(n.rootNode,m),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:d})}try{for(let l of n.extensions)if(await l.hooks?.onError?.(e,i))return l.id}catch{}let a=rt(e);if(a){for(let l of a)cr(l,r,"Error");return}let c=r.renderer;if(c?.error)try{c.error(e);return}catch{}r.io.stderr(St(e))}function cr(e,t,n){let r=t.renderer;if(!r?.cleanup){t.io.stderr(St(e,n));return}for(let s of sr(e))try{r.cleanup(s)}catch{t.io.stderr(`${n}: ${or(s)}`)}}function Ho(e){return e!==void 0&&Object.keys(e).length>0}async function lr(e,t,n,r){let s=[],o=[],i={onEvent:n?.onEvent};try{let{signal:a=new AbortController().signal,env:c,...l}=n??{},d={stdout(g){s.push(g),l.stdout?.(g)},stderr(g){o.push(g),l.stderr?.(g)}};return{...await We(d,async()=>{let g=ne(e,r);return await ar({...t,env:c},g,tr(d),a,i)},a),stdout:s.join(`
11
12
  `),stderr:o.join(`
12
- `)}}catch(a){return{status:"failed",error:a,...ue(i),stdout:s.join(`
13
+ `)}}catch(a){return{status:"failed",error:a,...be(i),stdout:s.join(`
13
14
  `),stderr:o.join(`
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(`
15
+ `)}}}async function ur(e,t,n){let r=t?.argv??process.argv.slice(2),s={...Po,...t?.io},o=new AbortController,i=t?.signal?AbortSignal.any([t.signal,o.signal]):o.signal,a=void 0,c=Ho(t?.io);xe=void 0,process.removeListener("beforeExit",In);let l=async()=>{let d;try{d=ne(e,n)}catch(h){if(nr(h))return process.exitCode=ge,ge;return s.stderr(St(h)),process.exitCode=1,1}let g=Number.NEGATIVE_INFINITY,p=ge,m,w=(h)=>{if(!o.signal.aborted){if(g=performance.now(),!i.aborted)m=h,p=nt[h].exitCode;o.abort(new DOMException(nt[h].message,"AbortError"));return}if(performance.now()-g<Ro)return;if(process.removeListener(h,w),process.listenerCount(h)===0)process.kill(process.pid,h)};for(let h of Cn)if(!J(h))process.on(h,w);let O=tr(s),v,u,f=0;try{await ar({argv:r,env:t?.env},d,O,i,{onEvent:t?.onEvent},(h)=>{v=h},async(h,y)=>{u={error:h};let S=rt(h)!==void 0;return process.exitCode=S?p:1,Nn(h,r,d,O,i,y)})}catch(h){let y;try{if(u&&!Object.is(h,u.error)&&xt(h)&&Object.is(h.suppressed,u.error))y={error:h.error}}catch{}if(y)cr(y.error,O,"Cleanup failed");if(f=rt(h)===void 0?1:p,process.exitCode=f,!u)await Nn(h,r,d,O,i,v),process.exitCode=f}finally{if(!c){let{setImmediate:h}=process.getBuiltinModule("node:timers");await new Promise((y)=>h(y))}for(let h of Cn)process.removeListener(h,w)}if(m===void 0)return f;if(process.exitCode=p,!c&&process.platform!=="win32")xe={name:m,exitCode:p},process.once("beforeExit",In);return p};return await(c?We(s,l,i):mn(i,l))}var b,Xs,eo,kn,Dn,po,L,mt,pt,ht,Qe,xn,Sn,Po,Ro=50,ge=130,nt,Cn,xe,jn,$n;var Ct=T(()=>{le();Q();hn();bn();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}}},Xs=/^(0|[1-9]\d*)$/;eo={command:"Command",context:"Context",extension:"Extension"};kn=Symbol("crust.defining");Dn=Symbol.for("crust.contextSources");po={string:"a string",path:"a string",number:"a number",boolean:"a boolean",url:"a URL",json:"a JSON value"};L=Symbol.for("crust.commandDefinition");mt=new WeakMap,pt=new WeakMap,ht=new WeakMap;Qe=new WeakMap;xn=new WeakMap,Sn=new WeakMap;Po={stdout:(e)=>Z(1,`${e}
16
+ `),stderr:(e)=>Z(2,`${e}
17
+ `)};nt={SIGINT:{message:"Interrupted by SIGINT.",exitCode:ge},SIGTERM:{message:"Terminated by SIGTERM.",exitCode:143}},Cn=Object.keys(nt);jn=new WeakMap,$n=new WeakMap});function fr(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 dr=()=>{};function Jo(){let{Bun:e}=globalThis,t=e?.main??"";return t.startsWith("/$bunfs/")||/^[A-Za-z]:[\\/]~BUN[\\/]/.test(t)||process.getBuiltinModule?.("node:sea")?.isSea()===!0}function qo(){return!0}function It(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(Jo())return n(t(process.execPath),e);if(qo())return r(process.getBuiltinModule("node:url").fileURLToPath(import.meta.url),"..","..",e);let s=process.env[Go];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?fr(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 Go="CRUST_INTERNAL_BUILD_OUT_DIR";var mr=T(()=>{dr()});function gr(e){let t=Object.freeze(ot(e.flags));ot(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)=>gr({...e,...i}),s={id:e.id,use:(...i)=>r({use:[...e.use,...i.map(M)]}),provide:(...i)=>r({provide:[...e.provide,...i.map(M)]}),flags:(i)=>r({flags:[...e.flags,...st(i).map(([a,c])=>[a,Ee(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=M(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=Fn(s,n);return o}function $t(e){return gr({id:e,use:[],provide:[],flags:[],commands:[],hooks:{},handlers:{}})}function Nt(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 Ko(e){let t=e.addedChildren,n=t===void 0?void 0:jt.get(t);if(n!==void 0)return jt.delete(t),n;let r=new Set;for(let{meta:s}of te(e)){r.add(s.name);for(let o of s.aliases??[])r.add(o)}return r}function re(e,t,n){let r=e[L],s=e.name,o=n?`Extension "${n}" command "${s}"`:`Command "${s}"`,i=(d)=>({subject:n?"extension":"command",name:n??s,reason:d}),a=new je(s);if(r.inline){for(let[d,g]of Object.entries(t.ownedFlags))R(a._node,d,g,"owned");a._node.flagContexts=t.flagContexts,a._node.inheritedDemands=[...t.inheritedDemands,...ee(t.demands)]}a._node.contexts=t.contexts.map((d)=>({...d}));let c=r.recipe(a);if(!(c instanceof je)||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=bt(c._node);return Ce(l.contexts.map(({instance:d})=>d),l.demands),l.meta={name:s,...r.meta},l}function br(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 pr(e,t=[]){if(br(e,t),!Se(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 Xo(e){return typeof e==="function"}function wr(e,t,n){let r=!Xo(t),s=r?t:{},o=r?n:t,i=pr(e,s.aliases);for(let m of s.aliases??[])if(!Se(m))throw new b("DEFINITION",`Command "${i}" has an invalid alias "${m}"`,{subject:"command",name:i,reason:"invalid-alias"});let{sections:a,version:c,...l}=s,d={...l,...s.aliases?{aliases:[...s.aliases]}:{},...a?{sections:lt(i,a)}:{}},g={name:i,recipe:o,meta:d},p=(m)=>Object.freeze({name:m,as:(w)=>p(pr(w,d.aliases)),[L]:Object.freeze({...g,name:m})});return p(i)}function Zo(e){return e.filter((t,n)=>e.findLastIndex((r)=>r.id===t.id)===n)}async function hr(e,t,n){let r=n[0]??{},s=n[1];return await lr(e,{path:t,input:r},s,re)}var jt,je=class{_node;_ancestorOwnedFlags;constructor(e,...t){let n=t[0]??{},r=br(e);if(this._node=Hn(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=lt(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(K(this._node));for(let[n,r]of st(e))R(t._node,n,r,"local");return t}args(...e){let t=[...this._node.args,...e.map(An)],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"});n.add(s.name);let o=r===t.length-1;if(s.afterDoubleDash===!0&&!o)throw new b("DEFINITION",`Only the last positional argument can take the tokens after "--"; "${s.name}" is not last`,{subject:"argument",name:s.name,reason:"after-double-dash-position"});let i=r===t.length-2&&t.at(-1)?.afterDoubleDash===!0;if(s.variadic===!0&&!o&&!i)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(M(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}=M(s);n.push(o),t.push(...i)}let r=this._clone({...K(this._node),demands:[...this._node.demands,...t],usedExtensions:[...this._node.usedExtensions,...n]});return ft(r._node,ee(t)),r}provide(...e){let t=e.map(M);Ce([...this._node.extensions.flatMap((o)=>o.provide),...this._node.contexts.map(({instance:o})=>o),...t],t);let n=this._clone({...K(this._node),contexts:[...this._node.contexts,...t.map((o)=>({instance:o}))],providedContexts:[...this._node.providedContexts,...t]}),r=Gn([...this._node.inheritedDemands,...ee(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)R(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(M),n=Zo([...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,n){let r=wr(e,t,n),s=Object.freeze({...r[L],inline:!0});return this._addDefinitions([{...r,[L]:s}])}_addDefinitions(e){let t=this._node.addedChildren,n=Ko(this._node),r=this._node;for(let s of e){let o=[s.name,...s[L].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[L].meta},resolve:()=>i??=re(s,r),next:t,definition:s,parent:r};for(let a of o)n.add(a)}if(t!==void 0)jt.set(t,n);return this._clone({addedChildren:t})}async snapshot(){return vt(ne(this._node,re).rootNode)}async run(e,...t){return await hr(this._node,e,t)}at(e){Et(ne(this._node,re).rootNode,e);let t=this._node,n=Object.freeze([...e]);return{path:n,async run(...r){return await hr(t,n,r)}}}async execute(e){return await ur(this._node,e,re)}};var _t=T(()=>{Ct();mr();jt=new WeakMap});function Qo(e){return typeof e==="number"&&!Number.isFinite(e)}function ei(e){if(Qo(e))return String(e);if(Array.isArray(e))return e.map(String).join(", ");return JSON.stringify(e)??String(e)}function At(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: ${ei(t)}]`));if(n?.length)o.push(r(`[choices: ${n.join(", ")}]`));return o.join(" ")}function ti(e){if(e.afterDoubleDash){let n=`-- <${e.name}>${e.variadic?"...":""}`;return e.required?n:`[${n}]`}let t=e.variadic?`${e.name}...`:e.name;return e.required?`<${t}>`:`[${t}]`}function ni(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 Tt(e,t=[e.meta.name]){let n=e.args.map((d)=>Object.freeze({...d,token:ti(d),required:d.required===!0,variadic:d.variadic===!0,afterDoubleDash:d.afterDoubleDash===!0})),r=n.at(-1)?.afterDoubleDash===!0?n.slice(-1):[],s=n.slice(0,n.length-r.length),o=(d)=>d.map((g)=>({kind:"arg",text:g.token,required:g.required})),i=Object.entries(e.subCommands).flatMap(([d,g])=>at(g)?[Tt(g,[...t,d])]:[]),a=ni(e.flags),c=e.meta.usage?[{kind:"custom",text:e.meta.usage}]:[{kind:"path",text:t.join(" ")},...i.length>0&&!e.hasAction?[{kind:"command",text:"<command>"}]:[],...o(s),...a.length>0?[{kind:"options",text:"[options]"}]:[],...o(r)],l=c.map((d)=>d.text).join(" ");return Object.freeze({name:e.meta.name,path:Object.freeze([...t]),description:e.meta.description,aliases:Object.freeze([...e.meta.aliases??[]]),usage:l,usageSegments:Object.freeze(c.map((d)=>Object.freeze(d))),hasAction:e.hasAction,args:Object.freeze(n),flags:Object.freeze(a),sections:Object.freeze([...e.meta.sections??[]]),children:Object.freeze(i)})}function yr(e){return ri.test(e)}var ri,vr='letters, digits, ".", "_", and "-", starting with a letter or digit';var kt=T(()=>{Ct();ri=/^[A-Za-z0-9][A-Za-z0-9._-]*$/});function Er(e){let t=[...V];V.clear(),Ir();for(let n of t)n.onSignal(e);if(process.listenerCount(e)===0)process.kill(process.pid,e)}function Cr(){for(let e of V)e.onExit()}function Ir(){for(let e of Sr)process.removeListener(e,Er);process.removeListener("exit",Cr)}function si(e){if(V.size===0){for(let t of Sr)if(!J(t))process.prependListener(t,Er);process.on("exit",Cr)}return V.add(e),()=>{if(V.delete(e)&&V.size===0)Ir()}}function ii(e){let t=e.replace(/(?=(\\+?)?)\1"/g,"$1$1\\\"");return t=t.replace(/(?=(\\+?)?)\1$/g,"$1$1"),t=`"${t}"`.replace(Dt,"^$1"),t.replace(Dt,"^$1")}function ai(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(oi.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(Dt,"^$1"),...t.map(ii)].join(" ");return{command:process.env.ComSpec??"cmd.exe",args:["/d","/s","/c",`"${o}"`],windowsVerbatimArguments:!0}}function Ft(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(q(t)&&t.code==="ESRCH")return;throw e.kill("SIGKILL"),t}}async function se(e,t=[],n={}){n.signal?.throwIfAborted();let r=ai(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(" "),d,g=new Promise((h,y)=>{d=(S,I)=>{let E=Error(S);try{Ft(c)}catch(x){E=Error(`Process-tree cleanup failed after ${I}.`,{cause:x})}c.stdout?.destroy(),c.stderr?.destroy(),y(E)}}),p=n.timeout,m=p===void 0?void 0:setTimeout(()=>d(`${l} did not exit within ${p} ms and was killed.`,"timeout"),p),w=i?si({onSignal:(h)=>d(`${l} was interrupted by ${h}.`,h),onExit:()=>{try{Ft(c)}catch{}}}):()=>{},O,v=()=>{try{if(i||process.platform==="win32")Ft(c);else c.kill("SIGTERM"),O=setTimeout(()=>c.kill("SIGKILL"),5000)}catch{}};n.signal?.addEventListener("abort",v,{once:!0});let{text:u}=process.getBuiltinModule("node:stream/consumers"),{once:f}=process.getBuiltinModule("node:events");try{let[h,y,[S]]=await Promise.race([Promise.all([o?u(c.stdout):"",s?u(c.stderr):"",f(c,"close")]),g]);return n.signal?.throwIfAborted(),{exitCode:S,stdout:h,stderr:y}}finally{clearTimeout(m),clearTimeout(O),w(),n.signal?.removeEventListener("abort",v)}}function xr(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 Pt(e){let{delimiter:t,extname:n,join:r,resolve:s,sep:o}=process.getBuiltinModule("node:path");if(e.includes(o)||e.includes("/"))return xr(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(xr(l))return l}return null}var Sr,V,oi,Dt;var jr=T(()=>{ue();le();Sr=["SIGINT","SIGTERM","SIGHUP","SIGQUIT"],V=new Set;oi=/[\0\r\n"%!^`<>&|]/,Dt=/([()\][%!^"`<>&|;, *?])/g});function $r(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 Nr=()=>{};function $i(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 Ni(e){return Ci.test(String.fromCodePoint(e))||e>=4448&&e<=4607||e>=55216&&e<=55295}function _i(e){if(!Br.test(e))return e.length;let t=e.replace(ji,"");if(!Br.test(t))return t.length;zr??=new Intl.Segmenter(void 0,{granularity:"grapheme"});let n=0;for(let{segment:r}of zr.segment(t)){if(Ii.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(Ni(o))continue;n+=$i(o)?2:1;break}}return n}function z(e){return globalThis.Bun?.stringWidth(e,{countAnsiEscapeCodes:!1})??_i(e)}function Wr(e,t,n=" "){let r=z(e);if(r>=t)return e;return e+n.repeat(t-r)}function Ti(e){return Object.hasOwn(Vr,e)}function oe(e,t,n){return e!==void 0&&t in e?e[t]:n}function Jr(e){return(e!==void 0&&"isTTY"in e?e.isTTY:process.stdout?.isTTY)??!1}function qr(e){return oe(e,"forceColor",process.env.FORCE_COLOR)}function Yr(e){return e==="0"||e==="false"}function Kr(e){return e?.toLowerCase()==="dumb"}function ki(e){let t=e.toLowerCase();return t.includes("24bit")||t.includes("truecolor")||t.endsWith("-direct")}function Fi(e,t){if(e!==void 0){let n=e.toLowerCase();if(n==="truecolor"||n==="24bit")return!0}return t!==void 0&&ki(t)}function Ur(e,t){if(Fi(e,t))return"truecolor";if(t!==void 0&&t.toLowerCase().includes("256color"))return"256";return"16"}function Xr(e,t){if(e==="never")return"none";if(e==="always")return"truecolor";let n=oe(t,"colorTerm",process.env.COLORTERM),r=oe(t,"term",process.env.TERM),s=qr(t);if(s!==void 0){if(Yr(s))return"none";if(s==="1")return"16";if(s==="2")return"256";if(s==="3")return"truecolor";return Ur(n,r)}if(!Jr(t))return"none";let o=oe(t,"noColor",process.env.NO_COLOR);if(o!==void 0&&o!=="")return"none";if(Kr(r))return"none";return Ur(n,r)}function Zr(e,t){if(e==="always")return!0;if(e==="never")return!1;let n=qr(t);if(n!==void 0)return!Yr(n);return Jr(t)&&!Kr(oe(t,"term",process.env.TERM))}function Di(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 Pi(e){return Array.isArray(e)&&"raw"in e&&Array.isArray(e.raw)}function Ri(e,t){if(!Pi(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 Bt(e,t){return(n,...r)=>{let s=Ri(n,r);return t()?Di(s,e):s==null?"":String(s)}}function $e(e){let t=e?.mode??"auto",n=Zr(t,e?.overrides),r=Xr(t,e?.overrides)!=="none",s=()=>n,o=()=>r;return Object.freeze(Object.fromEntries(Gr.map((i)=>[i,Bt(Ai[i],Ti(i)?s:o)])))}function Qr(e,t){return Bt({open:`\x1B[${e}m`,close:`\x1B[${t}m`},zi)}function ie(e,t){return Bt({open:`\x1B[${e}m`,close:`\x1B[${t}m`},Bi)}var zr,Br,Ci,Ii,ji,Vr,Hr,Gr,Ai,Mi="\x1B]",Li="\x1B\\",Jc,zi=()=>Zr("auto"),Bi=()=>Xr("auto")!=="none",Ne,H,Ut,es,B,P,G;var _e=T(()=>{Br=/[^\x20-\x7e]/,Ci=/[\p{Cc}\p{Cf}\p{Mn}\p{Me}]/u,Ii=/\p{Emoji_Presentation}|\p{Emoji}\uFE0F/u,ji=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");Vr={bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},Hr=Object.assign({},Vr,{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]}),Gr=Object.freeze(Object.keys(Hr)),Ai=Object.freeze(Object.fromEntries(Gr.map((e)=>{let[t,n]=Hr[e];return[e,{open:`\x1B[${t}m`,close:`\x1B[${n}m`}]})));Jc=`${Mi}8;;${Li}`;Ne=ie(31,39),H=ie(32,39),Ut=ie(33,39),es=ie(35,39),B=ie(36,39),P=Qr(1,22),G=Qr(2,22)});function ts(e,t){return t?Ut(e):G(Ut(e))}function Hi(e){switch(e.kind){case"path":case"custom":return H(e.text);case"command":case"options":return B(e.text);case"arg":return ts(e.text,e.required)}}function Wt(e,t,n){if(n.length===0)return[];let r=Math.max(t,...n.map(([s])=>z(s)+1));return[P(B(`${e}:`)),...n.map(([s,o])=>` ${Wr(s,r)} ${o}`.trimEnd())]}function Gi(e){let t=H(e.name);return e.aliases.length===0?t:`${t} (${e.aliases.join(", ")})`}function ns(e,t,n){let r=Tt({...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?`${P(s)} - ${G(r.description)}`:P(s),"",P(B("Usage:")),` ${r.usageSegments.map(Hi).join(" ")}`];for(let i of[Wt("Commands",Vi,r.children.map((a)=>[Gi(a),a.description??""])),Wt("Arguments",Wi,r.args.map((a)=>[ts(a.token,a.required),At(a.description,a.default,a.choices,G)])),Wt("Options",Ui,r.flags.map((a)=>[B(a.spellings.join(", ")+(a.type==="boolean"?"":` <${a.type}>`)),At(a.description,a.default,a.choices,G,a.env?.name)]))])if(i.length>0)o.push("",...i);for(let i of ct(r.sections,n))o.push("",P(B(`${i.title}:`)),...i.body.split(`
17
18
  `).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+`:
19
+ `)}var Ui=28,Wi=18,Vi=10;var rs=T(()=>{kt();_e()});import*as U from"node:readline";function gs(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 aa(e){if((e.isTTY??!1)===(process.stdout?.isTTY??!1))return ia;return gs($e({overrides:{isTTY:e.isTTY}}))}function ke(e){let t=pe();return{input:e?.input??t?.input??process.stdin,output:e?.output??t?.output??process.stderr,signal:e?.signal??Y()}}function Zt(e){return{[Xt]:e}}function ua(e,t){let n=e.split(`
20
+ `),r=0;for(let s of n){let o=z(s);r+=o===0?1:Math.ceil(o/t)}return r}function Kt(e=ke().input){return!!e.isTTY}function ms(e=ke().input){if(!Kt(e))throw new fa}function da(e){return typeof e==="object"&&e!==null&&Xt in e}function Qt(e,t){let{render:n,handleKey:r,initialState:s,renderSubmitted:o}=e,{input:i,output:a,signal:c}=ke(t),l={...aa(a),...e.theme},d=a;return new Promise((g,p)=>{if(c?.aborted){p(c.reason);return}if(qt.has(i)||Yt.has(a)){p(Error("Cannot run multiple prompts concurrently on the same input or output stream. Await each prompt before starting the next."));return}ms(i),ms(a),qt.add(i),Yt.add(a);let m=s,w=0,O=!1,v=!1;function u(){if(O)return;if(O=!0,process.removeListener("exit",u),c?.removeEventListener("abort",E),qt.delete(i),Yt.delete(a),i.removeListener("keypress",x),v)i.setRawMode?.(!1);i.pause(),a.write(la)}function f(j){let C=a.columns||80;if(w>0)U.cursorTo(d,0),U.moveCursor(d,0,-(w-1)),U.clearScreenDown(d);a.write(j),w=ua(j,C)}let h=Promise.resolve(),y=null;function S(){if(y!==null)return;y=setTimeout(()=>{if(y=null,O)return;try{f(n(m,l))}catch(j){u(),p(j)}},0)}function I(){if(y!==null)clearTimeout(y),y=null}function E(){I(),a.write(`
21
+ `),u(),p(c?.reason)}function x(j,C){if(C?.ctrl&&C.name==="c"){I(),a.write(`
22
+ `),u(),p(new DOMException("Prompt was cancelled.","AbortError"));return}let W={char:j??"",name:C?.name==="enter"?"return":C?.name??"",ctrl:C?.ctrl??!1,meta:C?.meta??!1,shift:C?.shift??!1};h=h.then(async()=>{if(O)return;try{let D=await r(W,m);if(O)return;if(da(D)){I();let N=D[Xt];if(o)f(o(m,N,l));a.write(`
23
+ `),u(),g(N)}else m=D,S()}catch(D){I(),u(),p(D)}})}try{if(U.emitKeypressEvents(i),i.setRawMode)i.setRawMode(!0),v=!0;i.resume(),a.write(ca),process.once("exit",u),f(n(m,l)),i.on("keypress",x),c?.addEventListener("abort",E,{once:!0})}catch(j){u(),p(j)}})}async function ma(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 ws(e,t,n){if(t)return ma(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 Te(e,t,n){if(e.initial!==void 0)return{shortCircuited:!0,value:n?await n(e.initial,"initial"):e.initial};let r=ke(t);if(!(Kt(r.input)&&Kt(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 pa(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 Te(t,n);return Te(t,n,async(o,i)=>{let a=await ws(o,r,s);if(!a.ok)throw Error(`${i} value rejected${r?" by schema":""}: ${a.error}`);return a.value})}function en(e,t,n){let r=[e];if(t)r.push(t);if(n)r.push(n);return r.join(" ")}function vs(e,t,n,r){let s=t?`${e} ${t}`:e,o=r??"";if(t)return`${s}${o}
24
+ ${n}`;return`${s}${o} ${n}`}function ha(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 ys(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 ga(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:ys(o,r,t,s)}}function ba(e){return e.map((t)=>{if(typeof t==="string")return{label:t,value:t};return t})}function wa(e,t){if(e.name==="return")return Zt(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 ya(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 vs(o,i,`${a}${va}${c}`)}function Oa(e,t,n,r,s){let o=t.success("✓"),i=t.message(n??"Are you sure?"),a=e?r:s;return en(o,i,t.success(a))}async function Fe(e,t){let n=await Te(e,t);if(n.shortCircuited)return n.value;let{promptIO:r}=n,s=e.active??"Yes",o=e.inactive??"No";return Qt({initialState:{value:e.default??!0},theme:e.theme,render:(i,a)=>ya(i,a,e.message,s,o),handleKey:wa,renderSubmitted:(i,a,c)=>Oa(a,c,e.message,s,o)},r)}function xa(e,t,n,r){if(e==="")return r?n.placeholder(r):n.cursor("│");return`${e.slice(0,t)}${n.cursor("│")}${e.slice(t)}`}function ps(e,t){return(e.codePointAt(t)??0)>65535?2:1}function hs(e,t){return t>=2&&(e.codePointAt(t-2)??0)>65535?2:1}function Sa(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 Ea(e,t,n){if(e.name==="backspace"){if(n===0)return{text:t,cursorPos:n};let r=n-hs(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+ps(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-hs(t,n)}}if(e.name==="right"){if(n>=t.length)return{text:t,cursorPos:n};return{text:t,cursorPos:n+ps(t,n)}}if(e.name==="home")return{text:t,cursorPos:0};if(e.name==="end")return{text:t,cursorPos:t.length};if(Sa(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 Ca(e,t,n){return async(r,s)=>{if(r.name==="return"){let i=await ws(s.value===""&&n!==void 0?n:s.value,e,t);return i.ok?Zt(i.value):{...s,error:i.error}}let o=Ea(r,s.value,s.cursorPos);return o?{value:o.text,cursorPos:o.cursorPos,error:null}:s}}async function Ia(e,t,n){let r=await Te(e,n);if(r.shortCircuited)return r;let s=ba(e.choices),o=e.maxVisible??10,i=new Set(t.flatMap((l)=>{let d=s.findIndex((g)=>g.value===l);return d===-1?[]:[d]})),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:ys(c,0,s.length,o),selected:i,promptIO:r.promptIO}}function ja(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=vs(o,i,xa(e.value,e.cursorPos,t,a),c);if(e.error!==null)l+=`
25
+ ${t.error(e.error)}`;return l}function $a(e,t,n){return en(t.success("✓"),t.message(n??"Enter a value"),t.success(e))}async function Os(e={},t){let n=await pa("input",e,t);if(n.shortCircuited)return n.value;let{promptIO:r}=n;return Qt({initialState:{value:"",cursorPos:0,error:null},theme:e.theme,render:(s,o)=>ja(s,o,e.message,e.placeholder,e.default),handleKey:Ca(e.schema,e.validate,e.default),renderSubmitted:(s,o,i)=>$a(s.value===""&&e.default!==void 0?e.default:s.value,i,e.message)},r)}function Na(e){return(t,n)=>{let r=n.choices.length;if(t.name==="return"){let s=n.choices[n.cursor];if(s)return Zt(s.value);return n}if(["up","down","k","j"].includes(t.name)){let s=t.name==="up"||t.name==="k"?-1:1;return{...n,...ga(n.cursor,r,s,n.scrollOffset,e)}}return n}}function _a(e,t,n,r){let s=[`${t.prefix("┃")} ${t.message(n??"Pick an option")}`];return s.push(...ha(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(`
26
+ `)}function Aa(e,t,n){let r=t.success("✓"),s=t.message(n??"Pick an option"),o=e.choices[e.cursor],i=o?o.label:"";return en(r,s,t.success(i))}async function tn(e,t){let n=await Ia(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 Qt({initialState:{cursor:s,choices:r,scrollOffset:a},theme:e.theme,render:(c,l)=>_a(c,l,e.message,o),handleKey:Na(o),renderSubmitted:(c,l,d)=>Aa(c,d,e.message)},i)}var ia,Xt,qt,Yt,bs="\x1B[",ca,la,fa,va=" · ";var xs=T(()=>{_e();Q();ia=gs({bold:P,cyan:B,dim:G,green:H,red:Ne});Xt=Symbol("submit");qt=new WeakSet,Yt=new WeakSet,ca=`${bs}?25l`,la=`${bs}?25h`;fa=class extends Error{constructor(e){super(e??"Prompts require an interactive terminal (TTY).");this.name="NonInteractiveError"}}});_t();kt();import{existsSync as ks,readdirSync as Za}from"node:fs";import{basename as Ds,dirname as Fs,isAbsolute as Qa,join as ec,resolve as Ps}from"node:path";ue();import{existsSync as ci,lstatSync as Fr,mkdirSync as _r,readFileSync as li,readdirSync as Dr,realpathSync as Mt,statSync as Pr,writeFileSync as ui}from"node:fs";import{dirname as Rr,join as X,resolve as Ar,sep as fi}from"node:path";import{fileURLToPath as di}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}`)}jr();Q();Nr();import{spawn as mi,spawnSync as pi}from"node:child_process";import{once as hi}from"node:events";function gi(e,t){return e.replace(/\{\{\s*(\w+)\s*\}\}/g,(n,r)=>Object.hasOwn(t,r)?t[r]??n:n)}function bi(e){let t=Rr(e),n=e.slice(t==="."?0:t.length+1);if(n.startsWith("_")&&!n.startsWith("__")){let r=`.${n.slice(1)}`;return t==="."?r:X(t,r)}return e}function wi(e){return Pr(e,{throwIfNoEntry:!1})?.isDirectory()===!0&&Dr(e).length>0}function Tr(e,t){if(Mt(e)!==e)throw Error(`Destination root "${e}" was redirected outside the destination.`);let n=e;for(let r of t.split(fi)){n=X(n,r);let s;try{s=Fr(n).isSymbolicLink()}catch(i){if(q(i)&&i.code==="ENOENT")return;throw i}if(!s)continue;let o;try{o=Mt(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 Mr(e){let{template:t,dest:n,context:r,conflict:s="abort",render:o=gi}=e,i=t instanceof URL?di(t):Ar(t),a=Ar(n),c=Pr(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"&&wi(a))throw Error(`Destination directory "${a}" already exists and is non-empty. Use conflict: "overwrite" to proceed.`);let l=Dr(i,{recursive:!0,encoding:"utf8"}).filter((m)=>Fr(X(i,m)).isFile());_r(a,{recursive:!0});let d=Mt(a),g=l.map((m)=>({relFromTemplate:m,destRelPath:bi(m)}));for(let{destRelPath:m}of g)Tr(d,m);let p=[];for(let{relFromTemplate:m,destRelPath:w}of g){let O=X(i,m),v=X(d,w),u=li(O),f=u.subarray(0,8192).includes(0)?u:await o(u.toString("utf-8"),r);Tr(d,w),_r(Rr(v),{recursive:!0}),ui(v,f,"utf-8"),p.push(w)}return{files:p}}var vi=[["bun.lock","bun"],["bun.lockb","bun"],["pnpm-lock.yaml","pnpm"],["yarn.lock","yarn"],["package-lock.json","npm"]];function Lt(e){let t=e??process.cwd();for(let[n,r]of vi)if(ci(X(t,n)))return r;return $r(process.env.npm_config_user_agent)??"npm"}function Lr(e){try{return pi("git",["rev-parse","--is-inside-work-tree"],{cwd:e??process.cwd(),stdio:"ignore"}).status===0}catch{return!1}}async function zt(e,t,n={}){let r=n.stderr??((o)=>Z(2,`${o}
27
+ `)),s=n.signal??Y();for(let o of e)switch(s?.throwIfAborted(),o.type){case"install":await yi(t,s);break;case"git-init":await Oi(t,o.commit,s);break;case"open-editor":await xi(t,r);break;case"command":await Si(o.cmd,o.cwd??t,s)}}async function yi(e,t){let n=Lt(e),r=Pt(n);if(!r)throw Error(`Package manager "${n}" was not found on PATH. Install ${n} and try again.`);let{exitCode:s}=await se(r,["install"],{cwd:e,stdio:"inherit",signal:t});if(s!==0)throw Error(`"${n} install" exited with code ${s}`)}async function Oi(e,t,n){let r=Pt("git");if(!r)throw Error('"git" was not found on PATH. Install Git and try again.');if(await Rt(r,["init"],e,"git init",n),t){let s=await Ei(e,r,n);await Rt(r,["add","."],e,"git add",n),await Rt(r,[...s,"commit","-m",t],e,"git commit",n)}}async function xi(e,t){let n=process.env.EDITOR||"code",r;try{let s=mi(n,[e],{stdio:"ignore",shell:process.platform==="win32"});s.unref();let o=await Promise.race([hi(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 Si(e,t,n){let{exitCode:r}=await se(e,[],{cwd:t,shell:!0,stdio:"inherit",signal:n});if(r!==0)throw Error(`Command "${e}" exited with code ${r}`)}async function Ei(e,t,n){let r=[];if(!await kr(t,"user.name",e,n))r.push("-c","user.name=Crust");if(!await kr(t,"user.email",e,n))r.push("-c","user.email=crust@scaffolded.project");return r}async function kr(e,t,n,r){let{exitCode:s}=await se(e,["config",t],{cwd:n,stdio:"collect",stdout:"ignore",signal:r});return s===0}async function Rt(e,t,n,r,s){let{exitCode:o,stderr:i}=await se(e,t,{cwd:n,stdio:"collect",stdout:"ignore",signal:s});if(o!==0)throw Error(`"${r}" failed with exit code ${o}${i?`: ${i.trim()}`:""}`)}_t();var os=Nt("crust:help");async function Ji(e,t){await Promise.resolve().then(() => rs());return ns(e,t,os)}var qi={help:{type:"boolean",short:"h",noNegate:!0,description:"Show help"}};async function ss(e){e.stdout(await Ji(e.command,e.commandPath))}var is=$t(os).factory((e)=>e.flags(qi).handle("help",ss,{eager:!0}).noAction(ss));var Yi=Nt("crust:version"),Ki={version:{type:"boolean",short:"v",noNegate:!0,description:"Show version number",recursive:!1}},as=$t(Yi).factory((e,t,n={})=>{let{format:r}=n;return e.flags(Ki).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})});_e();le();Q();function ds(e){return{spinner:e.magenta,message:e.bold,success:e.green,error:e.red}}var rl=ds({bold:P,green:H,magenta:es,red:Ne});function Xi(e){return ds($e({overrides:{isTTY:e.isTTY}}))}var Gt="\x1B[",Zi=`${Gt}?25l`,Ae=`${Gt}?25h`,Vt=`${Gt}2K`,Ht="\r",cs={dots:{frames:["⠋","⠙","⠹","⠸","⠼","⠴","⠦","⠧","⠇","⠏"],interval:80},line:{frames:["-","\\","|","/"],interval:130},arc:{frames:["◐","◓","◑","◒"],interval:100},bounce:{frames:["⠁","⠂","⠄","⡀","⢀","⠠","⠐","⠈"],interval:120}},Qi="✓",ea="✗";function ta(e){if(e===void 0)return cs.dots;if(typeof e==="string")return cs[e];if(e.frames.length===0)throw Error("A custom spinner requires at least one frame");return e}function na(e,t){let n=e[t];if(n===void 0)throw Error("Spinner frame index is out of bounds");return n}var ls,us=/\x1B\[[0-?]*[ -/]*[@-~]|\x1B\][^\x07\x1B]*(?:\x07|\x1B\\)/g,ra=/[\n\v\f\x85]/;function fs(e,t){ls??=new Intl.Segmenter;let n=0,r=0,s=0;for(let o of[...e.matchAll(us),void 0]){let i=o?.index??e.length;for(let{segment:a,index:c}of ls.segment(e.slice(s,i))){if(a==="\r")n=0;else if(ra.test(a)||(n+=z(a))>t){let l=e.slice(r).match(us)?.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 sa(e,t,n,r){let s=n==="success"?Qi:ea;return`${r}${(n==="success"?t.success:t.error)(s)} ${t.message(e)}
28
+ `}function oa(e,t=()=>""){let n=e.sink??pe()?.output??un,r={...Xi(n),...e.theme},s=n.isTTY??!1,{frames:o,interval:i}=ta(e.spinner),a=e.sigint??"exit",c=e.signal??Y(),l=e.message,d=0,g=!1,p=!1,m,w,O,v,u=()=>setImmediate(()=>y.stop("error"));function f(){let S=(n.columns||80)-1,I=`${r.spinner(na(o,d))} `,E=t(),x=S-z(I+r.message(E)),j=I+r.message(fs(l,x)+E);n.write(Vt+Ht+fs(j,S))}function h(){if(m!==void 0)clearInterval(m),m=void 0;if(w)process.removeListener("SIGINT",w),w=void 0;if(O)process.removeListener("exit",O),O=void 0;v?.(),v=void 0,c?.removeEventListener("abort",u)}let y={start(){if(g||p)return;if(g=!0,c&&!c.aborted)c.addEventListener("abort",u,{once:!0});if(!s)return;n.write(Zi),O=()=>n.write(Ae),process.once("exit",O);try{f()}catch(S){h();try{n.write(Ae)}catch{}throw S}if(m=setInterval(()=>{d=(d+1)%o.length,f()},i),v=ln({clear:()=>n.write(Vt+Ht),redraw:f}),a==="exit"&&!J("SIGINT")){let S=()=>{if(process.removeListener("SIGINT",S),w=void 0,process.listenerCount("SIGINT")>0){u();return}h(),p=!0,n.write(Ae),process.kill(process.pid,"SIGINT")};w=S,process.once("SIGINT",S)}},updateMessage(S){if(p)return;if(l=S,g&&s)f()},stop(S="success",I){if(p)return;if(p=!0,I!==void 0)l=I;h();let E;try{let x=g&&s?Vt+Ht:"";n.write(sa(l+t(),r,S,x))}catch(x){E={error:x}}if(g&&s)try{n.write(Ae)}catch(x){if(!E)throw x}if(E)throw E.error}};return y}function Jt(e){let t=oa(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})}xs();var Le=class extends Error{constructor(e){super(e),this.name="Eta Error"}},Cs=class extends Le{constructor(e){super(e),this.name="EtaParser Error"}},Ta=class extends Le{constructor(e){super(e),this.name="EtaRuntime Error"}};var ka=class extends Le{constructor(e){super(e),this.name="EtaNameResolution Error"}};function ae(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+`:
27
29
 
28
30
  `+t.split(/\n/)[s-1]+`
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+`
31
+ `+Array(o).join(" ")+"^",new Cs(e)}function Fa(e,t,n,r){let s=t.split(`
32
+ `),o=Math.max(n-3,0),i=Math.min(s.length,n+3),a=r,c=s.slice(o,i).map((d,g)=>{let p=g+o+1;return(p===n?" >> ":" ")+p+"| "+d}).join(`
33
+ `),l=new Ta((a?a+":"+n+`
32
34
  `:"line "+n+`
33
35
  `)+c+`
34
36
 
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
37
+ `+e.message);throw l.name=e.name,l.cause=e,l}var Da=(async()=>{}).constructor;function Pa(e,t){let n=this.config,r=t?.async?Da:Function;try{return new r(n.varName,"options",this.compileToString.call(this,e,t))}catch(s){throw s instanceof SyntaxError?new Cs(`Bad template syntax
36
38
 
37
39
  `+s.message+`
38
40
  `+Array(s.message.length+1).join("=")+`
39
41
  `+this.compileToString.call(this,e,t)+`
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}
42
+ `):s}}function Ra(e,t){let n=this.config,r=t?.async,s=this.compileBody,o=this.parse.call(this,e),i=`${n.functionHeader}
41
43
  let include = (__eta_t, __eta_d) => this.render(__eta_t, {...${n.varName}, ...(__eta_d ?? {})}, options);
42
44
  let includeAsync = (__eta_t, __eta_d) => this.renderAsync(__eta_t, {...${n.varName}, ...(__eta_d ?? {})}, options);
43
45
 
@@ -60,15 +62,15 @@ if (__eta.layout) {
60
62
  }
61
63
  ${n.useWith?"}":""}${n.debug?"} catch (e) { this.RuntimeErr(e, __eta.templateStr, __eta.line, options.filepath) }":""}
62
64
  return __eta.res;
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+`';
65
+ `;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 Ma(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+`';
64
66
  `;else{let i=o.t,a=o.val||"";t.debug&&(s+="__eta.line="+o.lineNo+`
65
67
  `),i==="r"?(t.autoFilter&&(a="__eta.f("+a+")"),s+="__eta.res+="+a+`;
66
68
  `):i==="i"?(t.autoFilter&&(a="__eta.f("+a+")"),t.autoEscape&&(a="__eta.e("+a+")"),s+="__eta.res+="+a+`;
67
69
  `):i==="e"?s+=a+`
68
70
  `:Object.hasOwn(t.customTags,i)&&(s+=`__eta.res+=this.config.customTags[${JSON.stringify(i)}](${JSON.stringify(a)},${t.varName});
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(`
71
+ `)}}return s}function La(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 za={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"};function Ba(e){return za[e]}function Ua(e){let t=String(e);return/[&<>"']/.test(t)?t.replace(/[&<>"']/g,Ba):t}var Ss={autoEscape:!0,autoFilter:!1,autoTrim:[!1,"nl"],cache:!1,cacheFilepaths:!0,customTags:{},debug:!1,escapeFunction:Ua,filterFunction:(e)=>String(e),outputFunctionName:"output",functionHeader:"",parse:{exec:"",interpolate:"=",raw:"~"},plugins:[],rmWhitespace:!1,tags:["<%","%>"],useWith:!1,varName:"it",defaultExtension:".eta"},De=/`(?:\\[\s\S]|\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})*}|(?!\${)[^\\`])*`/g,Pe=/'(?:\\[\s\w"'\\`]|[^\n\r'\\])*?'/g,Re=/"(?:\\[\s\w"'\\`]|[^\n\r"\\])*?"/g;function Me(e){return e.replace(/[.*+\-?^${}()|[\]\\]/g,"\\$&")}function Wa(e,t){return e.slice(0,t).split(`
72
+ `).length}function Va(e){let t=this.config,n=[],r=!1,s=0,o=t.parse,i=Object.keys(t.customTags);if(t.plugins)for(let p=0;p<t.plugins.length;p++){let m=t.plugins[p];m.processTemplate&&(e=m.processTemplate(e,t))}t.rmWhitespace&&(e=e.replace(/[\r\n]+/g,`
73
+ `).replace(/^\s+|\s+$/gm,"")),De.lastIndex=0,Pe.lastIndex=0,Re.lastIndex=0;function a(p,m){p&&(p=La(p,t,r,m),p&&(p=p.replace(/\\|'/g,"\\$&").replace(/\r\n|\n|\r/g,"\\n"),n.push(p)))}let c=[o.exec,o.interpolate,o.raw,...i].reduce((p,m)=>p&&m?p+"|"+Me(m):m?Me(m):p,""),l=RegExp(Me(t.tags[0])+"(-|_)?\\s*("+c+")?\\s*","g"),d=RegExp("'|\"|`|\\/\\*|(\\s*(-|_)?"+Me(t.tags[1])+")","g"),g;for(;g=l.exec(e);){let p=e.slice(s,g.index);s=g[0].length+g.index;let m=g[1],w=g[2]||"";a(p,m),d.lastIndex=s;let O,v=!1;for(;O=d.exec(e);)if(O[1]){let u=e.slice(s,O.index);l.lastIndex=s=d.lastIndex,r=O[2],v={t:w===o.exec?"e":w===o.raw?"r":w===o.interpolate?"i":i.includes(w)?w:"",val:u};break}else{let u=O[0];if(u==="/*"){let f=e.indexOf("*/",d.lastIndex);f===-1&&ae("unclosed comment",e,O.index),d.lastIndex=f}else u==="'"?(Pe.lastIndex=O.index,Pe.exec(e)?d.lastIndex=Pe.lastIndex:ae("unclosed string",e,O.index)):u==='"'?(Re.lastIndex=O.index,Re.exec(e)?d.lastIndex=Re.lastIndex:ae("unclosed string",e,O.index)):u==="`"&&(De.lastIndex=O.index,De.exec(e)?d.lastIndex=De.lastIndex:ae("unclosed string",e,O.index))}v?(t.debug&&(v.lineNo=Wa(e,g.index)),n.push(v)):ae("unclosed tag",e,g.index)}if(a(e.slice(s,e.length),!1),t.plugins)for(let p=0;p<t.plugins.length;p++){let m=t.plugins[p];m.processAST&&(n=m.processAST(n,t))}return n}function Is(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 ka(`Failed to get template '${e}'`)}}function js(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=Is.call(this,e,s)):r=e,r.call(this,t,s)}function $s(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=Is.call(this,e,s)):r=e;let o=r.call(this,t,s);return Promise.resolve(o)}function Ha(e,t){let n=this.compile(e,{async:!1});return js.call(this,n,t)}function Ga(e,t){let n=this.compile(e,{async:!0});return $s.call(this,n,t)}var Es=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}}},Ja=class{constructor(e){e?this.config={...Ss,...e}:this.config={...Ss};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 Le(`Custom tag prefix "${n}" conflicts with a built-in prefix`)}config;RuntimeErr=Fa;compile=Pa;compileToString=Ra;compileBody=Ma;parse=Va;render=js;renderAsync=$s;renderString=Ha;renderStringAsync=Ga;filepathCache={};templatesSync=new Es({});templatesAsync=new Es({});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)}}},Ns=class extends Ja{};var _s={name:"@crustjs/core",version:"0.6.1",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:">=5.9.0"},peerDependenciesMeta:{typescript:{optional:!0}},engines:{bun:">=1.4.0",node:">=24"}};var As={name:"@crustjs/crust",version:"0.6.1",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 Ts={name:"@crustjs/extensions",version:"0.6.1",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:">=5.9.0"},peerDependenciesMeta:{typescript:{optional:!0}},engines:{bun:">=1.4.0",node:">=24"}};var nn={name:"create-crust",version:"0.6.1",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"},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 tc={bun:{shebang:"#!/usr/bin/env bun",tsTypes:'"bun"'},node:{shebang:"#!/usr/bin/env node",tsTypes:'"node"'}},nc=new Ns({autoEscape:!1,autoTrim:!1});function Rs(e){if(!yr(e))throw Error(`Project name ${JSON.stringify(e)} is not safe for the generated project.
74
+ The directory basename becomes the package and command name: use ${vr}.`)}var rc=/[<>:"|?*\\]/;function sc(e){if(!e)throw Error("Project directory cannot be empty");if(rc.test(e))throw Error(`Project directory contains invalid characters: ${e}`);Rs(Ds(Ps(e)))}var Ms=new je("create-crust",{description:nn.description,version:nn.version}).extend(as(),is()).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 Os({message:"Project directory",default:"my-cli",validate:sc}),o=Ps(process.cwd(),s),i=o===process.cwd(),a=Ds(o);Rs(a);let c=i?Za(o).length>0:ks(o),l=!1;if(c){if(l=await Fe({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 d=await tn({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}),g=await tn({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:d==="node"?"package":"binary",initial:t.artifact}),p=await Fe({message:"Install dependencies?",default:!0,initial:t.install}),m=o;while(!ks(m)&&Fs(m)!==m)m=Fs(m);let O=Lr(m)?!1:await Fe({message:"Initialize a git repository?",default:!0,initial:t.git}),v=Lt(o),u={name:a,runtime:d,artifact:g,run:`${v} run`,install:`${v} install`,...tc[d],coreVersion:_s.version,extensionsVersion:Ts.version,crustVersion:As.version};if(await Jt({message:"Scaffolding project...",task:()=>Mr({template:ec(It("templates"),"base"),dest:o,context:u,render:(f,h)=>nc.renderString(f,h),conflict:l?"overwrite":"abort"})}),p)await zt([{type:"install"}],o,{stderr:r});if(O)await Jt({message:"Initializing git repository...",task:()=>zt([{type:"git-init",commit:"chore: initial commit"}],o,{stderr:r})});if(n(`
73
75
  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();
76
+ `),n("Next steps:"),!i){let f=Qa(s)||s.startsWith(".")?s:`./${s}`;n(` cd ${f}`)}if(!p)n(` ${u.install}`);n(` ${u.run} dev`),n(` ${u.run} build`)});await Ms.execute();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-crust",
3
- "version": "0.6.0",
3
+ "version": "0.6.1",
4
4
  "description": "Scaffold a new Crust CLI project for Bun or Node.js",
5
5
  "license": "MIT",
6
6
  "author": "chenxin-yan",