@visulima/cerebro 2.1.1 → 2.1.3

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/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ ## @visulima/cerebro [2.1.3](https://github.com/visulima/visulima/compare/@visulima/cerebro@2.1.2...@visulima/cerebro@2.1.3) (2025-11-13)
2
+
3
+ ### Bug Fixes
4
+
5
+ * add support for conflicting options in CLI commands ([258b360](https://github.com/visulima/visulima/commit/258b360714f9341a3807da78b6f74d5cb61f3bc6))
6
+
7
+ ## @visulima/cerebro [2.1.2](https://github.com/visulima/visulima/compare/@visulima/cerebro@2.1.1...@visulima/cerebro@2.1.2) (2025-11-13)
8
+
9
+ ### Bug Fixes
10
+
11
+ * update CLI and plugin manager types to use Console instead of ExtendedLogger ([ff6d2cb](https://github.com/visulima/visulima/commit/ff6d2cbaceccfbde47b6bfb6e957a6077fa1db0d))
12
+
1
13
  ## @visulima/cerebro [2.1.1](https://github.com/visulima/visulima/compare/@visulima/cerebro@2.1.0...@visulima/cerebro@2.1.1) (2025-11-12)
2
14
 
3
15
  ### Bug Fixes
package/README.md CHANGED
@@ -68,25 +68,25 @@ cli.addCommand({
68
68
  alias: "o",
69
69
  type: String,
70
70
  description: "Output directory",
71
- defaultValue: "dist"
71
+ defaultValue: "dist",
72
72
  },
73
73
  {
74
74
  name: "production",
75
75
  alias: "p",
76
76
  type: Boolean,
77
- description: "Build for production"
77
+ description: "Build for production",
78
78
  },
79
79
  {
80
80
  name: "watch",
81
81
  alias: "w",
82
82
  type: Boolean,
83
- description: "Watch for changes"
84
- }
83
+ description: "Watch for changes",
84
+ },
85
85
  ],
86
86
  argument: {
87
87
  name: "target",
88
88
  description: "Build target (optional)",
89
- type: String
89
+ type: String,
90
90
  },
91
91
  execute: ({ options, argument, logger, env }) => {
92
92
  const target = argument[0] || "all";
@@ -118,13 +118,13 @@ cli.addCommand({
118
118
  name: "DEPLOY_ENV",
119
119
  description: "Deployment environment",
120
120
  type: String,
121
- defaultValue: "staging"
121
+ defaultValue: "staging",
122
122
  },
123
123
  {
124
124
  name: "API_KEY",
125
125
  description: "API key for deployment",
126
- type: String
127
- }
126
+ type: String,
127
+ },
128
128
  ],
129
129
  execute: ({ env, logger }) => {
130
130
  logger.info(`Deploying to ${env.DEPLOY_ENV}`);
@@ -181,16 +181,14 @@ cli.addCommand({
181
181
  description: "Example command showing toolbox usage",
182
182
  options: [
183
183
  { name: "verbose", alias: "v", type: Boolean, description: "Verbose output" },
184
- { name: "count", alias: "c", type: Number, description: "Count value", defaultValue: 1 }
184
+ { name: "count", alias: "c", type: Number, description: "Count value", defaultValue: 1 },
185
185
  ],
186
186
  argument: {
187
187
  name: "input",
188
188
  description: "Input file",
189
- type: String
189
+ type: String,
190
190
  },
191
- env: [
192
- { name: "DEBUG", type: Boolean, description: "Debug mode" }
193
- ],
191
+ env: [{ name: "DEBUG", type: Boolean, description: "Debug mode" }],
194
192
  execute: ({ logger, options, argument, env, runtime, argv }) => {
195
193
  // Use logger for output
196
194
  logger.info("Command started");
@@ -214,7 +212,7 @@ cli.addCommand({
214
212
  logger.info(`CLI name: ${runtime.cliName}`);
215
213
 
216
214
  // Access original argv
217
- logger.debug(`Full command: ${argv.join(' ')}`);
215
+ logger.debug(`Full command: ${argv.join(" ")}`);
218
216
  },
219
217
  });
220
218
  ```
@@ -241,8 +239,8 @@ import { Cerebro } from "@visulima/cerebro";
241
239
  import versionCommand from "@visulima/cerebro/command/version";
242
240
 
243
241
  const cli = new Cerebro("my-cli", {
244
- packageName: "my-cli",
245
- packageVersion: "1.0.0"
242
+ packageName: "my-cli",
243
+ packageVersion: "1.0.0",
246
244
  });
247
245
 
248
246
  cli.addCommand(versionCommand);
@@ -355,6 +353,7 @@ my-cli completion --runtime=node --shell=zsh > ~/.my-cli-completion.zsh
355
353
  ### Setup Instructions
356
354
 
357
355
  **Bash:**
356
+
358
357
  ```bash
359
358
  my-cli completion --shell=bash > ~/.my-cli-completion.bash
360
359
  echo 'source ~/.my-cli-completion.bash' >> ~/.bashrc
@@ -362,6 +361,7 @@ source ~/.bashrc
362
361
  ```
363
362
 
364
363
  **Zsh:**
364
+
365
365
  ```bash
366
366
  my-cli completion --shell=zsh > ~/.my-cli-completion.zsh
367
367
  echo 'source ~/.my-cli-completion.zsh' >> ~/.zshrc
@@ -369,17 +369,20 @@ source ~/.zshrc
369
369
  ```
370
370
 
371
371
  **Fish:**
372
+
372
373
  ```bash
373
374
  my-cli completion --shell=fish > ~/.config/fish/completions/my-cli.fish
374
375
  ```
375
376
 
376
377
  **PowerShell:**
378
+
377
379
  ```powershell
378
380
  my-cli completion --shell=powershell > $PROFILE.CurrentUserAllHosts
379
381
  . $PROFILE.CurrentUserAllHosts
380
382
  ```
381
383
 
382
384
  After setting up, users can press `TAB` to autocomplete:
385
+
383
386
  - Command names
384
387
  - Option flags (both long `--option` and short `-o`)
385
388
  - Option values (when applicable)
@@ -388,6 +391,7 @@ After setting up, users can press `TAB` to autocomplete:
388
391
  ### Troubleshooting
389
392
 
390
393
  If completions don't work:
394
+
391
395
  1. Ensure `@bomb.sh/tab` is installed
392
396
  2. Verify the completion script was sourced in your shell profile
393
397
  3. Try restarting your shell or running `source ~/.bashrc` (or equivalent)
package/dist/cli.d.ts CHANGED
@@ -1,15 +1,15 @@
1
1
  import PluginManager from "./plugin-manager.d.ts";
2
- import type { Cli as ICli, CliRunOptions, CommandSection as ICommandSection, ExtendedLogger, RunCommandOptions } from "./types/cli.d.ts";
2
+ import type { Cli as ICli, CliRunOptions, CommandSection as ICommandSection, RunCommandOptions } from "./types/cli.d.ts";
3
3
  import type { Command as ICommand, OptionDefinition } from "./types/command.d.ts";
4
4
  import type { Plugin } from "./types/plugin.d.ts";
5
- export type CliOptions<T extends ExtendedLogger = ExtendedLogger> = {
5
+ export type CliOptions<T extends Console = Console> = {
6
6
  argv?: ReadonlyArray<string>;
7
7
  cwd?: string;
8
8
  logger?: T;
9
9
  packageName?: string;
10
10
  packageVersion?: string;
11
11
  };
12
- export declare class Cli<T extends ExtendedLogger = ExtendedLogger> implements ICli {
12
+ export declare class Cli<T extends Console = Console> implements ICli<T> {
13
13
  #private;
14
14
  /**
15
15
  * Create a new CLI instance.
@@ -88,7 +88,7 @@ export declare class Cli<T extends ExtendedLogger = ExtendedLogger> implements I
88
88
  * });
89
89
  * ```
90
90
  */
91
- addCommand<OD extends OptionDefinition<unknown> = OptionDefinition<unknown>>(command: ICommand<OD>): this;
91
+ addCommand<OD extends OptionDefinition<unknown> = OptionDefinition<unknown>>(command: ICommand<OD, T>): this;
92
92
  /**
93
93
  * Adds a plugin to extend the CLI functionality.
94
94
  *
@@ -106,12 +106,12 @@ export declare class Cli<T extends ExtendedLogger = ExtendedLogger> implements I
106
106
  * });
107
107
  * ```
108
108
  */
109
- addPlugin(plugin: Plugin): this;
109
+ addPlugin(plugin: Plugin<T>): this;
110
110
  /**
111
111
  * Gets the plugin manager instance for advanced plugin management.
112
112
  * @returns The plugin manager instance
113
113
  */
114
- getPluginManager(): PluginManager;
114
+ getPluginManager(): PluginManager<T>;
115
115
  /**
116
116
  * Gets the CLI application name.
117
117
  */
@@ -130,7 +130,7 @@ export declare class Cli<T extends ExtendedLogger = ExtendedLogger> implements I
130
130
  * Gets all registered commands.
131
131
  * @returns A map of command names to command definitions
132
132
  */
133
- getCommands(): Map<string, ICommand>;
133
+ getCommands(): Map<string, ICommand<OptionDefinition<unknown>, T>>;
134
134
  /**
135
135
  * Gets the current working directory.
136
136
  * @returns The current working directory path
@@ -1,10 +1,10 @@
1
1
  import type { Command as ICommand, OptionDefinition } from "../types/command.d.ts";
2
2
  import type { Toolbox as IToolbox } from "../types/toolbox.d.ts";
3
- declare class HelpCommand implements ICommand {
3
+ declare class HelpCommand<TLogger extends Console = Console> implements ICommand<OptionDefinition<string>, TLogger> {
4
4
  name: string;
5
5
  options: OptionDefinition<string>[];
6
6
  private readonly commands;
7
- constructor(commands: Map<string, ICommand>);
8
- execute(toolbox: IToolbox): void;
7
+ constructor(commands: Map<string, ICommand<OptionDefinition<unknown>, TLogger>>);
8
+ execute(toolbox: IToolbox<TLogger>): void;
9
9
  }
10
10
  export default HelpCommand;
@@ -1 +1 @@
1
- import"@visulima/colorize";import{A as p}from"../packem_shared/help-command-Ddt6rdio.js";import"../packem_shared/index-DQ3pvLQH.js";export{p as default};
1
+ import"@visulima/colorize";import{D as p}from"../packem_shared/help-command-CIRIXN03.js";import"../packem_shared/index-DQ3pvLQH.js";export{p as default};
package/dist/index.d.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  import type { CliOptions } from './cli.d.ts';
2
2
  import { Cli } from './cli.d.ts';
3
- import type { ExtendedLogger } from './types/cli.d.ts';
4
3
  declare global {
5
4
  namespace Cerebro {
6
5
  /**
@@ -74,7 +73,7 @@ declare global {
74
73
  export type { CliOptions } from './cli.d.ts';
75
74
  export { Cli as Cerebro } from './cli.d.ts';
76
75
  export { VERBOSITY_DEBUG, VERBOSITY_NORMAL, VERBOSITY_QUIET, VERBOSITY_VERBOSE } from './constants.d.ts';
77
- export type { Cli, CliRunOptions, ExtendedLogger, OutputType, RunCommandOptions, VERBOSITY_LEVEL } from './types/cli.d.ts';
76
+ export type { Cli, CliRunOptions, OutputType, RunCommandOptions, VERBOSITY_LEVEL } from './types/cli.d.ts';
78
77
  export type { ArgumentDefinition, Command, EnvDefinition, OptionDefinition } from './types/command.d.ts';
79
78
  export type { CreateEnv, CreateOptions, OptionNameToCamelCase } from './types/option-types.d.ts';
80
79
  export type { Plugin, PluginContext } from './types/plugin.d.ts';
@@ -97,4 +96,4 @@ export { VisulimaError } from "@visulima/error";
97
96
  * });
98
97
  * ```
99
98
  */
100
- export declare const createCerebro: <T extends ExtendedLogger = ExtendedLogger>(name: string, options?: CliOptions<T>) => InstanceType<typeof Cli<T>>;
99
+ export declare const createCerebro: <T extends Console = Console>(name: string, options?: CliOptions<T>) => InstanceType<typeof Cli<T>>;
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- var t=Object.defineProperty;var o=(r,e)=>t(r,"name",{value:e,configurable:!0});import{Cli as a}from"./packem_shared/Cerebro-BqHqYEQJ.js";import{VERBOSITY_DEBUG as V,VERBOSITY_NORMAL as b,VERBOSITY_QUIET as c,VERBOSITY_VERBOSE as f}from"./packem_shared/VERBOSITY_QUIET-XPultrIA.js";import{p as I}from"./packem_shared/isVisulimaError-jVZgumOU-C4fgdbWg.js";var E=Object.defineProperty,O=o((r,e)=>E(r,"name",{value:e,configurable:!0}),"t");const p=O((r,e)=>new a(r,e),"createCerebro");export{a as Cerebro,V as VERBOSITY_DEBUG,b as VERBOSITY_NORMAL,c as VERBOSITY_QUIET,f as VERBOSITY_VERBOSE,I as VisulimaError,p as createCerebro};
1
+ var t=Object.defineProperty;var o=(r,e)=>t(r,"name",{value:e,configurable:!0});import{Cli as a}from"./packem_shared/Cerebro-CQZ9sj4S.js";import{VERBOSITY_DEBUG as V,VERBOSITY_NORMAL as b,VERBOSITY_QUIET as c,VERBOSITY_VERBOSE as f}from"./packem_shared/VERBOSITY_QUIET-XPultrIA.js";import{p as I}from"./packem_shared/isVisulimaError-jVZgumOU-C4fgdbWg.js";var E=Object.defineProperty,O=o((r,e)=>E(r,"name",{value:e,configurable:!0}),"t");const p=O((r,e)=>new a(r,e),"createCerebro");export{a as Cerebro,V as VERBOSITY_DEBUG,b as VERBOSITY_NORMAL,c as VERBOSITY_QUIET,f as VERBOSITY_VERBOSE,I as VisulimaError,p as createCerebro};
@@ -0,0 +1,4 @@
1
+ var It=Object.defineProperty;var b=(t,e)=>It(t,"name",{value:e,configurable:!0});import{createRequire as St}from"node:module";import{o as Vt,D as Tt}from"./help-command-CIRIXN03.js";import{VERBOSITY_DEBUG as W,POSITIONALS_KEY as te,VERBOSITY_QUIET as Rt,VERBOSITY_VERBOSE as Dt,VERBOSITY_NORMAL as Ne}from"./VERBOSITY_QUIET-XPultrIA.js";import{c as P}from"./cerebro-error-BnJTixb2.js";import{d as q,f as Ae,e as ie,o as je,a as Bt,h as zt,i as Wt}from"./runtime-process-G-n-wOub.js";import{distance as Ft}from"fastest-levenshtein";const Ut=St(import.meta.url),Y=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,Mt=b(t=>{if(typeof Y<"u"&&Y.versions&&Y.versions.node){const[e,n]=Y.versions.node.split(".").map(Number);if(e>22||e===22&&n>=3||e===20&&n>=16)return Y.getBuiltinModule(t)}return Ut(t)},"__cjs_getBuiltinModule"),{createRequire:qt}=Mt("node:module");var Gt=Object.defineProperty,Ht=b((t,e)=>Gt(t,"name",{value:e,configurable:!0}),"t$9");let D=class extends P{static{b(this,"a")}static{Ht(this,"CommandNotFoundError")}commandName;constructor(e,n=[]){const a=`Command "${e}" not found${n.length>0?`. Did you mean: ${n.join(", ")}?`:""}`;super(a,"COMMAND_NOT_FOUND",{commandName:e,suggestions:n}),this.name="CommandNotFoundError",this.commandName=e,n.length>0&&(this.hint=`Try one of these commands: ${n.join(", ")}`)}};var Kt=Object.defineProperty,Yt=b((t,e)=>Kt(t,"name",{value:e,configurable:!0}),"e$7");let Ze=class extends P{static{b(this,"o")}static{Yt(this,"ConflictingOptionsError")}option1;option2;constructor(e,n){super(`Options "${e}" and "${n}" cannot be used together`,"CONFLICTING_OPTIONS",{option1:e,option2:n}),this.name="ConflictingOptionsError",this.option1=e,this.option2=n,this.hint=`Remove either --${e} or --${n}`}};var Jt=Object.defineProperty,Zt=b((t,e)=>Jt(t,"name",{value:e,configurable:!0}),"e$6");let Qt=class extends P{static{b(this,"o")}static{Zt(this,"PluginError")}pluginName;constructor(e,n,a){super(`Plugin "${e}" error: ${n}`,"PLUGIN_ERROR",{originalError:a,pluginName:e}),this.name="PluginError",this.pluginName=e,a&&(this.cause=a)}};var Xt=Object.defineProperty,xe=b((t,e)=>Xt(t,"name",{value:e,configurable:!0}),"d$5");let en=class{static{b(this,"p")}static{xe(this,"PluginManager")}logger;plugins=new Map;initialized=!1;cachedDependencyOrder=void 0;constructor(e){this.logger=e}hasPlugins(){return this.plugins.size>0}register(e){if(this.initialized)throw new Error(`Cannot register plugin "${e.name}" after initialization`);if(this.plugins.has(e.name))throw new Error(`Plugin "${e.name}" is already registered`);q().CEREBRO_OUTPUT_LEVEL===String(W)&&this.logger.debug(`registering plugin: ${e.name}`),this.plugins.set(e.name,e),this.cachedDependencyOrder=void 0}async init(e){if(this.initialized)throw new Error("PluginManager already initialized");if(this.plugins.size===0){this.logger.debug("no plugins registered, skipping initialization"),this.initialized=!0;return}this.validateDependencies();const n=this.getDependencyOrder();this.logger.debug(`initializing ${n.length} plugin(s)...`);for(const a of n)if(typeof a.init=="function"){this.logger.debug(`initializing plugin: ${a.name}`);try{await a.init(e)}catch(r){const i=new Qt(a.name,`Failed to initialize: ${r instanceof Error?r.message:String(r)}`,r instanceof Error?r:void 0);throw this.logger.error(i.message),i}}this.initialized=!0}async executeLifecycle(e,n,a){if(!this.initialized)throw new Error("PluginManager not initialized");if(this.plugins.size===0)return;const r=this.getDependencyOrder();for(const i of r){const c=i[e];if(typeof c=="function"){this.logger.debug(`executing ${e} hook for plugin: ${i.name}`);try{await(e==="afterCommand"?c(n,a):c(n))}catch(s){throw this.logger.error(`Error in ${e} hook for plugin "${i.name}":`,s),s}}}}async executeErrorHandlers(e,n){if(!this.initialized||this.plugins.size===0)return;const a=this.getDependencyOrder();for(const r of a)if(typeof r.onError=="function"){this.logger.debug(`executing error handler for plugin: ${r.name}`);try{await r.onError(e,n)}catch(i){this.logger.error(`Error in error handler for plugin "${r.name}":`,i)}}}getDependencyOrder(){if(this.cachedDependencyOrder!==void 0)return this.cachedDependencyOrder;const e=[],n=new Set,a=new Set,r=xe(i=>{if(n.has(i))return;if(a.has(i))throw new Error(`Circular dependency detected involving plugin "${i}"`);const c=this.plugins.get(i);if(!c)throw new Error(`Plugin "${i}" not found`);if(a.add(i),c.dependencies)for(const s of c.dependencies)r(s);a.delete(i),n.add(i),e.push(c)},"visit");for(const i of this.plugins.keys())r(i);return this.cachedDependencyOrder=e,e}validateDependencies(){for(const e of this.plugins.values())if(e.dependencies){for(const n of e.dependencies)if(!this.plugins.has(n))throw new Error(`Plugin "${e.name}" depends on "${n}" which is not registered`)}}};var tn=Object.defineProperty,nn=b((t,e)=>tn(t,"name",{value:e,configurable:!0}),"n$b");const X=nn(t=>t.type?.name==="Boolean","optionIsBoolean");var an=Object.defineProperty,Qe=b((t,e)=>an(t,"name",{value:e,configurable:!0}),"p$b");const on=Qe(t=>{let e=t.type?t.type.name.toLowerCase():"string";const n=t.multiple??t.lazyMultiple?"[]":"";return e&&(e=e==="boolean"?"":`{underline ${e}${n}}`),e},"getTypeLabel"),rn=Qe(t=>(X(t)||(t.typeLabel=t.typeLabel??on(t),t.defaultOption&&(t.typeLabel=`${t.typeLabel} (D)`),t.required&&(t.typeLabel=`${t.typeLabel} (R)`)),t),"mapOptionTypeLabel");var sn=Object.defineProperty,Xe=b((t,e)=>sn(t,"name",{value:e,configurable:!0}),"e$4");const ln=new RegExp(/^-([^\d-])$/),cn=new RegExp(/^--(\S+)/),un=new RegExp(/^-([^\d-]{2,})$/),pn=Xe(t=>ln.test(t)||cn.test(t)||un.test(t),"isOption"),fn=Xe((t,e)=>{const n=e[0]&&pn(e[0])||e.length===0?null:e.shift()??null;if(!t.includes(n)){const a=new Error(`Command not recognised: ${n}`);throw a.command=n,a.name="INVALID_COMMAND",a}return{argv:e,command:n}},"commandLineCommands");var hn=Object.defineProperty,et=b((t,e)=>hn(t,"name",{value:e,configurable:!0}),"i$a"),dn=Object.defineProperty,tt=et((t,e)=>dn(t,"name",{value:e,configurable:!0}),"i"),mn=Object.defineProperty,nt=tt((t,e)=>mn(t,"name",{value:e,configurable:!0}),"s"),gn=Object.defineProperty,it=nt((t,e)=>gn(t,"name",{value:e,configurable:!0}),"i"),vn=Object.defineProperty,at=it((t,e)=>vn(t,"name",{value:e,configurable:!0}),"t");at(t=>t instanceof Error&&t.type==="VisulimaError","isVisulimaError");class oe extends Error{static{b(this,"v")}static{et(this,"g")}static{tt(this,"p")}static{nt(this,"V")}static{it(this,"VisulimaError")}static{at(this,"VisulimaError")}loc;title;hint;type="VisulimaError";constructor({cause:e,hint:n,location:a,message:r,name:i,stack:c,title:s}){super(r,{cause:e}),this.title=s,this.name=i,this.stack=c??this.stack,this.loc=a,this.hint=n}setLocation(e){this.loc=e}setName(e){this.name=e}setMessage(e){this.message=e}setHint(e){this.hint=e}}var yn=Object.defineProperty,ot=b((t,e)=>yn(t,"name",{value:e,configurable:!0}),"o$b"),wn=Object.defineProperty,rt=ot((t,e)=>wn(t,"name",{value:e,configurable:!0}),"o"),bn=Object.defineProperty,$n=rt((t,e)=>bn(t,"name",{value:e,configurable:!0}),"i");let On=class st extends oe{static{b(this,"a")}static{ot(this,"a")}static{rt(this,"t")}static{$n(this,"AlreadySetError")}optionName;constructor(e){super({cause:void 0,hint:`Remove the duplicate option '${e}' from your command line arguments.`,location:void 0,message:`Option '${e}' is already set`,name:"ALREADY_SET",stack:void 0,title:"Option Already Set"}),this.optionName=e,Object.setPrototypeOf(this,st.prototype)}};var An=Object.defineProperty,lt=b((t,e)=>An(t,"name",{value:e,configurable:!0}),"t$7"),En=Object.defineProperty,ct=lt((t,e)=>En(t,"name",{value:e,configurable:!0}),"e"),Pn=Object.defineProperty,Cn=ct((t,e)=>Pn(t,"name",{value:e,configurable:!0}),"e");let _e=class ut extends oe{static{b(this,"n")}static{lt(this,"n")}static{ct(this,"o")}static{Cn(this,"UnknownOptionError")}optionName;constructor(e){super({cause:void 0,hint:`Check your option definitions or remove the unknown option '${e}' from your command line arguments.`,location:void 0,message:`Unknown option: --${e}`,name:"UNKNOWN_OPTION",stack:void 0,title:"Unknown Option"}),this.optionName=`--${e}`,Object.setPrototypeOf(this,ut.prototype)}};var kn=Object.defineProperty,pt=b((t,e)=>kn(t,"name",{value:e,configurable:!0}),"a$6"),Nn=Object.defineProperty,ft=pt((t,e)=>Nn(t,"name",{value:e,configurable:!0}),"a"),jn=Object.defineProperty,xn=ft((t,e)=>jn(t,"name",{value:e,configurable:!0}),"o");let _n=class ht extends oe{static{b(this,"n")}static{pt(this,"o")}static{ft(this,"e")}static{xn(this,"UnknownValueError")}value;constructor(e){super({hint:"Use a defined option or add a defaultOption to capture this value.",message:`Unknown value: ${e}`,name:"UNKNOWN_VALUE",title:"Unknown Value"}),this.value=e,Object.setPrototypeOf(this,ht.prototype)}};var Ln=Object.defineProperty,dt=b((t,e)=>Ln(t,"name",{value:e,configurable:!0}),"i$7"),In=Object.defineProperty,mt=dt((t,e)=>In(t,"name",{value:e,configurable:!0}),"i"),Sn=Object.defineProperty,Un=mt((t,e)=>Sn(t,"name",{value:e,configurable:!0}),"i");let x=class gt extends oe{static{b(this,"a")}static{dt(this,"o")}static{mt(this,"e")}static{Un(this,"InvalidDefinitionsError")}constructor(e,n){super({cause:void 0,hint:n,location:void 0,message:e,name:"INVALID_DEFINITIONS",stack:void 0,title:"Invalid Option Definition"}),Object.setPrototypeOf(this,gt.prototype)}};var Mn=Object.defineProperty,Vn=b((t,e)=>Mn(t,"name",{value:e,configurable:!0}),"T$1"),Tn=Object.defineProperty,H=Vn((t,e)=>Tn(t,"name",{value:e,configurable:!0}),"P"),Rn=Object.defineProperty,re=H((t,e)=>Rn(t,"name",{value:e,configurable:!0}),"o");const Le=re(t=>t===Boolean||typeof t=="function"&&t.name?.startsWith("Boolean"),"isBooleanType"),Ie=re(t=>t===Number||typeof t=="function"&&t.name==="Number","isNumberType"),Se=re(t=>t===String||typeof t=="function"&&t.name==="String","isStringType"),Dn=re((t,e)=>Array.isArray(t)?Le(e)?t.map(Boolean):Ie(e)?t.map(Number):Se(e)?t.map(String):t.map(n=>e(String(n))):t===null?null:Le(e)?!!t:Ie(e)?Number(t):Se(e)?String(t):e(String(t)),"convertValue");var Bn=Object.defineProperty,zn=H((t,e)=>Bn(t,"name",{value:e,configurable:!0}),"e");const N=zn((t,e,n,...a)=>{t&&console.debug(`[command-line-args:${n}] ${e}`,...a)},"debug");var Wn=Object.defineProperty,T=H((t,e)=>Wn(t,"name",{value:e,configurable:!0}),"A");const Fn=/-([a-z])/g,me=T(t=>t===Boolean||typeof t=="function"&&t.name?.startsWith("Boolean"),"isBooleanType"),qn=T(t=>t.codePointAt(0)===95,"isSpecialKey"),Ue=T((t,e)=>Array.isArray(t)?[...t,...e]:[t,...e],"appendToArrayMultiple"),Me=T(t=>t==="__proto__"||t==="constructor"||t==="prototype","isUnsafeKey"),Ve=T((t,e,n,a=!1)=>{t[e]===void 0?t[e]=a?[n]:n:a&&Array.isArray(t[e])?t[e].push(n):t[e]=[t[e],n]},"createOrAppendArray"),Gn=T((t,e,n,a,r)=>{let i=e.get(t)||n.get(t);if(!i&&a){const c=t.toLowerCase();i=a.get(c)||r?.get(c)}return i},"getDefinition"),Hn=T((t,e,n,a)=>{const r=n.debug||!1;N(r,"resolveArgs called with options:","resolver",{partial:n.partial,stopAtFirstUnknown:n.stopAtFirstUnknown}),N(r,"Starting argument resolution","resolver"),N(r,"Tokens:","resolver",t),N(r,"Definitions:","resolver",e),N(r,"Processing tokens...","resolver");const i=new Map,c=new Map,s=n.caseInsensitive?new Map:void 0,g=n.caseInsensitive?new Map:void 0,o=n.camelCase?new Map:void 0,p=n.camelCase?new Map:void 0;for(const f of e)if(i.set(f.name,f),f.alias&&c.set(f.alias,f),n.caseInsensitive&&s&&(s.set(f.name.toLowerCase(),f),f.alias&&g&&g.set(f.alias.toLowerCase(),f)),n.camelCase&&o&&p){const h=f.name.replaceAll(Fn,(m,w)=>w.toUpperCase());o.set(f.name,h),p.set(h,f.name)}const u={},l={},d=[],y=new Set;let v=!1;const $=e.find(f=>f.defaultOption),C=e.some(f=>f.group),k=e.some(f=>f.type===Number);for(let f=0;f<t.length;f++){const h=t[f];if(h.kind==="option-terminator"){u._unknown=a.slice(h.index),v=!0;break}if(h.kind==="option"&&h.name){let m=Gn(h.name,i,c,s,g);if(!m&&h.value===void 0&&k&&/^\d+$/.test(h.name)){const O=e.find(I=>I.type===Number);O&&(m=O,h.value=h.name,h.name=O.name)}const w=m?m.name:h.name,A=m&&m.multiple,j=m&&m.lazyMultiple;if(l[w]!==void 0&&!A&&!j&&!n.partial)throw new On(w);if(!m&&n.partial){const O=h.rawName||`--${h.name}${h.value!==void 0&&h.inlineValue?`=${h.value}`:""}`;d.push({index:h.index,value:O});continue}if(!m&&n.stopAtFirstUnknown){u._unknown=a.slice(h.index);break}if(!m&&!n.partial)throw new _e(h.name);if(h.value===void 0){const O=t[f+1],I=O&&O.kind==="option"&&!("name"in O)&&O.value!==void 0,L=O&&m&&!(m.type&&me(m.type))&&(O.kind==="positional"||I),Lt=m&&m.defaultOption&&!m.multiple&&!m.lazyMultiple;if(L&&(!m?.defaultOption||Lt))if(A){let S=f+1;const de=[];for(;S<t.length&&(t[S].kind==="positional"||t[S].kind==="option"&&!("name"in t[S])&&t[S].value!==void 0);)de.push(t[S].value),y.add(t[S].index),S++;l[w]=l[w]===void 0?de:Ue(l[w],de),f=S-1}else j?(Ve(l,w,O.value,!0),y.add(O.index),f++):(l[w]=O.value,y.add(O.index),f++);else m&&m.type&&me(m.type)?Ve(l,w,!0,A):l[w]=A?[]:null}else{let{value:O}=h;if(m&&m.type&&me(m.type))switch(O){case"":{if(n.partial)l._unknown||(l._unknown=[]),l._unknown.push(`${h.rawName||`--${h.name}`}${h.value?`=${h.value}`:""}`),O=!0;else throw new _e(h.name);break}case"false":{O=!1;break}case"true":{O=!0;break}default:O=!0}const I=O===void 0?[]:[O];if(A){let L=f+1;for(;L<t.length&&t[L].kind==="positional";)I.push(t[L].value),y.add(t[L].index),L++;f=L-1}l[w]===void 0?l[w]=A||j?I:O:A||j?l[w]=Ue(l[w],I):l[w]=O}}else if(h.kind==="positional"&&n.stopAtFirstUnknown&&!y.has(h.index)){N(r,`Found unconsumed positional token at index ${h.index}, stopping processing`,"resolver"),u._unknown=a.slice(h.index);break}}for(const[f,h]of Object.entries(l)){const m=i.get(f);m&&(m.multiple||m.lazyMultiple)&&!Array.isArray(h)&&(l[f]=[h])}if($){const f=[],h=[];for(const m of t)m.kind==="positional"&&!y.has(m.index)&&(f.push(m.value),h.push(m));if(f.length>0){const m=l[$.name],w=$.multiple||$.lazyMultiple;m===void 0?w?(h.forEach(A=>y.add(A.index)),l[$.name]=f):(y.add(h[0].index),l[$.name]=f[0]):w&&(h.forEach(A=>y.add(A.index)),l[$.name]=Array.isArray(m)?[...f,...m]:[...f,m])}}if(!n.partial){for(const f of t)if(f.kind==="positional"&&!y.has(f.index))throw new _n(a[f.index])}if(n.partial&&!n.stopAtFirstUnknown){const f=[...d];if(l._unknown){const h=new Map;for(const[m,w]of a.entries())h.set(w,m);for(const m of l._unknown){const w=h.get(m);w!==void 0&&f.push({index:w,value:m})}}for(const h of t)h.kind==="positional"&&!y.has(h.index)&&f.push({index:h.index,value:a[h.index]});f.length>0&&(f.sort((h,m)=>h.index-m.index),u._unknown=f.map(h=>h.value))}if(n.stopAtFirstUnknown&&!v){const f=t.findIndex(w=>w.kind==="option"&&!i.has(w.name||"")&&!c.has(w.name||"")&&(!n.caseInsensitive||!s?.has(w.name?.toLowerCase()||"")&&!g?.has(w.name?.toLowerCase()||""))),h=t.findIndex(w=>w.kind==="positional"&&!y.has(w.index));let m=-1;if(f!==-1&&h!==-1?m=Math.min(f,h):f!==-1?m=f:h!==-1&&(m=h),m>=0){const w=t[m].index;u._unknown=a.slice(w)}}else d.length>0&&!n.partial&&(u._unknown=d.map(f=>f.value));for(const[f,h]of Object.entries(l)){const m=n.camelCase&&o?.get(f)||f,w=i.get(f);u[m]=w&&w.type?Dn(h,w.type):h===void 0?null:h}for(const f of e){const h=n.camelCase&&o?.get(f.name)||f.name;!(h in u)&&f.defaultValue!==void 0&&(f.multiple||f.lazyMultiple?u[h]=Array.isArray(f.defaultValue)?[...f.defaultValue]:[f.defaultValue]:u[h]=f.defaultValue)}if(C){const f={},h={},m={};for(const A of e)if(A.group){const j=Array.isArray(A.group)?A.group:[A.group];for(const O of j)Me(O)||f[O]||(f[O]={})}for(const A of Object.keys(u))if(!qn(A)){h[A]=u[A];let j=A;n.camelCase&&(j=p?.get(A)||A);const O=i.get(j);if(O&&O.group){const I=Array.isArray(O.group)?O.group:[O.group];for(const L of I)Me(L)||f[L]&&(f[L][A]=u[A])}else m[A]=u[A]}const w={_all:h};for(const[A,j]of Object.entries(f))w[A]=j;Object.keys(m).length>0&&(w._none=m),u._unknown&&(w._unknown=u._unknown),Object.keys(u).forEach(A=>delete u[A]),Object.assign(u,w)}return N(r,"Final parsed result:","resolver",u),u},"resolveArgs");var Kn=Object.defineProperty,R=H((t,e)=>Kn(t,"name",{value:e,configurable:!0}),"l");const V="-".codePointAt(0),M="=",Yn=M.codePointAt(0),Jn="--",Zn="-",Qn="--",vt=R(t=>t.length>2&&t.startsWith(Qn),"hasLongOptionPrefix"),Xn=R(t=>vt(t)&&!t.includes(M,3),"isLongOption"),ei=R(t=>vt(t)&&t.includes(M,3),"isLongOptionAndValue"),ti=R(t=>t!==void 0&&t.length>0&&t.codePointAt(0)!==V,"hasOptionValue"),ni=R(t=>{if(t.length!==2||t.codePointAt(0)!==V||t.codePointAt(1)===V)return!1;const e=t.codePointAt(1);return e!==void 0&&(e<48||e>57)},"isShortOption"),ii=R(t=>!(t.length<=2||t.codePointAt(0)!==V||t.codePointAt(1)===V),"isShortOptionGroup"),ai=R(t=>{const e=[],n=[...t];let a=-1,r=0;for(;n.length>0;){const i=n.shift();if(i===void 0)break;const c=n[0];if(r>0?r--:a++,i===Jn){e.push({index:a,kind:"option-terminator"});const s=n.map((g,o)=>({index:a+o+1,kind:"positional",value:g}));e.push(...s),a+=n.length;break}if(ni(i)){const s=i.charAt(1);let g,o;r?(e.push({index:a,inlineValue:o,kind:"option",name:s,rawName:i,value:g}),r===1&&ti(c)&&(g=n.shift(),e.push({index:a,inlineValue:o,kind:"option",value:g}))):e.push({index:a,inlineValue:o,kind:"option",name:s,rawName:i,value:g}),g!==void 0&&++a;continue}if(ii(i)&&!i.includes(M)){const s=[];let g="",o=!1;for(let p=1;p<i.length;p++){const u=i.charAt(p);o?g+=u:u.codePointAt(0)===Yn?o=!0:s.push(`${Zn}${u}`)}if(o)if(s.length>0){const p=s.pop();s.push(`${p}=${g}`)}else s.push(g);n.unshift(...s),r=s.length;continue}if(Xn(i)){const s=i.slice(2);e.push({index:a,kind:"option",name:s,rawName:i});continue}if(ei(i)){const s=i.indexOf(M),g=i.slice(2,s),o=i.slice(s+1);e.push({index:a,inlineValue:!0,kind:"option",name:g,rawName:i,value:o});continue}if(i.length>2&&i.codePointAt(0)===V&&i.codePointAt(1)!==V&&i.includes(M)){const s=i.indexOf(M),g=i.charAt(1),o=i.slice(s+1);e.push({index:a,inlineValue:!0,kind:"option",name:g,rawName:i,value:o});continue}e.push({index:a,kind:"positional",value:i})}return e},"parseArgsTokens");var oi=Object.defineProperty,Pe=H((t,e)=>oi(t,"name",{value:e,configurable:!0}),"d");const ri=Pe(t=>t&&(t===Boolean||typeof t=="function"&&t.name?.startsWith("Boolean")),"isBooleanType"),si=Pe(t=>typeof t=="function","isValidCustomTypeFunction"),li=Pe((t,e,n)=>{const a=n?.debug||!1;N(a,"Validating definitions:","validation",t,"caseInsensitive:",e);const r=new Set,i=new Set,c=new Set,s=new Set;let g=0;for(const o of t){if(N(a,"Checking definition:","validation",o),!o.name)throw N(a,"Validation failed: name is required","validation"),new x("Invalid option definition: name is required");if(typeof o.name!="string")throw new x("Invalid option definition: name must be a string");if(o.name.trim()==="")throw new x("Invalid option definition: name cannot be empty");const p=e?o.name.toLowerCase():"";if(r.has(o.name)||e&&c.has(p))throw new x(`Invalid option definition: duplicate name '${o.name}'`);if(i.has(o.name)||e&&s.has(p))throw new x(`Invalid option definition: name '${o.name}' conflicts with an existing alias`);if(r.add(o.name),e&&c.add(p),o.alias!==void 0){if(typeof o.alias!="string")throw new x("Invalid option definition: alias must be a string");if(o.alias.length!==1)throw new x("Invalid option definition: alias must be a single character");if(/\d/.test(o.alias))throw new x("Invalid option definition: alias cannot be numeric");if(o.alias==="-")throw new x('Invalid option definition: alias cannot be "-"');const u=e?o.alias.toLowerCase():"";if(i.has(o.alias)||e&&s.has(u))throw new x(`Invalid option definition: duplicate alias '${o.alias}'`);if(r.has(o.alias)||e&&c.has(u))throw new x(`Invalid option definition: alias '${o.alias}' conflicts with an existing option name`);i.add(o.alias),e&&s.add(u)}if(o.defaultOption&&(g++,o.type!==void 0&&ri(o.type)))throw new x("Invalid option definition: defaultOption cannot be Boolean type");if(o.type!==void 0&&!(o.type===Boolean||o.type===Number||o.type===String||typeof o.type=="function"&&si(o.type)))throw new x("Invalid option definition: invalid type")}if(g>1)throw N(a,"Validation failed: multiple defaultOptions not allowed","validation"),new x("Invalid option definition: multiple defaultOptions not allowed");N(a,"Validation completed successfully","validation")},"validateDefinitions");var ci=Object.defineProperty,ui=H((t,e)=>ci(t,"name",{value:e,configurable:!0}),"O");const pi=ui((t,e={})=>{const n=e.debug||!1;N(n,"Starting command-line-args parsing","index"),N(n,"Options:","index",e);const a={...e};a.stopAtFirstUnknown&&(a.partial=!0);const r=Array.isArray(t)?t:[t];N(n,"Normalized definitions:","index",r),li(r,a.caseInsensitive,n?a:void 0);let{argv:i}=a;if(!i&&(i=process.argv.slice(2),process.execArgv?.length)){const o=new Set(process.execArgv);i=i.filter(p=>!o.has(p))}N(n,"Using argv:","index",i);let c=i;a.caseInsensitive&&i&&(c=i.map(o=>{if(o.startsWith("--")){const p=o.indexOf("="),u=(p===-1?o.slice(2):o.slice(2,p)).toLowerCase();return p===-1?`--${u}`:`--${u}${o.slice(p)}`}if(o.startsWith("-")&&!o.startsWith("--")&&o.length>1){const p=o.slice(1).split("=",2),u=p[0],l=p[1];if(!u)return o;const d=u.toLowerCase();return l===void 0?`-${d}`:`-${d}=${l}`}return o}));const s=ai((c??i??[]).map(String));N(n,"Tokenized arguments:","index",s);const g=Hn(s,r,a,i??[]);return N(n,"Command-line-args parsing completed","index"),g},"commandLineArgs");var fi=Object.defineProperty,hi=b((t,e)=>fi(t,"name",{value:e,configurable:!0}),"m$5");let di=class{static{b(this,"a")}static{hi(this,"EmptyToolbox")}result;argv;options;argument;command;commandName;env;logger;runtime;constructor(e,n){this.commandName=e,this.command=n}};var mi=Object.defineProperty,gi=b((t,e)=>mi(t,"name",{value:e,configurable:!0}),"f$3");const vi=/^-{1,2}(\w+)(=(.+))?$/,yt=gi((t,e,n,a)=>{const r=vi.exec(t);if(r==null)return{};const i=r[1];if(!i)return{};const c=n&&a?n.get(i)??a.get(i):e.find(s=>s.name===i||s.alias===i);return c!==void 0?{argName:c.name,argValue:r[3],option:c}:{}},"getParameterOption");var yi=Object.defineProperty,Ee=b((t,e)=>yi(t,"name",{value:e,configurable:!0}),"e$3");const Te=Ee((t,e)=>{if(e.type===void 0)return t;if(e.type.name==="Boolean"){if(t==="true"||t==="1")return e.type(!0);if(t==="false"||t==="0")return e.type(!1)}return e.type(t)},"convertType"),wi=new Set(["0","1","false","true"]),bi=Ee((t,e,n,a)=>{if(e.length===0||t.length===0)return{};const r=Ee((i,c)=>{const{argName:s,argValue:g,option:o}=yt(c,e,n,a),{lastOption:p}=i;return o&&X(o)&&g&&s?i.partial[s]=Te(g,o):i.lastName&&p&&X(p)&&wi.has(c)&&(i.partial[i.lastName]=Te(c,p)),{lastName:s,lastOption:o,partial:i.partial}},"getBooleanValue");return t.reduce(r,{partial:{}}).partial},"getBooleanValues");var $i=Object.defineProperty,Re=b((t,e)=>$i(t,"name",{value:e,configurable:!0}),"e$2");const Oi=new Set(["0","1","false","true"]),Ai=Re((t,e,n,a)=>{if(e.length===0||t.length===0)return t;const r=Re((i,c)=>{const{argValue:s,option:g}=yt(c,e,n,a),{lastOption:o}=i;if(o&&X(o)&&Oi.has(c)){const{args:u}=i;return{args:u.slice(0,-1)}}if(g&&X(g)&&s)return{args:i.args};const p=[...i.args];return p.push(c),{args:p,lastOption:g}},"removeBooleanArguments");return t.reduce(r,{args:[]}).args},"removeBooleanValues");var Ei=Object.defineProperty,Pi=b((t,e)=>Ei(t,"name",{value:e,configurable:!0}),"o$8");const De=Pi(t=>{const e=new Map;for(const n of t){const a=e.get(n.name);a?e.set(n.name,{...a,...n}):e.set(n.name,n)}return[...e.values()]},"mergeArguments");var Ci=Object.defineProperty,se=b((t,e)=>Ci(t,"name",{value:e,configurable:!0}),"o$7");const ki=se(t=>{if(t===void 0)return;const e=t.toLowerCase().trim();return e==="true"||e==="1"||e==="yes"||e==="on"},"transformBooleanEnv"),Ni=se((t,e)=>{if(!t.type)return e;if(e!==void 0){if(t.type===Boolean||typeof t.type=="function"&&t.type.name==="Boolean")return ki(e);if(t.type===Number||typeof t.type=="function"&&t.type.name==="Number"){const n=Number.parseFloat(e);return Number.isNaN(n)?void 0:n}return t.type===String||typeof t.type=="function"&&t.type.name==="String"?e:t.type(e)}},"transformEnvValue"),ji=se(t=>t.toLowerCase().replaceAll(/_./g,e=>e[1]?.toUpperCase()??e).replace(/^[A-Z]/,e=>e.toLowerCase()),"toCamelCase"),xi=se(t=>{if(!t||t.length===0)return{};const e={},n=q();for(const a of t){const r=n[a.name],i=Ni(a,r),c=i===void 0?a.defaultValue:i,s=ji(a.name);e[s]=c}return e},"processEnvVariables");var _i=Object.defineProperty,le=b((t,e)=>_i(t,"name",{value:e,configurable:!0}),"l$a");const Li=le(t=>{const e=new Map,n=new Map;for(const a of t)if(e.set(a.name,a),a.alias){const r=Array.isArray(a.alias)?a.alias:[a.alias];for(const i of r)n.set(i,a)}return{optionMapByAlias:n,optionMapByName:e}},"buildOptionMaps"),Ii=le((t,e,n,a)=>{const r=new di(t.name,t),{_all:i,positionals:c}=e,s=Object.keys(n).length>0?{...i,...n}:i;te in s&&delete s[te],r.argument=c?.[te]??[];const g=Object.keys(a).length>0;return r.options=g?{...s,...a}:s,r.env=xi(t.env),r},"prepareToolbox"),Si=le((t,e,n)=>{const a=t.options??[],r=a.length>0;let i=De(r?[...a,...n]:n);if(i.length>0){for(const o of i)if(o.multiple&&o.lazyMultiple)throw new Error(`Argument "${o.name}" cannot have both multiple and lazyMultiple options, please choose one.`)}t.argument&&(i=[{defaultOption:!0,description:t.argument?.description,group:"positionals",multiple:!0,name:te,type:t.argument?.type,typeLabel:t.argument?.typeLabel},...i]);let c,s;if(r){const{optionMapByAlias:o,optionMapByName:p}=Li(a);c=Ai(e,a,p,o),s=bi(e,a,p,o)}else c=e,s={};const g=pi(i,{argv:c,camelCase:!0,partial:!0,stopAtFirstUnknown:!0});return{arguments_:i,booleanValues:s,parsedArgs:g}},"processCommandArgs"),B=le(async(t,e,n)=>await t.execute(e),"executeCommand");var Ui=Object.defineProperty,Mi=b((t,e)=>Ui(t,"name",{value:e,configurable:!0}),"n$6");let Vi=class extends P{static{b(this,"s")}static{Mi(this,"CommandValidationError")}commandName;missingOptions;constructor(e,n){super(`Command "${e}" is missing required options: ${n.join(", ")}`,"COMMAND_VALIDATION_ERROR",{commandName:e,missingOptions:n}),this.name="CommandValidationError",this.commandName=e,this.missingOptions=n,this.hint=`Provide the following required options: ${n.join(", ")}`}};var Ti=Object.defineProperty,Ri=b((t,e)=>Ti(t,"name",{value:e,configurable:!0}),"t$5");const Be=Ri((t,e,n=!1)=>{const a=[];for(const r of t)if(!(!n&&!r.required)&&e[r.name]===void 0){if(r.type?.name==="Boolean"){e[r.name]=!1;continue}a.push(r)}return a},"listMissingArguments");var Di=Object.defineProperty,wt=b((t,e)=>Di(t,"name",{value:e,configurable:!0}),"n$5");const Bi=wt((t,e)=>e.includes(t)?!0:Math.abs(t.length-e.length)>t.length/2?!1:Ft(t,e)<=t.length/3,"isSimilar"),F=wt((t,e)=>{const n=t.toLowerCase();return e.filter(a=>Bi(a.toLowerCase(),n))},"findAlternatives");var zi=Object.defineProperty,ce=b((t,e)=>zi(t,"name",{value:e,configurable:!0}),"a$2");const Wi=ce((t,e)=>{const n=[];if(t._unknown&&t._unknown.forEach(a=>{const r=a.startsWith("--");let i=`Found unknown ${r?"option":"argument"} "${a}"`;if(r){const c=F(a.replace("--",""),(e.options??[]).map(s=>s.name));if(c.length>0){const[s,...g]=c.map(o=>`--${o}`);i+=g.length>0?`, did you mean ${s} or ${g.join(", ")}?`:`, did you mean ${s}?`}}n.push(i)}),n.length>0)throw new Error(n.join(`
2
+ `))},"validateUnknownOptions"),Fi=ce((t,e,n)=>{const a=n.__requiredOptions__?Be(n.__requiredOptions__,e,!0):Be(t,e,!1);if(a.length>0)throw new Vi(n.name,a.map(r=>r.name));e._unknown&&e._unknown.length>0&&!n.argument&&Wi(e,n)},"validateRequiredOptions"),qi=ce((t,e,n)=>{const a=n.__conflictingOptions__??t.filter(r=>r.conflicts!==void 0);if(a.length>0){const r=a.find(i=>Array.isArray(i.conflicts)?i.conflicts.some(c=>e[c]!==void 0)&&e[i.name]!==void 0:e[i.conflicts]!==void 0&&e[i.name]!==void 0);if(r)throw new Ze(r.name,typeof r.conflicts=="string"?r.conflicts:r.conflicts?.[0]??"unknown")}},"validateConflictingOptions"),Gi=ce(t=>{if(!Array.isArray(t.options))return;const e=new Map,n=new Map;for(const r of t.options){if(r.name){const i=e.get(r.name)??[];i.push(r),e.set(r.name,i)}if(typeof r.alias=="string"&&r.alias.length>0){const i=n.get(r.alias)??[];i.push(r),n.set(r.alias,i)}else if(Array.isArray(r.alias)){for(const i of r.alias)if(i.length>0){const c=n.get(i)??[];c.push(r),n.set(i,c)}}}const a=[];for(const[r,i]of e)i.length>1&&a.push(`Duplicate option name "${r}" in command "${t.name}": ${JSON.stringify(i)}`);for(const[r,i]of n)i.length>1&&a.push(`Duplicate option alias "-${r}" used by options ${i.map(c=>`"${c.name}"`).join(", ")} in command "${t.name}"`);if(a.length>0)throw new Error(a.join(`
3
+ `))},"validateDuplicateOptions");var Hi=Object.defineProperty,Ce=b((t,e)=>Hi(t,"name",{value:e,configurable:!0}),"r$7");const Ki=Ce((t,e)=>{if(e.length===0)return{argv:[],commandPath:void 0};const n=[];for(let a=1;a<=e.length;a+=1){const r=e[a-1];if(r===void 0)break;n.push(r);const i=n.join(" ");if(t.has(i))return{argv:e.slice(a),commandPath:[...n]}}return{argv:e,commandPath:void 0}},"parseNestedCommand"),J=Ce(t=>t.join(" "),"getCommandPathKey"),Yi=Ce((t,e)=>e&&e.length>0?[...e,t]:[t],"getFullCommandPath");var Ji=Object.defineProperty,Zi=b((t,e)=>Ji(t,"name",{value:e,configurable:!0}),"p$4"),Qi=Object.defineProperty,bt=Zi((t,e)=>Qi(t,"name",{value:e,configurable:!0}),"e"),Xi=Object.defineProperty,ea=bt((t,e)=>Xi(t,"name",{value:e,configurable:!0}),"E");const $t=String.raw,ze=$t`\p{Emoji}(?:\p{EMod}|[\u{E0020}-\u{E007E}]+\u{E007F}|\uFE0F?\u20E3?)`,ta=ea(()=>new RegExp($t`\p{RI}{2}|(?![#*\d](?!\uFE0F?\u20E3))${ze}(?:\u200D${ze})*`,"gu"),"default");var na=Object.defineProperty,ia=bt((t,e)=>na(t,"name",{value:e,configurable:!0}),"p");Object.freeze(new Map([[0,0],[1,22],[2,22],[3,23],[4,24],[7,27],[8,28],[9,29],[30,39],[31,39],[32,39],[33,39],[34,39],[35,39],[36,39],[37,39],[40,49],[41,49],[42,49],[43,49],[44,49],[45,49],[46,49],[47,49],[90,39]]));const G=ta(),aa=/[-_./\s]+/g,Q=/(\u001B\[[0-9;]*[a-z])/i,We=new RegExp("\\p{Script=Arabic}","u"),oa=new RegExp("\\p{Script=Bengali}","u"),z=new RegExp("\\p{Script=Cyrillic}","u"),ra=new RegExp("\\p{Script=Devanagari}","u"),sa=new RegExp("\\p{Script=Ethiopic}","u"),ge=new RegExp("\\p{Script=Greek}","u"),la=new RegExp("\\p{Script=Greek}+|\\p{Script=Latin}+|[^\\p{Script=Greek}\\p{Script=Latin}]+","gu"),ca=new RegExp("\\p{Script=Gujarati}","u"),ua=new RegExp("\\p{Script=Gurmukhi}","u"),Fe=new RegExp("\\p{Script=Hangul}","u"),qe=new RegExp("\\p{Script=Hebrew}","u"),pa=new RegExp("\\p{Script=Hiragana}","u"),Ge=new RegExp("\\p{Script=Han}","u"),fa=new RegExp("\\p{Script=Kannada}","u"),ha=new RegExp("\\p{Script=Katakana}","u"),da=new RegExp("\\p{Script=Khmer}","u"),ma=new RegExp("\\p{Script=Lao}","u"),_=new RegExp("\\p{Script=Latin}","u"),ga=new RegExp("\\p{Script=Malayalam}","u"),va=new RegExp("\\p{Script=Myanmar}","u"),ya=new RegExp("\\p{Script=Oriya}","u"),wa=new RegExp("\\p{Script=Sinhala}","u"),ba=new RegExp("\\p{Script=Tamil}","u"),$a=new RegExp("\\p{Script=Telugu}","u"),Oa=new RegExp("\\p{Script=Thai}","u"),Aa=new RegExp("\\p{Script=Tibetan}","u"),He=/[\u02BB\u02BC\u0027]/u,Ea=ia(t=>t.replace(G,""),"stripEmoji");var Pa=Object.defineProperty,Ot=b((t,e)=>Pa(t,"name",{value:e,configurable:!0}),"i$6"),Ca=Object.defineProperty,At=Ot((t,e)=>Ca(t,"name",{value:e,configurable:!0}),"r"),ka=Object.defineProperty,Na=At((t,e)=>ka(t,"name",{value:e,configurable:!0}),"c");let Et=class{static{b(this,"l")}static{Ot(this,"y")}static{At(this,"s")}static{Na(this,"LRUCache")}capacity;cache;keyOrder;constructor(e){this.capacity=e,this.cache=new Map,this.keyOrder=[]}get(e){if(this.cache.has(e))return this.keyOrder=this.keyOrder.filter(n=>n!==e),this.keyOrder.push(e),this.cache.get(e)}has(e){return this.cache.has(e)}set(e,n){if(this.cache.has(e))this.keyOrder=this.keyOrder.filter(a=>a!==e);else if(this.cache.size>=this.capacity){const a=this.keyOrder.shift();a!==void 0&&this.cache.delete(a)}this.cache.set(e,n),this.keyOrder.push(e)}delete(e){this.cache.delete(e),this.keyOrder=this.keyOrder.filter(n=>n!==e)}clear(){this.cache.clear(),this.keyOrder=[]}size(){return this.cache.size}};var ja=Object.defineProperty,xa=b((t,e)=>ja(t,"name",{value:e,configurable:!0}),"r$5"),_a=Object.defineProperty,La=xa((t,e)=>_a(t,"name",{value:e,configurable:!0}),"a"),Ia=Object.defineProperty,Sa=La((t,e)=>Ia(t,"name",{value:e,configurable:!0}),"s");const Ua=Sa((t,e)=>typeof t!="string"||t===""?"":(e?.locale?t[0].toLocaleLowerCase(e.locale):t[0].toLowerCase())+t.slice(1),"lowerFirst");var Ma=Object.defineProperty,Va=b((t,e)=>Ma(t,"name",{value:e,configurable:!0}),"S"),Ta=Object.defineProperty,ue=Va((t,e)=>Ta(t,"name",{value:e,configurable:!0}),"m");const Ra=qt(import.meta.url),Z=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,Da=ue(t=>{if(typeof Z<"u"&&Z.versions&&Z.versions.node){const[e,n]=Z.versions.node.split(".").map(Number);if(e>22||e===22&&n>=3||e===20&&n>=16)return Z.getBuiltinModule(t)}return Ra(t)},"__cjs_getBuiltinModule"),{stripVTControlCharacters:Ba}=Da("node:util");var za=Object.defineProperty,Wa=ue((t,e)=>za(t,"name",{value:e,configurable:!0}),"g");const ve=new Et(1e3),Fa=Wa(t=>{const e=t.join("");if(ve.has(e))return ve.get(e);const n=t.map(r=>r.replaceAll(/[.*+?^${}()|[\]\\]/g,String.raw`\$&`)).join("|"),a=new RegExp(n,"g");return ve.set(e,a),a},"getSeparatorsRegex");var qa=Object.defineProperty,Ga=ue((t,e)=>qa(t,"name",{value:e,configurable:!0}),"t");const Ha=Ga(t=>{const e=[];let n=0,a;for(G.lastIndex=0;(a=G.exec(t))!==null;)a.index>n&&e.push(t.slice(n,a.index)),e.push(a[0]),n=G.lastIndex;return n<t.length&&e.push(t.slice(n)),e.filter(Boolean)},"splitByEmoji");var Ka=Object.defineProperty,E=ue((t,e)=>Ka(t,"name",{value:e,configurable:!0}),"u");const Pt=new Uint8Array(128),Ct=new Uint8Array(128),kt=new Uint8Array(128);for(let t=0;t<128;t++)Pt[t]=t>=65&&t<=90?1:0,Ct[t]=t>=97&&t<=122?1:0,kt[t]=t>=48&&t<=57?1:0;const ye=E(t=>Pt[t],"isUpper"),Ke=E(t=>Ct[t],"isLower"),we=E(t=>kt[t],"isDigit"),U=E((t,e,n,a,r)=>{if(t.length===0)return[];let i=!1;for(const u of Object.values(e))if(u(t[0])){i=!0;break}if(!i&&!n)return[t];const c=[...t],s=[];let g=c[0],o="other";for(const[u,l]of Object.entries(e))if(l(c[0])){o=u;break}let p=n&&a?c[0]===c[0].toLocaleUpperCase(a):!1;for(let u=1;u<c.length;u++){const l=c[u];let d="other";for(const[$,C]of Object.entries(e))if(C(l)){d=$;break}const y=n&&a?l===l.toLocaleUpperCase(a):!1;let v=!1;r?v=r(o,d,p,y,l,u,c):(o!==d&&o!=="other"&&d!=="other"&&(v=!0),n&&d!=="other"&&!p&&y&&(v=!0)),v?(s.push(g),g=l):g+=l,o=d,n&&(p=y)}return g&&g.length>0&&s.push(g),s.length>0?s:[t]},"handleScriptTransitions"),Nt=E((t,e=new Set)=>{if(t.length===0)return[];if(t.toUpperCase()===t)return[t];let n=0;const a=[],r=t.length;for(let i=1;i<r;i++){const c=t.codePointAt(i-1),s=t.codePointAt(i);if(e.size>0){for(const d of e)if(t.startsWith(d,n)){a.push(d),n+=d.length,i=n-1;break}if(i<n)continue}const g=c&&c<128&&ye(c),o=s&&s<128&&ye(s),p=c&&c<128&&Ke(c),u=c&&c<128&&we(c),l=s&&s<128&&we(s);if(p&&o){a.push(t.slice(n,i)),n=i;continue}if(u&&!l||!u&&l){a.push(t.slice(n,i)),n=i;continue}if(l&&!u){let d=!1,y=!1;if(i+1<r){const v=t.codePointAt(i+1);d=v&&v<128&&ye(v),y=v&&v<128&&we(v)}if(!y&&d){a.push(t.slice(n,i),t.slice(i,i+1)),n=i+1;continue}}if(i+1<r){const d=t.codePointAt(i+1),y=d&&d<128&&Ke(d);if(g&&o&&y){const v=t.slice(n,i+1);e.has(v)||(a.push(t.slice(n,i)),n=i)}}}return n<r&&a.push(t.slice(n)),a.filter(i=>i!=="")},"splitCamelCaseFast"),jt=E((t,e,n)=>{if(t.length===0)return[];const a=t===t.toLocaleUpperCase(e);if(e.startsWith("de")){if(!a&&t.replaceAll("ß","SS")===t.toLocaleUpperCase(e))return[t];const o=[...t],p=o.length,u=[];let l=o[0],d=o[0]===o[0].toLocaleUpperCase(e),y=d,v=d?0:-1;for(let $=1;$<p;$++){const C=o[$],k=C===C.toLocaleUpperCase(e);if(k===d)l+=C;else if(k)l&&l.length>0&&(u.push(l),l=C),y=!0,v=$;else{if(y&&$-v>1){const f=o[$-1],h=l.slice(0,-1);h&&h.length>0&&u.push(h),l=f+C}else l+=C;y=!1,v=-1}d=k}return l&&l.length>0&&u.push(l),u}if(e.startsWith("uk")||e.startsWith("ru")||e.startsWith("bg")||e.startsWith("sr")||e.startsWith("mk")||e.startsWith("be")){if(!z.test(t)&&!_.test(t))return[t];const o=[...t],p=o.length,u=[];let l=o[0],d=z.test(o[0])?1:_.test(o[0])?2:0,y=o[0]===o[0].toLocaleUpperCase(e);for(let $=1;$<p;$++){const C=o[$],k=z.test(C)?1:_.test(C)?2:0,f=C===C.toLocaleUpperCase(e);d!==k&&(d===1||d===2)&&(k===1||k===2)||k===d&&!y&&f?(u.push(l),l=C):l+=C,d=k,y=f}l&&l.length>0&&u.push(l);const v=[];for(let $=0;$<u.length;$++)$<u.length-1&&u[$].length===1&&_.test(u[$])&&z.test(u[$+1][0])?(v.push(u[$]+u[$+1]),$+=1):v.push(u[$]);return v}if(e.startsWith("el")){if(!ge.test(t)&&!_.test(t))return[t];const o=t.match(la)??[t],p=[];if(o.length===1){const u=o[0];if(!u||!ge.test(u[0])||u.length===1)return[u||t]}for(const u of o){if(!u)continue;if(!ge.test(u[0])||u.length===1){p.push(u);continue}const l=u.length;let d=u[0],y=u[0]===u[0].toLocaleUpperCase(e);for(let v=1;v<l;v++){const $=u[v],C=$===$.toLocaleUpperCase(e);!y&&C?(p.push(d),d=$):d+=$,y=C}d&&p.push(d)}return p}if(e.startsWith("ja")||e.startsWith("ko")){const o=e.startsWith("ja"),p=o?{hiragana:E(l=>pa.test(l),"hiragana"),kanji:E(l=>Ge.test(l),"kanji"),katakana:E(l=>ha.test(l),"katakana"),latin:E(l=>_.test(l),"latin")}:{hangul:E(l=>Fe.test(l),"hangul"),latin:E(l=>_.test(l),"latin")},u=new Set(["が","で","と","に","の","は","へ","も","や","を"]);if(o){const l=U(t,p,!1,e,(y,v)=>y==="hiragana"&&v==="katakana"||y==="katakana"&&v==="hiragana"||y==="hiragana"&&v==="latin"||y==="katakana"&&v==="latin"||y==="kanji"&&v==="latin"||y==="latin"&&(v==="hiragana"||v==="katakana"||v==="kanji")),d=[];for(const y of l)y.length===1&&u.has(y)&&d.length>0?d[d.length-1]+=y:d.push(y);return d.length>0?d:[t]}return U(t,p,!1,e,(l,d)=>l==="hangul"&&d==="latin"||l==="latin"&&d==="hangul")}if(e.startsWith("sl")){const o=[...t],p=o.length,u=[];let l=o[0],d=o[0]===o[0].toLocaleUpperCase(e);for(let y=1;y<p;y++){const v=o[y],$=v===v.toLocaleUpperCase(e),C=/[ČŠŽĐ]/i.test(v),k=y<p-1&&o[y+1]===o[y+1].toLocaleUpperCase(e);!d&&$||C&&k?(u.push(l),l=v,C&&k&&(u.push(l),l="")):l+=v,d=$}return l&&l.length>0&&u.push(l),u}if(e.startsWith("zh"))return U(t,{han:E(o=>Ge.test(o),"han"),latin:E(o=>_.test(o),"latin")},!1,e);if(["ar","fa","he","ur"].includes(e.split("-")[0])){const o=E(p=>qe.test(p)||We.test(p),"isRtlChar");return U(t,{latin:E(p=>_.test(p),"latin"),rtl:E(p=>o(p),"rtl")},!1,e)}if(["am","bn","gu","hi","km","kn","lo","ml","mr","ne","or","pa","si","ta","te","th"].includes(e.split("-")[0])){const o=E(p=>ra.test(p)||oa.test(p)||ca.test(p)||ua.test(p)||fa.test(p)||ba.test(p)||$a.test(p)||ga.test(p)||wa.test(p)||Oa.test(p)||ma.test(p)||Aa.test(p)||va.test(p)||sa.test(p)||da.test(p)||ya.test(p),"isIndicChar");return U(t,{indic:E(p=>o(p),"indic"),latin:E(p=>_.test(p),"latin")},!1,e)}if(["be","bg","ru","sr","uk"].includes(e))return U(t,{cyrillic:E(o=>z.test(o),"cyrillic"),latin:E(o=>_.test(o),"latin")},!0,e);if(["ar","fa","he"].includes(e))return U(t,{latin:E(o=>_.test(o),"latin"),rtl:E(o=>qe.test(o)||We.test(o),"rtl")},!1,e);if(e.startsWith("ko"))return U(t,{hangul:E(o=>Fe.test(o),"hangul"),latin:E(o=>_.test(o),"latin")},!1,e);if(e.startsWith("uz")){if(!z.test(t)&&!_.test(t))return[t];const o=[...t],p=o.length,u=[];let l=o[0],d=o[0]===o[0].toLocaleUpperCase(e);for(let y=1;y<p;y++){const v=o[y],$=v===v.toLocaleUpperCase(e);if(He.test(v)||He.test(o[y-1])){l+=v;continue}!d&&$?(u.push(l),l=v):l+=v,d=$}return l&&l.length>0&&u.push(l),u}const r=[...t],i=r.length,c=[];let s=r[0],g=r[0]===r[0].toLocaleUpperCase(e);for(const o of n)if(t.startsWith(o)){c.push(o),s=r[o.length],g=s===s.toLocaleUpperCase(e);break}for(let o=1;o<i;o++){const p=r[o],u=p===p.toLocaleUpperCase(e);let l=!1;for(const d of n)if(t.startsWith(d,o)){c.push(s,d),o+=d.length-1,s="",l=!0;break}l||(!g&&u?(c.push(s),s=p):s+=p,g=u)}return s&&c.push(s),c},"splitCamelCaseLocale"),Ya=E((t,e,n)=>{const a=[],r=Q.test(t)?t.split(Q).filter(Boolean):[t];for(const i of r)if(Q.test(i))a.push(i);else{const c=G.test(i)?Ha(i).filter(Boolean):[i];for(const s of c)if(G.test(s))a.push(s);else if(e){const g=e.toLowerCase().split("-")[0];a.push(...jt(s,g,n))}else a.push(...Nt(s,n))}return a},"processTextWithAnsiEmoji"),Ja=E((t,e={})=>{if(!t||typeof t!="string")return[];const{handleAnsi:n=!1,handleEmoji:a=!1,knownAcronyms:r=[],locale:i,normalize:c=!1,separators:s,stripAnsi:g=!1,stripEmoji:o=!1}=e,p=new Set([...r].sort((v,$)=>$.length-v.length));let u=t;g&&(u=Ba(u)),o&&(u=Ea(u));const l=Array.isArray(s)?Fa(s):s instanceof RegExp?s:aa,d=u.split(l).filter(Boolean);let y=[];for(const v of d)n||a?y.push(...Ya(v,i,p)):i?y.push(...jt(v,i,p)):y.push(...Nt(v,p));return c&&(y=y.map(v=>p.has(v)?v:i&&v===v.toLocaleUpperCase(i)?v[0]+v.slice(1).toLocaleLowerCase(i):v.toUpperCase()===v&&!p.has(v)?v.slice(0,1)+v.slice(1).toLowerCase():v)),y},"splitByCase");var Za=Object.defineProperty,Qa=b((t,e)=>Za(t,"name",{value:e,configurable:!0}),"r$4"),Xa=Object.defineProperty,eo=Qa((t,e)=>Xa(t,"name",{value:e,configurable:!0}),"o"),to=Object.defineProperty,no=eo((t,e)=>to(t,"name",{value:e,configurable:!0}),"s");const io=no((t,e)=>typeof t!="string"||t===""?"":(e?.locale?t[0].toLocaleUpperCase(e.locale):t[0].toUpperCase())+t.slice(1),"upperFirst");var ao=Object.defineProperty,oo=b((t,e)=>ao(t,"name",{value:e,configurable:!0}),"r$3"),ro=Object.defineProperty,so=oo((t,e)=>ro(t,"name",{value:e,configurable:!0}),"r"),lo=Object.defineProperty,co=so((t,e)=>lo(t,"name",{value:e,configurable:!0}),"n");const uo=co((t,e)=>`${t}::${e?.joiner??""}::${e?.locale??""}::${e?.knownAcronyms?.join(",")??""}::${e?.normalize?"true":"false"}`,"generateCacheKey");var po=Object.defineProperty,fo=b((t,e)=>po(t,"name",{value:e,configurable:!0}),"i$4"),ho=Object.defineProperty,mo=fo((t,e)=>ho(t,"name",{value:e,configurable:!0}),"a"),go=Object.defineProperty,vo=mo((t,e)=>go(t,"name",{value:e,configurable:!0}),"l");const yo=vo((t,e)=>{const{length:n}=t;if(n===0)return"";if(n===1)return t[0];const a=[];let r="",i="";for(let c=0;c<n;c++){const s=t[c];if(Q.test(s)){r?(a.push(r+i+s),r="",i=""):(a.length>0&&a.push(e),r=s);continue}r?(i&&(i+=e),i+=s):(a.length>0&&a.push(e),a.push(s))}return a.join("")},"joinSegments");var wo=Object.defineProperty,bo=b((t,e)=>wo(t,"name",{value:e,configurable:!0}),"r$2"),$o=Object.defineProperty,Oo=bo((t,e)=>$o(t,"name",{value:e,configurable:!0}),"a"),Ao=Object.defineProperty,Eo=Oo((t,e)=>Ao(t,"name",{value:e,configurable:!0}),"t");const Po=Eo(t=>t.replaceAll(/(?<![a-zß])SS(?![a-z])/g,"ß"),"normalizeGermanEszett");var Co=Object.defineProperty,ko=b((t,e)=>Co(t,"name",{value:e,configurable:!0}),"l$2"),No=Object.defineProperty,jo=ko((t,e)=>No(t,"name",{value:e,configurable:!0}),"n"),xo=Object.defineProperty,_o=jo((t,e)=>xo(t,"name",{value:e,configurable:!0}),"l");const Lo=new Et(1e3),xt=_o((t,e)=>{if(typeof t!="string"||!t)return"";const n=e?.cache??!1,a=e?.cacheStore??Lo;let r;if(n&&(r=uo(t,e)),n&&r&&a.has(r))return a.get(r);let i=!0;const c=yo(Ja(t,{handleAnsi:e?.handleAnsi,handleEmoji:e?.handleEmoji,knownAcronyms:e?.knownAcronyms,locale:e?.locale,normalize:e?.normalize,separators:void 0,stripAnsi:e?.stripAnsi,stripEmoji:e?.stripEmoji}).map(s=>e?.handleAnsi&&Q.test(s)?s:(s=e?.locale?.startsWith("de")?Po(s):s,s=e?.locale?s.toLocaleLowerCase(e.locale):s.toLowerCase(),i?(i=!1,Ua(s,e)):io(s,e))),"");return n&&r&&a.set(r,c),c},"camelCase");var Io=Object.defineProperty,pe=b((t,e)=>Io(t,"name",{value:e,configurable:!0}),"a");const So=pe(t=>{t.options?.forEach(e=>{e.__camelCaseName__=xt(e.name)})},"processOptionNames"),Uo=pe(t=>{if(!Array.isArray(t.options)||t.options.length===0)return;const e=new Set;for(const a of t.options)e.add(a.name);const n=[];for(const a of t.options)if(a.name.startsWith("no-")){const r=a.name.replace("no-","");if(!e.has(r)){if(a.type!==Boolean)throw new Error(`Cannot add negated option "${a.name}" to command "${t.name}" because it is not a boolean.`);const i={...a,defaultValue:a.defaultValue===void 0?!0:!a.defaultValue,name:r};n.push(i),e.add(r)}}n.length>0&&t.options.push(...n)},"addNegatableOptions"),Mo=pe((t,e)=>{if(!e.options||e.options.length===0)return;const n=t.options,a=new Map;for(const i of e.options)if(i.name.startsWith("no-")){const c=xt(i.name);a.set(c,i)}const r=Object.keys(n).filter(i=>a.has(i));if(r.length!==0)for(const i of r){const c=i.charAt(2);if(!c)continue;const s=c.toLowerCase()+i.slice(3),g=a.get(i);g&&(g.__negated__=!0),n[s]=!n[i],Reflect.deleteProperty(n,i)}},"mapNegatableOptions"),Vo=pe((t,e)=>{if(!e.options||e.options.length===0)return;const n=new Map;for(const r of e.options)r.__camelCaseName__&&r.__negated__===void 0&&r.implies!==void 0&&n.set(r.__camelCaseName__,r);if(n.size===0)return;const a=t.options;for(const r of Object.keys(a)){const i=n.get(r);if(i?.implies){const c=i.implies;for(const[s,g]of Object.entries(c))a[s]===void 0&&(a[s]=g)}}},"mapImpliedOptions");var To=Object.defineProperty,fe=b((t,e)=>To(t,"name",{value:e,configurable:!0}),"e$1");const Ro=fe(()=>!!process.versions.electron,"isElectronApp"),Do=fe(()=>Ro()&&!process.defaultApp,"isBundledElectronApp"),Bo=fe(()=>Do()?0:1,"getProcessArgvBinIndex"),zo=fe(t=>t.slice(Bo()+1),"hideBin");var Wo=Object.defineProperty,_t=b((t,e)=>Wo(t,"name",{value:e,configurable:!0}),"s$2");const Fo=" ",qo=_t((t,e)=>t===e?!0:t.length!==e.length?!1:t.every((n,a)=>n===e[a]),"equals"),Go=_t(t=>{if(typeof t=="string")return t.split(Fo);const e=Ae();return qo(t,e)?zo(t):t},"parseRawCommand");var Ho=Object.defineProperty,be=b((t,e)=>Ho(t,"name",{value:e,configurable:!0}),"r");const Ko=be(t=>{const e=be(i=>{t.error(`Uncaught exception: ${i.message||i}`),i.stack&&t.error(i.stack),ie(1)},"uncaughtExceptionHandler"),n=be((i,c)=>{if(i instanceof Error)t.error(`Promise rejection: ${i.message||i}`),i.stack&&t.error(i.stack);else{let s;if(typeof i=="string")s=i;else try{s=JSON.stringify(i)}catch{s=String(i)}t.error(`Promise rejection: ${s}`)}ie(1)},"unhandledRejectionHandler"),a=je("uncaughtException",e),r=je("unhandledRejection",n);return()=>{a(),r()}},"registerExceptionHandler");var Yo=Object.defineProperty,K=b((t,e)=>Yo(t,"name",{value:e,configurable:!0}),"e");const ae=100,ke=K((t,e)=>{if(typeof t!="string"||t.trim().length===0)throw new P(`${e} must be a non-empty string`,"INVALID_INPUT",{fieldName:e,value:t});return t.trim()},"validateNonEmptyString"),Ye=K((t,e)=>{if(!Array.isArray(t)||!t.every(n=>typeof n=="string"))throw new P(`${e} must be an array of strings`,"INVALID_INPUT",{fieldName:e,value:t});return t},"validateStringArray");K((t,e)=>{if(typeof t!="function")throw new P(`${e} must be a function`,"INVALID_INPUT",{fieldName:e,value:t});return t},"validateFunction");const $e=K((t,e)=>{if(typeof t!="object"||t===null)throw new P(`${e} must be an object`,"INVALID_INPUT",{fieldName:e,value:t});return t},"validateObject"),ee=K(t=>{const e=ke(t,"Command name");if(e.length>ae)throw new P(`Command name is too long (maximum ${ae} characters)`,"INVALID_COMMAND_NAME",{commandName:e,length:e.length});if(e.includes("..")||e.includes("/")||e.includes("\\")||e.includes(";")||e.includes("|")||e.includes("&"))throw new P(`Command name "${e}" contains invalid characters`,"INVALID_COMMAND_NAME",{commandName:e});if(!/^[a-z][\w-]*$/i.test(e))throw new P(`Command name "${e}" must start with a letter and contain only letters, numbers, hyphens, and underscores`,"INVALID_COMMAND_NAME",{commandName:e});return e},"validateCommandName");K(t=>{const e=ke(t,"Plugin name");if(e.length>ae)throw new P(`Plugin name is too long (maximum ${ae} characters)`,"INVALID_PLUGIN_NAME",{length:e.length,pluginName:e});if(e.includes("..")||e.includes("/")||e.includes("\\")||e.includes(";")||e.includes("|")||e.includes("&"))throw new P(`Plugin name "${e}" contains invalid characters`,"INVALID_PLUGIN_NAME",{pluginName:e});if(!/^[a-z][\w-]*$/i.test(e))throw new P(`Plugin name "${e}" must start with a letter and contain only letters, numbers, hyphens, and underscores`,"INVALID_PLUGIN_NAME",{pluginName:e});return e},"validatePluginName");var Jo=Object.defineProperty,he=b((t,e)=>Jo(t,"name",{value:e,configurable:!0}),"s");const Zo=new Set([`
4
+ `,"\r"," ","\0",'"',"$","&","'","(",")",";","<",">","[","\\","]","`","{","|","}"]),Qo=he(t=>{if(typeof t!="string")throw new TypeError("Argument must be a string");if(t.length>1e4)throw new Error("Argument is too long (maximum 10000 characters)");for(const e of t)if(Zo.has(e))throw new Error(`Argument contains dangerous character: ${e}`);return t.trim()},"sanitizeArgument"),Je=he(t=>{if(!Array.isArray(t))throw new TypeError("Arguments must be an array");if(t.length>100)throw new Error("Too many arguments (maximum 100)");return t.map(e=>Qo(e))},"sanitizeArguments");he(t=>{if(typeof t!="string")throw new TypeError("Path must be a string");const e=t.trim();if(e.includes("..")||e.includes("../")||e.includes("..\\"))throw new Error("Path contains directory traversal sequences");if(e.startsWith("/")||/^[A-Z]:/i.test(e))throw new Error("Absolute paths are not allowed");if(e.length>1e3)throw new Error("Path is too long");return e},"validateSafePath");class vr{static{b(this,"RateLimiter")}static{he(this,"RateLimiter")}attempts=new Map;maxAttempts;windowMs;constructor(e=5,n=6e4){if(e<=0||n<=0)throw new Error("maxAttempts and windowMs must be positive numbers");this.maxAttempts=e,this.windowMs=n}checkLimit(e){const n=Date.now(),a=this.attempts.get(e);return!a||n>a.resetTime?(this.attempts.set(e,{count:1,resetTime:n+this.windowMs}),this.cleanup(n),!0):a.count>=this.maxAttempts?!1:(a.count+=1,!0)}reset(e){this.attempts.delete(e)}cleanup(e){for(const[n,a]of this.attempts.entries())e>a.resetTime&&this.attempts.delete(n)}}var Xo=Object.defineProperty,ne=b((t,e)=>Xo(t,"name",{value:e,configurable:!0}),"_");const er=/^-([^\d-])$/,tr=/^--(\S+)/,nr=/^-([^\d-]{2,})$/,Oe=ne(t=>er.test(t)||tr.test(t)||nr.test(t),"isOption");class yr{static{b(this,"Cli")}static{ne(this,"Cli")}#t;#e;#o;#c;#g;#u;#v;#r;#n;#i;#p;#s;#l;#f=!1;#y;#w=!1;#h;#d;#m;#A(){return this.#h===void 0&&(this.#h=[...this.#i.keys()]),this.#h}#b(){return this.#d===void 0&&(this.#d=[...this.#n.keys()]),this.#d}#a(){return this.#m===void 0&&(this.#m=[...this.#A(),...this.#b()]),this.#m}#E(){this.#h=void 0,this.#d=void 0,this.#m=void 0}#$(){if(this.#o===void 0){const e=Go(this.#e.argv);this.#o=Je(e),this.#P()}return this.#o}#P(){if(!this.#o)return;const e=q();let n=!1;for(const a of this.#o){if(a==="--quiet"||a==="-q"){e.CEREBRO_OUTPUT_LEVEL=String(Rt),n=!0;break}if(a==="--verbose"||a==="-v"){e.CEREBRO_OUTPUT_LEVEL=String(Dt),n=!0;break}if(a==="--debug"||a==="-vvv"){e.CEREBRO_OUTPUT_LEVEL=String(W),n=!0;break}}n||(e.CEREBRO_OUTPUT_LEVEL=Object.hasOwn(e,"DEBUG")?String(W):String(Ne))}#C(){this.#w||(this.#y=Ko(this.#t),this.#w=!0)}#O(e,n,a,r){this.#t.debug(`command '${r}' found, parsing command args: ${n.join(", ")}`);const{arguments_:i,booleanValues:c,parsedArgs:s}=Si(e,n,Vt),g=Object.keys(c).length>0?{...s,_all:{...s._all,...c}}:s;Fi(i,g,e);const o=Ii(e,s,c,a);o.runtime=this,o.argv=this.#$();const p=e.options&&e.options.length>0;if(p&&e.options){const u=e.options.filter(l=>l.name.startsWith("no-"));for(const l of u){const d=l.name.replace("no-",""),y=`--${l.name}`,v=`--${d}`,$=n.includes(y),C=n.includes(v);if($&&C)throw new Ze(d,l.name)}}return p&&(Mo(o,e),Vo(o,e)),qi(i,o.options,e),q().CEREBRO_OUTPUT_LEVEL===String(W)&&(this.#t.debug("command options parsed from options:"),this.#t.debug(JSON.stringify(o.options,null,2)),this.#t.debug("command argument parsed from argument:"),this.#t.debug(JSON.stringify(o.argument,null,2))),{arguments_:i,booleanValues:c,commandArgs:g,parsedArgs:s,toolbox:o}}constructor(e,n={}){if(typeof e!="string"||e.trim().length===0)throw new P("CLI name must be a non-empty string","INVALID_INPUT",{cliName:e});this.#g=e.trim();const a=n.argv??Ae(),r=n.cwd??Bt();if(this.#e={...n,argv:a,cwd:r},this.#e.argv&&!Array.isArray(this.#e.argv))throw new P("CLI argv option must be an array of strings","INVALID_INPUT",{argv:this.#e.argv});if(this.#e.cwd&&typeof this.#e.cwd!="string")throw new P("CLI cwd option must be a string","INVALID_INPUT",{cwd:this.#e.cwd});if(this.#e.packageName&&typeof this.#e.packageName!="string")throw new P("CLI packageName option must be a string","INVALID_INPUT",{packageName:this.#e.packageName});if(this.#e.packageVersion&&typeof this.#e.packageVersion!="string")throw new P("CLI packageVersion option must be a string","INVALID_INPUT",{packageVersion:this.#e.packageVersion});const i=q();if(i.CEREBRO_OUTPUT_LEVEL=String(Ne),typeof this.#e.logger=="object"){const c=["debug","error","info","log","warn"],s=[],g=this.#e.logger;for(const o of c)typeof g[o]!="function"&&s.push(o);if(s.length>0)throw new P(`Logger object is missing required methods: ${s.join(", ")}`,"INVALID_INPUT",{logger:this.#e.logger,missingMethods:s});this.#t=this.#e.logger}else this.#t={...console,debug:ne((...c)=>{i.CEREBRO_OUTPUT_LEVEL===String(W)&&console.debug(...c)},"debug")};this.#u=this.#e.packageVersion,this.#v=this.#e.packageName,this.#c=this.#e.cwd,this.#s="help",this.#l={},this.#n=new Map,this.#i=new Map,this.#p=new Map}setCommandSection(e){return this.#l=e,this}getCommandSection(){return this.#l.header||(this.#l.header=`${this.#g}${this.#u?` v${this.#u}`:""}`),this.#l}setDefaultCommand(e){return this.#s=e,this}get defaultCommand(){return this.#s}addCommand(e){$e(e,"Command"),ee(e.name),e.alias&&(typeof e.alias=="string"?ee(e.alias):Ye(e.alias,"Command alias").forEach(r=>ee(r))),e.argument&&$e(e.argument,"Command argument"),e.options&&$e(e.options,"Command options"),e.commandPath&&(Ye(e.commandPath,"Command commandPath"),e.commandPath.forEach(r=>{ee(r)}));const n=Yi(e.name,e.commandPath),a=J(n);if(this.#i.has(a))throw new P(`Command with path "${a}" already exists`,"DUPLICATE_COMMAND",{commandName:e.name,commandPath:e.commandPath});if(this.#n.has(e.name)&&!e.commandPath)throw new P(`Command with name "${e.name}" already exists`,"DUPLICATE_COMMAND",{commandName:e.name});if(e.options)for(const r of e.options)rn(r);if(Gi(e),Uo(e),So(e),e.options&&(e.__conflictingOptions__=e.options.filter(r=>r.conflicts!==void 0),e.__requiredOptions__=e.options.filter(r=>r.required===!0)),this.#n.set(e.name,e),this.#i.set(a,n),this.#p.set(a,e),this.#E(),e.alias!==void 0){const r=typeof e.alias=="string"?[e.alias]:e.alias;for(const i of r){if(q().CEREBRO_OUTPUT_LEVEL===String(W)&&this.#t.debug("adding alias",i),this.#n.has(i))throw new P(`Command alias "${i}" conflicts with existing command`,"DUPLICATE_COMMAND",{alias:i,commandName:e.name});this.#n.set(i,e)}}return this}addPlugin(e){return this.getPluginManager().register(e),this}getPluginManager(){return this.#r?this.#r:(this.#r=new en(this.#t),this.#r.register({description:"Attaches the logger to the toolbox",execute:ne(e=>{e.logger=this.#t},"execute"),name:"logger"}),this.#r)}getCliName(){return this.#g}getPackageVersion(){return this.#u}getPackageName(){return this.#v}getCommands(){return this.#n}getCwd(){return this.#c}dispose(){this.#y?.()}async run(e={}){const{autoDispose:n=!0,shouldExitProcess:a=!0,...r}=e;this.#n.has("help")||this.addCommand(new Tt(this.#n));const i=this.#b(),c=this.#i;this.#C();const s=this.#$();let g,o=[...s];const p=zt(),u=Wt(),l=Ae();this.#t.debug(`process.execPath: ${p}`),this.#t.debug(`process.execArgv: ${u.join(" ")}`),this.#t.debug(`process.argv: ${l.join(" ")}`);const d=Ki(c,[...s]);if(d.commandPath)g=d.commandPath,o=d.argv;else{if(s.length>1&&s[0]&&s[1]&&!Oe(s[0])&&!Oe(s[1])){const w=[];let A=0;for(;A<s.length;){const O=s[A];if(!O||Oe(O))break;w.push(O),A+=1}const j=J(w);if(w[0]&&!i.includes(w[0])){const O=this.#a(),I=F(j,O);throw new D(j,I)}}let m;try{m=fn([null,...i],[...s])}catch(w){if(w instanceof Error&&w.name==="INVALID_COMMAND"&&"command"in w){const A=w.command,j=this.#a(),O=F(A,j);throw new D(A,O)}throw w}m.command&&(g=[m.command],o=m.argv)}if(!g)if(this.#s)g=[this.#s];else{const m=this.#a();throw new D("",m)}const y=J(g),v=this.#i.get(y);let $;if(v){if($=this.#p.get(y),!$||J(v)!==y){const m=this.#a(),w=F(y,m);throw new D(y,w)}}else{const m=g[g.length-1];if($=m?this.#n.get(m):void 0,!$){const w=this.#a(),A=F(y,w);throw new D(y,A)}}if(typeof $.execute!="function")return this.#t.error(`Command "${$.name}" has no function to execute.`),a?ie(1):void 0;const C=o,{commandArgs:k,toolbox:f}=this.#O($,C,r,y),h=this.getPluginManager();try{!this.#f&&h.hasPlugins()&&(await h.init({cli:this,cwd:this.#c,logger:this.#t}),this.#f=!0),await h.executeLifecycle("execute",f),await h.executeLifecycle("beforeCommand",f);let m;if(k.global?.help){const w=this.#n.get("help");if(!w)throw new P("Help command not found","COMMAND_NOT_FOUND");m=await B(w,f,k)}else if(k.global?.version||k.global?.V){const w=this.#n.get("version");if(!w)throw new P("Version command not found","COMMAND_NOT_FOUND");m=await B(w,f,k)}else m=await B($,f,k);return await h.executeLifecycle("afterCommand",f,m),a?ie(0):void 0}catch(m){throw await h.executeErrorHandlers(m,f),m}finally{n&&this.dispose()}}async runCommand(e,n={}){const{argv:a=[],...r}=n;ke(e,"Command name");const i=e.split(" ").filter(Boolean),c=J(i),s=this.#i.get(c)?this.#p.get(c):this.#n.get(e);if(!s){const l=this.#a(),d=F(c||e,l);throw new D(e,d)}if(typeof s.execute!="function")throw new P(`Command "${s.name}" has no function to execute`,"INVALID_COMMAND",{commandName:s.name});const g=[...Je(a)];this.#t.debug(`running command '${e}' programmatically with args: ${g.join(", ")}`);const{commandArgs:o,toolbox:p}=this.#O(s,g,r,c||e),u=this.getPluginManager();try{!this.#f&&u.hasPlugins()&&(await u.init({cli:this,cwd:this.#c,logger:this.#t}),this.#f=!0),await u.executeLifecycle("execute",p),await u.executeLifecycle("beforeCommand",p);let l;if(o.global?.help){const d=this.#n.get("help");if(!d)throw new P("Help command not found","COMMAND_NOT_FOUND");l=await B(d,p,o)}else if(o.global?.version||o.global?.V){const d=this.#n.get("version");if(!d)throw new P("Version command not found","COMMAND_NOT_FOUND");l=await B(d,p,o)}else l=await B(s,p,o);return await u.executeLifecycle("afterCommand",p,l),l}catch(l){throw await u.executeErrorHandlers(l,p),l}}}export{yr as Cli};
@@ -1 +1 @@
1
- var E=Object.defineProperty;var g=(i,r)=>E(i,"name",{value:r,configurable:!0});import{green as d,inverse as s,cyan as c,yellow as f}from"@visulima/colorize";import{f as y,p as $}from"./index-DQ3pvLQH.js";const O=[{defaultValue:"32",description:"Controls the verbosity level of output. Valid values: '16' (quiet), '32' (normal), '64' (verbose), '128' (debug)",name:"CEREBRO_OUTPUT_LEVEL",type:String},{description:"Sets the minimum required Node.js version. Overrides the default minimum version check",name:"CEREBRO_MIN_NODE_VERSION",type:Number},{defaultValue:!1,description:"When set, disables the update notifier check",name:"NO_UPDATE_NOTIFIER",type:Boolean},{description:"Standard Node.js environment variable. When set to 'test', disables update notifier",name:"NODE_ENV",type:String},{defaultValue:!1,description:"When set, enables debug output (same as --debug flag)",name:"DEBUG",type:Boolean},{description:"Sets the terminal width for table rendering. Useful for testing and consistent output",name:"CEREBRO_TERMINAL_WIDTH",type:Number}],C=[{description:"Turn on verbose output",group:"global",name:"verbose",type:Boolean},{description:"Turn on debugging output",group:"global",name:"debug",type:Boolean},{alias:"h",description:"Print out helpful usage information",group:"global",name:"help",type:Boolean},{alias:"q",description:"Silence output",group:"global",name:"quiet",type:Boolean},{alias:"V",description:"Print version info",group:"global",name:"version",type:Boolean},{description:"Turn off colored output",group:"global",name:"no-color",type:Boolean},{description:"Force colored output",group:"global",name:"color",type:Boolean}];var N=Object.defineProperty,u=g((i,r)=>N(i,"name",{value:r,configurable:!0}),"p");const b="__Other",v=u(i=>i.charAt(0).toUpperCase()+i.slice(1),"upperFirstChar"),A=u((i,r,p,t)=>{i.debug("no command given, printing general help...");let n=[...new Set(p.values())].filter(e=>!e.hidden);t&&(n=n.filter(e=>e.group===t));const a=n.reduce((e,o)=>{const l=o.group??b;return e[l]||(e[l]=[]),e[l].push(o),e},{}),m=u(e=>e.map(o=>{let l="";typeof o.alias=="string"?l=o.alias:Array.isArray(o.alias)&&(l=o.alias.join(", ")),l!==""&&(l=` [${l}]`);let h=o.name;return o.commandPath&&o.commandPath.length>0&&(h=`${o.commandPath.join(" ")} ${o.name}`),[`${d(h)}${l}`,o.description??""]}),"buildCommandList");(i?.raw??i.log)($([{content:`${c(r.getCliName())} ${d("<command>")} [positional arguments] ${f("[options]")}`,header:s.cyan(" Usage ")},...Object.keys(a).map(e=>{const o=t?` ${v(t)}`:"";return{content:m(a[e]),header:e===b||t?s.green(` Available${o} Commands `):` ${s.green(` ${v(e)} `)}`}}),p.has("help")?{header:s.yellow(" Command Options "),optionList:p.get("help").options?.filter(e=>!e.hidden)}:void 0,{header:s.yellow(" Global Options "),optionList:C},{content:O.filter(e=>!e.hidden).map(e=>[e.name,e.description??""]),header:s.magenta(" Environment Variables ")},{content:`Run "${c(r.getCliName())} ${d("help <command>")}" or "${c(r.getCliName())} ${d("<command>")} ${f("--help")}" for help with a specific command.`,raw:!0}].filter(Boolean)))},"printGeneralHelp"),w=u((i,r,p,t)=>{let n=p.get(t);if(!n)for(const e of p.values()){const o=e.commandPath?[...e.commandPath,e.name]:[e.name];if(o[o.length-1]===t||o.join(" ")===t){n=e;break}}if(!n){i.error(`Command "${t}" not found`);return}const a=[],m=(n.commandPath?[...n.commandPath,n.name]:[n.name]).join(" ");if(a.push({content:`${c(r.getCliName())} ${d(m)}${n.argument?" [positional arguments]":""}${n.options?" [options]":""}`,header:s.cyan(" Usage ")}),n.description&&a.push({content:n.description,header:s.green(" Description ")}),n.argument&&a.push({header:"Command Positional Arguments",isArgument:!0,optionList:[n.argument]}),Array.isArray(n.options)&&n.options.length>0&&a.push({header:s.yellow(" Command Options "),optionList:n.options.filter(e=>!e.hidden)}),a.push({header:s.yellow(" Global Options "),optionList:C}),Array.isArray(n.env)&&n.env.length>0){const e=n.env.filter(o=>!o.hidden);e.length>0&&a.push({content:e.map(o=>[o.name,o.description??""]),header:s.magenta(" Environment Variables ")})}if(n.alias!==void 0&&n.alias.length>0){let e=n.alias;typeof n.alias=="string"&&(e=[n.alias]),a.splice(1,0,{content:e,header:"Alias(es)"})}Array.isArray(n.examples)&&n.examples.length>0&&a.push({content:n.examples,header:"Examples"}),(i?.raw??i.log)($(a))},"printCommandHelp");class R{static{g(this,"A")}static{u(this,"HelpCommand")}name="help";options=[{description:"Display only the specified group",name:"group",type:String}];commands=new Map;constructor(r){this.commands=r}execute(r){const{commandName:p,logger:t,options:n,runtime:a}=r,{footer:m,header:e}=a.getCommandSection();e&&(t?.raw??t.log)(y(e)),p==="help"?A(t,a,this.commands,typeof n?.group=="string"?n.group:void 0):w(t,a,this.commands,p),m&&(t?.raw??t.log)(y(m))}}export{R as A,C as o};
1
+ var E=Object.defineProperty;var g=(i,r)=>E(i,"name",{value:r,configurable:!0});import{green as d,inverse as s,cyan as c,yellow as f}from"@visulima/colorize";import{f as y,p as $}from"./index-DQ3pvLQH.js";const O=[{defaultValue:"32",description:"Controls the verbosity level of output. Valid values: '16' (quiet), '32' (normal), '64' (verbose), '128' (debug)",name:"CEREBRO_OUTPUT_LEVEL",type:String},{description:"Sets the minimum required Node.js version. Overrides the default minimum version check",name:"CEREBRO_MIN_NODE_VERSION",type:Number},{defaultValue:!1,description:"When set, disables the update notifier check",name:"NO_UPDATE_NOTIFIER",type:Boolean},{description:"Standard Node.js environment variable. When set to 'test', disables update notifier",name:"NODE_ENV",type:String},{defaultValue:!1,description:"When set, enables debug output (same as --debug flag)",name:"DEBUG",type:Boolean},{description:"Sets the terminal width for table rendering. Useful for testing and consistent output",name:"CEREBRO_TERMINAL_WIDTH",type:Number}],C=[{description:"Turn on verbose output",group:"global",name:"verbose",type:Boolean},{description:"Turn on debugging output",group:"global",name:"debug",type:Boolean},{alias:"h",description:"Print out helpful usage information",group:"global",name:"help",type:Boolean},{alias:"q",description:"Silence output",group:"global",name:"quiet",type:Boolean},{alias:"V",description:"Print version info",group:"global",name:"version",type:Boolean},{description:"Turn off colored output",group:"global",name:"no-color",type:Boolean},{description:"Force colored output",group:"global",name:"color",type:Boolean}];var N=Object.defineProperty,u=g((i,r)=>N(i,"name",{value:r,configurable:!0}),"p");const b="__Other",v=u(i=>i.charAt(0).toUpperCase()+i.slice(1),"upperFirstChar"),A=u((i,r,p,t)=>{i.debug("no command given, printing general help...");let n=[...new Set(p.values())].filter(e=>!e.hidden);t&&(n=n.filter(e=>e.group===t));const a=n.reduce((e,o)=>{const l=o.group??b;return e[l]||(e[l]=[]),e[l].push(o),e},{}),m=u(e=>e.map(o=>{let l="";typeof o.alias=="string"?l=o.alias:Array.isArray(o.alias)&&(l=o.alias.join(", ")),l!==""&&(l=` [${l}]`);let h=o.name;return o.commandPath&&o.commandPath.length>0&&(h=`${o.commandPath.join(" ")} ${o.name}`),[`${d(h)}${l}`,o.description??""]}),"buildCommandList");(i?.raw??i.log)($([{content:`${c(r.getCliName())} ${d("<command>")} [positional arguments] ${f("[options]")}`,header:s.cyan(" Usage ")},...Object.keys(a).map(e=>{const o=t?` ${v(t)}`:"";return{content:m(a[e]),header:e===b||t?s.green(` Available${o} Commands `):` ${s.green(` ${v(e)} `)}`}}),p.has("help")?{header:s.yellow(" Command Options "),optionList:p.get("help").options?.filter(e=>!e.hidden)}:void 0,{header:s.yellow(" Global Options "),optionList:C},{content:O.filter(e=>!e.hidden).map(e=>[e.name,e.description??""]),header:s.magenta(" Environment Variables ")},{content:`Run "${c(r.getCliName())} ${d("help <command>")}" or "${c(r.getCliName())} ${d("<command>")} ${f("--help")}" for help with a specific command.`,raw:!0}].filter(Boolean)))},"printGeneralHelp"),B=u((i,r,p,t)=>{let n=p.get(t);if(!n)for(const e of p.values()){const o=e.commandPath?[...e.commandPath,e.name]:[e.name];if(o[o.length-1]===t||o.join(" ")===t){n=e;break}}if(!n){i.error(`Command "${t}" not found`);return}const a=[],m=(n.commandPath?[...n.commandPath,n.name]:[n.name]).join(" ");if(a.push({content:`${c(r.getCliName())} ${d(m)}${n.argument?" [positional arguments]":""}${n.options?" [options]":""}`,header:s.cyan(" Usage ")}),n.description&&a.push({content:n.description,header:s.green(" Description ")}),n.argument&&a.push({header:"Command Positional Arguments",isArgument:!0,optionList:[n.argument]}),Array.isArray(n.options)&&n.options.length>0&&a.push({header:s.yellow(" Command Options "),optionList:n.options.filter(e=>!e.hidden)}),a.push({header:s.yellow(" Global Options "),optionList:C}),Array.isArray(n.env)&&n.env.length>0){const e=n.env.filter(o=>!o.hidden);e.length>0&&a.push({content:e.map(o=>[o.name,o.description??""]),header:s.magenta(" Environment Variables ")})}if(n.alias!==void 0&&n.alias.length>0){let e=n.alias;typeof n.alias=="string"&&(e=[n.alias]),a.splice(1,0,{content:e,header:"Alias(es)"})}Array.isArray(n.examples)&&n.examples.length>0&&a.push({content:n.examples,header:"Examples"}),(i?.raw??i.log)($(a))},"printCommandHelp");class R{static{g(this,"D")}static{u(this,"HelpCommand")}name="help";options=[{description:"Display only the specified group",name:"group",type:String}];commands;constructor(r){this.commands=r}execute(r){const{commandName:p,logger:t,options:n,runtime:a}=r,{footer:m,header:e}=a.getCommandSection();e&&(t?.raw??t.log)(y(e)),p==="help"?A(t,a,this.commands,typeof n?.group=="string"?n.group:void 0):B(t,a,this.commands,p),m&&(t?.raw??t.log)(y(m))}}export{R as D,C as o};
@@ -20,30 +20,30 @@ declare class PluginManager<T extends Logger = Logger> {
20
20
  * @param plugin The plugin to register
21
21
  * @throws {Error} If plugin name is already registered or dependencies are invalid
22
22
  */
23
- register(plugin: Plugin): void;
23
+ register(plugin: Plugin<T>): void;
24
24
  /**
25
25
  * Initializes all registered plugins.
26
26
  * @param context The plugin context for initialization
27
27
  */
28
- init(context: PluginContext): Promise<void>;
28
+ init(context: PluginContext<T>): Promise<void>;
29
29
  /**
30
30
  * Executes a specific lifecycle hook for all plugins.
31
31
  * @param hook The lifecycle hook name
32
32
  * @param toolbox The command toolbox (for command-specific hooks)
33
33
  * @param result The command result (for afterCommand hook)
34
34
  */
35
- executeLifecycle(hook: "beforeCommand" | "afterCommand" | "execute", toolbox: Toolbox, result?: unknown): Promise<void>;
35
+ executeLifecycle(hook: "beforeCommand" | "afterCommand" | "execute", toolbox: Toolbox<T>, result?: unknown): Promise<void>;
36
36
  /**
37
37
  * Executes error handlers for all plugins.
38
38
  * @param error The error that occurred
39
39
  * @param toolbox The command toolbox
40
40
  */
41
- executeErrorHandlers(error: Error, toolbox: Toolbox): Promise<void>;
41
+ executeErrorHandlers(error: Error, toolbox: Toolbox<T>): Promise<void>;
42
42
  /**
43
43
  * Gets all registered plugins in dependency order.
44
44
  * @returns Array of plugins sorted by dependencies
45
45
  */
46
- getDependencyOrder(): Plugin[];
46
+ getDependencyOrder(): Plugin<T>[];
47
47
  /**
48
48
  * Validates that all plugin dependencies exist.
49
49
  * @throws {Error} If any dependencies are missing
@@ -5,9 +5,6 @@ export type CommandSection = {
5
5
  footer?: string;
6
6
  header?: string;
7
7
  };
8
- export type ExtendedLogger = Console & {
9
- debug: (...args: unknown[]) => void;
10
- };
11
8
  export type CliRunOptions = {
12
9
  [key: string]: unknown;
13
10
  /**
@@ -33,26 +30,26 @@ export type RunCommandOptions = {
33
30
  */
34
31
  argv?: string[];
35
32
  };
36
- export interface Cli {
33
+ export interface Cli<T extends Console> {
37
34
  /**
38
35
  * Add an arbitrary command to the CLI.
39
36
  * @param command The command to add.
40
37
  * @returns self
41
38
  */
42
- addCommand: <OD extends OptionDefinition<unknown> = OptionDefinition<unknown>>(command: ICommand<OD>) => this;
39
+ addCommand: <OD extends OptionDefinition<unknown> = OptionDefinition<unknown>>(command: ICommand<OD, T>) => this;
43
40
  /**
44
41
  * Add a plugin to extend the CLI functionality
45
42
  * @param plugin The plugin to add.
46
43
  * @returns self
47
44
  */
48
- addPlugin: (plugin: Plugin) => this;
45
+ addPlugin: (plugin: Plugin<T>) => this;
49
46
  /**
50
47
  * Disposes the CLI instance and cleans up resources
51
48
  * @returns void
52
49
  */
53
50
  dispose: () => void;
54
51
  getCliName: () => string;
55
- getCommands: () => Map<string, ICommand>;
52
+ getCommands: () => Map<string, ICommand<OptionDefinition<unknown>, T>>;
56
53
  getCommandSection: () => CommandSection;
57
54
  getCwd: () => string;
58
55
  getPackageName: () => string | undefined;
@@ -61,7 +58,7 @@ export interface Cli {
61
58
  * Get the plugin manager instance
62
59
  * @returns The plugin manager
63
60
  */
64
- getPluginManager: () => PluginManager;
61
+ getPluginManager: () => PluginManager<T>;
65
62
  run: (extraOptions?: CliRunOptions) => Promise<void>;
66
63
  /**
67
64
  * Runs a command programmatically from within another command.
@@ -99,7 +99,7 @@ export type PossibleEnvDefinition = EnvDefinition<boolean> | EnvDefinition<numbe
99
99
  * });
100
100
  * ```
101
101
  */
102
- export interface Command<O extends OptionDefinition<unknown> = OptionDefinition<unknown>, TContext extends IToolbox = IToolbox> {
102
+ export interface Command<O extends OptionDefinition<unknown> = OptionDefinition<unknown>, TLogger extends Console = Console, TContext extends IToolbox<TLogger> = IToolbox<TLogger>> {
103
103
  /**
104
104
  * @internal
105
105
  */
@@ -5,7 +5,7 @@ import type { Toolbox } from "./toolbox.d.ts";
5
5
  */
6
6
  export interface PluginContext<T extends Console = Console> {
7
7
  /** The CLI instance */
8
- cli: Cli;
8
+ cli: Cli<T>;
9
9
  /** Current working directory */
10
10
  cwd: string;
11
11
  /** Logger instance */
@@ -14,18 +14,18 @@ export interface PluginContext<T extends Console = Console> {
14
14
  /**
15
15
  * Plugin interface with lifecycle hooks
16
16
  */
17
- export interface Plugin {
17
+ export interface Plugin<T extends Console = Console> {
18
18
  /**
19
19
  * Called after command execution completes successfully
20
20
  * @param toolbox The command toolbox
21
21
  * @param result The result returned by the command
22
22
  */
23
- afterCommand?: (toolbox: Toolbox, result: unknown) => Promise<void> | void;
23
+ afterCommand?: (toolbox: Toolbox<T>, result: unknown) => Promise<void> | void;
24
24
  /**
25
25
  * Called before command execution
26
26
  * @param toolbox The command toolbox
27
27
  */
28
- beforeCommand?: (toolbox: Toolbox) => Promise<void> | void;
28
+ beforeCommand?: (toolbox: Toolbox<T>) => Promise<void> | void;
29
29
  /** Plugin dependencies (other plugin names that must be loaded first) */
30
30
  dependencies?: string[];
31
31
  /** Plugin description */
@@ -34,12 +34,12 @@ export interface Plugin {
34
34
  * Called during command execution (for plugins that extend toolbox functionality)
35
35
  * @param toolbox The command toolbox
36
36
  */
37
- execute?: (toolbox: Toolbox) => Promise<void> | void;
37
+ execute?: (toolbox: Toolbox<T>) => Promise<void> | void;
38
38
  /**
39
39
  * Called once during plugin initialization
40
40
  * @param context The plugin context
41
41
  */
42
- init?: (context: PluginContext) => Promise<void> | void;
42
+ init?: (context: PluginContext<T>) => Promise<void> | void;
43
43
  /** Plugin name (must be unique) */
44
44
  name: string;
45
45
  /**
@@ -47,7 +47,7 @@ export interface Plugin {
47
47
  * @param error The error that occurred
48
48
  * @param toolbox The command toolbox
49
49
  */
50
- onError?: (error: Error, toolbox: Toolbox) => Promise<void> | void;
50
+ onError?: (error: Error, toolbox: Toolbox<T>) => Promise<void> | void;
51
51
  /** Plugin version */
52
52
  version?: string;
53
53
  }
@@ -92,5 +92,5 @@ export interface Toolbox<TLogger extends Console = Console, TOptions extends Rec
92
92
  /**
93
93
  * This is the instance of the CLI that is running the command.
94
94
  */
95
- runtime: ICli;
95
+ runtime: ICli<TLogger>;
96
96
  }
@@ -11,7 +11,7 @@ import mergeArguments from "../data-processing/merge-arguments.d.ts";
11
11
  * @param extraOptions Additional options to merge into toolbox.
12
12
  * @returns The prepared toolbox instance.
13
13
  */
14
- export declare const prepareToolbox: <OD extends OptionDefinition<unknown>>(command: ICommand<OD>, parsedArgs: CommandLineOptions, booleanValues: Record<string, unknown>, extraOptions: Record<string, unknown>) => IToolbox;
14
+ export declare const prepareToolbox: <OD extends OptionDefinition<unknown>, TLogger extends Console = Console>(command: ICommand<OD, TLogger>, parsedArgs: CommandLineOptions, booleanValues: Record<string, unknown>, extraOptions: Record<string, unknown>) => IToolbox<TLogger>;
15
15
  /**
16
16
  * Processes command arguments and options.
17
17
  * @template OD The option definition type.
@@ -21,7 +21,7 @@ export declare const prepareToolbox: <OD extends OptionDefinition<unknown>>(comm
21
21
  * @returns Object containing merged arguments, boolean values, and parsed args.
22
22
  * @throws {Error} When an argument has both multiple and lazyMultiple options.
23
23
  */
24
- export declare const processCommandArgs: <OD extends OptionDefinition<unknown>>(command: ICommand<OD>, commandArguments: string[], defaultOptions: OptionDefinition<unknown>[]) => {
24
+ export declare const processCommandArgs: <OD extends OptionDefinition<unknown>, TLogger extends Console = Console>(command: ICommand<OD, TLogger>, commandArguments: string[], defaultOptions: OptionDefinition<unknown>[]) => {
25
25
  arguments_: ReturnType<typeof mergeArguments>;
26
26
  booleanValues: Record<string, unknown>;
27
27
  parsedArgs: CommandLineOptions;
@@ -34,4 +34,4 @@ export declare const processCommandArgs: <OD extends OptionDefinition<unknown>>(
34
34
  * @param _commandArgs Parsed command arguments.
35
35
  * @returns Promise resolving to the command execution result.
36
36
  */
37
- export declare const executeCommand: <OD extends OptionDefinition<unknown>>(command: ICommand<OD>, toolbox: IToolbox, _commandArgs: CommandLineOptions) => Promise<unknown>;
37
+ export declare const executeCommand: <OD extends OptionDefinition<unknown>, TLogger extends Console = Console>(command: ICommand<OD, TLogger>, toolbox: IToolbox<TLogger>, _commandArgs: CommandLineOptions) => Promise<unknown>;
@@ -5,12 +5,12 @@ import type { Toolbox as IToolbox } from "../../types/toolbox.d.ts";
5
5
  * Validates that all required options are present.
6
6
  * Uses pre-computed required options metadata from command registration for performance.
7
7
  */
8
- export declare const validateRequiredOptions: <OD extends OptionDefinition<unknown>>(arguments_: PossibleOptionDefinition<OD>[], commandArguments: CommandLineOptions, command: ICommand<OD>) => void;
8
+ export declare const validateRequiredOptions: <OD extends OptionDefinition<unknown>, TLogger extends Console = Console>(arguments_: PossibleOptionDefinition<OD>[], commandArguments: CommandLineOptions, command: ICommand<OD, TLogger>) => void;
9
9
  /**
10
10
  * Validates for conflicting options.
11
11
  * Uses pre-computed conflict metadata from command registration for performance.
12
12
  */
13
- export declare const validateConflictingOptions: <OD extends OptionDefinition<unknown>>(arguments_: PossibleOptionDefinition<OD>[], commandArguments: IToolbox["options"], command: ICommand<OD>) => void;
13
+ export declare const validateConflictingOptions: <OD extends OptionDefinition<unknown>, TLogger extends Console = Console>(arguments_: PossibleOptionDefinition<OD>[], commandArguments: IToolbox["options"], command: ICommand<OD, TLogger>) => void;
14
14
  /**
15
15
  * Validates for duplicate option definitions.
16
16
  */
@@ -29,7 +29,7 @@ export declare const addNegatableOptions: <OD extends OptionDefinition<unknown>>
29
29
  * @param command The command object with option definitions
30
30
  * @param command.options The command options array
31
31
  */
32
- export declare const mapNegatableOptions: <O extends OptionDefinition<unknown>>(toolbox: IToolbox, command: {
32
+ export declare const mapNegatableOptions: <O extends OptionDefinition<unknown>, TLogger extends Console = Console>(toolbox: IToolbox<TLogger>, command: {
33
33
  options?: ReadonlyArray<O | OptionDefinition<boolean[]> | OptionDefinition<boolean> | OptionDefinition<number[]> | OptionDefinition<number> | OptionDefinition<string[]> | OptionDefinition<string>>;
34
34
  }) => void;
35
35
  /**
@@ -39,6 +39,6 @@ export declare const mapNegatableOptions: <O extends OptionDefinition<unknown>>(
39
39
  * @param command The command object with option definitions
40
40
  * @param command.options The command options array
41
41
  */
42
- export declare const mapImpliedOptions: <O extends OptionDefinition<unknown>>(toolbox: IToolbox, command: {
42
+ export declare const mapImpliedOptions: <O extends OptionDefinition<unknown>, TLogger extends Console = Console>(toolbox: IToolbox<TLogger>, command: {
43
43
  options?: ReadonlyArray<O | OptionDefinition<boolean[]> | OptionDefinition<boolean> | OptionDefinition<number[]> | OptionDefinition<number> | OptionDefinition<string[]> | OptionDefinition<string>>;
44
44
  }) => void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@visulima/cerebro",
3
- "version": "2.1.1",
3
+ "version": "2.1.3",
4
4
  "description": "A delightful toolkit for building cross-runtime CLIs for Node.js, Deno, and Bun.",
5
5
  "keywords": [
6
6
  "command",
@@ -1,4 +0,0 @@
1
- var _t=Object.defineProperty;var b=(t,e)=>_t(t,"name",{value:e,configurable:!0});import{createRequire as Lt}from"node:module";import{o as Ut,A as Mt}from"./help-command-Ddt6rdio.js";import{VERBOSITY_DEBUG as W,POSITIONALS_KEY as te,VERBOSITY_QUIET as Vt,VERBOSITY_VERBOSE as Tt,VERBOSITY_NORMAL as ke}from"./VERBOSITY_QUIET-XPultrIA.js";import{c as E}from"./cerebro-error-BnJTixb2.js";import{d as q,f as Pe,e as ie,o as je,a as Rt,h as Dt,i as Bt}from"./runtime-process-G-n-wOub.js";import{distance as zt}from"fastest-levenshtein";const It=Lt(import.meta.url),Y=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,St=b(t=>{if(typeof Y<"u"&&Y.versions&&Y.versions.node){const[e,n]=Y.versions.node.split(".").map(Number);if(e>22||e===22&&n>=3||e===20&&n>=16)return Y.getBuiltinModule(t)}return It(t)},"__cjs_getBuiltinModule"),{createRequire:Wt}=St("node:module");var Ft=Object.defineProperty,qt=b((t,e)=>Ft(t,"name",{value:e,configurable:!0}),"t$9");let D=class extends E{static{b(this,"a")}static{qt(this,"CommandNotFoundError")}commandName;constructor(e,n=[]){const a=`Command "${e}" not found${n.length>0?`. Did you mean: ${n.join(", ")}?`:""}`;super(a,"COMMAND_NOT_FOUND",{commandName:e,suggestions:n}),this.name="CommandNotFoundError",this.commandName=e,n.length>0&&(this.hint=`Try one of these commands: ${n.join(", ")}`)}};var Gt=Object.defineProperty,Ht=b((t,e)=>Gt(t,"name",{value:e,configurable:!0}),"e$7");let Kt=class extends E{static{b(this,"o")}static{Ht(this,"PluginError")}pluginName;constructor(e,n,a){super(`Plugin "${e}" error: ${n}`,"PLUGIN_ERROR",{originalError:a,pluginName:e}),this.name="PluginError",this.pluginName=e,a&&(this.cause=a)}};var Yt=Object.defineProperty,xe=b((t,e)=>Yt(t,"name",{value:e,configurable:!0}),"d$4");let Jt=class{static{b(this,"p")}static{xe(this,"PluginManager")}logger;plugins=new Map;initialized=!1;cachedDependencyOrder=void 0;constructor(e){this.logger=e}hasPlugins(){return this.plugins.size>0}register(e){if(this.initialized)throw new Error(`Cannot register plugin "${e.name}" after initialization`);if(this.plugins.has(e.name))throw new Error(`Plugin "${e.name}" is already registered`);q().CEREBRO_OUTPUT_LEVEL===String(W)&&this.logger.debug(`registering plugin: ${e.name}`),this.plugins.set(e.name,e),this.cachedDependencyOrder=void 0}async init(e){if(this.initialized)throw new Error("PluginManager already initialized");if(this.plugins.size===0){this.logger.debug("no plugins registered, skipping initialization"),this.initialized=!0;return}this.validateDependencies();const n=this.getDependencyOrder();this.logger.debug(`initializing ${n.length} plugin(s)...`);for(const a of n)if(typeof a.init=="function"){this.logger.debug(`initializing plugin: ${a.name}`);try{await a.init(e)}catch(r){const i=new Kt(a.name,`Failed to initialize: ${r instanceof Error?r.message:String(r)}`,r instanceof Error?r:void 0);throw this.logger.error(i.message),i}}this.initialized=!0}async executeLifecycle(e,n,a){if(!this.initialized)throw new Error("PluginManager not initialized");if(this.plugins.size===0)return;const r=this.getDependencyOrder();for(const i of r){const c=i[e];if(typeof c=="function"){this.logger.debug(`executing ${e} hook for plugin: ${i.name}`);try{await(e==="afterCommand"?c(n,a):c(n))}catch(s){throw this.logger.error(`Error in ${e} hook for plugin "${i.name}":`,s),s}}}}async executeErrorHandlers(e,n){if(!this.initialized||this.plugins.size===0)return;const a=this.getDependencyOrder();for(const r of a)if(typeof r.onError=="function"){this.logger.debug(`executing error handler for plugin: ${r.name}`);try{await r.onError(e,n)}catch(i){this.logger.error(`Error in error handler for plugin "${r.name}":`,i)}}}getDependencyOrder(){if(this.cachedDependencyOrder!==void 0)return this.cachedDependencyOrder;const e=[],n=new Set,a=new Set,r=xe(i=>{if(n.has(i))return;if(a.has(i))throw new Error(`Circular dependency detected involving plugin "${i}"`);const c=this.plugins.get(i);if(!c)throw new Error(`Plugin "${i}" not found`);if(a.add(i),c.dependencies)for(const s of c.dependencies)r(s);a.delete(i),n.add(i),e.push(c)},"visit");for(const i of this.plugins.keys())r(i);return this.cachedDependencyOrder=e,e}validateDependencies(){for(const e of this.plugins.values())if(e.dependencies){for(const n of e.dependencies)if(!this.plugins.has(n))throw new Error(`Plugin "${e.name}" depends on "${n}" which is not registered`)}}};var Zt=Object.defineProperty,Qt=b((t,e)=>Zt(t,"name",{value:e,configurable:!0}),"n$c");const X=Qt(t=>t.type?.name==="Boolean","optionIsBoolean");var Xt=Object.defineProperty,Ze=b((t,e)=>Xt(t,"name",{value:e,configurable:!0}),"p$b");const en=Ze(t=>{let e=t.type?t.type.name.toLowerCase():"string";const n=t.multiple??t.lazyMultiple?"[]":"";return e&&(e=e==="boolean"?"":`{underline ${e}${n}}`),e},"getTypeLabel"),tn=Ze(t=>(X(t)||(t.typeLabel=t.typeLabel??en(t),t.defaultOption&&(t.typeLabel=`${t.typeLabel} (D)`),t.required&&(t.typeLabel=`${t.typeLabel} (R)`)),t),"mapOptionTypeLabel");var nn=Object.defineProperty,Qe=b((t,e)=>nn(t,"name",{value:e,configurable:!0}),"e$5");const an=new RegExp(/^-([^\d-])$/),on=new RegExp(/^--(\S+)/),rn=new RegExp(/^-([^\d-]{2,})$/),sn=Qe(t=>an.test(t)||on.test(t)||rn.test(t),"isOption"),ln=Qe((t,e)=>{const n=e[0]&&sn(e[0])||e.length===0?null:e.shift()??null;if(!t.includes(n)){const a=new Error(`Command not recognised: ${n}`);throw a.command=n,a.name="INVALID_COMMAND",a}return{argv:e,command:n}},"commandLineCommands");var cn=Object.defineProperty,Xe=b((t,e)=>cn(t,"name",{value:e,configurable:!0}),"i$a"),un=Object.defineProperty,et=Xe((t,e)=>un(t,"name",{value:e,configurable:!0}),"i"),pn=Object.defineProperty,tt=et((t,e)=>pn(t,"name",{value:e,configurable:!0}),"s"),fn=Object.defineProperty,nt=tt((t,e)=>fn(t,"name",{value:e,configurable:!0}),"i"),hn=Object.defineProperty,it=nt((t,e)=>hn(t,"name",{value:e,configurable:!0}),"t");it(t=>t instanceof Error&&t.type==="VisulimaError","isVisulimaError");class oe extends Error{static{b(this,"v")}static{Xe(this,"g")}static{et(this,"p")}static{tt(this,"V")}static{nt(this,"VisulimaError")}static{it(this,"VisulimaError")}loc;title;hint;type="VisulimaError";constructor({cause:e,hint:n,location:a,message:r,name:i,stack:c,title:s}){super(r,{cause:e}),this.title=s,this.name=i,this.stack=c??this.stack,this.loc=a,this.hint=n}setLocation(e){this.loc=e}setName(e){this.name=e}setMessage(e){this.message=e}setHint(e){this.hint=e}}var dn=Object.defineProperty,at=b((t,e)=>dn(t,"name",{value:e,configurable:!0}),"o$c"),mn=Object.defineProperty,ot=at((t,e)=>mn(t,"name",{value:e,configurable:!0}),"o"),gn=Object.defineProperty,vn=ot((t,e)=>gn(t,"name",{value:e,configurable:!0}),"i");let yn=class rt extends oe{static{b(this,"a")}static{at(this,"a")}static{ot(this,"t")}static{vn(this,"AlreadySetError")}optionName;constructor(e){super({cause:void 0,hint:`Remove the duplicate option '${e}' from your command line arguments.`,location:void 0,message:`Option '${e}' is already set`,name:"ALREADY_SET",stack:void 0,title:"Option Already Set"}),this.optionName=e,Object.setPrototypeOf(this,rt.prototype)}};var wn=Object.defineProperty,st=b((t,e)=>wn(t,"name",{value:e,configurable:!0}),"t$7"),bn=Object.defineProperty,lt=st((t,e)=>bn(t,"name",{value:e,configurable:!0}),"e"),$n=Object.defineProperty,On=lt((t,e)=>$n(t,"name",{value:e,configurable:!0}),"e");let _e=class ct extends oe{static{b(this,"n")}static{st(this,"n")}static{lt(this,"o")}static{On(this,"UnknownOptionError")}optionName;constructor(e){super({cause:void 0,hint:`Check your option definitions or remove the unknown option '${e}' from your command line arguments.`,location:void 0,message:`Unknown option: --${e}`,name:"UNKNOWN_OPTION",stack:void 0,title:"Unknown Option"}),this.optionName=`--${e}`,Object.setPrototypeOf(this,ct.prototype)}};var Pn=Object.defineProperty,ut=b((t,e)=>Pn(t,"name",{value:e,configurable:!0}),"a$6"),An=Object.defineProperty,pt=ut((t,e)=>An(t,"name",{value:e,configurable:!0}),"a"),En=Object.defineProperty,Cn=pt((t,e)=>En(t,"name",{value:e,configurable:!0}),"o");let Nn=class ft extends oe{static{b(this,"n")}static{ut(this,"o")}static{pt(this,"e")}static{Cn(this,"UnknownValueError")}value;constructor(e){super({hint:"Use a defined option or add a defaultOption to capture this value.",message:`Unknown value: ${e}`,name:"UNKNOWN_VALUE",title:"Unknown Value"}),this.value=e,Object.setPrototypeOf(this,ft.prototype)}};var kn=Object.defineProperty,ht=b((t,e)=>kn(t,"name",{value:e,configurable:!0}),"i$7"),jn=Object.defineProperty,dt=ht((t,e)=>jn(t,"name",{value:e,configurable:!0}),"i"),xn=Object.defineProperty,_n=dt((t,e)=>xn(t,"name",{value:e,configurable:!0}),"i");let x=class mt extends oe{static{b(this,"a")}static{ht(this,"o")}static{dt(this,"e")}static{_n(this,"InvalidDefinitionsError")}constructor(e,n){super({cause:void 0,hint:n,location:void 0,message:e,name:"INVALID_DEFINITIONS",stack:void 0,title:"Invalid Option Definition"}),Object.setPrototypeOf(this,mt.prototype)}};var Ln=Object.defineProperty,In=b((t,e)=>Ln(t,"name",{value:e,configurable:!0}),"T$1"),Sn=Object.defineProperty,H=In((t,e)=>Sn(t,"name",{value:e,configurable:!0}),"P"),Un=Object.defineProperty,re=H((t,e)=>Un(t,"name",{value:e,configurable:!0}),"o");const Le=re(t=>t===Boolean||typeof t=="function"&&t.name?.startsWith("Boolean"),"isBooleanType"),Ie=re(t=>t===Number||typeof t=="function"&&t.name==="Number","isNumberType"),Se=re(t=>t===String||typeof t=="function"&&t.name==="String","isStringType"),Mn=re((t,e)=>Array.isArray(t)?Le(e)?t.map(Boolean):Ie(e)?t.map(Number):Se(e)?t.map(String):t.map(n=>e(String(n))):t===null?null:Le(e)?!!t:Ie(e)?Number(t):Se(e)?String(t):e(String(t)),"convertValue");var Vn=Object.defineProperty,Tn=H((t,e)=>Vn(t,"name",{value:e,configurable:!0}),"e");const k=Tn((t,e,n,...a)=>{t&&console.debug(`[command-line-args:${n}] ${e}`,...a)},"debug");var Rn=Object.defineProperty,T=H((t,e)=>Rn(t,"name",{value:e,configurable:!0}),"A");const Dn=/-([a-z])/g,me=T(t=>t===Boolean||typeof t=="function"&&t.name?.startsWith("Boolean"),"isBooleanType"),Bn=T(t=>t.codePointAt(0)===95,"isSpecialKey"),Ue=T((t,e)=>Array.isArray(t)?[...t,...e]:[t,...e],"appendToArrayMultiple"),Me=T(t=>t==="__proto__"||t==="constructor"||t==="prototype","isUnsafeKey"),Ve=T((t,e,n,a=!1)=>{t[e]===void 0?t[e]=a?[n]:n:a&&Array.isArray(t[e])?t[e].push(n):t[e]=[t[e],n]},"createOrAppendArray"),zn=T((t,e,n,a,r)=>{let i=e.get(t)||n.get(t);if(!i&&a){const c=t.toLowerCase();i=a.get(c)||r?.get(c)}return i},"getDefinition"),Wn=T((t,e,n,a)=>{const r=n.debug||!1;k(r,"resolveArgs called with options:","resolver",{partial:n.partial,stopAtFirstUnknown:n.stopAtFirstUnknown}),k(r,"Starting argument resolution","resolver"),k(r,"Tokens:","resolver",t),k(r,"Definitions:","resolver",e),k(r,"Processing tokens...","resolver");const i=new Map,c=new Map,s=n.caseInsensitive?new Map:void 0,g=n.caseInsensitive?new Map:void 0,o=n.camelCase?new Map:void 0,p=n.camelCase?new Map:void 0;for(const f of e)if(i.set(f.name,f),f.alias&&c.set(f.alias,f),n.caseInsensitive&&s&&(s.set(f.name.toLowerCase(),f),f.alias&&g&&g.set(f.alias.toLowerCase(),f)),n.camelCase&&o&&p){const h=f.name.replaceAll(Dn,(d,w)=>w.toUpperCase());o.set(f.name,h),p.set(h,f.name)}const u={},l={},m=[],y=new Set;let v=!1;const $=e.find(f=>f.defaultOption),C=e.some(f=>f.group),N=e.some(f=>f.type===Number);for(let f=0;f<t.length;f++){const h=t[f];if(h.kind==="option-terminator"){u._unknown=a.slice(h.index),v=!0;break}if(h.kind==="option"&&h.name){let d=zn(h.name,i,c,s,g);if(!d&&h.value===void 0&&N&&/^\d+$/.test(h.name)){const O=e.find(I=>I.type===Number);O&&(d=O,h.value=h.name,h.name=O.name)}const w=d?d.name:h.name,P=d&&d.multiple,j=d&&d.lazyMultiple;if(l[w]!==void 0&&!P&&!j&&!n.partial)throw new yn(w);if(!d&&n.partial){const O=h.rawName||`--${h.name}${h.value!==void 0&&h.inlineValue?`=${h.value}`:""}`;m.push({index:h.index,value:O});continue}if(!d&&n.stopAtFirstUnknown){u._unknown=a.slice(h.index);break}if(!d&&!n.partial)throw new _e(h.name);if(h.value===void 0){const O=t[f+1],I=O&&O.kind==="option"&&!("name"in O)&&O.value!==void 0,L=O&&d&&!(d.type&&me(d.type))&&(O.kind==="positional"||I),xt=d&&d.defaultOption&&!d.multiple&&!d.lazyMultiple;if(L&&(!d?.defaultOption||xt))if(P){let S=f+1;const de=[];for(;S<t.length&&(t[S].kind==="positional"||t[S].kind==="option"&&!("name"in t[S])&&t[S].value!==void 0);)de.push(t[S].value),y.add(t[S].index),S++;l[w]=l[w]===void 0?de:Ue(l[w],de),f=S-1}else j?(Ve(l,w,O.value,!0),y.add(O.index),f++):(l[w]=O.value,y.add(O.index),f++);else d&&d.type&&me(d.type)?Ve(l,w,!0,P):l[w]=P?[]:null}else{let{value:O}=h;if(d&&d.type&&me(d.type))switch(O){case"":{if(n.partial)l._unknown||(l._unknown=[]),l._unknown.push(`${h.rawName||`--${h.name}`}${h.value?`=${h.value}`:""}`),O=!0;else throw new _e(h.name);break}case"false":{O=!1;break}case"true":{O=!0;break}default:O=!0}const I=O===void 0?[]:[O];if(P){let L=f+1;for(;L<t.length&&t[L].kind==="positional";)I.push(t[L].value),y.add(t[L].index),L++;f=L-1}l[w]===void 0?l[w]=P||j?I:O:P||j?l[w]=Ue(l[w],I):l[w]=O}}else if(h.kind==="positional"&&n.stopAtFirstUnknown&&!y.has(h.index)){k(r,`Found unconsumed positional token at index ${h.index}, stopping processing`,"resolver"),u._unknown=a.slice(h.index);break}}for(const[f,h]of Object.entries(l)){const d=i.get(f);d&&(d.multiple||d.lazyMultiple)&&!Array.isArray(h)&&(l[f]=[h])}if($){const f=[],h=[];for(const d of t)d.kind==="positional"&&!y.has(d.index)&&(f.push(d.value),h.push(d));if(f.length>0){const d=l[$.name],w=$.multiple||$.lazyMultiple;d===void 0?w?(h.forEach(P=>y.add(P.index)),l[$.name]=f):(y.add(h[0].index),l[$.name]=f[0]):w&&(h.forEach(P=>y.add(P.index)),l[$.name]=Array.isArray(d)?[...f,...d]:[...f,d])}}if(!n.partial){for(const f of t)if(f.kind==="positional"&&!y.has(f.index))throw new Nn(a[f.index])}if(n.partial&&!n.stopAtFirstUnknown){const f=[...m];if(l._unknown){const h=new Map;for(const[d,w]of a.entries())h.set(w,d);for(const d of l._unknown){const w=h.get(d);w!==void 0&&f.push({index:w,value:d})}}for(const h of t)h.kind==="positional"&&!y.has(h.index)&&f.push({index:h.index,value:a[h.index]});f.length>0&&(f.sort((h,d)=>h.index-d.index),u._unknown=f.map(h=>h.value))}if(n.stopAtFirstUnknown&&!v){const f=t.findIndex(w=>w.kind==="option"&&!i.has(w.name||"")&&!c.has(w.name||"")&&(!n.caseInsensitive||!s?.has(w.name?.toLowerCase()||"")&&!g?.has(w.name?.toLowerCase()||""))),h=t.findIndex(w=>w.kind==="positional"&&!y.has(w.index));let d=-1;if(f!==-1&&h!==-1?d=Math.min(f,h):f!==-1?d=f:h!==-1&&(d=h),d>=0){const w=t[d].index;u._unknown=a.slice(w)}}else m.length>0&&!n.partial&&(u._unknown=m.map(f=>f.value));for(const[f,h]of Object.entries(l)){const d=n.camelCase&&o?.get(f)||f,w=i.get(f);u[d]=w&&w.type?Mn(h,w.type):h===void 0?null:h}for(const f of e){const h=n.camelCase&&o?.get(f.name)||f.name;!(h in u)&&f.defaultValue!==void 0&&(f.multiple||f.lazyMultiple?u[h]=Array.isArray(f.defaultValue)?[...f.defaultValue]:[f.defaultValue]:u[h]=f.defaultValue)}if(C){const f={},h={},d={};for(const P of e)if(P.group){const j=Array.isArray(P.group)?P.group:[P.group];for(const O of j)Me(O)||f[O]||(f[O]={})}for(const P of Object.keys(u))if(!Bn(P)){h[P]=u[P];let j=P;n.camelCase&&(j=p?.get(P)||P);const O=i.get(j);if(O&&O.group){const I=Array.isArray(O.group)?O.group:[O.group];for(const L of I)Me(L)||f[L]&&(f[L][P]=u[P])}else d[P]=u[P]}const w={_all:h};for(const[P,j]of Object.entries(f))w[P]=j;Object.keys(d).length>0&&(w._none=d),u._unknown&&(w._unknown=u._unknown),Object.keys(u).forEach(P=>delete u[P]),Object.assign(u,w)}return k(r,"Final parsed result:","resolver",u),u},"resolveArgs");var Fn=Object.defineProperty,R=H((t,e)=>Fn(t,"name",{value:e,configurable:!0}),"l");const V="-".codePointAt(0),M="=",qn=M.codePointAt(0),Gn="--",Hn="-",Kn="--",gt=R(t=>t.length>2&&t.startsWith(Kn),"hasLongOptionPrefix"),Yn=R(t=>gt(t)&&!t.includes(M,3),"isLongOption"),Jn=R(t=>gt(t)&&t.includes(M,3),"isLongOptionAndValue"),Zn=R(t=>t!==void 0&&t.length>0&&t.codePointAt(0)!==V,"hasOptionValue"),Qn=R(t=>{if(t.length!==2||t.codePointAt(0)!==V||t.codePointAt(1)===V)return!1;const e=t.codePointAt(1);return e!==void 0&&(e<48||e>57)},"isShortOption"),Xn=R(t=>!(t.length<=2||t.codePointAt(0)!==V||t.codePointAt(1)===V),"isShortOptionGroup"),ei=R(t=>{const e=[],n=[...t];let a=-1,r=0;for(;n.length>0;){const i=n.shift();if(i===void 0)break;const c=n[0];if(r>0?r--:a++,i===Gn){e.push({index:a,kind:"option-terminator"});const s=n.map((g,o)=>({index:a+o+1,kind:"positional",value:g}));e.push(...s),a+=n.length;break}if(Qn(i)){const s=i.charAt(1);let g,o;r?(e.push({index:a,inlineValue:o,kind:"option",name:s,rawName:i,value:g}),r===1&&Zn(c)&&(g=n.shift(),e.push({index:a,inlineValue:o,kind:"option",value:g}))):e.push({index:a,inlineValue:o,kind:"option",name:s,rawName:i,value:g}),g!==void 0&&++a;continue}if(Xn(i)&&!i.includes(M)){const s=[];let g="",o=!1;for(let p=1;p<i.length;p++){const u=i.charAt(p);o?g+=u:u.codePointAt(0)===qn?o=!0:s.push(`${Hn}${u}`)}if(o)if(s.length>0){const p=s.pop();s.push(`${p}=${g}`)}else s.push(g);n.unshift(...s),r=s.length;continue}if(Yn(i)){const s=i.slice(2);e.push({index:a,kind:"option",name:s,rawName:i});continue}if(Jn(i)){const s=i.indexOf(M),g=i.slice(2,s),o=i.slice(s+1);e.push({index:a,inlineValue:!0,kind:"option",name:g,rawName:i,value:o});continue}if(i.length>2&&i.codePointAt(0)===V&&i.codePointAt(1)!==V&&i.includes(M)){const s=i.indexOf(M),g=i.charAt(1),o=i.slice(s+1);e.push({index:a,inlineValue:!0,kind:"option",name:g,rawName:i,value:o});continue}e.push({index:a,kind:"positional",value:i})}return e},"parseArgsTokens");var ti=Object.defineProperty,Ee=H((t,e)=>ti(t,"name",{value:e,configurable:!0}),"d");const ni=Ee(t=>t&&(t===Boolean||typeof t=="function"&&t.name?.startsWith("Boolean")),"isBooleanType"),ii=Ee(t=>typeof t=="function","isValidCustomTypeFunction"),ai=Ee((t,e,n)=>{const a=n?.debug||!1;k(a,"Validating definitions:","validation",t,"caseInsensitive:",e);const r=new Set,i=new Set,c=new Set,s=new Set;let g=0;for(const o of t){if(k(a,"Checking definition:","validation",o),!o.name)throw k(a,"Validation failed: name is required","validation"),new x("Invalid option definition: name is required");if(typeof o.name!="string")throw new x("Invalid option definition: name must be a string");if(o.name.trim()==="")throw new x("Invalid option definition: name cannot be empty");const p=e?o.name.toLowerCase():"";if(r.has(o.name)||e&&c.has(p))throw new x(`Invalid option definition: duplicate name '${o.name}'`);if(i.has(o.name)||e&&s.has(p))throw new x(`Invalid option definition: name '${o.name}' conflicts with an existing alias`);if(r.add(o.name),e&&c.add(p),o.alias!==void 0){if(typeof o.alias!="string")throw new x("Invalid option definition: alias must be a string");if(o.alias.length!==1)throw new x("Invalid option definition: alias must be a single character");if(/\d/.test(o.alias))throw new x("Invalid option definition: alias cannot be numeric");if(o.alias==="-")throw new x('Invalid option definition: alias cannot be "-"');const u=e?o.alias.toLowerCase():"";if(i.has(o.alias)||e&&s.has(u))throw new x(`Invalid option definition: duplicate alias '${o.alias}'`);if(r.has(o.alias)||e&&c.has(u))throw new x(`Invalid option definition: alias '${o.alias}' conflicts with an existing option name`);i.add(o.alias),e&&s.add(u)}if(o.defaultOption&&(g++,o.type!==void 0&&ni(o.type)))throw new x("Invalid option definition: defaultOption cannot be Boolean type");if(o.type!==void 0&&!(o.type===Boolean||o.type===Number||o.type===String||typeof o.type=="function"&&ii(o.type)))throw new x("Invalid option definition: invalid type")}if(g>1)throw k(a,"Validation failed: multiple defaultOptions not allowed","validation"),new x("Invalid option definition: multiple defaultOptions not allowed");k(a,"Validation completed successfully","validation")},"validateDefinitions");var oi=Object.defineProperty,ri=H((t,e)=>oi(t,"name",{value:e,configurable:!0}),"O");const si=ri((t,e={})=>{const n=e.debug||!1;k(n,"Starting command-line-args parsing","index"),k(n,"Options:","index",e);const a={...e};a.stopAtFirstUnknown&&(a.partial=!0);const r=Array.isArray(t)?t:[t];k(n,"Normalized definitions:","index",r),ai(r,a.caseInsensitive,n?a:void 0);let{argv:i}=a;if(!i&&(i=process.argv.slice(2),process.execArgv?.length)){const o=new Set(process.execArgv);i=i.filter(p=>!o.has(p))}k(n,"Using argv:","index",i);let c=i;a.caseInsensitive&&i&&(c=i.map(o=>{if(o.startsWith("--")){const p=o.indexOf("="),u=(p===-1?o.slice(2):o.slice(2,p)).toLowerCase();return p===-1?`--${u}`:`--${u}${o.slice(p)}`}if(o.startsWith("-")&&!o.startsWith("--")&&o.length>1){const p=o.slice(1).split("=",2),u=p[0],l=p[1];if(!u)return o;const m=u.toLowerCase();return l===void 0?`-${m}`:`-${m}=${l}`}return o}));const s=ei((c??i??[]).map(String));k(n,"Tokenized arguments:","index",s);const g=Wn(s,r,a,i??[]);return k(n,"Command-line-args parsing completed","index"),g},"commandLineArgs");var li=Object.defineProperty,ci=b((t,e)=>li(t,"name",{value:e,configurable:!0}),"m$4");let ui=class{static{b(this,"a")}static{ci(this,"EmptyToolbox")}result;argv;options;argument;command;commandName;env;logger;runtime;constructor(e,n){this.commandName=e,this.command=n}};var pi=Object.defineProperty,fi=b((t,e)=>pi(t,"name",{value:e,configurable:!0}),"f$3");const hi=/^-{1,2}(\w+)(=(.+))?$/,vt=fi((t,e,n,a)=>{const r=hi.exec(t);if(r==null)return{};const i=r[1];if(!i)return{};const c=n&&a?n.get(i)??a.get(i):e.find(s=>s.name===i||s.alias===i);return c!==void 0?{argName:c.name,argValue:r[3],option:c}:{}},"getParameterOption");var di=Object.defineProperty,Ae=b((t,e)=>di(t,"name",{value:e,configurable:!0}),"e$4");const Te=Ae((t,e)=>{if(e.type===void 0)return t;if(e.type.name==="Boolean"){if(t==="true"||t==="1")return e.type(!0);if(t==="false"||t==="0")return e.type(!1)}return e.type(t)},"convertType"),mi=new Set(["0","1","false","true"]),gi=Ae((t,e,n,a)=>{if(e.length===0||t.length===0)return{};const r=Ae((i,c)=>{const{argName:s,argValue:g,option:o}=vt(c,e,n,a),{lastOption:p}=i;return o&&X(o)&&g&&s?i.partial[s]=Te(g,o):i.lastName&&p&&X(p)&&mi.has(c)&&(i.partial[i.lastName]=Te(c,p)),{lastName:s,lastOption:o,partial:i.partial}},"getBooleanValue");return t.reduce(r,{partial:{}}).partial},"getBooleanValues");var vi=Object.defineProperty,Re=b((t,e)=>vi(t,"name",{value:e,configurable:!0}),"e$3");const yi=new Set(["0","1","false","true"]),wi=Re((t,e,n,a)=>{if(e.length===0||t.length===0)return t;const r=Re((i,c)=>{const{argValue:s,option:g}=vt(c,e,n,a),{lastOption:o}=i;if(o&&X(o)&&yi.has(c)){const{args:u}=i;return{args:u.slice(0,-1)}}if(g&&X(g)&&s)return{args:i.args};const p=[...i.args];return p.push(c),{args:p,lastOption:g}},"removeBooleanArguments");return t.reduce(r,{args:[]}).args},"removeBooleanValues");var bi=Object.defineProperty,$i=b((t,e)=>bi(t,"name",{value:e,configurable:!0}),"o$9");const De=$i(t=>{const e=new Map;for(const n of t){const a=e.get(n.name);a?e.set(n.name,{...a,...n}):e.set(n.name,n)}return[...e.values()]},"mergeArguments");var Oi=Object.defineProperty,se=b((t,e)=>Oi(t,"name",{value:e,configurable:!0}),"o$8");const Pi=se(t=>{if(t===void 0)return;const e=t.toLowerCase().trim();return e==="true"||e==="1"||e==="yes"||e==="on"},"transformBooleanEnv"),Ai=se((t,e)=>{if(!t.type)return e;if(e!==void 0){if(t.type===Boolean||typeof t.type=="function"&&t.type.name==="Boolean")return Pi(e);if(t.type===Number||typeof t.type=="function"&&t.type.name==="Number"){const n=Number.parseFloat(e);return Number.isNaN(n)?void 0:n}return t.type===String||typeof t.type=="function"&&t.type.name==="String"?e:t.type(e)}},"transformEnvValue"),Ei=se(t=>t.toLowerCase().replaceAll(/_./g,e=>e[1]?.toUpperCase()??e).replace(/^[A-Z]/,e=>e.toLowerCase()),"toCamelCase"),Ci=se(t=>{if(!t||t.length===0)return{};const e={},n=q();for(const a of t){const r=n[a.name],i=Ai(a,r),c=i===void 0?a.defaultValue:i,s=Ei(a.name);e[s]=c}return e},"processEnvVariables");var Ni=Object.defineProperty,le=b((t,e)=>Ni(t,"name",{value:e,configurable:!0}),"l$b");const ki=le(t=>{const e=new Map,n=new Map;for(const a of t)if(e.set(a.name,a),a.alias){const r=Array.isArray(a.alias)?a.alias:[a.alias];for(const i of r)n.set(i,a)}return{optionMapByAlias:n,optionMapByName:e}},"buildOptionMaps"),ji=le((t,e,n,a)=>{const r=new ui(t.name,t),{_all:i,positionals:c}=e,s=Object.keys(n).length>0?{...i,...n}:i;te in s&&delete s[te],r.argument=c?.[te]??[];const g=Object.keys(a).length>0;return r.options=g?{...s,...a}:s,r.env=Ci(t.env),r},"prepareToolbox"),xi=le((t,e,n)=>{const a=t.options??[],r=a.length>0;let i=De(r?[...a,...n]:n);if(i.length>0){for(const o of i)if(o.multiple&&o.lazyMultiple)throw new Error(`Argument "${o.name}" cannot have both multiple and lazyMultiple options, please choose one.`)}t.argument&&(i=[{defaultOption:!0,description:t.argument?.description,group:"positionals",multiple:!0,name:te,type:t.argument?.type,typeLabel:t.argument?.typeLabel},...i]);let c,s;if(r){const{optionMapByAlias:o,optionMapByName:p}=ki(a);c=wi(e,a,p,o),s=gi(e,a,p,o)}else c=e,s={};const g=si(i,{argv:c,camelCase:!0,partial:!0,stopAtFirstUnknown:!0});return{arguments_:i,booleanValues:s,parsedArgs:g}},"processCommandArgs"),B=le(async(t,e,n)=>await t.execute(e),"executeCommand");var _i=Object.defineProperty,Li=b((t,e)=>_i(t,"name",{value:e,configurable:!0}),"n$7");let Ii=class extends E{static{b(this,"s")}static{Li(this,"CommandValidationError")}commandName;missingOptions;constructor(e,n){super(`Command "${e}" is missing required options: ${n.join(", ")}`,"COMMAND_VALIDATION_ERROR",{commandName:e,missingOptions:n}),this.name="CommandValidationError",this.commandName=e,this.missingOptions=n,this.hint=`Provide the following required options: ${n.join(", ")}`}};var Si=Object.defineProperty,Ui=b((t,e)=>Si(t,"name",{value:e,configurable:!0}),"e$2");let Mi=class extends E{static{b(this,"o")}static{Ui(this,"ConflictingOptionsError")}option1;option2;constructor(e,n){super(`Options "${e}" and "${n}" cannot be used together`,"CONFLICTING_OPTIONS",{option1:e,option2:n}),this.name="ConflictingOptionsError",this.option1=e,this.option2=n,this.hint=`Remove either --${e} or --${n}`}};var Vi=Object.defineProperty,Ti=b((t,e)=>Vi(t,"name",{value:e,configurable:!0}),"t$5");const Be=Ti((t,e,n=!1)=>{const a=[];for(const r of t)if(!(!n&&!r.required)&&e[r.name]===void 0){if(r.type?.name==="Boolean"){e[r.name]=!1;continue}a.push(r)}return a},"listMissingArguments");var Ri=Object.defineProperty,yt=b((t,e)=>Ri(t,"name",{value:e,configurable:!0}),"n$5");const Di=yt((t,e)=>e.includes(t)?!0:Math.abs(t.length-e.length)>t.length/2?!1:zt(t,e)<=t.length/3,"isSimilar"),F=yt((t,e)=>{const n=t.toLowerCase();return e.filter(a=>Di(a.toLowerCase(),n))},"findAlternatives");var Bi=Object.defineProperty,ce=b((t,e)=>Bi(t,"name",{value:e,configurable:!0}),"a$2");const zi=ce((t,e)=>{const n=[];if(t._unknown&&t._unknown.forEach(a=>{const r=a.startsWith("--");let i=`Found unknown ${r?"option":"argument"} "${a}"`;if(r){const c=F(a.replace("--",""),(e.options??[]).map(s=>s.name));if(c.length>0){const[s,...g]=c.map(o=>`--${o}`);i+=g.length>0?`, did you mean ${s} or ${g.join(", ")}?`:`, did you mean ${s}?`}}n.push(i)}),n.length>0)throw new Error(n.join(`
2
- `))},"validateUnknownOptions"),Wi=ce((t,e,n)=>{const a=n.__requiredOptions__?Be(n.__requiredOptions__,e,!0):Be(t,e,!1);if(a.length>0)throw new Ii(n.name,a.map(r=>r.name));e._unknown&&e._unknown.length>0&&!n.argument&&zi(e,n)},"validateRequiredOptions"),Fi=ce((t,e,n)=>{const a=n.__conflictingOptions__??t.filter(r=>r.conflicts!==void 0);if(a.length>0){const r=a.find(i=>Array.isArray(i.conflicts)?i.conflicts.some(c=>e[c]!==void 0)&&e[i.name]!==void 0:e[i.conflicts]!==void 0&&e[i.name]!==void 0);if(r)throw new Mi(r.name,typeof r.conflicts=="string"?r.conflicts:r.conflicts?.[0]??"unknown")}},"validateConflictingOptions"),qi=ce(t=>{if(!Array.isArray(t.options))return;const e=new Map,n=new Map;for(const r of t.options){if(r.name){const i=e.get(r.name)??[];i.push(r),e.set(r.name,i)}if(typeof r.alias=="string"&&r.alias.length>0){const i=n.get(r.alias)??[];i.push(r),n.set(r.alias,i)}else if(Array.isArray(r.alias)){for(const i of r.alias)if(i.length>0){const c=n.get(i)??[];c.push(r),n.set(i,c)}}}const a=[];for(const[r,i]of e)i.length>1&&a.push(`Duplicate option name "${r}" in command "${t.name}": ${JSON.stringify(i)}`);for(const[r,i]of n)i.length>1&&a.push(`Duplicate option alias "-${r}" used by options ${i.map(c=>`"${c.name}"`).join(", ")} in command "${t.name}"`);if(a.length>0)throw new Error(a.join(`
3
- `))},"validateDuplicateOptions");var Gi=Object.defineProperty,Ce=b((t,e)=>Gi(t,"name",{value:e,configurable:!0}),"r$7");const Hi=Ce((t,e)=>{if(e.length===0)return{argv:[],commandPath:void 0};const n=[];for(let a=1;a<=e.length;a+=1){const r=e[a-1];if(r===void 0)break;n.push(r);const i=n.join(" ");if(t.has(i))return{argv:e.slice(a),commandPath:[...n]}}return{argv:e,commandPath:void 0}},"parseNestedCommand"),J=Ce(t=>t.join(" "),"getCommandPathKey"),Ki=Ce((t,e)=>e&&e.length>0?[...e,t]:[t],"getFullCommandPath");var Yi=Object.defineProperty,Ji=b((t,e)=>Yi(t,"name",{value:e,configurable:!0}),"p$4"),Zi=Object.defineProperty,wt=Ji((t,e)=>Zi(t,"name",{value:e,configurable:!0}),"e"),Qi=Object.defineProperty,Xi=wt((t,e)=>Qi(t,"name",{value:e,configurable:!0}),"E");const bt=String.raw,ze=bt`\p{Emoji}(?:\p{EMod}|[\u{E0020}-\u{E007E}]+\u{E007F}|\uFE0F?\u20E3?)`,ea=Xi(()=>new RegExp(bt`\p{RI}{2}|(?![#*\d](?!\uFE0F?\u20E3))${ze}(?:\u200D${ze})*`,"gu"),"default");var ta=Object.defineProperty,na=wt((t,e)=>ta(t,"name",{value:e,configurable:!0}),"p");Object.freeze(new Map([[0,0],[1,22],[2,22],[3,23],[4,24],[7,27],[8,28],[9,29],[30,39],[31,39],[32,39],[33,39],[34,39],[35,39],[36,39],[37,39],[40,49],[41,49],[42,49],[43,49],[44,49],[45,49],[46,49],[47,49],[90,39]]));const G=ea(),ia=/[-_./\s]+/g,Q=/(\u001B\[[0-9;]*[a-z])/i,We=new RegExp("\\p{Script=Arabic}","u"),aa=new RegExp("\\p{Script=Bengali}","u"),z=new RegExp("\\p{Script=Cyrillic}","u"),oa=new RegExp("\\p{Script=Devanagari}","u"),ra=new RegExp("\\p{Script=Ethiopic}","u"),ge=new RegExp("\\p{Script=Greek}","u"),sa=new RegExp("\\p{Script=Greek}+|\\p{Script=Latin}+|[^\\p{Script=Greek}\\p{Script=Latin}]+","gu"),la=new RegExp("\\p{Script=Gujarati}","u"),ca=new RegExp("\\p{Script=Gurmukhi}","u"),Fe=new RegExp("\\p{Script=Hangul}","u"),qe=new RegExp("\\p{Script=Hebrew}","u"),ua=new RegExp("\\p{Script=Hiragana}","u"),Ge=new RegExp("\\p{Script=Han}","u"),pa=new RegExp("\\p{Script=Kannada}","u"),fa=new RegExp("\\p{Script=Katakana}","u"),ha=new RegExp("\\p{Script=Khmer}","u"),da=new RegExp("\\p{Script=Lao}","u"),_=new RegExp("\\p{Script=Latin}","u"),ma=new RegExp("\\p{Script=Malayalam}","u"),ga=new RegExp("\\p{Script=Myanmar}","u"),va=new RegExp("\\p{Script=Oriya}","u"),ya=new RegExp("\\p{Script=Sinhala}","u"),wa=new RegExp("\\p{Script=Tamil}","u"),ba=new RegExp("\\p{Script=Telugu}","u"),$a=new RegExp("\\p{Script=Thai}","u"),Oa=new RegExp("\\p{Script=Tibetan}","u"),He=/[\u02BB\u02BC\u0027]/u,Pa=na(t=>t.replace(G,""),"stripEmoji");var Aa=Object.defineProperty,$t=b((t,e)=>Aa(t,"name",{value:e,configurable:!0}),"i$6"),Ea=Object.defineProperty,Ot=$t((t,e)=>Ea(t,"name",{value:e,configurable:!0}),"r"),Ca=Object.defineProperty,Na=Ot((t,e)=>Ca(t,"name",{value:e,configurable:!0}),"c");let Pt=class{static{b(this,"l")}static{$t(this,"y")}static{Ot(this,"s")}static{Na(this,"LRUCache")}capacity;cache;keyOrder;constructor(e){this.capacity=e,this.cache=new Map,this.keyOrder=[]}get(e){if(this.cache.has(e))return this.keyOrder=this.keyOrder.filter(n=>n!==e),this.keyOrder.push(e),this.cache.get(e)}has(e){return this.cache.has(e)}set(e,n){if(this.cache.has(e))this.keyOrder=this.keyOrder.filter(a=>a!==e);else if(this.cache.size>=this.capacity){const a=this.keyOrder.shift();a!==void 0&&this.cache.delete(a)}this.cache.set(e,n),this.keyOrder.push(e)}delete(e){this.cache.delete(e),this.keyOrder=this.keyOrder.filter(n=>n!==e)}clear(){this.cache.clear(),this.keyOrder=[]}size(){return this.cache.size}};var ka=Object.defineProperty,ja=b((t,e)=>ka(t,"name",{value:e,configurable:!0}),"r$5"),xa=Object.defineProperty,_a=ja((t,e)=>xa(t,"name",{value:e,configurable:!0}),"a"),La=Object.defineProperty,Ia=_a((t,e)=>La(t,"name",{value:e,configurable:!0}),"s");const Sa=Ia((t,e)=>typeof t!="string"||t===""?"":(e?.locale?t[0].toLocaleLowerCase(e.locale):t[0].toLowerCase())+t.slice(1),"lowerFirst");var Ua=Object.defineProperty,Ma=b((t,e)=>Ua(t,"name",{value:e,configurable:!0}),"S"),Va=Object.defineProperty,ue=Ma((t,e)=>Va(t,"name",{value:e,configurable:!0}),"m");const Ta=Wt(import.meta.url),Z=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,Ra=ue(t=>{if(typeof Z<"u"&&Z.versions&&Z.versions.node){const[e,n]=Z.versions.node.split(".").map(Number);if(e>22||e===22&&n>=3||e===20&&n>=16)return Z.getBuiltinModule(t)}return Ta(t)},"__cjs_getBuiltinModule"),{stripVTControlCharacters:Da}=Ra("node:util");var Ba=Object.defineProperty,za=ue((t,e)=>Ba(t,"name",{value:e,configurable:!0}),"g");const ve=new Pt(1e3),Wa=za(t=>{const e=t.join("");if(ve.has(e))return ve.get(e);const n=t.map(r=>r.replaceAll(/[.*+?^${}()|[\]\\]/g,String.raw`\$&`)).join("|"),a=new RegExp(n,"g");return ve.set(e,a),a},"getSeparatorsRegex");var Fa=Object.defineProperty,qa=ue((t,e)=>Fa(t,"name",{value:e,configurable:!0}),"t");const Ga=qa(t=>{const e=[];let n=0,a;for(G.lastIndex=0;(a=G.exec(t))!==null;)a.index>n&&e.push(t.slice(n,a.index)),e.push(a[0]),n=G.lastIndex;return n<t.length&&e.push(t.slice(n)),e.filter(Boolean)},"splitByEmoji");var Ha=Object.defineProperty,A=ue((t,e)=>Ha(t,"name",{value:e,configurable:!0}),"u");const At=new Uint8Array(128),Et=new Uint8Array(128),Ct=new Uint8Array(128);for(let t=0;t<128;t++)At[t]=t>=65&&t<=90?1:0,Et[t]=t>=97&&t<=122?1:0,Ct[t]=t>=48&&t<=57?1:0;const ye=A(t=>At[t],"isUpper"),Ke=A(t=>Et[t],"isLower"),we=A(t=>Ct[t],"isDigit"),U=A((t,e,n,a,r)=>{if(t.length===0)return[];let i=!1;for(const u of Object.values(e))if(u(t[0])){i=!0;break}if(!i&&!n)return[t];const c=[...t],s=[];let g=c[0],o="other";for(const[u,l]of Object.entries(e))if(l(c[0])){o=u;break}let p=n&&a?c[0]===c[0].toLocaleUpperCase(a):!1;for(let u=1;u<c.length;u++){const l=c[u];let m="other";for(const[$,C]of Object.entries(e))if(C(l)){m=$;break}const y=n&&a?l===l.toLocaleUpperCase(a):!1;let v=!1;r?v=r(o,m,p,y,l,u,c):(o!==m&&o!=="other"&&m!=="other"&&(v=!0),n&&m!=="other"&&!p&&y&&(v=!0)),v?(s.push(g),g=l):g+=l,o=m,n&&(p=y)}return g&&g.length>0&&s.push(g),s.length>0?s:[t]},"handleScriptTransitions"),Nt=A((t,e=new Set)=>{if(t.length===0)return[];if(t.toUpperCase()===t)return[t];let n=0;const a=[],r=t.length;for(let i=1;i<r;i++){const c=t.codePointAt(i-1),s=t.codePointAt(i);if(e.size>0){for(const m of e)if(t.startsWith(m,n)){a.push(m),n+=m.length,i=n-1;break}if(i<n)continue}const g=c&&c<128&&ye(c),o=s&&s<128&&ye(s),p=c&&c<128&&Ke(c),u=c&&c<128&&we(c),l=s&&s<128&&we(s);if(p&&o){a.push(t.slice(n,i)),n=i;continue}if(u&&!l||!u&&l){a.push(t.slice(n,i)),n=i;continue}if(l&&!u){let m=!1,y=!1;if(i+1<r){const v=t.codePointAt(i+1);m=v&&v<128&&ye(v),y=v&&v<128&&we(v)}if(!y&&m){a.push(t.slice(n,i),t.slice(i,i+1)),n=i+1;continue}}if(i+1<r){const m=t.codePointAt(i+1),y=m&&m<128&&Ke(m);if(g&&o&&y){const v=t.slice(n,i+1);e.has(v)||(a.push(t.slice(n,i)),n=i)}}}return n<r&&a.push(t.slice(n)),a.filter(i=>i!=="")},"splitCamelCaseFast"),kt=A((t,e,n)=>{if(t.length===0)return[];const a=t===t.toLocaleUpperCase(e);if(e.startsWith("de")){if(!a&&t.replaceAll("ß","SS")===t.toLocaleUpperCase(e))return[t];const o=[...t],p=o.length,u=[];let l=o[0],m=o[0]===o[0].toLocaleUpperCase(e),y=m,v=m?0:-1;for(let $=1;$<p;$++){const C=o[$],N=C===C.toLocaleUpperCase(e);if(N===m)l+=C;else if(N)l&&l.length>0&&(u.push(l),l=C),y=!0,v=$;else{if(y&&$-v>1){const f=o[$-1],h=l.slice(0,-1);h&&h.length>0&&u.push(h),l=f+C}else l+=C;y=!1,v=-1}m=N}return l&&l.length>0&&u.push(l),u}if(e.startsWith("uk")||e.startsWith("ru")||e.startsWith("bg")||e.startsWith("sr")||e.startsWith("mk")||e.startsWith("be")){if(!z.test(t)&&!_.test(t))return[t];const o=[...t],p=o.length,u=[];let l=o[0],m=z.test(o[0])?1:_.test(o[0])?2:0,y=o[0]===o[0].toLocaleUpperCase(e);for(let $=1;$<p;$++){const C=o[$],N=z.test(C)?1:_.test(C)?2:0,f=C===C.toLocaleUpperCase(e);m!==N&&(m===1||m===2)&&(N===1||N===2)||N===m&&!y&&f?(u.push(l),l=C):l+=C,m=N,y=f}l&&l.length>0&&u.push(l);const v=[];for(let $=0;$<u.length;$++)$<u.length-1&&u[$].length===1&&_.test(u[$])&&z.test(u[$+1][0])?(v.push(u[$]+u[$+1]),$+=1):v.push(u[$]);return v}if(e.startsWith("el")){if(!ge.test(t)&&!_.test(t))return[t];const o=t.match(sa)??[t],p=[];if(o.length===1){const u=o[0];if(!u||!ge.test(u[0])||u.length===1)return[u||t]}for(const u of o){if(!u)continue;if(!ge.test(u[0])||u.length===1){p.push(u);continue}const l=u.length;let m=u[0],y=u[0]===u[0].toLocaleUpperCase(e);for(let v=1;v<l;v++){const $=u[v],C=$===$.toLocaleUpperCase(e);!y&&C?(p.push(m),m=$):m+=$,y=C}m&&p.push(m)}return p}if(e.startsWith("ja")||e.startsWith("ko")){const o=e.startsWith("ja"),p=o?{hiragana:A(l=>ua.test(l),"hiragana"),kanji:A(l=>Ge.test(l),"kanji"),katakana:A(l=>fa.test(l),"katakana"),latin:A(l=>_.test(l),"latin")}:{hangul:A(l=>Fe.test(l),"hangul"),latin:A(l=>_.test(l),"latin")},u=new Set(["が","で","と","に","の","は","へ","も","や","を"]);if(o){const l=U(t,p,!1,e,(y,v)=>y==="hiragana"&&v==="katakana"||y==="katakana"&&v==="hiragana"||y==="hiragana"&&v==="latin"||y==="katakana"&&v==="latin"||y==="kanji"&&v==="latin"||y==="latin"&&(v==="hiragana"||v==="katakana"||v==="kanji")),m=[];for(const y of l)y.length===1&&u.has(y)&&m.length>0?m[m.length-1]+=y:m.push(y);return m.length>0?m:[t]}return U(t,p,!1,e,(l,m)=>l==="hangul"&&m==="latin"||l==="latin"&&m==="hangul")}if(e.startsWith("sl")){const o=[...t],p=o.length,u=[];let l=o[0],m=o[0]===o[0].toLocaleUpperCase(e);for(let y=1;y<p;y++){const v=o[y],$=v===v.toLocaleUpperCase(e),C=/[ČŠŽĐ]/i.test(v),N=y<p-1&&o[y+1]===o[y+1].toLocaleUpperCase(e);!m&&$||C&&N?(u.push(l),l=v,C&&N&&(u.push(l),l="")):l+=v,m=$}return l&&l.length>0&&u.push(l),u}if(e.startsWith("zh"))return U(t,{han:A(o=>Ge.test(o),"han"),latin:A(o=>_.test(o),"latin")},!1,e);if(["ar","fa","he","ur"].includes(e.split("-")[0])){const o=A(p=>qe.test(p)||We.test(p),"isRtlChar");return U(t,{latin:A(p=>_.test(p),"latin"),rtl:A(p=>o(p),"rtl")},!1,e)}if(["am","bn","gu","hi","km","kn","lo","ml","mr","ne","or","pa","si","ta","te","th"].includes(e.split("-")[0])){const o=A(p=>oa.test(p)||aa.test(p)||la.test(p)||ca.test(p)||pa.test(p)||wa.test(p)||ba.test(p)||ma.test(p)||ya.test(p)||$a.test(p)||da.test(p)||Oa.test(p)||ga.test(p)||ra.test(p)||ha.test(p)||va.test(p),"isIndicChar");return U(t,{indic:A(p=>o(p),"indic"),latin:A(p=>_.test(p),"latin")},!1,e)}if(["be","bg","ru","sr","uk"].includes(e))return U(t,{cyrillic:A(o=>z.test(o),"cyrillic"),latin:A(o=>_.test(o),"latin")},!0,e);if(["ar","fa","he"].includes(e))return U(t,{latin:A(o=>_.test(o),"latin"),rtl:A(o=>qe.test(o)||We.test(o),"rtl")},!1,e);if(e.startsWith("ko"))return U(t,{hangul:A(o=>Fe.test(o),"hangul"),latin:A(o=>_.test(o),"latin")},!1,e);if(e.startsWith("uz")){if(!z.test(t)&&!_.test(t))return[t];const o=[...t],p=o.length,u=[];let l=o[0],m=o[0]===o[0].toLocaleUpperCase(e);for(let y=1;y<p;y++){const v=o[y],$=v===v.toLocaleUpperCase(e);if(He.test(v)||He.test(o[y-1])){l+=v;continue}!m&&$?(u.push(l),l=v):l+=v,m=$}return l&&l.length>0&&u.push(l),u}const r=[...t],i=r.length,c=[];let s=r[0],g=r[0]===r[0].toLocaleUpperCase(e);for(const o of n)if(t.startsWith(o)){c.push(o),s=r[o.length],g=s===s.toLocaleUpperCase(e);break}for(let o=1;o<i;o++){const p=r[o],u=p===p.toLocaleUpperCase(e);let l=!1;for(const m of n)if(t.startsWith(m,o)){c.push(s,m),o+=m.length-1,s="",l=!0;break}l||(!g&&u?(c.push(s),s=p):s+=p,g=u)}return s&&c.push(s),c},"splitCamelCaseLocale"),Ka=A((t,e,n)=>{const a=[],r=Q.test(t)?t.split(Q).filter(Boolean):[t];for(const i of r)if(Q.test(i))a.push(i);else{const c=G.test(i)?Ga(i).filter(Boolean):[i];for(const s of c)if(G.test(s))a.push(s);else if(e){const g=e.toLowerCase().split("-")[0];a.push(...kt(s,g,n))}else a.push(...Nt(s,n))}return a},"processTextWithAnsiEmoji"),Ya=A((t,e={})=>{if(!t||typeof t!="string")return[];const{handleAnsi:n=!1,handleEmoji:a=!1,knownAcronyms:r=[],locale:i,normalize:c=!1,separators:s,stripAnsi:g=!1,stripEmoji:o=!1}=e,p=new Set([...r].sort((v,$)=>$.length-v.length));let u=t;g&&(u=Da(u)),o&&(u=Pa(u));const l=Array.isArray(s)?Wa(s):s instanceof RegExp?s:ia,m=u.split(l).filter(Boolean);let y=[];for(const v of m)n||a?y.push(...Ka(v,i,p)):i?y.push(...kt(v,i,p)):y.push(...Nt(v,p));return c&&(y=y.map(v=>p.has(v)?v:i&&v===v.toLocaleUpperCase(i)?v[0]+v.slice(1).toLocaleLowerCase(i):v.toUpperCase()===v&&!p.has(v)?v.slice(0,1)+v.slice(1).toLowerCase():v)),y},"splitByCase");var Ja=Object.defineProperty,Za=b((t,e)=>Ja(t,"name",{value:e,configurable:!0}),"r$4"),Qa=Object.defineProperty,Xa=Za((t,e)=>Qa(t,"name",{value:e,configurable:!0}),"o"),eo=Object.defineProperty,to=Xa((t,e)=>eo(t,"name",{value:e,configurable:!0}),"s");const no=to((t,e)=>typeof t!="string"||t===""?"":(e?.locale?t[0].toLocaleUpperCase(e.locale):t[0].toUpperCase())+t.slice(1),"upperFirst");var io=Object.defineProperty,ao=b((t,e)=>io(t,"name",{value:e,configurable:!0}),"r$3"),oo=Object.defineProperty,ro=ao((t,e)=>oo(t,"name",{value:e,configurable:!0}),"r"),so=Object.defineProperty,lo=ro((t,e)=>so(t,"name",{value:e,configurable:!0}),"n");const co=lo((t,e)=>`${t}::${e?.joiner??""}::${e?.locale??""}::${e?.knownAcronyms?.join(",")??""}::${e?.normalize?"true":"false"}`,"generateCacheKey");var uo=Object.defineProperty,po=b((t,e)=>uo(t,"name",{value:e,configurable:!0}),"i$4"),fo=Object.defineProperty,ho=po((t,e)=>fo(t,"name",{value:e,configurable:!0}),"a"),mo=Object.defineProperty,go=ho((t,e)=>mo(t,"name",{value:e,configurable:!0}),"l");const vo=go((t,e)=>{const{length:n}=t;if(n===0)return"";if(n===1)return t[0];const a=[];let r="",i="";for(let c=0;c<n;c++){const s=t[c];if(Q.test(s)){r?(a.push(r+i+s),r="",i=""):(a.length>0&&a.push(e),r=s);continue}r?(i&&(i+=e),i+=s):(a.length>0&&a.push(e),a.push(s))}return a.join("")},"joinSegments");var yo=Object.defineProperty,wo=b((t,e)=>yo(t,"name",{value:e,configurable:!0}),"r$2"),bo=Object.defineProperty,$o=wo((t,e)=>bo(t,"name",{value:e,configurable:!0}),"a"),Oo=Object.defineProperty,Po=$o((t,e)=>Oo(t,"name",{value:e,configurable:!0}),"t");const Ao=Po(t=>t.replaceAll(/(?<![a-zß])SS(?![a-z])/g,"ß"),"normalizeGermanEszett");var Eo=Object.defineProperty,Co=b((t,e)=>Eo(t,"name",{value:e,configurable:!0}),"l$3"),No=Object.defineProperty,ko=Co((t,e)=>No(t,"name",{value:e,configurable:!0}),"n"),jo=Object.defineProperty,xo=ko((t,e)=>jo(t,"name",{value:e,configurable:!0}),"l");const _o=new Pt(1e3),Lo=xo((t,e)=>{if(typeof t!="string"||!t)return"";const n=e?.cache??!1,a=e?.cacheStore??_o;let r;if(n&&(r=co(t,e)),n&&r&&a.has(r))return a.get(r);let i=!0;const c=vo(Ya(t,{handleAnsi:e?.handleAnsi,handleEmoji:e?.handleEmoji,knownAcronyms:e?.knownAcronyms,locale:e?.locale,normalize:e?.normalize,separators:void 0,stripAnsi:e?.stripAnsi,stripEmoji:e?.stripEmoji}).map(s=>e?.handleAnsi&&Q.test(s)?s:(s=e?.locale?.startsWith("de")?Ao(s):s,s=e?.locale?s.toLocaleLowerCase(e.locale):s.toLowerCase(),i?(i=!1,Sa(s,e)):no(s,e))),"");return n&&r&&a.set(r,c),c},"camelCase");var Io=Object.defineProperty,pe=b((t,e)=>Io(t,"name",{value:e,configurable:!0}),"a");const So=pe(t=>{t.options?.forEach(e=>{e.__camelCaseName__=Lo(e.name)})},"processOptionNames"),Uo=pe(t=>{if(!Array.isArray(t.options)||t.options.length===0)return;const e=new Set;for(const a of t.options)e.add(a.name);const n=[];for(const a of t.options)if(a.name.startsWith("no-")){const r=a.name.replace("no-","");if(!e.has(r)){if(a.type!==Boolean)throw new Error(`Cannot add negated option "${a.name}" to command "${t.name}" because it is not a boolean.`);const i={...a,defaultValue:a.defaultValue===void 0?!0:!a.defaultValue,name:r};n.push(i),e.add(r)}}n.length>0&&t.options.push(...n)},"addNegatableOptions"),Mo=pe((t,e)=>{if(!e.options||e.options.length===0)return;const n=t.options,a=Object.keys(n).filter(i=>i.startsWith("no-"));if(a.length===0)return;const r=new Map;for(const i of e.options)r.set(i.name,i);for(const i of a){const c=i.replace(/^no-/,""),s=r.get(c);s&&(s.__negated__=!0),n[c]=!n[i]}},"mapNegatableOptions"),Vo=pe((t,e)=>{if(!e.options||e.options.length===0)return;const n=new Map;for(const r of e.options)r.__camelCaseName__&&r.__negated__===void 0&&r.implies!==void 0&&n.set(r.__camelCaseName__,r);if(n.size===0)return;const a=t.options;for(const r of Object.keys(a)){const i=n.get(r);if(i?.implies){const c=i.implies;for(const[s,g]of Object.entries(c))a[s]===void 0&&(a[s]=g)}}},"mapImpliedOptions");var To=Object.defineProperty,fe=b((t,e)=>To(t,"name",{value:e,configurable:!0}),"e$1");const Ro=fe(()=>!!process.versions.electron,"isElectronApp"),Do=fe(()=>Ro()&&!process.defaultApp,"isBundledElectronApp"),Bo=fe(()=>Do()?0:1,"getProcessArgvBinIndex"),zo=fe(t=>t.slice(Bo()+1),"hideBin");var Wo=Object.defineProperty,jt=b((t,e)=>Wo(t,"name",{value:e,configurable:!0}),"s$2");const Fo=" ",qo=jt((t,e)=>t===e?!0:t.length!==e.length?!1:t.every((n,a)=>n===e[a]),"equals"),Go=jt(t=>{if(typeof t=="string")return t.split(Fo);const e=Pe();return qo(t,e)?zo(t):t},"parseRawCommand");var Ho=Object.defineProperty,be=b((t,e)=>Ho(t,"name",{value:e,configurable:!0}),"r");const Ko=be(t=>{const e=be(i=>{t.error(`Uncaught exception: ${i.message||i}`),i.stack&&t.error(i.stack),ie(1)},"uncaughtExceptionHandler"),n=be((i,c)=>{if(i instanceof Error)t.error(`Promise rejection: ${i.message||i}`),i.stack&&t.error(i.stack);else{let s;if(typeof i=="string")s=i;else try{s=JSON.stringify(i)}catch{s=String(i)}t.error(`Promise rejection: ${s}`)}ie(1)},"unhandledRejectionHandler"),a=je("uncaughtException",e),r=je("unhandledRejection",n);return()=>{a(),r()}},"registerExceptionHandler");var Yo=Object.defineProperty,K=b((t,e)=>Yo(t,"name",{value:e,configurable:!0}),"e");const ae=100,Ne=K((t,e)=>{if(typeof t!="string"||t.trim().length===0)throw new E(`${e} must be a non-empty string`,"INVALID_INPUT",{fieldName:e,value:t});return t.trim()},"validateNonEmptyString"),Ye=K((t,e)=>{if(!Array.isArray(t)||!t.every(n=>typeof n=="string"))throw new E(`${e} must be an array of strings`,"INVALID_INPUT",{fieldName:e,value:t});return t},"validateStringArray");K((t,e)=>{if(typeof t!="function")throw new E(`${e} must be a function`,"INVALID_INPUT",{fieldName:e,value:t});return t},"validateFunction");const $e=K((t,e)=>{if(typeof t!="object"||t===null)throw new E(`${e} must be an object`,"INVALID_INPUT",{fieldName:e,value:t});return t},"validateObject"),ee=K(t=>{const e=Ne(t,"Command name");if(e.length>ae)throw new E(`Command name is too long (maximum ${ae} characters)`,"INVALID_COMMAND_NAME",{commandName:e,length:e.length});if(e.includes("..")||e.includes("/")||e.includes("\\")||e.includes(";")||e.includes("|")||e.includes("&"))throw new E(`Command name "${e}" contains invalid characters`,"INVALID_COMMAND_NAME",{commandName:e});if(!/^[a-z][\w-]*$/i.test(e))throw new E(`Command name "${e}" must start with a letter and contain only letters, numbers, hyphens, and underscores`,"INVALID_COMMAND_NAME",{commandName:e});return e},"validateCommandName");K(t=>{const e=Ne(t,"Plugin name");if(e.length>ae)throw new E(`Plugin name is too long (maximum ${ae} characters)`,"INVALID_PLUGIN_NAME",{length:e.length,pluginName:e});if(e.includes("..")||e.includes("/")||e.includes("\\")||e.includes(";")||e.includes("|")||e.includes("&"))throw new E(`Plugin name "${e}" contains invalid characters`,"INVALID_PLUGIN_NAME",{pluginName:e});if(!/^[a-z][\w-]*$/i.test(e))throw new E(`Plugin name "${e}" must start with a letter and contain only letters, numbers, hyphens, and underscores`,"INVALID_PLUGIN_NAME",{pluginName:e});return e},"validatePluginName");var Jo=Object.defineProperty,he=b((t,e)=>Jo(t,"name",{value:e,configurable:!0}),"s");const Zo=new Set([`
4
- `,"\r"," ","\0",'"',"$","&","'","(",")",";","<",">","[","\\","]","`","{","|","}"]),Qo=he(t=>{if(typeof t!="string")throw new TypeError("Argument must be a string");if(t.length>1e4)throw new Error("Argument is too long (maximum 10000 characters)");for(const e of t)if(Zo.has(e))throw new Error(`Argument contains dangerous character: ${e}`);return t.trim()},"sanitizeArgument"),Je=he(t=>{if(!Array.isArray(t))throw new TypeError("Arguments must be an array");if(t.length>100)throw new Error("Too many arguments (maximum 100)");return t.map(e=>Qo(e))},"sanitizeArguments");he(t=>{if(typeof t!="string")throw new TypeError("Path must be a string");const e=t.trim();if(e.includes("..")||e.includes("../")||e.includes("..\\"))throw new Error("Path contains directory traversal sequences");if(e.startsWith("/")||/^[A-Z]:/i.test(e))throw new Error("Absolute paths are not allowed");if(e.length>1e3)throw new Error("Path is too long");return e},"validateSafePath");class vr{static{b(this,"RateLimiter")}static{he(this,"RateLimiter")}attempts=new Map;maxAttempts;windowMs;constructor(e=5,n=6e4){if(e<=0||n<=0)throw new Error("maxAttempts and windowMs must be positive numbers");this.maxAttempts=e,this.windowMs=n}checkLimit(e){const n=Date.now(),a=this.attempts.get(e);return!a||n>a.resetTime?(this.attempts.set(e,{count:1,resetTime:n+this.windowMs}),this.cleanup(n),!0):a.count>=this.maxAttempts?!1:(a.count+=1,!0)}reset(e){this.attempts.delete(e)}cleanup(e){for(const[n,a]of this.attempts.entries())e>a.resetTime&&this.attempts.delete(n)}}var Xo=Object.defineProperty,ne=b((t,e)=>Xo(t,"name",{value:e,configurable:!0}),"N");const er=/^-([^\d-])$/,tr=/^--(\S+)/,nr=/^-([^\d-]{2,})$/,Oe=ne(t=>er.test(t)||tr.test(t)||nr.test(t),"isOption");class yr{static{b(this,"Cli")}static{ne(this,"Cli")}#t;#e;#o;#c;#g;#u;#v;#r;#n;#i;#p;#s;#l;#f=!1;#y;#w=!1;#h;#d;#m;#P(){return this.#h===void 0&&(this.#h=[...this.#i.keys()]),this.#h}#b(){return this.#d===void 0&&(this.#d=[...this.#n.keys()]),this.#d}#a(){return this.#m===void 0&&(this.#m=[...this.#P(),...this.#b()]),this.#m}#A(){this.#h=void 0,this.#d=void 0,this.#m=void 0}#$(){if(this.#o===void 0){const e=Go(this.#e.argv);this.#o=Je(e),this.#E()}return this.#o}#E(){if(!this.#o)return;const e=q();let n=!1;for(const a of this.#o){if(a==="--quiet"||a==="-q"){e.CEREBRO_OUTPUT_LEVEL=String(Vt),n=!0;break}if(a==="--verbose"||a==="-v"){e.CEREBRO_OUTPUT_LEVEL=String(Tt),n=!0;break}if(a==="--debug"||a==="-vvv"){e.CEREBRO_OUTPUT_LEVEL=String(W),n=!0;break}}n||(e.CEREBRO_OUTPUT_LEVEL=Object.hasOwn(e,"DEBUG")?String(W):String(ke))}#C(){this.#w||(this.#y=Ko(this.#t),this.#w=!0)}#O(e,n,a,r){this.#t.debug(`command '${r}' found, parsing command args: ${n.join(", ")}`);const{arguments_:i,booleanValues:c,parsedArgs:s}=xi(e,n,Ut),g=Object.keys(c).length>0?{...s,_all:{...s._all,...c}}:s;Wi(i,g,e);const o=ji(e,s,c,a);return o.runtime=this,o.argv=this.#$(),e.options&&e.options.length>0&&(Mo(o,e),Vo(o,e)),Fi(i,o.options,e),q().CEREBRO_OUTPUT_LEVEL===String(W)&&(this.#t.debug("command options parsed from options:"),this.#t.debug(JSON.stringify(o.options,null,2)),this.#t.debug("command argument parsed from argument:"),this.#t.debug(JSON.stringify(o.argument,null,2))),{arguments_:i,booleanValues:c,commandArgs:g,parsedArgs:s,toolbox:o}}constructor(e,n={}){if(typeof e!="string"||e.trim().length===0)throw new E("CLI name must be a non-empty string","INVALID_INPUT",{cliName:e});this.#g=e.trim();const a=n.argv??Pe(),r=n.cwd??Rt();if(this.#e={...n,argv:a,cwd:r},this.#e.argv&&!Array.isArray(this.#e.argv))throw new E("CLI argv option must be an array of strings","INVALID_INPUT",{argv:this.#e.argv});if(this.#e.cwd&&typeof this.#e.cwd!="string")throw new E("CLI cwd option must be a string","INVALID_INPUT",{cwd:this.#e.cwd});if(this.#e.packageName&&typeof this.#e.packageName!="string")throw new E("CLI packageName option must be a string","INVALID_INPUT",{packageName:this.#e.packageName});if(this.#e.packageVersion&&typeof this.#e.packageVersion!="string")throw new E("CLI packageVersion option must be a string","INVALID_INPUT",{packageVersion:this.#e.packageVersion});const i=q();if(i.CEREBRO_OUTPUT_LEVEL=String(ke),typeof this.#e.logger=="object"){const c=["debug","error","info","log","warn"],s=[],g=this.#e.logger;for(const o of c)typeof g[o]!="function"&&s.push(o);if(s.length>0)throw new E(`Logger object is missing required methods: ${s.join(", ")}`,"INVALID_INPUT",{logger:this.#e.logger,missingMethods:s});this.#t=this.#e.logger}else this.#t={...console,debug:ne((...c)=>{i.CEREBRO_OUTPUT_LEVEL===String(W)&&console.debug(...c)},"debug")};this.#u=this.#e.packageVersion,this.#v=this.#e.packageName,this.#c=this.#e.cwd,this.#s="help",this.#l={},this.#n=new Map,this.#i=new Map,this.#p=new Map}setCommandSection(e){return this.#l=e,this}getCommandSection(){return this.#l.header||(this.#l.header=`${this.#g}${this.#u?` v${this.#u}`:""}`),this.#l}setDefaultCommand(e){return this.#s=e,this}get defaultCommand(){return this.#s}addCommand(e){$e(e,"Command"),ee(e.name),e.alias&&(typeof e.alias=="string"?ee(e.alias):Ye(e.alias,"Command alias").forEach(r=>ee(r))),e.argument&&$e(e.argument,"Command argument"),e.options&&$e(e.options,"Command options"),e.commandPath&&(Ye(e.commandPath,"Command commandPath"),e.commandPath.forEach(r=>{ee(r)}));const n=Ki(e.name,e.commandPath),a=J(n);if(this.#i.has(a))throw new E(`Command with path "${a}" already exists`,"DUPLICATE_COMMAND",{commandName:e.name,commandPath:e.commandPath});if(this.#n.has(e.name)&&!e.commandPath)throw new E(`Command with name "${e.name}" already exists`,"DUPLICATE_COMMAND",{commandName:e.name});if(e.options)for(const r of e.options)tn(r);if(qi(e),Uo(e),So(e),e.options&&(e.__conflictingOptions__=e.options.filter(r=>r.conflicts!==void 0),e.__requiredOptions__=e.options.filter(r=>r.required===!0)),this.#n.set(e.name,e),this.#i.set(a,n),this.#p.set(a,e),this.#A(),e.alias!==void 0){const r=typeof e.alias=="string"?[e.alias]:e.alias;for(const i of r){if(q().CEREBRO_OUTPUT_LEVEL===String(W)&&this.#t.debug("adding alias",i),this.#n.has(i))throw new E(`Command alias "${i}" conflicts with existing command`,"DUPLICATE_COMMAND",{alias:i,commandName:e.name});this.#n.set(i,e)}}return this}addPlugin(e){return this.getPluginManager().register(e),this}getPluginManager(){return this.#r?this.#r:(this.#r=new Jt(this.#t),this.#r.register({description:"Attaches the logger to the toolbox",execute:ne(e=>{e.logger=this.#t},"execute"),name:"logger"}),this.#r)}getCliName(){return this.#g}getPackageVersion(){return this.#u}getPackageName(){return this.#v}getCommands(){return this.#n}getCwd(){return this.#c}dispose(){this.#y?.()}async run(e={}){const{autoDispose:n=!0,shouldExitProcess:a=!0,...r}=e;this.#n.has("help")||this.addCommand(new Mt(this.#n));const i=this.#b(),c=this.#i;this.#C();const s=this.#$();let g,o=[...s];const p=Dt(),u=Bt(),l=Pe();this.#t.debug(`process.execPath: ${p}`),this.#t.debug(`process.execArgv: ${u.join(" ")}`),this.#t.debug(`process.argv: ${l.join(" ")}`);const m=Hi(c,[...s]);if(m.commandPath)g=m.commandPath,o=m.argv;else{if(s.length>1&&s[0]&&s[1]&&!Oe(s[0])&&!Oe(s[1])){const w=[];let P=0;for(;P<s.length;){const O=s[P];if(!O||Oe(O))break;w.push(O),P+=1}const j=J(w);if(w[0]&&!i.includes(w[0])){const O=this.#a(),I=F(j,O);throw new D(j,I)}}let d;try{d=ln([null,...i],[...s])}catch(w){if(w instanceof Error&&w.name==="INVALID_COMMAND"&&"command"in w){const P=w.command,j=this.#a(),O=F(P,j);throw new D(P,O)}throw w}d.command&&(g=[d.command],o=d.argv)}if(!g)if(this.#s)g=[this.#s];else{const d=this.#a();throw new D("",d)}const y=J(g),v=this.#i.get(y);let $;if(v){if($=this.#p.get(y),!$||J(v)!==y){const d=this.#a(),w=F(y,d);throw new D(y,w)}}else{const d=g[g.length-1];if($=d?this.#n.get(d):void 0,!$){const w=this.#a(),P=F(y,w);throw new D(y,P)}}if(typeof $.execute!="function")return this.#t.error(`Command "${$.name}" has no function to execute.`),a?ie(1):void 0;const C=o,{commandArgs:N,toolbox:f}=this.#O($,C,r,y),h=this.getPluginManager();try{!this.#f&&h.hasPlugins()&&(await h.init({cli:this,cwd:this.#c,logger:this.#t}),this.#f=!0),await h.executeLifecycle("execute",f),await h.executeLifecycle("beforeCommand",f);let d;if(N.global?.help){const w=this.#n.get("help");if(!w)throw new E("Help command not found","COMMAND_NOT_FOUND");d=await B(w,f,N)}else if(N.global?.version||N.global?.V){const w=this.#n.get("version");if(!w)throw new E("Version command not found","COMMAND_NOT_FOUND");d=await B(w,f,N)}else d=await B($,f,N);return await h.executeLifecycle("afterCommand",f,d),a?ie(0):void 0}catch(d){throw await h.executeErrorHandlers(d,f),d}finally{n&&this.dispose()}}async runCommand(e,n={}){const{argv:a=[],...r}=n;Ne(e,"Command name");const i=e.split(" ").filter(Boolean),c=J(i),s=this.#i.get(c)?this.#p.get(c):this.#n.get(e);if(!s){const l=this.#a(),m=F(c||e,l);throw new D(e,m)}if(typeof s.execute!="function")throw new E(`Command "${s.name}" has no function to execute`,"INVALID_COMMAND",{commandName:s.name});const g=[...Je(a)];this.#t.debug(`running command '${e}' programmatically with args: ${g.join(", ")}`);const{commandArgs:o,toolbox:p}=this.#O(s,g,r,c||e),u=this.getPluginManager();try{!this.#f&&u.hasPlugins()&&(await u.init({cli:this,cwd:this.#c,logger:this.#t}),this.#f=!0),await u.executeLifecycle("execute",p),await u.executeLifecycle("beforeCommand",p);let l;if(o.global?.help){const m=this.#n.get("help");if(!m)throw new E("Help command not found","COMMAND_NOT_FOUND");l=await B(m,p,o)}else if(o.global?.version||o.global?.V){const m=this.#n.get("version");if(!m)throw new E("Version command not found","COMMAND_NOT_FOUND");l=await B(m,p,o)}else l=await B(s,p,o);return await u.executeLifecycle("afterCommand",p,l),l}catch(l){throw await u.executeErrorHandlers(l,p),l}}}export{yr as Cli};