@bemoje/cli 2.0.3 → 2.0.5
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/index.mjs +1 -6
- package/index.mjs.map +2 -2
- package/package.json +1 -1
package/index.mjs
CHANGED
|
@@ -316,12 +316,7 @@ var Help = class {
|
|
|
316
316
|
return res;
|
|
317
317
|
}
|
|
318
318
|
visibleArguments() {
|
|
319
|
-
|
|
320
|
-
return !!argument.description;
|
|
321
|
-
})) {
|
|
322
|
-
return [...this.cmd.arguments];
|
|
323
|
-
}
|
|
324
|
-
return [];
|
|
319
|
+
return this.cmd.arguments.slice();
|
|
325
320
|
}
|
|
326
321
|
/**
|
|
327
322
|
* Get the command term to show in the list of subcommands.
|
package/index.mjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/lib/Command.ts", "../src/lib/Help.ts", "../../decorators/src/assertDescriptorValueIsFunction.ts", "../../object/src/entriesOf.ts", "../../object/src/keysOf.ts", "../../object/src/filterObject.ts", "../../object/src/objSortKeys.ts", "../../object/src/valuesOf.ts", "../../map/src/mapGetOrDefault.ts", "../../map/src/TimeoutWeakMap.ts", "../../decorators/src/lazyProp.ts", "../../decorators/src/memoizeSync.ts", "../../array/src/arrLast.ts", "../../array/src/arrRemoveDuplicates.ts", "../src/lib/internal/collectVariadicOptionValues.ts", "../src/lib/helpers/findCommand.ts", "../src/lib/helpers/findOption.ts", "../src/lib/helpers/getCommandAncestors.ts", "../src/lib/helpers/getCommandAndAncestors.ts", "../src/lib/internal/mergeOptionDefaults.ts", "../src/lib/internal/normalizeArgv.ts", "../src/lib/helpers/parseOptionFlags.ts", "../src/lib/internal/resolveArguments.ts", "../../fn/src/setName.ts", "../../string/src/lib/strFirstCharToUpperCase.ts", "../../node/src/createLogger.ts", "../../node/src/timer.ts", "../src/lib/internal/validateParsed.ts", "../src/lib/types.ts", "../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["import type { ActionHandler } from './types'\nimport type { AllowedArgumentUsage } from './types'\nimport type { Argument } from './types'\nimport type { ArgumentOptions } from './types'\nimport type { ArgumentUsage } from './types'\nimport type { Arguments } from './types'\nimport type { BooleanOptionOptions } from './types'\nimport type { CamelCase } from 'type-fest'\nimport { Help } from './Help'\nimport type { HookActionHandler } from './types'\nimport type { HookDefinition } from './types'\nimport type { HookPredicate } from './types'\nimport type { ICommand } from './types'\nimport type { InferAddOptionResult } from './types'\nimport type { InferAddedArgumentType } from './types'\nimport type { Option } from './types'\nimport type { OptionOptions } from './types'\nimport type { OptionUsage } from './types'\nimport type { OptionalArgumentOptions } from './types'\nimport type { OptionalArgumentOptionsWithDefaultValue } from './types'\nimport type { OptionalOptionOptions } from './types'\nimport type { OptionalVariadicArgumentOptions } from './types'\nimport type { OptionalVariadicOptionOptions } from './types'\nimport type { Options } from './types'\nimport type { ParseArgvResult } from './types'\nimport type { RequiredArgumentOptions } from './types'\nimport type { RequiredOptionOptions } from './types'\nimport type { RequiredVariadicArgumentOptions } from './types'\nimport type { RequiredVariadicOptionOptions } from './types'\nimport type { SetFieldType } from 'type-fest'\nimport type { SetRequired } from 'type-fest'\nimport type { Simplify } from 'type-fest'\nimport type { SubCommands } from './types'\nimport { arrRemoveDuplicates } from '@mono/array'\nimport { collectVariadicOptionValues } from './internal/collectVariadicOptionValues'\nimport colors from 'ansi-colors'\nimport { filterObject } from '@mono/object'\nimport { findCommand } from './helpers/findCommand'\nimport { findOption } from './helpers/findOption'\nimport { getCommandAncestors } from './helpers/getCommandAncestors'\nimport { getCommandAndAncestors } from './helpers/getCommandAndAncestors'\nimport { inspect } from 'node:util'\nimport { kebabCase } from 'es-toolkit/string'\nimport { lazyProp } from '@mono/decorators'\nimport { mergeOptionDefaults } from './internal/mergeOptionDefaults'\nimport { normalizeArgv } from './internal/normalizeArgv'\nimport { objSortKeys } from '@mono/object'\nimport { parseArgs } from 'node:util'\nimport { parseOptionFlags } from './helpers/parseOptionFlags'\nimport { resolveArguments } from './internal/resolveArguments'\nimport { setName } from '@mono/fn'\nimport { strFirstCharToUpperCase } from '@mono/string'\nimport { timer } from '@mono/node'\nimport { validateParsed } from './internal/validateParsed'\nimport { valuesOf } from '@mono/object'\n\n/**\n * a type-safe CLI composer that can parse argv and generate help without execution coupling.\n */\nexport class Command<\n A extends Arguments = [],\n O extends Options = { help?: boolean; debug?: boolean },\n Subs extends SubCommands = SubCommands,\n> implements ICommand\n{\n /** parent command in the hierarchy, undefined for root command */\n parent?: Command<Arguments, Options & O>\n /** the command name used to invoke it */\n name: string\n /** semantic version string displayed by --version flag */\n version?: string\n /** alternative names for invoking this command */\n aliases: string[]\n /** brief one-line description shown in command lists */\n summary?: string\n /** full description displayed in help text */\n description: string\n /** whether to exclude from help listings */\n hidden?: boolean\n /** category for organizing related commands in help output */\n group?: string\n /** positional arguments this command accepts */\n arguments: Argument[]\n /** cLI options (flags) this command recognizes */\n options: Option[]\n /** subcommands registered with this command */\n commands: Subs\n /** main action handler executed when command is invoked */\n protected action?: ActionHandler<A, O, Subs>\n /** option-driven actions (e.g., --help, --version) executed when their conditions match */\n protected hooks: HookDefinition<Arguments, Options & O>[]\n\n constructor(name: string, parent?: ICommand) {\n this.name = name\n this.aliases = []\n this.description = ''\n this.arguments = []\n this.options = []\n this.commands = {} as Subs\n this.hooks = []\n\n // make parent non-enumerable to avoid circular references for toJSON compatibility\n Object.defineProperty(this, 'parent', { value: parent, enumerable: false })\n\n if (!parent) {\n this.addOption('-D, --debug', { description: 'Display debug information' }) //\n .addOptionHook('debug', ({ cmd, ...data }) => {\n console.debug(inspect(cmd, { depth: 1, colors: true }))\n console.debug(inspect(data, { depth: 3, colors: true }))\n })\n\n this.addOption('-h, --help', { description: 'Display help information' }) //\n .addOptionHook('help', ({ cmd }) => {\n console.log(cmd.renderHelp())\n process.exitCode = 0\n })\n }\n }\n\n @lazyProp\n protected get help(): Help {\n return new Help(this)\n }\n\n /** configure how the help is rendered */\n helpConfiguration(cb?: (help: Help) => void): this {\n const help = this.help\n cb?.(help)\n return this\n }\n\n /** renders formatted help text using provided help definition */\n renderHelp(config: { noColor?: boolean } = {}): string {\n const result = this.help.render()\n return config.noColor ? colors.stripColor(result) : result\n }\n\n /** sets the command name */\n setName(name: string): void {\n this.name = name\n }\n\n /** sets command aliases, flattening nested arrays */\n setAliases(...aliases: (string | string[])[]): this {\n this.aliases = []\n this.addAliases(...aliases)\n return this\n }\n\n /** adds aliases to existing ones */\n addAliases(...aliases: (string | string[])[]): this {\n const taken = this.parent\n ? valuesOf(this.parent.commands).flatMap((c) => {\n return [c.name, ...c.aliases]\n })\n : []\n arrRemoveDuplicates(aliases.flat())\n .filter((a) => {\n return !this.aliases.includes(a) && a !== this.name\n })\n .forEach((a) => {\n if (taken.includes(a)) {\n throw new Error(\n `Alias \"${a}\" is already used by a sibling command: ${findCommand(this.parent!, a)?.name}`,\n )\n }\n this.aliases.push(a)\n })\n this.aliases.sort((a, b) => {\n return a.length - b.length\n })\n return this\n }\n\n /** sets the command version */\n setVersion(version: string): InferAddOptionResult<A, O, { version?: boolean }, Subs> {\n this.version = version\n if (findOption(this, 'version')) {\n return this\n }\n return this.addOption('-V, --version', { description: 'Display semver version' }) //\n .addOptionHook('version', ({ cmd }) => {\n console.log(\n getCommandAndAncestors(cmd).find((c) => {\n return c.version\n })?.version,\n )\n process.exitCode = 0\n })\n }\n\n /** sets the command summary */\n setSummary(summary?: string): this {\n this.summary = summary\n return this\n }\n\n /** sets command description, joining variadic lines */\n setDescription(...lines: string[]): this {\n this.description = lines.join('\\n')\n return this\n }\n\n /** sets whether command is hidden from help */\n setHidden(hidden: boolean | undefined = true): this {\n this.hidden = hidden\n return this\n }\n\n /** sets the command group for help organization */\n setGroup(group?: string): this {\n this.group = group\n return this\n }\n\n /** add a subcommand and return the subcommand. All options are inherited by the subcommand. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n command<Name extends string, Sub extends Command<any, any, any> = Command<[], O, {}>>(\n name: Name,\n cb?: (cmd: Command<[], O, {}>, parent: this) => Sub,\n ): Sub {\n if (this.arguments.length) {\n throw new Error(\n `Cannot add subcommand \"${name}\" to \"${this.name}\" because it already has arguments defined.`,\n )\n }\n const sub = this.createSubcommand(name)\n const inherit = this.options\n sub.options.push(...inherit)\n\n const inheritHooks = this.hooks.filter((t) => {\n return inherit.some((i) => {\n return i.name === t.name\n })\n }) as any[]\n sub.hooks.push(...inheritHooks)\n\n const taken = valuesOf(this.commands).flatMap((c) => {\n return [c.name, ...c.aliases]\n })\n if (taken.includes(name)) {\n throw new Error(\n `Command name \"${getCommandAndAncestors(sub).map((c) => {\n return c.name\n })}\" is already used by this command or its aliases: ${taken.join(', ')}`,\n )\n }\n const kebab = kebabCase(name)\n const words = kebab.split('-')\n const initials = words\n .map((s) => {\n return s[0]\n })\n .join('')\n if (!taken.includes(initials)) {\n sub.addAliases(initials)\n } else {\n const initials = words\n .map((s) => {\n return s[0] + s[1]\n })\n .join('')\n if (!taken.includes(initials)) {\n sub.addAliases(initials)\n }\n }\n\n // asd\n\n this.commands[name] = sub as never\n\n return (cb ? cb(sub, this) : sub) as never\n }\n\n /** add a subcommand and return the subcommand. All options are inherited by the subcommand. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n addCommand<Name extends string, Sub extends Command<any, any, any> = Command<[], O, {}>>(\n name: Name,\n cb: (cmd: Command<[], O, {}>, parent: this) => Sub,\n ): Command<A, O, (SubCommands extends Subs ? {} : Subs) & { [K in Name]: Sub }> {\n this.command(name, cb)\n return this as never\n }\n\n /** add required variadic argument, eg.: `<name...>` */\n addArgument<const Opts extends RequiredVariadicArgumentOptions>(\n usage: AllowedArgumentUsage<this, `<${string}...>`>,\n options?: Opts,\n ): Command<[...A, InferAddedArgumentType<Opts>[]], O, Subs>\n\n /** add required argument, eg.: `<name>` */\n addArgument<const Opts extends RequiredArgumentOptions>(\n usage: AllowedArgumentUsage<this, `<${string}>`>,\n options?: Opts,\n ): Command<[...A, InferAddedArgumentType<Opts>], O, Subs>\n\n /** add optional variadic argument with defaults, eg.: `[name...]` */\n addArgument<const Opts extends OptionalVariadicArgumentOptions>(\n usage: AllowedArgumentUsage<this, `[${string}...]`>,\n options?: Opts,\n ): Command<[...A, InferAddedArgumentType<Opts>[]], O, Subs>\n\n /** add optional argument with default, eg.: `[name]` */\n addArgument<const Opts extends OptionalArgumentOptionsWithDefaultValue>(\n usage: AllowedArgumentUsage<this, `[${string}]`>,\n options: Opts,\n ): Command<[...A, InferAddedArgumentType<Opts>], O, Subs>\n\n /** add optional argument, eg.: `[name]` */\n addArgument<const Opts extends OptionalArgumentOptions>(\n usage: AllowedArgumentUsage<this, `[${string}]`>,\n options?: Opts,\n ): Command<[...A, InferAddedArgumentType<Opts> | undefined], O, Subs>\n\n // implementation\n addArgument(usage: ArgumentUsage, options: ArgumentOptions = {}) {\n if (!/^<(.*?)>$|^\\[(.*?)\\]$/.test(usage)) {\n throw new Error(`Invalid argument format: ${usage}`)\n }\n\n const name = usage.slice(1, -1).replace(/\\.\\.\\.$/, '')\n const required = usage.startsWith('<')\n const variadic = usage.slice(0, -1).endsWith('...')\n\n const prevArg = this.arguments[this.arguments.length - 1]\n\n if (prevArg?.variadic) {\n throw new Error(`Cannot add argument ${usage} after variadic argument ${prevArg.usage}`)\n }\n\n if (required && prevArg && !prevArg?.required) {\n throw new Error(`Cannot add required argument ${usage} after optional argument ${prevArg?.usage}`)\n }\n\n if (required && prevArg?.defaultValue) {\n throw new Error(\n `Cannot add required argument ${usage} after optional argument with default value ${prevArg.usage}`,\n )\n }\n\n const arg: Argument = {\n usage,\n name,\n required,\n variadic,\n ...options,\n }\n\n if (variadic && !arg.defaultValue) {\n arg.defaultValue = [] as string[]\n }\n\n this.arguments.push(arg)\n return this as never\n }\n\n /** add optional string option, eg.: `-o, --output [path]` */\n addOption<Long extends string>(\n flags: `-${string}, --${Long} [${string}]`,\n options?: SetFieldType<OptionalOptionOptions, 'defaultValue', undefined | never>,\n ): Command<A, Simplify<{ [K in CamelCase<Long>]?: string } & O>, Subs>\n /** add optional string option with default, eg.: `-o, --output [path]` */\n addOption<Long extends string>(\n flags: `-${string}, --${Long} [${string}]`,\n options: SetFieldType<SetRequired<OptionalOptionOptions, 'defaultValue'>, 'defaultValue', string>,\n ): Command<A, Simplify<{ [K in CamelCase<Long>]: string } & O>, Subs>\n /** add required variadic option, eg.: `-i, --include <patterns...>` */\n addOption<Long extends string>(\n flags: `-${string}, --${Long} <${string}...>`,\n options?: RequiredVariadicOptionOptions,\n ): Command<A, Simplify<{ [K in CamelCase<Long>]: string[] } & O>, Subs>\n /** add optional variadic option with defaults, eg.: `-e, --exclude [patterns...]` */\n addOption<Long extends string>(\n flags: `-${string}, --${Long} [${string}...]`,\n options?: OptionalVariadicOptionOptions,\n ): Command<A, Simplify<{ [K in CamelCase<Long>]: string[] } & O>, Subs>\n /** add required string option, eg.: `-f, --file <path>` */\n addOption<Long extends string>(\n flags: `-${string}, --${Long} <${string}>`,\n options?: RequiredOptionOptions,\n ): Command<A, Simplify<{ [K in CamelCase<Long>]: string } & O>, Subs>\n /** add boolean flag option with default, eg.: `-v, --verbose` */\n addOption<Long extends string>(\n flags: `-${string}, --${Long}`,\n options: SetFieldType<SetRequired<BooleanOptionOptions, 'defaultValue'>, 'defaultValue', boolean>,\n ): Command<A, Simplify<{ [K in CamelCase<Long>]: boolean } & O>, Subs>\n /** add boolean flag option, eg.: `-v, --verbose` */\n addOption<Long extends string>(\n flags: `-${string}, --${Long}`,\n options?: SetFieldType<BooleanOptionOptions, 'defaultValue', undefined | never>,\n ): Command<A, Simplify<{ [K in CamelCase<Long>]?: boolean } & O>, Subs>\n\n /**\n * adds command-line option with type inference. Parses format: `-s, --long [<value>|[value]|<value...>|[value...]]`\n */\n addOption<Long extends string>(flags: OptionUsage<Long>, opts: Partial<OptionOptions> = {}) {\n const ins = {} as Option\n\n const { short, long, name, argName } = parseOptionFlags<Long>(flags)\n\n for (const opt of this.options) {\n if (opt.long === long) {\n throw new Error(`Option long name, --${long} already in use by: ${opt.flags}`)\n }\n if (opt.short === short) {\n throw new Error(`Option short name, -${short} already in use by: ${opt.flags}`)\n }\n }\n\n ins.flags = flags\n ins.short = short\n ins.long = long\n ins.name = name\n ins.description = ''\n if (!argName) {\n ins.type = 'boolean'\n } else {\n ins.type = 'string'\n ins.argName = argName\n if (flags.endsWith('>')) {\n if (flags.endsWith('...>')) {\n ins.required = true\n ins.variadic = true\n } else {\n ins.required = true\n }\n } else if (flags.endsWith(']')) {\n if (flags.endsWith('...]')) {\n ins.variadic = true\n ins.defaultValue = (opts.defaultValue ?? []) as string[]\n }\n }\n }\n\n // assign options\n for (const [key, value] of Object.entries(opts)) {\n if (value !== undefined) {\n Reflect.set(ins, key, value)\n }\n }\n\n // if defined, set environment variable as defaultValue\n if (ins.env && ins.defaultValue === undefined && typeof process.env[ins.env] === 'string') {\n ins.required = false\n ins.flags = ins.flags.replace('<', '[').replace('>', ']')\n if (ins.type === 'boolean') {\n ins.defaultValue = /^(t(rue)?|y(es)?|1)$/i.test(process.env[ins.env]!)\n } else if (ins.variadic) {\n ins.defaultValue = process.env[ins.env]!.replace(/\\]|\\[/, '')\n .split(',')\n .map((v) => {\n return v.trim()\n })\n } else {\n ins.defaultValue = process.env[ins.env]!\n }\n }\n\n this.options.push(ins)\n return this as never\n }\n\n /**\n * register an action to be invoked when an option is set to true or string value.\n *\n * Hooks execute in addition to or instead of the main action handler,\n * allowing for option-driven behavior. For example, `--help` and `--version`\n * are implemented as hooks.\n */\n addOptionHook(optionName: keyof O, action: HookActionHandler<Arguments, O>): this {\n const def = findOption(this, optionName as string)!\n if (!def.group && /process\\.exitCode ?= ?.+;?\\s*\\}$/.test(action.toString())) {\n def.group = 'Command Options'\n }\n this.hooks.push({\n name: optionName,\n predicate: setName(`has${strFirstCharToUpperCase(optionName as string)}`, (({ opts }) => {\n return (\n opts[optionName] !== undefined &&\n opts[optionName] !== false &&\n !(Array.isArray(opts[optionName]) && opts[optionName].length === 0)\n )\n }) as HookPredicate<Arguments, Options & O>),\n action: setName(optionName as string, action),\n } as never)\n return this\n }\n\n /** parses command-line arguments with subcommand support and type-safe validation. */\n parseArgv(argv: string[] = process.argv.slice(2)): ParseArgvResult<Arguments, Options & O> {\n const sub = findCommand(this, argv[0])\n if (sub) {\n return sub.parseArgv(argv.slice(1)) as unknown as ParseArgvResult<Arguments, Options & O>\n }\n\n argv = normalizeArgv(argv, this.options)\n\n const parsed = parseArgs({\n args: argv,\n options: Object.fromEntries(\n this.options.map((o) => {\n return [o.name, { type: o.type, short: o.short, default: o.defaultValue, multiple: !!o.variadic }]\n }),\n ),\n allowPositionals: true,\n tokens: true,\n strict: false,\n allowNegative: true,\n })\n\n collectVariadicOptionValues(parsed, this.options)\n mergeOptionDefaults(parsed.values as Record<string, unknown>, this.options)\n\n parsed.values = objSortKeys(parsed.values, (a, b) => {\n return a[1] === false ? 1 : b[1] === false ? -1 : a[1] === true ? 1 : b[1] === true ? -1 : 0\n })\n\n const args = resolveArguments(parsed.positionals, this.arguments)\n const opts = filterObject(parsed.values, (value) => {\n return value !== undefined\n })\n const errors = validateParsed(args, parsed.values, this.arguments, this.options)\n const path = getCommandAncestors(this).map((c) => {\n return c.name\n })\n\n const data = {\n path,\n name: this.name,\n argv,\n args: args as Arguments,\n opts: opts as Options & O,\n errors,\n cmd: this as Command<Arguments, Options & O>,\n }\n\n const hooks = this.hooks.filter((t) => {\n return t.predicate(data)\n })\n\n const execute = async () => {\n for (const hook of hooks) {\n await hook.action(data)\n if (process.exitCode !== undefined) {\n return\n }\n }\n await timer([[...path, this.name].join(' '), this.description], async (logger) => {\n if (errors) {\n errors.forEach((msg) => {\n return logger.error(colors.red(msg))\n })\n process.exitCode = 1\n return\n }\n if (this.action) {\n return await this.action(...(args as A), opts as O, {\n ...data,\n args: args as A,\n opts: opts as O,\n cmd: this,\n logger,\n })\n }\n console.log(this.renderHelp())\n })\n }\n\n return { ...data, hooks, execute } as unknown as ParseArgvResult<Arguments, Options & O>\n }\n\n /**\n * sets the main action handler for this command, which is executed after any matching option hooks when the command is invoked.\n * The handler receives parsed arguments and options with correct typings.\n */\n setAction(fn: ActionHandler<A, O, Subs>): this {\n this.action = setName(this.name, fn as never)\n return this\n }\n\n /** returns a new Command instance. Override this method in subclasses. */\n protected createSubcommand(name: string): Command<[], O, {}> {\n return new Command<[], O, {}>(name, this)\n }\n}\n", "import type { Argument } from './types'\nimport C from 'ansi-colors'\nimport type { ICommand } from './types'\nimport type { IHelp } from './types'\nimport type { Option } from './types'\nimport { lazyProp } from '@mono/decorators'\n\n/**\n * This is a fork of the Help class from the 'commander' npm package. The Help class method names as well as the\n * expected interface of the Command instance to parse, are both similar, but different and not compatible without\n * custom adaptations, @see ICommand\n */\nexport class Help implements IHelp {\n protected readonly cmd: ICommand\n /** output helpWidth, long lines are wrapped to fit */\n helpWidth: number = process.stdout.isTTY ? process.stdout.columns : 80\n minWidthToWrap: number = 40\n sortSubcommands: boolean = true\n sortOptions: boolean = true\n usageDisplayOptionsAs: string = '[opts]'\n usageDisplaySubcommandAs: string = '[cmd]'\n\n constructor(cmd: ICommand) {\n this.cmd = cmd\n Object.defineProperty(this, 'cmd', { enumerable: false })\n }\n\n /**\n * Get an array of the visible subcommands. Includes a placeholder for the implicit help command, if there is one.\n */\n @lazyProp\n visibleCommands(): ICommand[] {\n const res = Object.values(this.cmd.commands).filter((c) => {\n return !c.hidden\n })\n if (this.sortSubcommands) {\n res.sort((a: ICommand, b: ICommand) => {\n return a.name.localeCompare(b.name)\n })\n }\n return res\n }\n\n /**\n * Compare options for sort.\n */\n compareOptions(a: Option, b: Option): number {\n const getSortKey = (option: Option): string => {\n // WYSIWYG for order displayed in help. Short used for comparison if present. No special handling for negated.\n return option.short ? option.short.replace(/^-/, '') : option.long!.replace(/^--/, '')\n }\n return getSortKey(a).localeCompare(getSortKey(b))\n }\n\n /**\n * Get an array of the visible options. Includes a placeholder for the implicit help option, if there is one.\n */\n @lazyProp\n visibleOptions(): Option[] {\n const res = this.cmd.options.filter((option: Option) => {\n return !option.hidden\n })\n if (this.sortOptions) {\n res.sort(this.compareOptions)\n }\n return res\n }\n\n /**\n * Get an array of the arguments if any have a description.\n */\n @lazyProp\n visibleArguments(): Argument[] {\n // If there are any arguments with a description then return all the arguments.\n if (\n this.cmd.arguments.find((argument: Argument) => {\n return !!argument.description\n })\n ) {\n return [...this.cmd.arguments]\n }\n return []\n }\n\n /**\n * Get the command term to show in the list of subcommands.\n */\n subcommandTerm(sub: ICommand): string {\n const args = sub.arguments\n .map((arg) => {\n return arg.usage\n })\n .join(' ')\n return (\n (sub.aliases[0] ? `${sub.aliases[0].padEnd(this.longestSubcommandAliasLength(), ' ')} | ` : '') +\n sub.name +\n (sub.options.length ? ` ${this.usageDisplayOptionsAs}` : '') + // simplistic check for non-help option\n (args ? ` ${args}` : '')\n )\n }\n\n /**\n * Get the option term to show in the list of options.\n */\n optionTerm(option: Option): string {\n return option.flags\n }\n\n /**\n * Get the argument term to show in the list of arguments.\n */\n argumentTerm(argument: Argument): string {\n return argument.name\n }\n\n /**\n * Get the longest subcommand primary alias length.\n */\n @lazyProp\n longestSubcommandAliasLength(): number {\n return Math.max(\n 0,\n ...this.visibleCommands().map((c) => {\n return c.aliases[0]?.length || 0\n }),\n )\n }\n\n /**\n * Get the longest subcommand term length.\n */\n @lazyProp\n longestSubcommandTermLength(): number {\n return this.visibleCommands().reduce((max: number, command) => {\n return Math.max(max, this.displayWidth(this.styleSubcommandTerm(this.subcommandTerm(command))))\n }, 0)\n }\n\n /**\n * Get the longest option term length.\n */\n @lazyProp\n longestOptionTermLength(): number {\n return this.visibleOptions().reduce((max: number, option) => {\n return Math.max(max, this.displayWidth(this.styleOptionTerm(this.optionTerm(option))))\n }, 0)\n }\n\n /**\n * Get the longest argument term length.\n */\n @lazyProp\n longestArgumentTermLength(): number {\n return this.visibleArguments().reduce((max: number, argument) => {\n return Math.max(max, this.displayWidth(this.styleArgumentTerm(this.argumentTerm(argument))))\n }, 0)\n }\n\n /**\n * Get the command usage to be displayed at the top of the built-in help.\n */\n commandUsage(): string {\n // Usage\n let path = ''\n for (let ancestor = this.cmd.parent; ancestor; ancestor = ancestor.parent) {\n path = `${ancestor.name} ${path}`\n }\n\n return `${path + this.cmd.name} ${[\n ...(Object.keys(this.cmd.commands).length ? [this.usageDisplaySubcommandAs] : []),\n ...(this.cmd.options.length ? [this.usageDisplayOptionsAs] : []),\n ...this.cmd.arguments.map((arg) => {\n return arg.required\n ? arg.variadic\n ? `<${arg.name}...>`\n : `<${arg.name}>`\n : arg.variadic\n ? `[${arg.name}...]`\n : `[${arg.name}]`\n }),\n ].join(' ')}`.trim()\n }\n\n /**\n * Get the description for the command.\n */\n commandDescription(): string {\n let res = ''\n if (this.cmd.aliases.length) {\n res += `Aliases: ${this.cmd.aliases.join(', ')}`\n res += '\\n\\n'\n }\n res += this.cmd.description\n return res\n }\n\n /**\n * Get the subcommand summary to show in the list of subcommands.\n * (Fallback to description for backwards compatibility.)\n */\n subcommandDescription(sub: ICommand): string {\n return (\n sub.summary ||\n (sub.description?.includes('\\n') ? sub.description.trim().split('\\n')[0] : sub.description.trim())\n )\n }\n\n /**\n * Get the option description to show in the list of options.\n */\n optionDescription(option: Option): string {\n const extraInfo: string[] = []\n\n if (option.choices) {\n extraInfo.push(\n // use stringify to match the display of the default value\n `choices: ${option.choices\n .map((choice: string) => {\n return String(choice)\n })\n .join(', ')}`,\n )\n }\n if (option.defaultValue && !(Array.isArray(option.defaultValue) && option.defaultValue.length === 0)) {\n extraInfo.push(`default: ${option.defaultValueDescription || String(option.defaultValue)}`)\n }\n\n if (option.env !== undefined) {\n extraInfo.push(`env: ${option.env}`)\n }\n if (extraInfo.length > 0) {\n const extraDescription = `(${extraInfo.join(', ')})`\n if (option.description) {\n return `${option.description} ${extraDescription}`\n }\n return extraDescription\n }\n\n return option.description ?? ''\n }\n\n /**\n * Get the argument description to show in the list of arguments.\n */\n argumentDescription(argument: Argument): string {\n const extraInfo: string[] = []\n if (argument.choices) {\n extraInfo.push(\n // use stringify to match the display of the default value\n `choices: ${argument.choices\n .map((choice: string) => {\n return String(choice)\n })\n .join(', ')}`,\n )\n }\n if (argument.defaultValue !== undefined) {\n extraInfo.push(`default: ${argument.defaultValueDescription || String(argument.defaultValue)}`)\n }\n if (extraInfo.length > 0) {\n const extraDescription = `(${extraInfo.join(', ')})`\n if (argument.description) {\n return `${argument.description} ${extraDescription}`\n }\n return extraDescription\n }\n return argument.description ?? ''\n }\n\n /**\n * Format a list of items, given a heading and an array of formatted items.\n */\n formatItemList(heading: string, items: string[]): string[] {\n if (items.length === 0) {\n return []\n }\n return [this.styleTitle(heading), ...items, '']\n }\n\n /**\n * Group items by their help group heading.\n */\n groupItems<T extends ICommand | Option>(\n unsortedItems: T[],\n visibleItems: T[],\n getGroup: (item: T) => string,\n ): Map<string, T[]> {\n const result = new Map<string, T[]>()\n // Add groups in order of appearance in unsortedItems.\n unsortedItems.forEach((item: T) => {\n const group = getGroup(item)\n if (!result.has(group)) {\n result.set(group, [])\n }\n })\n // Add items in order of appearance in visibleItems.\n visibleItems.forEach((item: T) => {\n const group = getGroup(item)\n if (!result.has(group)) {\n result.set(group, [])\n }\n result.get(group)!.push(item)\n })\n return result\n }\n\n /**\n * Return display width of string, ignoring ANSI escape sequences. Used in padding and wrapping calculations.\n */\n displayWidth(str: string): number {\n // eslint-disable-next-line no-control-regex\n const sgrPattern = /\\x1b\\[\\d*(;\\d*)*m/g\n return str.replace(sgrPattern, '').length\n }\n\n /**\n * Style the title for displaying in the help. Called with 'Usage:', 'Options:', etc.\n */\n styleTitle(str: string): string {\n return C.yellow(str)\n }\n\n /**\n * Style the usage line for displaying in the help. Applies specific styling to different parts like options, commands, and arguments.\n */\n styleUsage(str: string): string {\n // Usage has lots of parts the user might like to color separately! Assume default usage string which is formed like:\n // command subcommand [opts] [cmd] <foo> [bar]\n return str\n .split(' ')\n .map((word: string, index, arr) => {\n if (word === this.usageDisplaySubcommandAs) {\n return C.green(word)\n }\n if (word === this.usageDisplayOptionsAs) {\n return C.blue(word)\n }\n if (word[0] === '<') {\n return C.red(word)\n }\n if (word[0] === '[') {\n return C.cyan(word)\n }\n if (arr[index + 1]?.startsWith('[')) {\n return C.magenta(word)\n }\n return this.styleCommandText(word) // Restrict to initial words?\n })\n .join(' ')\n }\n\n /**\n * Style command descriptions for display in help output.\n */\n styleCommandDescription(str: string): string {\n return this.styleDescriptionText(str)\n }\n\n /**\n * Style option descriptions for display in help output.\n */\n styleOptionDescription(str: string): string {\n return C.gray(this.styleDescriptionText(str))\n }\n\n /**\n * Style subcommand descriptions for display in help output.\n */\n styleSubcommandDescription(str: string): string {\n return this.styleDescriptionText(str)\n }\n\n /**\n * Style argument descriptions for display in help output.\n */\n styleArgumentDescription(str: string): string {\n return C.gray(this.styleDescriptionText(str))\n }\n\n /**\n * Base style used by descriptions. Override in subclass to apply custom formatting.\n */\n styleDescriptionText(str: string): string {\n return C.gray(str)\n }\n\n /**\n * Style option terms (flags) for display in help output.\n */\n styleOptionTerm(str: string): string {\n return this.styleOptionText(str)\n }\n\n /**\n * Style subcommand terms for display in help output. Applies specific styling to different parts like options and arguments.\n */\n styleSubcommandTerm(str: string): string {\n // This is very like usage with lots of parts! Assume default string which is formed like:\n // subcommand [opts] <foo> [bar]\n const res = str\n .split(' ')\n .map((word: string) => {\n if (word === this.usageDisplayOptionsAs) {\n return C.dim(word)\n }\n if (word[0] === '[' || word[0] === '<') {\n return C.dim(word)\n }\n return this.styleSubcommandText(word) // Restrict to initial words?\n })\n .join(' ')\n const split = res.split('|')\n if (split.length === 1) {\n return res\n }\n split[0] = C.green(split[0])\n return split.join('|')\n }\n\n /**\n * Style argument terms for display in help output.\n */\n styleArgumentTerm(str: string): string {\n return this.styleArgumentText(str)\n }\n\n /**\n * Base style used in terms and usage for options. Override in subclass to apply custom formatting.\n */\n styleOptionText(str: string): string {\n return str\n }\n\n /**\n * Base style used in terms and usage for arguments. Override in subclass to apply custom formatting.\n */\n styleArgumentText(str: string): string {\n return str\n }\n\n /**\n * Base style used in terms and usage for subcommands. Override in subclass to apply custom formatting.\n */\n styleSubcommandText(str: string): string {\n return str\n }\n\n /**\n * Base style used in terms and usage for commands. Override in subclass to apply custom formatting.\n */\n styleCommandText(str: string): string {\n return str\n }\n\n /**\n * Calculate the pad width from the maximum term length.\n */\n @lazyProp\n padWidth(): number {\n return Math.max(\n this.longestOptionTermLength(),\n this.longestSubcommandTermLength(),\n this.longestArgumentTermLength(),\n )\n }\n\n /**\n * Detect manually wrapped and indented strings by checking for line break followed by whitespace.\n */\n preformatted(str: string): boolean {\n return /\\n[^\\S\\r\\n]/.test(str)\n }\n\n /**\n * Format the \"item\", which consists of a term and description. Pad the term and wrap the description, indenting the following lines.\n *\n * So \"TTT\", 5, \"DDD DDDD DD DDD\" might be formatted for this.helpWidth=17 like so:\n * TTT DDD DDDD\n * DD DDD\n */\n formatItem(term: string, termWidth: number, description: string): string {\n const itemIndent = 2\n const itemIndentStr = ' '.repeat(itemIndent)\n if (!description) {\n return itemIndentStr + term\n }\n\n // Pad the term out to a consistent width, so descriptions are aligned.\n const paddedTerm = term.padEnd(termWidth + term.length - this.displayWidth(term))\n\n // Format the description.\n const spacerWidth = 2 // between term and description\n const helpWidth = this.helpWidth\n const remainingWidth = helpWidth - termWidth - spacerWidth - itemIndent\n let formattedDescription: string\n if (remainingWidth < this.minWidthToWrap || this.preformatted(description)) {\n formattedDescription = description\n } else {\n const wrappedDescription = this.boxWrap(description, remainingWidth)\n formattedDescription = wrappedDescription.replace(/\\n/g, `\\n${' '.repeat(termWidth + spacerWidth)}`)\n }\n\n // Construct and overall indent.\n return (\n itemIndentStr +\n paddedTerm +\n ' '.repeat(spacerWidth) +\n formattedDescription.replace(/\\n/g, `\\n${itemIndentStr}`)\n )\n }\n\n /**\n * Wrap a string at whitespace, preserving existing line breaks.\n * Wrapping is skipped if the width is less than `minWidthToWrap`.\n */\n boxWrap(str: string, width: number): string {\n if (width < this.minWidthToWrap) {\n return str\n }\n\n const rawLines = str.split(/\\r\\n|\\n/)\n // split up text by whitespace\n const chunkPattern = /[\\s]*[^\\s]+/g\n const wrappedLines: string[] = []\n rawLines.forEach((line: string) => {\n const chunks = line.match(chunkPattern)\n if (chunks === null) {\n wrappedLines.push('')\n return\n }\n\n let sumChunks = [chunks.shift()!]\n let sumWidth = this.displayWidth(sumChunks[0])\n chunks.forEach((chunk: string) => {\n const visibleWidth = this.displayWidth(chunk)\n // Accumulate chunks while they fit into width.\n if (sumWidth + visibleWidth <= width) {\n sumChunks.push(chunk)\n sumWidth += visibleWidth\n return\n }\n wrappedLines.push(sumChunks.join(''))\n\n const nextChunk = chunk.trimStart() // trim space at line break\n sumChunks = [nextChunk]\n sumWidth = this.displayWidth(nextChunk)\n })\n wrappedLines.push(sumChunks.join(''))\n })\n\n return wrappedLines.join('\\n')\n }\n\n /**\n * Generate the built-in help text.\n */\n render(): string {\n // Usage\n let output = [`${this.styleTitle('Usage:')} ${this.styleUsage(this.commandUsage())}`, '']\n\n // Description\n const des = this.commandDescription()\n if (des.length > 0) {\n output = output.concat([this.boxWrap(this.styleCommandDescription(des), this.helpWidth), ''])\n }\n\n // Arguments\n const argumentList = this.visibleArguments().map((argument: Argument) => {\n return this.formatItem(\n this.styleArgumentTerm(this.argumentTerm(argument)),\n this.padWidth(),\n this.styleArgumentDescription(this.argumentDescription(argument)),\n )\n })\n output = output.concat(this.formatItemList('Arguments:', argumentList))\n\n // Options\n const optionGroups = this.groupItems(this.cmd.options, this.visibleOptions(), (option: Option) => {\n return option.group ?? 'Options:'\n })\n optionGroups.forEach((options, group) => {\n const optionList = options.map((option: Option) => {\n return this.formatItem(\n this.styleOptionTerm(this.optionTerm(option)),\n this.padWidth(),\n this.styleOptionDescription(this.optionDescription(option)),\n )\n })\n output = output.concat(this.formatItemList(group, optionList))\n })\n\n // Commands\n const commandGroups = this.groupItems(\n Object.values(this.cmd.commands),\n this.visibleCommands(),\n\n (sub: ICommand) => {\n return sub.group || 'Commands:'\n },\n )\n commandGroups.forEach((commands, group) => {\n const commandList = commands.map((sub: ICommand) => {\n return this.formatItem(\n this.styleSubcommandTerm(this.subcommandTerm(sub)),\n this.padWidth(),\n this.styleSubcommandDescription(this.subcommandDescription(sub)),\n )\n })\n output = output.concat(this.formatItemList(group, commandList))\n })\n\n return output.join('\\n')\n }\n}\n", "/**\n * Asserts that a property descriptor contains a function value.\n */\nexport default function assertDescriptorValueIsFunction(key: string, descriptor: PropertyDescriptor) {\n if (!(typeof descriptor.value === 'function' && descriptor.value !== Function.prototype)) {\n throw new TypeError(`\"value\" not a function for ${key} with descriptor: ${JSON.stringify(descriptor)}.`)\n }\n}\n", "import { StringKeyOf } from '@mono/types'\n\n/**\n * Same as Object.entries except the keys are typed as keyof T.\n */\nexport function entriesOf<T extends object>(obj: T): [StringKeyOf<T>, T[StringKeyOf<T>]][] {\n return Object.entries(obj) as [StringKeyOf<T>, T[StringKeyOf<T>]][]\n}\n", "import { StringKeyOf } from '@mono/types'\n\n/**\n * Same as Object.keys except the keys are typed as string keys of T.\n */\nexport function keysOf<T extends object>(obj: T) {\n return Object.keys(obj) as StringKeyOf<T>[]\n}\n", "import { StringKeyOf } from '@mono/types'\nimport { ValueOf } from '@mono/types'\nimport { keysOf } from './keysOf'\n\n/**\n * Filter an object's own enumerable properties by predicate.\n */\nexport function filterObject<T extends object>(\n obj: T,\n predicate: (value: ValueOf<T>, key: StringKeyOf<T>, obj: T) => boolean,\n) {\n const accum = {} as T\n for (const key of keysOf(obj)) {\n if (predicate(obj[key], key, obj)) {\n accum[key] = obj[key]\n }\n }\n return accum\n}\n", "import { ValueOf } from '@mono/types'\n\n/**\n * Sorts the keys of an object in alphabetical order unless a custom compare function is provided.\n */\nexport function objSortKeys<T extends object>(\n o: T,\n compare?: (a: [string, ValueOf<T>], b: [string, ValueOf<T>]) => number,\n): T {\n const entries = Object.entries(o)\n if (compare) {\n entries.sort(compare)\n } else {\n entries.sort((a, b) => {\n return a[0].localeCompare(b[0])\n })\n }\n return Object.fromEntries(entries) as T\n}\n", "import { StringKeyOf } from '@mono/types'\n\n/**\n * Get the values of an object with type-safe return value.\n */\nexport function valuesOf<T extends object>(obj: T): T[StringKeyOf<T>][] {\n return Object.values(obj) as T[StringKeyOf<T>][]\n}\n", "import { GenericMap } from './types'\n\n/**\n * Gets a value from a map or creates it using a factory function if it doesn't exist.\n */\nexport function mapGetOrDefault<K, V, T extends GenericMap<K, V, 'get' | 'has' | 'set'>>(\n map: T,\n key: K,\n factory: (key: K, map: T) => V,\n): V {\n let value = map.get(key)\n if (value !== undefined || map.has(key)) {\n return value as V\n }\n value = factory(key, map)\n map.set(key, value)\n return value\n}\n", "/**\n * A WeakMap with automatic timeout-based expiry for entries.\n *\n * Entries are automatically removed after a specified timeout period.\n * Accessing an entry refreshes its timeout, extending its lifetime.\n * This is useful for caching scenarios where you want automatic cleanup\n * of unused entries while keeping frequently accessed ones alive.\n */\nexport class TimeoutWeakMap<K extends object, V> {\n protected readonly wmap = new WeakMap<K, [V, NodeJS.Timeout]>()\n\n /**\n * @param timeoutMs Default timeout in milliseconds for entries\n */\n constructor(readonly timeoutMs: number) {}\n\n /**\n * Retrieves the value for the given key and refreshes its timeout.\n *\n * @param key The key to retrieve\n * @returns The value if found, undefined otherwise\n */\n get(key: K): V | undefined {\n const vt: [V, NodeJS.Timeout] | undefined = this.wmap.get(key)\n if (!vt) {\n return undefined\n }\n const [value, timeout] = vt\n timeout.refresh()\n return value\n }\n\n /**\n * Sets a key-value pair with an optional custom timeout.\n *\n * @param key The key to set\n * @param value The value to associate with the key\n * @param timeoutMs Optional timeout override for this entry\n * @returns This instance for chaining\n */\n set(key: K, value: V, timeoutMs?: number): this {\n this.wmap.set(key, [\n value,\n setTimeout(() => {\n this.delete(key)\n }, timeoutMs ?? this.timeoutMs).unref(),\n ])\n return this\n }\n\n /**\n * Removes a key-value pair and clears its timeout.\n *\n * @param key The key to delete\n * @returns True if the key existed and was deleted, false otherwise\n */\n delete(key: K): boolean {\n const vt: [V, NodeJS.Timeout] | undefined = this.wmap.get(key)\n if (!vt) {\n return false\n }\n const timeout = vt[1]\n clearTimeout(timeout)\n return this.wmap.delete(key)\n }\n\n /**\n * Checks if a key exists in the map.\n * Does not refresh the timeout.\n *\n * @param key The key to check\n * @returns True if the key exists, false otherwise\n */\n has(key: K): boolean {\n return this.wmap.has(key)\n }\n\n /**\n * Loads multiple key-value pairs into the map.\n *\n * @param entries Iterable of key-value pairs to load\n * @param timeoutMs Optional timeout override for all entries\n * @returns This instance for chaining\n */\n load(entries: Iterable<[K, V]>, timeoutMs?: number): this {\n for (const [key, value] of entries) {\n this.set(key, value, timeoutMs)\n }\n return this\n }\n\n /**\n * Updates an existing value or creates a new one using an update function.\n *\n * @param key The key to update\n * @param update Function that receives the current value and returns the new value\n * @returns This instance for chaining\n */\n update(key: K, update: (value: V | undefined, key: K, map: this) => V): this {\n return this.set(key, update(this.get(key), key, this))\n }\n\n /**\n * Gets a value or creates it using a factory function if it doesn't exist.\n * Refreshes timeout if the value exists.\n *\n * @param key The key to get or create\n * @param factory Function to create the value if it doesn't exist\n * @param timeoutMs Optional timeout override for new entries\n * @returns The existing or newly created value\n */\n getOrDefault(key: K, factory: (key: K, map: this) => V, timeoutMs?: number): V {\n const vt: [V, NodeJS.Timeout] | undefined = this.wmap.get(key)\n if (vt) {\n const [value, timeout] = vt\n timeout.refresh()\n return value\n } else {\n const value = factory(key, this)\n this.set(key, value, timeoutMs)\n return value\n }\n }\n}\n", "import { GenericMap } from '@mono/map'\nimport { TimeoutWeakMap } from '@mono/map'\nimport { isFunction } from 'es-toolkit/predicate'\nimport { mapGetOrDefault } from '@mono/map'\nimport { memoizeSync } from './memoizeSync'\nimport { ms } from 'enhanced-ms'\n\n/**\n * Decorator to memoize a method or getter accessor property.\n */\nexport function lazyProp(target: object, key: string, descriptor: PropertyDescriptor): PropertyDescriptor\n\n/**\n * Decorator to temporarily memoize a method or getter accessor property.\n * @param maxAge The maximum age of the memoized value as number (ms) or descriptive string (e.g. '10 min'). Uses 'ms' library: https://github.com/zeit/ms\n */\nexport function lazyProp(\n maxAge: number | string,\n): (target: object, key: string, descriptor: PropertyDescriptor) => PropertyDescriptor\n\n//\nexport function lazyProp(\n targetOrTimeout: object | number | string,\n key?: string,\n descriptor?: PropertyDescriptor,\n) {\n if (typeof targetOrTimeout === 'number' || typeof targetOrTimeout === 'string') {\n const maxAge = typeof targetOrTimeout === 'number' ? targetOrTimeout : ms(targetOrTimeout)\n return createLazyPropDecorator(new TimeoutWeakMap(maxAge))\n } else {\n const decorator = createLazyPropDecorator(new WeakMap())\n return decorator(targetOrTimeout, key!, descriptor!)\n }\n}\n\nfunction createLazyPropDecorator<K extends object, V>(map: GenericMap<K, V, 'get' | 'set' | 'has'>) {\n return function (target: object, key: string, descriptor: PropertyDescriptor) {\n const { get, value } = descriptor\n\n if (isFunction(get)) {\n descriptor.get = function () {\n return mapGetOrDefault(map, this as K, () => {\n return get.call(this)\n })\n }\n return descriptor\n }\n\n if (isFunction(value)) {\n return memoizeSync()(target, key, descriptor)\n }\n\n throw new TypeError('neither \"get\" nor \"value\" are functions')\n }\n}\n", "import { MemoizeSyncOptions } from './types.internal'\nimport { SomeSyncFunction } from './types.internal'\nimport assertDescriptorValueIsFunction from './assertDescriptorValueIsFunction'\nimport { mapGetOrDefault } from '@mono/map'\nimport memoizee from 'memoizee'\nimport { ms } from 'enhanced-ms'\n\n/**\n * Decorator to memoize a sync method.\n * @param maxAge The maximum age of the memoized value as number (ms) or descriptive string (e.g. '10 min'). Uses 'ms' library: https://github.com/zeit/ms\n */\nexport function memoizeSync(\n maxAge?: number | string,\n): (target: object, key: string, descriptor: PropertyDescriptor) => PropertyDescriptor\n\n/**\n * Decorator to memoize a sync method.\n * @param options The options for memoization.\n */\nexport function memoizeSync(\n options: MemoizeSyncOptions,\n): (target: object, key: string, descriptor: PropertyDescriptor) => PropertyDescriptor\n\n//\nexport function memoizeSync(arg: (number | string) | MemoizeSyncOptions = {}) {\n const opts = typeof arg === 'object' ? arg : { maxAge: typeof arg === 'number' ? arg : ms(arg) }\n\n return function decorator(target: unknown, key: string, descriptor?: PropertyDescriptor) {\n if (!descriptor) {\n throw new TypeError('descriptor is undefined')\n }\n const orig = descriptor.value\n assertDescriptorValueIsFunction(key, descriptor)\n const options = { length: false, ...opts } as memoizee.Options<SomeSyncFunction>\n\n if (opts.instancesShareCache) {\n Reflect.deleteProperty(options, 'instancesShareCache')\n descriptor.value = memoizee(orig, options)\n } else {\n const wmap = new WeakMap()\n descriptor.value = function (...args: any[]) {\n const memoized = mapGetOrDefault(wmap, this, () => {\n return memoizee(orig, options)\n })\n return memoized.apply(this, args)\n }\n }\n\n return descriptor\n }\n}\n", "/**\n * Returns the last element of an array.\n * Throws an error if the array is empty.\n * @template T The type of elements in the array.\n * @param array The array to get the last element from.\n * @returns The last element of the array.\n * @throws If the array is empty.\n * @example const numbers = [1, 2, 3, 4, 5];\n * const lastNumber = arrLast(numbers);\n * //=> 5\n */\nexport function arrLast<T>(array: T[]): T {\n if (!array.length) {\n throw new Error('Cannot get last element of empty array.')\n }\n return array[array.length - 1]\n}\n", "/**\n * Remove duplicates from an array\n * @remarks This function uses the JavaScript Set object to remove duplicate values from an array.\n * @typeparam T - The type of elements in the array.\n * @returns The new array with duplicates removed.\n * @param array The array from which to remove duplicates.\n * @example ```ts\n * const array = [1, 2, 2, 3, 4, 4, 5];\n * arrRemoveDuplicates(array);\n * //=> [1, 2, 3, 4, 5]\n * ```\n */\nexport function arrRemoveDuplicates<T>(array: T[]): T[] {\n return Array.from(new Set(array))\n}\n", "import type { Option } from '../types'\n\n/** Collect consecutive positional tokens into variadic string option values */\nexport function collectVariadicOptionValues(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n parsed: { tokens: any[]; values: any; positionals: string[] },\n options: Option[],\n): void {\n for (let i = 0; i < parsed.tokens.length; i++) {\n const token = parsed.tokens[i]\n if (token.kind !== 'option') {\n continue\n }\n\n const def = options.find((o) => {\n return o.name === token.name\n })\n if (!def?.variadic || def.type !== 'string') {\n continue\n }\n\n const values = [token.value]\n let j = i + 1\n while (j < parsed.tokens.length && parsed.tokens[j].kind === 'positional') {\n const positionalToken = parsed.tokens[j]\n values.push(positionalToken.value)\n const posIndex = parsed.positionals.indexOf(positionalToken.value)\n if (posIndex !== -1) {\n parsed.positionals.splice(posIndex, 1)\n }\n j++\n }\n\n Reflect.set(\n parsed.values,\n token.name,\n values.filter((v): v is string => {\n return v !== undefined\n }),\n )\n }\n}\n", "import type { Command } from '../Command'\nimport type { ICommand } from '../types'\nimport { valuesOf } from '@mono/object'\n\n/**\n * Finds subcommand by name or alias\n */\nexport function findCommand<C extends Command = Command>(cmd: ICommand, nameOrAlias: string): C | undefined {\n return (cmd.commands[nameOrAlias] ??\n valuesOf(cmd.commands).find((c) => {\n return c.aliases.includes(nameOrAlias)\n })) as C | undefined\n}\n", "import type { ICommand } from '../types'\nimport type { Option } from '../types'\n\n/**\n * Finds option by name, short name or long name\n */\nexport function findOption<C extends ICommand>(cmd: C, nameOrShortOrLong: string): Option | undefined {\n return nameOrShortOrLong.startsWith('--')\n ? cmd.options.find((o) => {\n return o.long === nameOrShortOrLong.slice(2)\n })\n : nameOrShortOrLong.startsWith('-')\n ? cmd.options.find((o) => {\n return o.short === nameOrShortOrLong.slice(1)\n })\n : cmd.options.find((o) => {\n return o.name === nameOrShortOrLong\n })\n}\n", "import type { ICommand } from '../types'\nimport { getCommandAndAncestors } from './getCommandAndAncestors'\n\n/**\n * Returns all ancestor commands excluding this command\n */\nexport function getCommandAncestors<C extends ICommand>(cmd: C) {\n return getCommandAndAncestors(cmd).slice(1) as C[]\n}\n", "import type { ICommand } from '../types'\n\n/**\n * Returns command and all ancestor commands in hierarchy\n */\nexport function getCommandAndAncestors<C extends ICommand>(cmd: C) {\n const result = []\n let command: ICommand | undefined = cmd as unknown as ICommand\n for (; command; command = command.parent) {\n result.push(command)\n }\n return result as [typeof cmd, ...ICommand[]]\n}\n", "import type { Option } from '../types'\n\n/** Merge default option values into parsed values where not already set */\nexport function mergeOptionDefaults(values: Record<string, unknown>, options: Option[]): void {\n for (const option of options) {\n if (option.defaultValue !== undefined && option.name in values) {\n values[option.name] ??= option.defaultValue\n }\n }\n}\n", "import type { Option } from '../types'\n\n/** Map long option names (kebab-case) to their camelCased equivalents in argv */\nexport function normalizeArgv(argv: string[], options: Option[]): string[] {\n for (const o of options) {\n if (o.long === o.name) {\n continue\n }\n argv = argv.map((a) => {\n if (a === `--${o.long}`) {\n return `--${o.name}`\n }\n if (a === `--no-${o.long}`) {\n return `--no-${o.name}`\n }\n return a\n })\n }\n return argv\n}\n", "import type { CamelCase } from 'type-fest'\nimport type { OptionUsage } from '../types'\n\n/**\n * Parses option flags string into its components\n */\nexport function parseOptionFlags<Long extends string>(\n flags: OptionUsage<Long>,\n): {\n short: string\n long: Long\n name: CamelCase<Long>\n argName: string | undefined\n} {\n const match = flags.match(/^-(.+?), --([a-zA-Z][\\w-]*)(?:\\s*(<(.+?)>|\\[(.+?)\\]))?$/)\n if (!match) {\n throw new Error(`Invalid option format: ${flags}`)\n }\n\n const short = match[1]\n if (short.length !== 1) {\n throw new Error(`Expected short name to be a single character. Got: -${short}`)\n }\n\n const long = match[2] as Long\n const argName = (match[4] || match[5])?.replace(/\\.\\.\\.$/, '') || undefined\n const name = long.split('-').reduce((str, word) => {\n return str + word[0].toUpperCase() + word.slice(1)\n }) as CamelCase<Long>\n\n return { short, long, name, argName }\n}\n", "import type { Argument } from '../types'\nimport { arrLast } from '@mono/array'\n\n/** Map positional strings to argument definitions, trimming trailing undefineds */\nexport function resolveArguments(positionals: string[], args: Argument[]): unknown[] {\n const result = args.map((arg, index) => {\n if (arg.variadic) {\n const remaining = positionals.slice(index)\n return remaining.length > 0 ? remaining : arg.defaultValue\n }\n return positionals[index] ?? arg.defaultValue\n })\n while (result.length && arrLast(result) === undefined) {\n result.pop()\n }\n return result\n}\n", "/**\n * Set the name of a function.\n */\nexport function setName<T extends object>(name: string | { name: string }, target: T): T {\n return Object.defineProperty(target, 'name', {\n value: typeof name === 'string' ? name : name.name,\n configurable: true,\n enumerable: false,\n })\n}\n", "/**\n * Converts the first character of a string to uppercase.\n * @param string The string to be converted.\n * @example ```ts\n * strFirstCharToUpperCase('hello');\n * //=> 'Hello'\n * ```\n */\nexport function strFirstCharToUpperCase(string: string): string {\n return string.charAt(0).toUpperCase() + string.substring(1)\n}\n", "import colors from 'ansi-colors'\nimport { isPrimitive } from 'es-toolkit/predicate'\nimport { isString } from 'es-toolkit/predicate'\n\n/**\n * Logger interface defining methods for different log levels.\n */\nexport interface Logger {\n start: (...args: unknown[]) => void\n done: (...args: unknown[]) => void\n info: (...args: unknown[]) => void\n log: (...args: unknown[]) => void\n warn: (...args: unknown[]) => void\n error: (...args: unknown[]) => void\n debug: (...args: unknown[]) => void\n}\n\n/**\n * Creates a logger instance with colored output and consistent formatting.\n */\nexport function createLogger(name: string): Logger {\n const NAME = name ? colors.dim.cyan(name) : name\n\n const START = [NAME, colors.dim.gray('[START]')].filter(Boolean)\n const DEBUG = [NAME, colors.dim.magenta('[DEBUG]')].filter(Boolean)\n const INFO = [NAME, colors.dim.gray('[INFO]')].filter(Boolean)\n const DONE = [NAME, colors.dim.green('[DONE] ')].filter(Boolean)\n const WARN = [NAME, colors.dim.yellow('[WARN] ')].filter(Boolean)\n const ERROR = [NAME, colors.dim.red('[ERROR]')].filter(Boolean)\n\n const grayArgs = createColoredArgs(colors.gray)\n const cyanArgs = createColoredArgs(colors.cyan)\n const yellowArgs = createColoredArgs(colors.yellow)\n\n return {\n start: (...args: unknown[]) => {\n return console.info(...START, ...args)\n },\n done: (...args: unknown[]) => {\n return console.info(...DONE, ...args)\n },\n info: (...args: unknown[]) => {\n return console.info(...INFO, ...grayArgs(args))\n },\n log: (...args: unknown[]) => {\n return console.log(...(NAME ? [NAME, ...args] : args))\n },\n warn: (...args: unknown[]) => {\n return console.warn(...WARN, ...yellowArgs(args))\n },\n debug: (...args: unknown[]) => {\n return console.debug(...DEBUG, ...cyanArgs(args))\n },\n error: (...args: unknown[]) => {\n return args.forEach((arg) => {\n return console.error(...ERROR, arg)\n })\n },\n }\n}\n\n/**\n * Creates a function that applies the given color function to string and primitive arguments.\n * Non-string and non-primitive arguments are returned unchanged.\n */\nfunction createColoredArgs(colorFn: (str: string) => string) {\n return (args: unknown[]) => {\n return args.map((arg) => {\n if (isString(arg)) {\n if (arg === colors.stripColor(arg)) {\n return colorFn(arg)\n } else {\n return arg\n }\n } else if (isPrimitive(arg)) {\n return colorFn(String(arg))\n } else {\n return arg\n }\n })\n }\n}\n", "import type { Logger } from './createLogger'\nimport colors from 'ansi-colors'\nimport { createLogger } from './createLogger'\nimport humanizeDuration from 'humanize-duration'\nimport { isPromise } from 'node:util/types'\n\n/**\n * Executes a task and logs the execution time.\n */\nexport function timer<T>(\n arg: string | [name: string, description: string],\n task: (log: Logger, name: string) => T,\n): T {\n const t0 = process.hrtime.bigint()\n const [name, description] = Array.isArray(arg) ? arg : [arg, '']\n const log = createLogger(name)\n\n if (name && description) {\n log.start(description)\n }\n\n const retval = task(log, name)\n\n if (!isPromise(retval)) {\n return done(retval)\n }\n\n return (retval as Promise<Awaited<T>>).then((result) => {\n return done(result)\n }) as T\n\n function done(retval: T) {\n if (process.exitCode) {\n return retval\n }\n const ns = process.hrtime.bigint() - t0\n const ms = Math.floor(Number(ns) / 1000000)\n log.done(colors.dim(humanizeDuration(ms)))\n return retval\n }\n}\n", "import type { Argument } from '../types'\nimport type { Option } from '../types'\nimport { entriesOf } from '@mono/object'\n\n/** Validate parsed arguments and option values, returning errors or undefined */\nexport function validateParsed(\n args: unknown[],\n optionValues: Record<string, unknown>,\n argDefs: Argument[],\n optionDefs: Option[],\n): string[] | undefined {\n return argDefs\n .map((def, index) => {\n const value = args[index]\n if (def.required) {\n if (def.variadic ? Array.isArray(value) && value.length === 0 : value === undefined) {\n return `Missing argument [${index}] ${def.usage}`\n }\n }\n if (def.choices && value !== undefined) {\n if (\n ![value].flat().every((v) => {\n return def.choices!.includes(v as string)\n })\n ) {\n return `Invalid argument [${index}] ${def.usage}: Got \\`${value}\\`. Accepted values: [${def.choices\n .map((c) => {\n return `\\`${c}\\``\n })\n .join(',')}]`\n }\n }\n })\n .concat(\n entriesOf(optionValues).map(([key, value]) => {\n const def = optionDefs.find((o) => {\n return o.name === key\n })!\n if (!def) {\n return `Unknown option --${key}`\n }\n if (def.choices && value !== undefined) {\n if (\n !((def.variadic ? value : [value]) as string[]).every((v) => {\n return def.choices!.includes(v)\n })\n ) {\n return `Invalid option value ${def.flags}: Got \\`${value}\\`. Accepted values: [${def.choices\n .map((c) => {\n return `\\`${c}\\``\n })\n .join(',')}]`\n }\n }\n }),\n )\n .filter((s) => {\n return s !== undefined\n })\n .reduce(\n (acc, curr) => {\n return (acc ?? []).concat(curr)\n },\n undefined as string[] | undefined,\n )\n}\n", "import type { AllUnionFields } from 'type-fest'\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Command } from './Command'\nimport type { SetFieldType } from 'type-fest'\nimport type { SetRequired } from 'type-fest'\nimport type { Simplify } from 'type-fest'\n\n/** Logger interface defining methods for different log levels. */\nexport interface Logger {\n start: (...args: unknown[]) => void\n done: (...args: unknown[]) => void\n info: (...args: unknown[]) => void\n log: (...args: unknown[]) => void\n warn: (...args: unknown[]) => void\n error: (...args: unknown[]) => void\n debug: (...args: unknown[]) => void\n}\n\n/** Parsed command-line arguments */\nexport type Arguments = (undefined | string | string[])[]\n\n/** Parsed command-line options */\nexport type Options = Record<string, undefined | boolean | string | string[]>\n\n/** Result of parsing command-line input, including arguments, options, triggered actions, and execution method */\n\nexport type SubCommands = { [name: string]: Command<Arguments, Options, any> }\n\n/** Base descriptor for command-line arguments with shared properties */\nexport interface Argument {\n usage: string\n name: string\n description?: string\n required?: boolean\n variadic?: boolean\n choices?: string[]\n defaultValue?: string | string[]\n defaultValueDescription?: string\n}\n\n/** Base descriptor for command-line options with shared properties */\nexport interface Option {\n type: 'boolean' | 'string'\n flags: string\n short: string\n long: string\n name: string\n argName?: string\n description?: string\n required?: boolean\n variadic?: boolean\n negate?: boolean\n defaultValue?: boolean | string | string[]\n defaultValueDescription?: string\n env?: string\n hidden?: boolean\n choices?: string[]\n group?: string\n}\n\n/** Complete command configuration including all properties and substructures */\nexport interface ICommand {\n /** Parent command if this is a subcommand */\n readonly parent?: ICommand\n /** Help configuration and rendering */\n // readonly help: IHelp\n /** Command name used for invocation */\n name: string\n /** Alternative names for this command */\n aliases: string[]\n /** Optional version string */\n version?: string\n /** Full command description */\n description: string\n /** Brief single-line description */\n summary?: string\n /** Whether command should be hidden from help */\n hidden?: boolean\n /** Group name for organizing commands in help */\n group?: string\n /** Positional arguments */\n arguments: Argument[]\n /** Named options/flags */\n options: Option[]\n /** Child subcommands */\n commands: { [name: string]: ICommand }\n}\n\nexport interface IHelp {\n /** output helpWidth, long lines are wrapped to fit */\n helpWidth: number\n minWidthToWrap: number\n sortSubcommands: boolean\n sortOptions: boolean\n usageDisplayOptionsAs: string\n usageDisplaySubcommandAs: string\n /**\n * Get an array of the visible subcommands. Includes a placeholder for the implicit help command, if there is one.\n */\n visibleCommands(): ICommand[]\n /**\n * Compare options for sort.\n */\n compareOptions(a: Option, b: Option): number\n /**\n * Get an array of the visible options. Includes a placeholder for the implicit help option, if there is one.\n */\n visibleOptions(): Option[]\n /**\n * Get an array of the arguments if any have a description.\n */\n visibleArguments(): Argument[]\n /**\n * Get the command term to show in the list of subcommands.\n */\n subcommandTerm(sub: ICommand): string\n /**\n * Get the option term to show in the list of options.\n */\n optionTerm(option: Option): string\n /**\n * Get the argument term to show in the list of arguments.\n */\n argumentTerm(argument: Argument): string\n /**\n * Get the longest subcommand primary alias length.\n */\n longestSubcommandAliasLength(): number\n /**\n * Get the longest subcommand term length.\n */\n longestSubcommandTermLength(): number\n /**\n * Get the longest option term length.\n */\n longestOptionTermLength(): number\n /**\n * Get the longest argument term length.\n */\n longestArgumentTermLength(): number\n /**\n * Get the command usage to be displayed at the top of the built-in help.\n */\n commandUsage(): string\n /**\n * Get the description for the command.\n */\n commandDescription(): string\n /**\n * Get the subcommand summary to show in the list of subcommands.\n * (Fallback to description for backwards compatibility.)\n */\n subcommandDescription(sub: ICommand): string\n /**\n * Get the option description to show in the list of options.\n */\n optionDescription(option: Option): string\n /**\n * Get the argument description to show in the list of arguments.\n */\n argumentDescription(argument: Argument): string\n /**\n * Format a list of items, given a heading and an array of formatted items.\n */\n formatItemList(heading: string, items: string[]): string[]\n /**\n * Group items by their help group heading.\n */\n groupItems<T extends ICommand | Option>(\n unsortedItems: T[],\n visibleItems: T[],\n getGroup: (item: T) => string,\n ): Map<string, T[]>\n /**\n * Return display width of string, ignoring ANSI escape sequences. Used in padding and wrapping calculations.\n */\n displayWidth(str: string): number\n /**\n * Style the title for displaying in the help. Called with 'Usage:', 'Options:', etc.\n */\n styleTitle(str: string): string\n /**\n * Style the usage line for displaying in the help. Applies specific styling to different parts like options, commands, and arguments.\n */\n styleUsage(str: string): string\n /**\n * Style command descriptions for display in help output.\n */\n styleCommandDescription(str: string): string\n /**\n * Style option descriptions for display in help output.\n */\n styleOptionDescription(str: string): string\n /**\n * Style subcommand descriptions for display in help output.\n */\n styleSubcommandDescription(str: string): string\n /**\n * Style argument descriptions for display in help output.\n */\n styleArgumentDescription(str: string): string\n /**\n * Base style used by descriptions. Override in subclass to apply custom formatting.\n */\n styleDescriptionText(str: string): string\n /**\n * Style option terms (flags) for display in help output.\n */\n styleOptionTerm(str: string): string\n /**\n * Style subcommand terms for display in help output. Applies specific styling to different parts like options and arguments.\n */\n styleSubcommandTerm(str: string): string\n /**\n * Style argument terms for display in help output.\n */\n styleArgumentTerm(str: string): string\n /**\n * Base style used in terms and usage for options. Override in subclass to apply custom formatting.\n */\n styleOptionText(str: string): string\n /**\n * Base style used in terms and usage for arguments. Override in subclass to apply custom formatting.\n */\n styleArgumentText(str: string): string\n /**\n * Base style used in terms and usage for subcommands. Override in subclass to apply custom formatting.\n */\n styleSubcommandText(str: string): string\n /**\n * Base style used in terms and usage for commands. Override in subclass to apply custom formatting.\n */\n styleCommandText(str: string): string\n /**\n * Calculate the pad width from the maximum term length.\n */\n padWidth(): number\n /**\n * Detect manually wrapped and indented strings by checking for line break followed by whitespace.\n */\n preformatted(str: string): boolean\n /**\n * Format the \"item\", which consists of a term and description. Pad the term and wrap the description, indenting the following lines.\n *\n * So \"TTT\", 5, \"DDD DDDD DD DDD\" might be formatted for this.helpWidth=17 like so:\n * TTT DDD DDDD\n * DD DDD\n */\n formatItem(term: string, termWidth: number, description: string): string\n /**\n * Wrap a string at whitespace, preserving existing line breaks.\n * Wrapping is skipped if the width is less than `minWidthToWrap`.\n */\n boxWrap(str: string, width: number): string\n /**\n * Generate the built-in help text.\n */\n render(): string\n}\n\n/** Action handler function type, which receives parsed arguments and options as well as metadata about the command execution context. */\nexport type ActionHandler<A extends Arguments, O extends Options, Subs extends SubCommands> = (\n ...args: [\n ...A,\n O,\n {\n path: string[]\n name: string\n argv: string[]\n args: A\n opts: O\n errors?: string[]\n cmd: Command<A, O, Subs>\n logger: Logger\n },\n ]\n) => Promise<void> | void\n\n/** Predicate function type for hooks, which receives the same metadata as action handlers and returns a boolean indicating whether the hook's action should be executed. */\nexport type HookPredicate<\n A extends Arguments = Arguments,\n O extends Options = Options,\n Subs extends SubCommands = SubCommands,\n> = (data: {\n path: string[]\n name: string\n argv: string[]\n args: A\n opts: O\n errors?: string[]\n cmd: Command<A, O, Subs>\n}) => boolean\n\n/** Action handler function type for hooks, which receives the same metadata as action handlers and is executed when its predicate returns true. Can also throw to indicate an error. */\nexport type HookActionHandler<\n A extends Arguments = Arguments,\n O extends Options = Options,\n Subs extends SubCommands = SubCommands,\n> = (data: {\n path: string[]\n name: string\n argv: string[]\n args: A\n opts: O\n errors?: string[]\n cmd: Command<A, O, Subs>\n}) => Promise<void> | void | never\n\n/** Hook definition type, which includes the option name that triggers the hook, a predicate function to determine when the hook should run, and an action handler to execute when triggered. */\nexport type HookDefinition<\n A extends Arguments = Arguments,\n O extends Options = Options,\n Subs extends SubCommands = SubCommands,\n> = {\n name: keyof O\n predicate: HookPredicate<A, O, Subs>\n action: HookActionHandler<A, O, Subs>\n}\n\n/**\n * @see Command.prototype.parseArgv\n */\nexport type ParseArgvResult<\n A extends Arguments = Arguments,\n O extends Options = Options,\n Subs extends SubCommands = SubCommands,\n> = {\n /** The command or subcommand instance */\n get cmd(): Command<A, O, Subs>\n /** The part of argv that makes out a subcommand path, or empty array when root command */\n path: string[]\n /** Command namer */\n name: string\n /** Original argv array passed in or from process.argv, excluding subcommand path */\n argv: string[]\n /** Parsed arguments */\n args: A\n /** Parsed options */\n opts: O\n /** Error messages if parsing failed, otherwise undefined */\n errors?: string[]\n /** Names of all triggered hooks whose predicate returned true */\n hooks: HookDefinition<A, O, Subs>[]\n\n /** Calls the action handler with its expected args */\n execute: () => Promise<void>\n}\n\n/** required variadic argument */\nexport type RequiredVariadicArgumentUsage = `<${string}...>`\n\n/** optional variadic argument */\nexport type OptionalVariadicArgumentUsage = `[${string}...]`\n\n/** required argument */\nexport type RequiredArgumentUsage = `<${string}>`\n\n/** optional argument */\nexport type OptionalArgumentUsage = `[${string}]`\n\n/** Union of all argument usage pattern types */\nexport type ArgumentUsage =\n | RequiredVariadicArgumentUsage\n | OptionalVariadicArgumentUsage\n | RequiredArgumentUsage\n | OptionalArgumentUsage\n\n/** Helper type to infer allowed argument usage patterns based on the command's existing argument types */\ntype InferArgumentUsage<T extends Command<any, any, any>> =\n T extends Command<infer A, any>\n ? A extends string[]\n ? ArgumentUsage\n : A extends (string | (string | undefined))[]\n ? OptionalArgumentUsage | OptionalVariadicArgumentUsage\n : never\n : never\n\n/** Helper type to infer allowed argument usage patterns based on the command's existing argument types */\nexport type AllowedArgumentUsage<T extends Command<any, any, any>, Usage extends ArgumentUsage> =\n Usage extends InferArgumentUsage<T> ? Usage : never\n\n/** Base type for addArgument options, extended by specific required/optional and variadic/non-variadic argument option types */\ntype ArgumentOptionsBase = Omit<\n Argument,\n 'name' | 'required' | 'variadic' | 'usage' | 'defaultValue' | 'defaultValueDescription'\n>\n\n/** Base type for addArgument options, extended by specific required/optional and variadic/non-variadic argument option types */\ntype ExtendArgumentOptionsBase<T extends object = object> = Simplify<ArgumentOptionsBase & T>\n\n/** Required positional argument descriptor. Usage: `<name>` */\nexport type RequiredArgumentOptions = ExtendArgumentOptionsBase\n\n/** Optional positional argument with string default. Usage: `[name]` */\nexport type OptionalArgumentOptions = ExtendArgumentOptionsBase<{\n defaultValue?: string\n defaultValueDescription?: string\n}>\n\n/** Optional positional argument with required string default. Usage: `[name]` */\nexport type OptionalArgumentOptionsWithDefaultValue = SetFieldType<\n SetRequired<OptionalArgumentOptions, 'defaultValue'>,\n 'defaultValue',\n string\n>\n\n/** Required variadic argument accepting variadic values. Usage: `<name...>` */\nexport type RequiredVariadicArgumentOptions = ExtendArgumentOptionsBase\n\n/** Optional variadic argument with array default. Usage: `[name...]` */\nexport type OptionalVariadicArgumentOptions = ExtendArgumentOptionsBase<{\n defaultValue?: string[]\n defaultValueDescription?: string\n}>\n\n/** Union of all addArgument options types */\nexport type ArgumentOptions = AllUnionFields<\n | RequiredArgumentOptions\n | OptionalArgumentOptions\n | OptionalArgumentOptionsWithDefaultValue\n | RequiredVariadicArgumentOptions\n | OptionalVariadicArgumentOptions\n>\n\n/** Helper type for extracting argument name from usage pattern */\nexport type InferAddedArgumentType<Opts> = Opts extends { choices: infer C extends string[] } ? C[number] : string\n\n/** Union of all option usage pattern types */\nexport type OptionUsage<Long extends string> =\n // boolean flag\n | `-${string}, --${Long}`\n // required string option\n | `-${string}, --${Long} <${string}>`\n // optional string option\n | `-${string}, --${Long} [${string}]`\n // required variadic option\n | `-${string}, --${Long} <${string}...>`\n // optional variadic option\n | `-${string}, --${Long} [${string}...]`\n\n/** Base type for addOption options, extended by specific boolean/string and required/optional and variadic/non-variadic option types */\ntype OptionOptionsBase = Omit<\n Option,\n 'name' | 'required' | 'variadic' | 'type' | 'argName' | 'short' | 'long' | 'flags'\n>\n\n/** Helper type to extend base addOption options with specific fields for different option types */\ntype ExtendAddOptionOptionsBase<T extends object = object> = Simplify<OptionOptionsBase & T>\n\n/** Boolean flag option. Usage: `-v, --verbose` */\nexport type BooleanOptionOptions = ExtendAddOptionOptionsBase<{\n defaultValue?: boolean\n defaultValueDescription?: string\n}>\n\n/** Required string option. Usage: `-f, --file <path>` */\nexport type RequiredOptionOptions = ExtendAddOptionOptionsBase<{\n env?: undefined\n}>\n\n/** Optional string option with default. Usage: `-o, --output [path]` */\nexport type OptionalOptionOptions = ExtendAddOptionOptionsBase<{\n defaultValue?: string\n defaultValueDescription?: string\n}>\n\n/** Required option accepting variadic values. Usage: `-i, --include <patterns...>` */\nexport type RequiredVariadicOptionOptions = ExtendAddOptionOptionsBase<{\n env?: undefined\n}>\n\n/** Optional option accepting variadic values with defaults. Usage: `-e, --exclude [patterns...]` */\nexport type OptionalVariadicOptionOptions = ExtendAddOptionOptionsBase<{\n defaultValue?: string[]\n defaultValueDescription?: string\n}>\n\n/** Union of all addOption options types */\nexport type OptionOptions = AllUnionFields<\n | BooleanOptionOptions\n | RequiredOptionOptions\n | OptionalOptionOptions\n | RequiredVariadicOptionOptions\n | OptionalVariadicOptionOptions\n>\n\n/** Helper type to infer the resulting Command type after adding an option with specific options */\nexport type InferAddOptionResult<\n A extends Arguments,\n O extends Options,\n NewOptions extends Options,\n Subs extends SubCommands,\n> = Command<A, Simplify<O & NewOptions>, Subs>\n", "export * from './lib/Command'\nexport * from './lib/Help'\nexport * from './lib/helpers/findCommand'\nexport * from './lib/helpers/findOption'\nexport * from './lib/helpers/getCommandAncestors'\nexport * from './lib/helpers/getCommandAndAncestors'\nexport * from './lib/helpers/parseOptionFlags'\nexport * from './lib/types'\n\nimport * as MODULE_1 from './lib/Command'\nimport * as MODULE_2 from './lib/Help'\nimport * as MODULE_3 from './lib/helpers/findCommand'\nimport * as MODULE_4 from './lib/helpers/findOption'\nimport * as MODULE_5 from './lib/helpers/getCommandAncestors'\nimport * as MODULE_6 from './lib/helpers/getCommandAndAncestors'\nimport * as MODULE_7 from './lib/helpers/parseOptionFlags'\nimport * as MODULE_8 from './lib/types'\n\nexport default {\n ...MODULE_1, //\n ...MODULE_2,\n ...MODULE_3,\n ...MODULE_4,\n ...MODULE_5,\n ...MODULE_6,\n ...MODULE_7,\n ...MODULE_8,\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import type { ActionHandler } from './types'\nimport type { AllowedArgumentUsage } from './types'\nimport type { Argument } from './types'\nimport type { ArgumentOptions } from './types'\nimport type { ArgumentUsage } from './types'\nimport type { Arguments } from './types'\nimport type { BooleanOptionOptions } from './types'\nimport type { CamelCase } from 'type-fest'\nimport { Help } from './Help'\nimport type { HookActionHandler } from './types'\nimport type { HookDefinition } from './types'\nimport type { HookPredicate } from './types'\nimport type { ICommand } from './types'\nimport type { InferAddOptionResult } from './types'\nimport type { InferAddedArgumentType } from './types'\nimport type { Option } from './types'\nimport type { OptionOptions } from './types'\nimport type { OptionUsage } from './types'\nimport type { OptionalArgumentOptions } from './types'\nimport type { OptionalArgumentOptionsWithDefaultValue } from './types'\nimport type { OptionalOptionOptions } from './types'\nimport type { OptionalVariadicArgumentOptions } from './types'\nimport type { OptionalVariadicOptionOptions } from './types'\nimport type { Options } from './types'\nimport type { ParseArgvResult } from './types'\nimport type { RequiredArgumentOptions } from './types'\nimport type { RequiredOptionOptions } from './types'\nimport type { RequiredVariadicArgumentOptions } from './types'\nimport type { RequiredVariadicOptionOptions } from './types'\nimport type { SetFieldType } from 'type-fest'\nimport type { SetRequired } from 'type-fest'\nimport type { Simplify } from 'type-fest'\nimport type { SubCommands } from './types'\nimport { arrRemoveDuplicates } from '@mono/array'\nimport { collectVariadicOptionValues } from './internal/collectVariadicOptionValues'\nimport colors from 'ansi-colors'\nimport { filterObject } from '@mono/object'\nimport { findCommand } from './helpers/findCommand'\nimport { findOption } from './helpers/findOption'\nimport { getCommandAncestors } from './helpers/getCommandAncestors'\nimport { getCommandAndAncestors } from './helpers/getCommandAndAncestors'\nimport { inspect } from 'node:util'\nimport { kebabCase } from 'es-toolkit/string'\nimport { lazyProp } from '@mono/decorators'\nimport { mergeOptionDefaults } from './internal/mergeOptionDefaults'\nimport { normalizeArgv } from './internal/normalizeArgv'\nimport { objSortKeys } from '@mono/object'\nimport { parseArgs } from 'node:util'\nimport { parseOptionFlags } from './helpers/parseOptionFlags'\nimport { resolveArguments } from './internal/resolveArguments'\nimport { setName } from '@mono/fn'\nimport { strFirstCharToUpperCase } from '@mono/string'\nimport { timer } from '@mono/node'\nimport { validateParsed } from './internal/validateParsed'\nimport { valuesOf } from '@mono/object'\n\n/**\n * a type-safe CLI composer that can parse argv and generate help without execution coupling.\n */\nexport class Command<\n A extends Arguments = [],\n O extends Options = { help?: boolean; debug?: boolean },\n Subs extends SubCommands = SubCommands,\n> implements ICommand\n{\n /** parent command in the hierarchy, undefined for root command */\n parent?: Command<Arguments, Options & O>\n /** the command name used to invoke it */\n name: string\n /** semantic version string displayed by --version flag */\n version?: string\n /** alternative names for invoking this command */\n aliases: string[]\n /** brief one-line description shown in command lists */\n summary?: string\n /** full description displayed in help text */\n description: string\n /** whether to exclude from help listings */\n hidden?: boolean\n /** category for organizing related commands in help output */\n group?: string\n /** positional arguments this command accepts */\n arguments: Argument[]\n /** cLI options (flags) this command recognizes */\n options: Option[]\n /** subcommands registered with this command */\n commands: Subs\n /** main action handler executed when command is invoked */\n protected action?: ActionHandler<A, O, Subs>\n /** option-driven actions (e.g., --help, --version) executed when their conditions match */\n protected hooks: HookDefinition<Arguments, Options & O>[]\n\n constructor(name: string, parent?: ICommand) {\n this.name = name\n this.aliases = []\n this.description = ''\n this.arguments = []\n this.options = []\n this.commands = {} as Subs\n this.hooks = []\n\n // make parent non-enumerable to avoid circular references for toJSON compatibility\n Object.defineProperty(this, 'parent', { value: parent, enumerable: false })\n\n if (!parent) {\n this.addOption('-D, --debug', { description: 'Display debug information' }) //\n .addOptionHook('debug', ({ cmd, ...data }) => {\n console.debug(inspect(cmd, { depth: 1, colors: true }))\n console.debug(inspect(data, { depth: 3, colors: true }))\n })\n\n this.addOption('-h, --help', { description: 'Display help information' }) //\n .addOptionHook('help', ({ cmd }) => {\n console.log(cmd.renderHelp())\n process.exitCode = 0\n })\n }\n }\n\n @lazyProp\n protected get help(): Help {\n return new Help(this)\n }\n\n /** configure how the help is rendered */\n helpConfiguration(cb?: (help: Help) => void): this {\n const help = this.help\n cb?.(help)\n return this\n }\n\n /** renders formatted help text using provided help definition */\n renderHelp(config: { noColor?: boolean } = {}): string {\n const result = this.help.render()\n return config.noColor ? colors.stripColor(result) : result\n }\n\n /** sets the command name */\n setName(name: string): void {\n this.name = name\n }\n\n /** sets command aliases, flattening nested arrays */\n setAliases(...aliases: (string | string[])[]): this {\n this.aliases = []\n this.addAliases(...aliases)\n return this\n }\n\n /** adds aliases to existing ones */\n addAliases(...aliases: (string | string[])[]): this {\n const taken = this.parent\n ? valuesOf(this.parent.commands).flatMap((c) => {\n return [c.name, ...c.aliases]\n })\n : []\n arrRemoveDuplicates(aliases.flat())\n .filter((a) => {\n return !this.aliases.includes(a) && a !== this.name\n })\n .forEach((a) => {\n if (taken.includes(a)) {\n throw new Error(\n `Alias \"${a}\" is already used by a sibling command: ${findCommand(this.parent!, a)?.name}`,\n )\n }\n this.aliases.push(a)\n })\n this.aliases.sort((a, b) => {\n return a.length - b.length\n })\n return this\n }\n\n /** sets the command version */\n setVersion(version: string): InferAddOptionResult<A, O, { version?: boolean }, Subs> {\n this.version = version\n if (findOption(this, 'version')) {\n return this\n }\n return this.addOption('-V, --version', { description: 'Display semver version' }) //\n .addOptionHook('version', ({ cmd }) => {\n console.log(\n getCommandAndAncestors(cmd).find((c) => {\n return c.version\n })?.version,\n )\n process.exitCode = 0\n })\n }\n\n /** sets the command summary */\n setSummary(summary?: string): this {\n this.summary = summary\n return this\n }\n\n /** sets command description, joining variadic lines */\n setDescription(...lines: string[]): this {\n this.description = lines.join('\\n')\n return this\n }\n\n /** sets whether command is hidden from help */\n setHidden(hidden: boolean | undefined = true): this {\n this.hidden = hidden\n return this\n }\n\n /** sets the command group for help organization */\n setGroup(group?: string): this {\n this.group = group\n return this\n }\n\n /** add a subcommand and return the subcommand. All options are inherited by the subcommand. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n command<Name extends string, Sub extends Command<any, any, any> = Command<[], O, {}>>(\n name: Name,\n cb?: (cmd: Command<[], O, {}>, parent: this) => Sub,\n ): Sub {\n if (this.arguments.length) {\n throw new Error(\n `Cannot add subcommand \"${name}\" to \"${this.name}\" because it already has arguments defined.`,\n )\n }\n const sub = this.createSubcommand(name)\n const inherit = this.options\n sub.options.push(...inherit)\n\n const inheritHooks = this.hooks.filter((t) => {\n return inherit.some((i) => {\n return i.name === t.name\n })\n }) as any[]\n sub.hooks.push(...inheritHooks)\n\n const taken = valuesOf(this.commands).flatMap((c) => {\n return [c.name, ...c.aliases]\n })\n if (taken.includes(name)) {\n throw new Error(\n `Command name \"${getCommandAndAncestors(sub).map((c) => {\n return c.name\n })}\" is already used by this command or its aliases: ${taken.join(', ')}`,\n )\n }\n const kebab = kebabCase(name)\n const words = kebab.split('-')\n const initials = words\n .map((s) => {\n return s[0]\n })\n .join('')\n if (!taken.includes(initials)) {\n sub.addAliases(initials)\n } else {\n const initials = words\n .map((s) => {\n return s[0] + s[1]\n })\n .join('')\n if (!taken.includes(initials)) {\n sub.addAliases(initials)\n }\n }\n\n // asd\n\n this.commands[name] = sub as never\n\n return (cb ? cb(sub, this) : sub) as never\n }\n\n /** add a subcommand and return the subcommand. All options are inherited by the subcommand. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n addCommand<Name extends string, Sub extends Command<any, any, any> = Command<[], O, {}>>(\n name: Name,\n cb: (cmd: Command<[], O, {}>, parent: this) => Sub,\n ): Command<A, O, (SubCommands extends Subs ? {} : Subs) & { [K in Name]: Sub }> {\n this.command(name, cb)\n return this as never\n }\n\n /** add required variadic argument, eg.: `<name...>` */\n addArgument<const Opts extends RequiredVariadicArgumentOptions>(\n usage: AllowedArgumentUsage<this, `<${string}...>`>,\n options?: Opts,\n ): Command<[...A, InferAddedArgumentType<Opts>[]], O, Subs>\n\n /** add required argument, eg.: `<name>` */\n addArgument<const Opts extends RequiredArgumentOptions>(\n usage: AllowedArgumentUsage<this, `<${string}>`>,\n options?: Opts,\n ): Command<[...A, InferAddedArgumentType<Opts>], O, Subs>\n\n /** add optional variadic argument with defaults, eg.: `[name...]` */\n addArgument<const Opts extends OptionalVariadicArgumentOptions>(\n usage: AllowedArgumentUsage<this, `[${string}...]`>,\n options?: Opts,\n ): Command<[...A, InferAddedArgumentType<Opts>[]], O, Subs>\n\n /** add optional argument with default, eg.: `[name]` */\n addArgument<const Opts extends OptionalArgumentOptionsWithDefaultValue>(\n usage: AllowedArgumentUsage<this, `[${string}]`>,\n options: Opts,\n ): Command<[...A, InferAddedArgumentType<Opts>], O, Subs>\n\n /** add optional argument, eg.: `[name]` */\n addArgument<const Opts extends OptionalArgumentOptions>(\n usage: AllowedArgumentUsage<this, `[${string}]`>,\n options?: Opts,\n ): Command<[...A, InferAddedArgumentType<Opts> | undefined], O, Subs>\n\n // implementation\n addArgument(usage: ArgumentUsage, options: ArgumentOptions = {}) {\n if (!/^<(.*?)>$|^\\[(.*?)\\]$/.test(usage)) {\n throw new Error(`Invalid argument format: ${usage}`)\n }\n\n const name = usage.slice(1, -1).replace(/\\.\\.\\.$/, '')\n const required = usage.startsWith('<')\n const variadic = usage.slice(0, -1).endsWith('...')\n\n const prevArg = this.arguments[this.arguments.length - 1]\n\n if (prevArg?.variadic) {\n throw new Error(`Cannot add argument ${usage} after variadic argument ${prevArg.usage}`)\n }\n\n if (required && prevArg && !prevArg?.required) {\n throw new Error(`Cannot add required argument ${usage} after optional argument ${prevArg?.usage}`)\n }\n\n if (required && prevArg?.defaultValue) {\n throw new Error(\n `Cannot add required argument ${usage} after optional argument with default value ${prevArg.usage}`,\n )\n }\n\n const arg: Argument = {\n usage,\n name,\n required,\n variadic,\n ...options,\n }\n\n if (variadic && !arg.defaultValue) {\n arg.defaultValue = [] as string[]\n }\n\n this.arguments.push(arg)\n return this as never\n }\n\n /** add optional string option, eg.: `-o, --output [path]` */\n addOption<Long extends string>(\n flags: `-${string}, --${Long} [${string}]`,\n options?: SetFieldType<OptionalOptionOptions, 'defaultValue', undefined | never>,\n ): Command<A, Simplify<{ [K in CamelCase<Long>]?: string } & O>, Subs>\n /** add optional string option with default, eg.: `-o, --output [path]` */\n addOption<Long extends string>(\n flags: `-${string}, --${Long} [${string}]`,\n options: SetFieldType<SetRequired<OptionalOptionOptions, 'defaultValue'>, 'defaultValue', string>,\n ): Command<A, Simplify<{ [K in CamelCase<Long>]: string } & O>, Subs>\n /** add required variadic option, eg.: `-i, --include <patterns...>` */\n addOption<Long extends string>(\n flags: `-${string}, --${Long} <${string}...>`,\n options?: RequiredVariadicOptionOptions,\n ): Command<A, Simplify<{ [K in CamelCase<Long>]: string[] } & O>, Subs>\n /** add optional variadic option with defaults, eg.: `-e, --exclude [patterns...]` */\n addOption<Long extends string>(\n flags: `-${string}, --${Long} [${string}...]`,\n options?: OptionalVariadicOptionOptions,\n ): Command<A, Simplify<{ [K in CamelCase<Long>]: string[] } & O>, Subs>\n /** add required string option, eg.: `-f, --file <path>` */\n addOption<Long extends string>(\n flags: `-${string}, --${Long} <${string}>`,\n options?: RequiredOptionOptions,\n ): Command<A, Simplify<{ [K in CamelCase<Long>]: string } & O>, Subs>\n /** add boolean flag option with default, eg.: `-v, --verbose` */\n addOption<Long extends string>(\n flags: `-${string}, --${Long}`,\n options: SetFieldType<SetRequired<BooleanOptionOptions, 'defaultValue'>, 'defaultValue', boolean>,\n ): Command<A, Simplify<{ [K in CamelCase<Long>]: boolean } & O>, Subs>\n /** add boolean flag option, eg.: `-v, --verbose` */\n addOption<Long extends string>(\n flags: `-${string}, --${Long}`,\n options?: SetFieldType<BooleanOptionOptions, 'defaultValue', undefined | never>,\n ): Command<A, Simplify<{ [K in CamelCase<Long>]?: boolean } & O>, Subs>\n\n /**\n * adds command-line option with type inference. Parses format: `-s, --long [<value>|[value]|<value...>|[value...]]`\n */\n addOption<Long extends string>(flags: OptionUsage<Long>, opts: Partial<OptionOptions> = {}) {\n const ins = {} as Option\n\n const { short, long, name, argName } = parseOptionFlags<Long>(flags)\n\n for (const opt of this.options) {\n if (opt.long === long) {\n throw new Error(`Option long name, --${long} already in use by: ${opt.flags}`)\n }\n if (opt.short === short) {\n throw new Error(`Option short name, -${short} already in use by: ${opt.flags}`)\n }\n }\n\n ins.flags = flags\n ins.short = short\n ins.long = long\n ins.name = name\n ins.description = ''\n if (!argName) {\n ins.type = 'boolean'\n } else {\n ins.type = 'string'\n ins.argName = argName\n if (flags.endsWith('>')) {\n if (flags.endsWith('...>')) {\n ins.required = true\n ins.variadic = true\n } else {\n ins.required = true\n }\n } else if (flags.endsWith(']')) {\n if (flags.endsWith('...]')) {\n ins.variadic = true\n ins.defaultValue = (opts.defaultValue ?? []) as string[]\n }\n }\n }\n\n // assign options\n for (const [key, value] of Object.entries(opts)) {\n if (value !== undefined) {\n Reflect.set(ins, key, value)\n }\n }\n\n // if defined, set environment variable as defaultValue\n if (ins.env && ins.defaultValue === undefined && typeof process.env[ins.env] === 'string') {\n ins.required = false\n ins.flags = ins.flags.replace('<', '[').replace('>', ']')\n if (ins.type === 'boolean') {\n ins.defaultValue = /^(t(rue)?|y(es)?|1)$/i.test(process.env[ins.env]!)\n } else if (ins.variadic) {\n ins.defaultValue = process.env[ins.env]!.replace(/\\]|\\[/, '')\n .split(',')\n .map((v) => {\n return v.trim()\n })\n } else {\n ins.defaultValue = process.env[ins.env]!\n }\n }\n\n this.options.push(ins)\n return this as never\n }\n\n /**\n * register an action to be invoked when an option is set to true or string value.\n *\n * Hooks execute in addition to or instead of the main action handler,\n * allowing for option-driven behavior. For example, `--help` and `--version`\n * are implemented as hooks.\n */\n addOptionHook(optionName: keyof O, action: HookActionHandler<Arguments, O>): this {\n const def = findOption(this, optionName as string)!\n if (!def.group && /process\\.exitCode ?= ?.+;?\\s*\\}$/.test(action.toString())) {\n def.group = 'Command Options'\n }\n this.hooks.push({\n name: optionName,\n predicate: setName(`has${strFirstCharToUpperCase(optionName as string)}`, (({ opts }) => {\n return (\n opts[optionName] !== undefined &&\n opts[optionName] !== false &&\n !(Array.isArray(opts[optionName]) && opts[optionName].length === 0)\n )\n }) as HookPredicate<Arguments, Options & O>),\n action: setName(optionName as string, action),\n } as never)\n return this\n }\n\n /** parses command-line arguments with subcommand support and type-safe validation. */\n parseArgv(argv: string[] = process.argv.slice(2)): ParseArgvResult<Arguments, Options & O> {\n const sub = findCommand(this, argv[0])\n if (sub) {\n return sub.parseArgv(argv.slice(1)) as unknown as ParseArgvResult<Arguments, Options & O>\n }\n\n argv = normalizeArgv(argv, this.options)\n\n const parsed = parseArgs({\n args: argv,\n options: Object.fromEntries(\n this.options.map((o) => {\n return [o.name, { type: o.type, short: o.short, default: o.defaultValue, multiple: !!o.variadic }]\n }),\n ),\n allowPositionals: true,\n tokens: true,\n strict: false,\n allowNegative: true,\n })\n\n collectVariadicOptionValues(parsed, this.options)\n mergeOptionDefaults(parsed.values as Record<string, unknown>, this.options)\n\n parsed.values = objSortKeys(parsed.values, (a, b) => {\n return a[1] === false ? 1 : b[1] === false ? -1 : a[1] === true ? 1 : b[1] === true ? -1 : 0\n })\n\n const args = resolveArguments(parsed.positionals, this.arguments)\n const opts = filterObject(parsed.values, (value) => {\n return value !== undefined\n })\n const errors = validateParsed(args, parsed.values, this.arguments, this.options)\n const path = getCommandAncestors(this).map((c) => {\n return c.name\n })\n\n const data = {\n path,\n name: this.name,\n argv,\n args: args as Arguments,\n opts: opts as Options & O,\n errors,\n cmd: this as Command<Arguments, Options & O>,\n }\n\n const hooks = this.hooks.filter((t) => {\n return t.predicate(data)\n })\n\n const execute = async () => {\n for (const hook of hooks) {\n await hook.action(data)\n if (process.exitCode !== undefined) {\n return\n }\n }\n await timer([[...path, this.name].join(' '), this.description], async (logger) => {\n if (errors) {\n errors.forEach((msg) => {\n return logger.error(colors.red(msg))\n })\n process.exitCode = 1\n return\n }\n if (this.action) {\n return await this.action(...(args as A), opts as O, {\n ...data,\n args: args as A,\n opts: opts as O,\n cmd: this,\n logger,\n })\n }\n console.log(this.renderHelp())\n })\n }\n\n return { ...data, hooks, execute } as unknown as ParseArgvResult<Arguments, Options & O>\n }\n\n /**\n * sets the main action handler for this command, which is executed after any matching option hooks when the command is invoked.\n * The handler receives parsed arguments and options with correct typings.\n */\n setAction(fn: ActionHandler<A, O, Subs>): this {\n this.action = setName(this.name, fn as never)\n return this\n }\n\n /** returns a new Command instance. Override this method in subclasses. */\n protected createSubcommand(name: string): Command<[], O, {}> {\n return new Command<[], O, {}>(name, this)\n }\n}\n", "import type { Argument } from './types'\nimport C from 'ansi-colors'\nimport type { ICommand } from './types'\nimport type { IHelp } from './types'\nimport type { Option } from './types'\nimport { lazyProp } from '@mono/decorators'\n\n/**\n * This is a fork of the Help class from the 'commander' npm package. The Help class method names as well as the\n * expected interface of the Command instance to parse, are both similar, but different and not compatible without\n * custom adaptations, @see ICommand\n */\nexport class Help implements IHelp {\n protected readonly cmd: ICommand\n /** output helpWidth, long lines are wrapped to fit */\n helpWidth: number = process.stdout.isTTY ? process.stdout.columns : 80\n minWidthToWrap: number = 40\n sortSubcommands: boolean = true\n sortOptions: boolean = true\n usageDisplayOptionsAs: string = '[opts]'\n usageDisplaySubcommandAs: string = '[cmd]'\n\n constructor(cmd: ICommand) {\n this.cmd = cmd\n Object.defineProperty(this, 'cmd', { enumerable: false })\n }\n\n /**\n * Get an array of the visible subcommands. Includes a placeholder for the implicit help command, if there is one.\n */\n @lazyProp\n visibleCommands(): ICommand[] {\n const res = Object.values(this.cmd.commands).filter((c) => {\n return !c.hidden\n })\n if (this.sortSubcommands) {\n res.sort((a: ICommand, b: ICommand) => {\n return a.name.localeCompare(b.name)\n })\n }\n return res\n }\n\n /**\n * Compare options for sort.\n */\n compareOptions(a: Option, b: Option): number {\n const getSortKey = (option: Option): string => {\n // WYSIWYG for order displayed in help. Short used for comparison if present. No special handling for negated.\n return option.short ? option.short.replace(/^-/, '') : option.long!.replace(/^--/, '')\n }\n return getSortKey(a).localeCompare(getSortKey(b))\n }\n\n /**\n * Get an array of the visible options. Includes a placeholder for the implicit help option, if there is one.\n */\n @lazyProp\n visibleOptions(): Option[] {\n const res = this.cmd.options.filter((option: Option) => {\n return !option.hidden\n })\n if (this.sortOptions) {\n res.sort(this.compareOptions)\n }\n return res\n }\n\n /**\n * Get an array of the arguments if any have a description.\n */\n @lazyProp\n visibleArguments(): Argument[] {\n return this.cmd.arguments.slice()\n }\n\n /**\n * Get the command term to show in the list of subcommands.\n */\n subcommandTerm(sub: ICommand): string {\n const args = sub.arguments\n .map((arg) => {\n return arg.usage\n })\n .join(' ')\n return (\n (sub.aliases[0] ? `${sub.aliases[0].padEnd(this.longestSubcommandAliasLength(), ' ')} | ` : '') +\n sub.name +\n (sub.options.length ? ` ${this.usageDisplayOptionsAs}` : '') + // simplistic check for non-help option\n (args ? ` ${args}` : '')\n )\n }\n\n /**\n * Get the option term to show in the list of options.\n */\n optionTerm(option: Option): string {\n return option.flags\n }\n\n /**\n * Get the argument term to show in the list of arguments.\n */\n argumentTerm(argument: Argument): string {\n return argument.name\n }\n\n /**\n * Get the longest subcommand primary alias length.\n */\n @lazyProp\n longestSubcommandAliasLength(): number {\n return Math.max(\n 0,\n ...this.visibleCommands().map((c) => {\n return c.aliases[0]?.length || 0\n }),\n )\n }\n\n /**\n * Get the longest subcommand term length.\n */\n @lazyProp\n longestSubcommandTermLength(): number {\n return this.visibleCommands().reduce((max: number, command) => {\n return Math.max(max, this.displayWidth(this.styleSubcommandTerm(this.subcommandTerm(command))))\n }, 0)\n }\n\n /**\n * Get the longest option term length.\n */\n @lazyProp\n longestOptionTermLength(): number {\n return this.visibleOptions().reduce((max: number, option) => {\n return Math.max(max, this.displayWidth(this.styleOptionTerm(this.optionTerm(option))))\n }, 0)\n }\n\n /**\n * Get the longest argument term length.\n */\n @lazyProp\n longestArgumentTermLength(): number {\n return this.visibleArguments().reduce((max: number, argument) => {\n return Math.max(max, this.displayWidth(this.styleArgumentTerm(this.argumentTerm(argument))))\n }, 0)\n }\n\n /**\n * Get the command usage to be displayed at the top of the built-in help.\n */\n commandUsage(): string {\n // Usage\n let path = ''\n for (let ancestor = this.cmd.parent; ancestor; ancestor = ancestor.parent) {\n path = `${ancestor.name} ${path}`\n }\n\n return `${path + this.cmd.name} ${[\n ...(Object.keys(this.cmd.commands).length ? [this.usageDisplaySubcommandAs] : []),\n ...(this.cmd.options.length ? [this.usageDisplayOptionsAs] : []),\n ...this.cmd.arguments.map((arg) => {\n return arg.required\n ? arg.variadic\n ? `<${arg.name}...>`\n : `<${arg.name}>`\n : arg.variadic\n ? `[${arg.name}...]`\n : `[${arg.name}]`\n }),\n ].join(' ')}`.trim()\n }\n\n /**\n * Get the description for the command.\n */\n commandDescription(): string {\n let res = ''\n if (this.cmd.aliases.length) {\n res += `Aliases: ${this.cmd.aliases.join(', ')}`\n res += '\\n\\n'\n }\n res += this.cmd.description\n return res\n }\n\n /**\n * Get the subcommand summary to show in the list of subcommands.\n * (Fallback to description for backwards compatibility.)\n */\n subcommandDescription(sub: ICommand): string {\n return (\n sub.summary ||\n (sub.description?.includes('\\n') ? sub.description.trim().split('\\n')[0] : sub.description.trim())\n )\n }\n\n /**\n * Get the option description to show in the list of options.\n */\n optionDescription(option: Option): string {\n const extraInfo: string[] = []\n\n if (option.choices) {\n extraInfo.push(\n // use stringify to match the display of the default value\n `choices: ${option.choices\n .map((choice: string) => {\n return String(choice)\n })\n .join(', ')}`,\n )\n }\n if (option.defaultValue && !(Array.isArray(option.defaultValue) && option.defaultValue.length === 0)) {\n extraInfo.push(`default: ${option.defaultValueDescription || String(option.defaultValue)}`)\n }\n\n if (option.env !== undefined) {\n extraInfo.push(`env: ${option.env}`)\n }\n if (extraInfo.length > 0) {\n const extraDescription = `(${extraInfo.join(', ')})`\n if (option.description) {\n return `${option.description} ${extraDescription}`\n }\n return extraDescription\n }\n\n return option.description ?? ''\n }\n\n /**\n * Get the argument description to show in the list of arguments.\n */\n argumentDescription(argument: Argument): string {\n const extraInfo: string[] = []\n if (argument.choices) {\n extraInfo.push(\n // use stringify to match the display of the default value\n `choices: ${argument.choices\n .map((choice: string) => {\n return String(choice)\n })\n .join(', ')}`,\n )\n }\n if (argument.defaultValue !== undefined) {\n extraInfo.push(`default: ${argument.defaultValueDescription || String(argument.defaultValue)}`)\n }\n if (extraInfo.length > 0) {\n const extraDescription = `(${extraInfo.join(', ')})`\n if (argument.description) {\n return `${argument.description} ${extraDescription}`\n }\n return extraDescription\n }\n return argument.description ?? ''\n }\n\n /**\n * Format a list of items, given a heading and an array of formatted items.\n */\n formatItemList(heading: string, items: string[]): string[] {\n if (items.length === 0) {\n return []\n }\n return [this.styleTitle(heading), ...items, '']\n }\n\n /**\n * Group items by their help group heading.\n */\n groupItems<T extends ICommand | Option>(\n unsortedItems: T[],\n visibleItems: T[],\n getGroup: (item: T) => string,\n ): Map<string, T[]> {\n const result = new Map<string, T[]>()\n // Add groups in order of appearance in unsortedItems.\n unsortedItems.forEach((item: T) => {\n const group = getGroup(item)\n if (!result.has(group)) {\n result.set(group, [])\n }\n })\n // Add items in order of appearance in visibleItems.\n visibleItems.forEach((item: T) => {\n const group = getGroup(item)\n if (!result.has(group)) {\n result.set(group, [])\n }\n result.get(group)!.push(item)\n })\n return result\n }\n\n /**\n * Return display width of string, ignoring ANSI escape sequences. Used in padding and wrapping calculations.\n */\n displayWidth(str: string): number {\n // eslint-disable-next-line no-control-regex\n const sgrPattern = /\\x1b\\[\\d*(;\\d*)*m/g\n return str.replace(sgrPattern, '').length\n }\n\n /**\n * Style the title for displaying in the help. Called with 'Usage:', 'Options:', etc.\n */\n styleTitle(str: string): string {\n return C.yellow(str)\n }\n\n /**\n * Style the usage line for displaying in the help. Applies specific styling to different parts like options, commands, and arguments.\n */\n styleUsage(str: string): string {\n // Usage has lots of parts the user might like to color separately! Assume default usage string which is formed like:\n // command subcommand [opts] [cmd] <foo> [bar]\n return str\n .split(' ')\n .map((word: string, index, arr) => {\n if (word === this.usageDisplaySubcommandAs) {\n return C.green(word)\n }\n if (word === this.usageDisplayOptionsAs) {\n return C.blue(word)\n }\n if (word[0] === '<') {\n return C.red(word)\n }\n if (word[0] === '[') {\n return C.cyan(word)\n }\n if (arr[index + 1]?.startsWith('[')) {\n return C.magenta(word)\n }\n return this.styleCommandText(word) // Restrict to initial words?\n })\n .join(' ')\n }\n\n /**\n * Style command descriptions for display in help output.\n */\n styleCommandDescription(str: string): string {\n return this.styleDescriptionText(str)\n }\n\n /**\n * Style option descriptions for display in help output.\n */\n styleOptionDescription(str: string): string {\n return C.gray(this.styleDescriptionText(str))\n }\n\n /**\n * Style subcommand descriptions for display in help output.\n */\n styleSubcommandDescription(str: string): string {\n return this.styleDescriptionText(str)\n }\n\n /**\n * Style argument descriptions for display in help output.\n */\n styleArgumentDescription(str: string): string {\n return C.gray(this.styleDescriptionText(str))\n }\n\n /**\n * Base style used by descriptions. Override in subclass to apply custom formatting.\n */\n styleDescriptionText(str: string): string {\n return C.gray(str)\n }\n\n /**\n * Style option terms (flags) for display in help output.\n */\n styleOptionTerm(str: string): string {\n return this.styleOptionText(str)\n }\n\n /**\n * Style subcommand terms for display in help output. Applies specific styling to different parts like options and arguments.\n */\n styleSubcommandTerm(str: string): string {\n // This is very like usage with lots of parts! Assume default string which is formed like:\n // subcommand [opts] <foo> [bar]\n const res = str\n .split(' ')\n .map((word: string) => {\n if (word === this.usageDisplayOptionsAs) {\n return C.dim(word)\n }\n if (word[0] === '[' || word[0] === '<') {\n return C.dim(word)\n }\n return this.styleSubcommandText(word) // Restrict to initial words?\n })\n .join(' ')\n const split = res.split('|')\n if (split.length === 1) {\n return res\n }\n split[0] = C.green(split[0])\n return split.join('|')\n }\n\n /**\n * Style argument terms for display in help output.\n */\n styleArgumentTerm(str: string): string {\n return this.styleArgumentText(str)\n }\n\n /**\n * Base style used in terms and usage for options. Override in subclass to apply custom formatting.\n */\n styleOptionText(str: string): string {\n return str\n }\n\n /**\n * Base style used in terms and usage for arguments. Override in subclass to apply custom formatting.\n */\n styleArgumentText(str: string): string {\n return str\n }\n\n /**\n * Base style used in terms and usage for subcommands. Override in subclass to apply custom formatting.\n */\n styleSubcommandText(str: string): string {\n return str\n }\n\n /**\n * Base style used in terms and usage for commands. Override in subclass to apply custom formatting.\n */\n styleCommandText(str: string): string {\n return str\n }\n\n /**\n * Calculate the pad width from the maximum term length.\n */\n @lazyProp\n padWidth(): number {\n return Math.max(\n this.longestOptionTermLength(),\n this.longestSubcommandTermLength(),\n this.longestArgumentTermLength(),\n )\n }\n\n /**\n * Detect manually wrapped and indented strings by checking for line break followed by whitespace.\n */\n preformatted(str: string): boolean {\n return /\\n[^\\S\\r\\n]/.test(str)\n }\n\n /**\n * Format the \"item\", which consists of a term and description. Pad the term and wrap the description, indenting the following lines.\n *\n * So \"TTT\", 5, \"DDD DDDD DD DDD\" might be formatted for this.helpWidth=17 like so:\n * TTT DDD DDDD\n * DD DDD\n */\n formatItem(term: string, termWidth: number, description: string): string {\n const itemIndent = 2\n const itemIndentStr = ' '.repeat(itemIndent)\n if (!description) {\n return itemIndentStr + term\n }\n\n // Pad the term out to a consistent width, so descriptions are aligned.\n const paddedTerm = term.padEnd(termWidth + term.length - this.displayWidth(term))\n\n // Format the description.\n const spacerWidth = 2 // between term and description\n const helpWidth = this.helpWidth\n const remainingWidth = helpWidth - termWidth - spacerWidth - itemIndent\n let formattedDescription: string\n if (remainingWidth < this.minWidthToWrap || this.preformatted(description)) {\n formattedDescription = description\n } else {\n const wrappedDescription = this.boxWrap(description, remainingWidth)\n formattedDescription = wrappedDescription.replace(/\\n/g, `\\n${' '.repeat(termWidth + spacerWidth)}`)\n }\n\n // Construct and overall indent.\n return (\n itemIndentStr +\n paddedTerm +\n ' '.repeat(spacerWidth) +\n formattedDescription.replace(/\\n/g, `\\n${itemIndentStr}`)\n )\n }\n\n /**\n * Wrap a string at whitespace, preserving existing line breaks.\n * Wrapping is skipped if the width is less than `minWidthToWrap`.\n */\n boxWrap(str: string, width: number): string {\n if (width < this.minWidthToWrap) {\n return str\n }\n\n const rawLines = str.split(/\\r\\n|\\n/)\n // split up text by whitespace\n const chunkPattern = /[\\s]*[^\\s]+/g\n const wrappedLines: string[] = []\n rawLines.forEach((line: string) => {\n const chunks = line.match(chunkPattern)\n if (chunks === null) {\n wrappedLines.push('')\n return\n }\n\n let sumChunks = [chunks.shift()!]\n let sumWidth = this.displayWidth(sumChunks[0])\n chunks.forEach((chunk: string) => {\n const visibleWidth = this.displayWidth(chunk)\n // Accumulate chunks while they fit into width.\n if (sumWidth + visibleWidth <= width) {\n sumChunks.push(chunk)\n sumWidth += visibleWidth\n return\n }\n wrappedLines.push(sumChunks.join(''))\n\n const nextChunk = chunk.trimStart() // trim space at line break\n sumChunks = [nextChunk]\n sumWidth = this.displayWidth(nextChunk)\n })\n wrappedLines.push(sumChunks.join(''))\n })\n\n return wrappedLines.join('\\n')\n }\n\n /**\n * Generate the built-in help text.\n */\n render(): string {\n // Usage\n let output = [`${this.styleTitle('Usage:')} ${this.styleUsage(this.commandUsage())}`, '']\n\n // Description\n const des = this.commandDescription()\n if (des.length > 0) {\n output = output.concat([this.boxWrap(this.styleCommandDescription(des), this.helpWidth), ''])\n }\n\n // Arguments\n const argumentList = this.visibleArguments().map((argument: Argument) => {\n return this.formatItem(\n this.styleArgumentTerm(this.argumentTerm(argument)),\n this.padWidth(),\n this.styleArgumentDescription(this.argumentDescription(argument)),\n )\n })\n output = output.concat(this.formatItemList('Arguments:', argumentList))\n\n // Options\n const optionGroups = this.groupItems(this.cmd.options, this.visibleOptions(), (option: Option) => {\n return option.group ?? 'Options:'\n })\n optionGroups.forEach((options, group) => {\n const optionList = options.map((option: Option) => {\n return this.formatItem(\n this.styleOptionTerm(this.optionTerm(option)),\n this.padWidth(),\n this.styleOptionDescription(this.optionDescription(option)),\n )\n })\n output = output.concat(this.formatItemList(group, optionList))\n })\n\n // Commands\n const commandGroups = this.groupItems(\n Object.values(this.cmd.commands),\n this.visibleCommands(),\n\n (sub: ICommand) => {\n return sub.group || 'Commands:'\n },\n )\n commandGroups.forEach((commands, group) => {\n const commandList = commands.map((sub: ICommand) => {\n return this.formatItem(\n this.styleSubcommandTerm(this.subcommandTerm(sub)),\n this.padWidth(),\n this.styleSubcommandDescription(this.subcommandDescription(sub)),\n )\n })\n output = output.concat(this.formatItemList(group, commandList))\n })\n\n return output.join('\\n')\n }\n}\n", "/**\n * Asserts that a property descriptor contains a function value.\n */\nexport default function assertDescriptorValueIsFunction(key: string, descriptor: PropertyDescriptor) {\n if (!(typeof descriptor.value === 'function' && descriptor.value !== Function.prototype)) {\n throw new TypeError(`\"value\" not a function for ${key} with descriptor: ${JSON.stringify(descriptor)}.`)\n }\n}\n", "import { StringKeyOf } from '@mono/types'\n\n/**\n * Same as Object.entries except the keys are typed as keyof T.\n */\nexport function entriesOf<T extends object>(obj: T): [StringKeyOf<T>, T[StringKeyOf<T>]][] {\n return Object.entries(obj) as [StringKeyOf<T>, T[StringKeyOf<T>]][]\n}\n", "import { StringKeyOf } from '@mono/types'\n\n/**\n * Same as Object.keys except the keys are typed as string keys of T.\n */\nexport function keysOf<T extends object>(obj: T) {\n return Object.keys(obj) as StringKeyOf<T>[]\n}\n", "import { StringKeyOf } from '@mono/types'\nimport { ValueOf } from '@mono/types'\nimport { keysOf } from './keysOf'\n\n/**\n * Filter an object's own enumerable properties by predicate.\n */\nexport function filterObject<T extends object>(\n obj: T,\n predicate: (value: ValueOf<T>, key: StringKeyOf<T>, obj: T) => boolean,\n) {\n const accum = {} as T\n for (const key of keysOf(obj)) {\n if (predicate(obj[key], key, obj)) {\n accum[key] = obj[key]\n }\n }\n return accum\n}\n", "import { ValueOf } from '@mono/types'\n\n/**\n * Sorts the keys of an object in alphabetical order unless a custom compare function is provided.\n */\nexport function objSortKeys<T extends object>(\n o: T,\n compare?: (a: [string, ValueOf<T>], b: [string, ValueOf<T>]) => number,\n): T {\n const entries = Object.entries(o)\n if (compare) {\n entries.sort(compare)\n } else {\n entries.sort((a, b) => {\n return a[0].localeCompare(b[0])\n })\n }\n return Object.fromEntries(entries) as T\n}\n", "import { StringKeyOf } from '@mono/types'\n\n/**\n * Get the values of an object with type-safe return value.\n */\nexport function valuesOf<T extends object>(obj: T): T[StringKeyOf<T>][] {\n return Object.values(obj) as T[StringKeyOf<T>][]\n}\n", "import { GenericMap } from './types'\n\n/**\n * Gets a value from a map or creates it using a factory function if it doesn't exist.\n */\nexport function mapGetOrDefault<K, V, T extends GenericMap<K, V, 'get' | 'has' | 'set'>>(\n map: T,\n key: K,\n factory: (key: K, map: T) => V,\n): V {\n let value = map.get(key)\n if (value !== undefined || map.has(key)) {\n return value as V\n }\n value = factory(key, map)\n map.set(key, value)\n return value\n}\n", "/**\n * A WeakMap with automatic timeout-based expiry for entries.\n *\n * Entries are automatically removed after a specified timeout period.\n * Accessing an entry refreshes its timeout, extending its lifetime.\n * This is useful for caching scenarios where you want automatic cleanup\n * of unused entries while keeping frequently accessed ones alive.\n */\nexport class TimeoutWeakMap<K extends object, V> {\n protected readonly wmap = new WeakMap<K, [V, NodeJS.Timeout]>()\n\n /**\n * @param timeoutMs Default timeout in milliseconds for entries\n */\n constructor(readonly timeoutMs: number) {}\n\n /**\n * Retrieves the value for the given key and refreshes its timeout.\n *\n * @param key The key to retrieve\n * @returns The value if found, undefined otherwise\n */\n get(key: K): V | undefined {\n const vt: [V, NodeJS.Timeout] | undefined = this.wmap.get(key)\n if (!vt) {\n return undefined\n }\n const [value, timeout] = vt\n timeout.refresh()\n return value\n }\n\n /**\n * Sets a key-value pair with an optional custom timeout.\n *\n * @param key The key to set\n * @param value The value to associate with the key\n * @param timeoutMs Optional timeout override for this entry\n * @returns This instance for chaining\n */\n set(key: K, value: V, timeoutMs?: number): this {\n this.wmap.set(key, [\n value,\n setTimeout(() => {\n this.delete(key)\n }, timeoutMs ?? this.timeoutMs).unref(),\n ])\n return this\n }\n\n /**\n * Removes a key-value pair and clears its timeout.\n *\n * @param key The key to delete\n * @returns True if the key existed and was deleted, false otherwise\n */\n delete(key: K): boolean {\n const vt: [V, NodeJS.Timeout] | undefined = this.wmap.get(key)\n if (!vt) {\n return false\n }\n const timeout = vt[1]\n clearTimeout(timeout)\n return this.wmap.delete(key)\n }\n\n /**\n * Checks if a key exists in the map.\n * Does not refresh the timeout.\n *\n * @param key The key to check\n * @returns True if the key exists, false otherwise\n */\n has(key: K): boolean {\n return this.wmap.has(key)\n }\n\n /**\n * Loads multiple key-value pairs into the map.\n *\n * @param entries Iterable of key-value pairs to load\n * @param timeoutMs Optional timeout override for all entries\n * @returns This instance for chaining\n */\n load(entries: Iterable<[K, V]>, timeoutMs?: number): this {\n for (const [key, value] of entries) {\n this.set(key, value, timeoutMs)\n }\n return this\n }\n\n /**\n * Updates an existing value or creates a new one using an update function.\n *\n * @param key The key to update\n * @param update Function that receives the current value and returns the new value\n * @returns This instance for chaining\n */\n update(key: K, update: (value: V | undefined, key: K, map: this) => V): this {\n return this.set(key, update(this.get(key), key, this))\n }\n\n /**\n * Gets a value or creates it using a factory function if it doesn't exist.\n * Refreshes timeout if the value exists.\n *\n * @param key The key to get or create\n * @param factory Function to create the value if it doesn't exist\n * @param timeoutMs Optional timeout override for new entries\n * @returns The existing or newly created value\n */\n getOrDefault(key: K, factory: (key: K, map: this) => V, timeoutMs?: number): V {\n const vt: [V, NodeJS.Timeout] | undefined = this.wmap.get(key)\n if (vt) {\n const [value, timeout] = vt\n timeout.refresh()\n return value\n } else {\n const value = factory(key, this)\n this.set(key, value, timeoutMs)\n return value\n }\n }\n}\n", "import { GenericMap } from '@mono/map'\nimport { TimeoutWeakMap } from '@mono/map'\nimport { isFunction } from 'es-toolkit/predicate'\nimport { mapGetOrDefault } from '@mono/map'\nimport { memoizeSync } from './memoizeSync'\nimport { ms } from 'enhanced-ms'\n\n/**\n * Decorator to memoize a method or getter accessor property.\n */\nexport function lazyProp(target: object, key: string, descriptor: PropertyDescriptor): PropertyDescriptor\n\n/**\n * Decorator to temporarily memoize a method or getter accessor property.\n * @param maxAge The maximum age of the memoized value as number (ms) or descriptive string (e.g. '10 min'). Uses 'ms' library: https://github.com/zeit/ms\n */\nexport function lazyProp(\n maxAge: number | string,\n): (target: object, key: string, descriptor: PropertyDescriptor) => PropertyDescriptor\n\n//\nexport function lazyProp(\n targetOrTimeout: object | number | string,\n key?: string,\n descriptor?: PropertyDescriptor,\n) {\n if (typeof targetOrTimeout === 'number' || typeof targetOrTimeout === 'string') {\n const maxAge = typeof targetOrTimeout === 'number' ? targetOrTimeout : ms(targetOrTimeout)\n return createLazyPropDecorator(new TimeoutWeakMap(maxAge))\n } else {\n const decorator = createLazyPropDecorator(new WeakMap())\n return decorator(targetOrTimeout, key!, descriptor!)\n }\n}\n\nfunction createLazyPropDecorator<K extends object, V>(map: GenericMap<K, V, 'get' | 'set' | 'has'>) {\n return function (target: object, key: string, descriptor: PropertyDescriptor) {\n const { get, value } = descriptor\n\n if (isFunction(get)) {\n descriptor.get = function () {\n return mapGetOrDefault(map, this as K, () => {\n return get.call(this)\n })\n }\n return descriptor\n }\n\n if (isFunction(value)) {\n return memoizeSync()(target, key, descriptor)\n }\n\n throw new TypeError('neither \"get\" nor \"value\" are functions')\n }\n}\n", "import { MemoizeSyncOptions } from './types.internal'\nimport { SomeSyncFunction } from './types.internal'\nimport assertDescriptorValueIsFunction from './assertDescriptorValueIsFunction'\nimport { mapGetOrDefault } from '@mono/map'\nimport memoizee from 'memoizee'\nimport { ms } from 'enhanced-ms'\n\n/**\n * Decorator to memoize a sync method.\n * @param maxAge The maximum age of the memoized value as number (ms) or descriptive string (e.g. '10 min'). Uses 'ms' library: https://github.com/zeit/ms\n */\nexport function memoizeSync(\n maxAge?: number | string,\n): (target: object, key: string, descriptor: PropertyDescriptor) => PropertyDescriptor\n\n/**\n * Decorator to memoize a sync method.\n * @param options The options for memoization.\n */\nexport function memoizeSync(\n options: MemoizeSyncOptions,\n): (target: object, key: string, descriptor: PropertyDescriptor) => PropertyDescriptor\n\n//\nexport function memoizeSync(arg: (number | string) | MemoizeSyncOptions = {}) {\n const opts = typeof arg === 'object' ? arg : { maxAge: typeof arg === 'number' ? arg : ms(arg) }\n\n return function decorator(target: unknown, key: string, descriptor?: PropertyDescriptor) {\n if (!descriptor) {\n throw new TypeError('descriptor is undefined')\n }\n const orig = descriptor.value\n assertDescriptorValueIsFunction(key, descriptor)\n const options = { length: false, ...opts } as memoizee.Options<SomeSyncFunction>\n\n if (opts.instancesShareCache) {\n Reflect.deleteProperty(options, 'instancesShareCache')\n descriptor.value = memoizee(orig, options)\n } else {\n const wmap = new WeakMap()\n descriptor.value = function (...args: any[]) {\n const memoized = mapGetOrDefault(wmap, this, () => {\n return memoizee(orig, options)\n })\n return memoized.apply(this, args)\n }\n }\n\n return descriptor\n }\n}\n", "/**\n * Returns the last element of an array.\n * Throws an error if the array is empty.\n * @template T The type of elements in the array.\n * @param array The array to get the last element from.\n * @returns The last element of the array.\n * @throws If the array is empty.\n * @example const numbers = [1, 2, 3, 4, 5];\n * const lastNumber = arrLast(numbers);\n * //=> 5\n */\nexport function arrLast<T>(array: T[]): T {\n if (!array.length) {\n throw new Error('Cannot get last element of empty array.')\n }\n return array[array.length - 1]\n}\n", "/**\n * Remove duplicates from an array\n * @remarks This function uses the JavaScript Set object to remove duplicate values from an array.\n * @typeparam T - The type of elements in the array.\n * @returns The new array with duplicates removed.\n * @param array The array from which to remove duplicates.\n * @example ```ts\n * const array = [1, 2, 2, 3, 4, 4, 5];\n * arrRemoveDuplicates(array);\n * //=> [1, 2, 3, 4, 5]\n * ```\n */\nexport function arrRemoveDuplicates<T>(array: T[]): T[] {\n return Array.from(new Set(array))\n}\n", "import type { Option } from '../types'\n\n/** Collect consecutive positional tokens into variadic string option values */\nexport function collectVariadicOptionValues(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n parsed: { tokens: any[]; values: any; positionals: string[] },\n options: Option[],\n): void {\n for (let i = 0; i < parsed.tokens.length; i++) {\n const token = parsed.tokens[i]\n if (token.kind !== 'option') {\n continue\n }\n\n const def = options.find((o) => {\n return o.name === token.name\n })\n if (!def?.variadic || def.type !== 'string') {\n continue\n }\n\n const values = [token.value]\n let j = i + 1\n while (j < parsed.tokens.length && parsed.tokens[j].kind === 'positional') {\n const positionalToken = parsed.tokens[j]\n values.push(positionalToken.value)\n const posIndex = parsed.positionals.indexOf(positionalToken.value)\n if (posIndex !== -1) {\n parsed.positionals.splice(posIndex, 1)\n }\n j++\n }\n\n Reflect.set(\n parsed.values,\n token.name,\n values.filter((v): v is string => {\n return v !== undefined\n }),\n )\n }\n}\n", "import type { Command } from '../Command'\nimport type { ICommand } from '../types'\nimport { valuesOf } from '@mono/object'\n\n/**\n * Finds subcommand by name or alias\n */\nexport function findCommand<C extends Command = Command>(cmd: ICommand, nameOrAlias: string): C | undefined {\n return (cmd.commands[nameOrAlias] ??\n valuesOf(cmd.commands).find((c) => {\n return c.aliases.includes(nameOrAlias)\n })) as C | undefined\n}\n", "import type { ICommand } from '../types'\nimport type { Option } from '../types'\n\n/**\n * Finds option by name, short name or long name\n */\nexport function findOption<C extends ICommand>(cmd: C, nameOrShortOrLong: string): Option | undefined {\n return nameOrShortOrLong.startsWith('--')\n ? cmd.options.find((o) => {\n return o.long === nameOrShortOrLong.slice(2)\n })\n : nameOrShortOrLong.startsWith('-')\n ? cmd.options.find((o) => {\n return o.short === nameOrShortOrLong.slice(1)\n })\n : cmd.options.find((o) => {\n return o.name === nameOrShortOrLong\n })\n}\n", "import type { ICommand } from '../types'\nimport { getCommandAndAncestors } from './getCommandAndAncestors'\n\n/**\n * Returns all ancestor commands excluding this command\n */\nexport function getCommandAncestors<C extends ICommand>(cmd: C) {\n return getCommandAndAncestors(cmd).slice(1) as C[]\n}\n", "import type { ICommand } from '../types'\n\n/**\n * Returns command and all ancestor commands in hierarchy\n */\nexport function getCommandAndAncestors<C extends ICommand>(cmd: C) {\n const result = []\n let command: ICommand | undefined = cmd as unknown as ICommand\n for (; command; command = command.parent) {\n result.push(command)\n }\n return result as [typeof cmd, ...ICommand[]]\n}\n", "import type { Option } from '../types'\n\n/** Merge default option values into parsed values where not already set */\nexport function mergeOptionDefaults(values: Record<string, unknown>, options: Option[]): void {\n for (const option of options) {\n if (option.defaultValue !== undefined && option.name in values) {\n values[option.name] ??= option.defaultValue\n }\n }\n}\n", "import type { Option } from '../types'\n\n/** Map long option names (kebab-case) to their camelCased equivalents in argv */\nexport function normalizeArgv(argv: string[], options: Option[]): string[] {\n for (const o of options) {\n if (o.long === o.name) {\n continue\n }\n argv = argv.map((a) => {\n if (a === `--${o.long}`) {\n return `--${o.name}`\n }\n if (a === `--no-${o.long}`) {\n return `--no-${o.name}`\n }\n return a\n })\n }\n return argv\n}\n", "import type { CamelCase } from 'type-fest'\nimport type { OptionUsage } from '../types'\n\n/**\n * Parses option flags string into its components\n */\nexport function parseOptionFlags<Long extends string>(\n flags: OptionUsage<Long>,\n): {\n short: string\n long: Long\n name: CamelCase<Long>\n argName: string | undefined\n} {\n const match = flags.match(/^-(.+?), --([a-zA-Z][\\w-]*)(?:\\s*(<(.+?)>|\\[(.+?)\\]))?$/)\n if (!match) {\n throw new Error(`Invalid option format: ${flags}`)\n }\n\n const short = match[1]\n if (short.length !== 1) {\n throw new Error(`Expected short name to be a single character. Got: -${short}`)\n }\n\n const long = match[2] as Long\n const argName = (match[4] || match[5])?.replace(/\\.\\.\\.$/, '') || undefined\n const name = long.split('-').reduce((str, word) => {\n return str + word[0].toUpperCase() + word.slice(1)\n }) as CamelCase<Long>\n\n return { short, long, name, argName }\n}\n", "import type { Argument } from '../types'\nimport { arrLast } from '@mono/array'\n\n/** Map positional strings to argument definitions, trimming trailing undefineds */\nexport function resolveArguments(positionals: string[], args: Argument[]): unknown[] {\n const result = args.map((arg, index) => {\n if (arg.variadic) {\n const remaining = positionals.slice(index)\n return remaining.length > 0 ? remaining : arg.defaultValue\n }\n return positionals[index] ?? arg.defaultValue\n })\n while (result.length && arrLast(result) === undefined) {\n result.pop()\n }\n return result\n}\n", "/**\n * Set the name of a function.\n */\nexport function setName<T extends object>(name: string | { name: string }, target: T): T {\n return Object.defineProperty(target, 'name', {\n value: typeof name === 'string' ? name : name.name,\n configurable: true,\n enumerable: false,\n })\n}\n", "/**\n * Converts the first character of a string to uppercase.\n * @param string The string to be converted.\n * @example ```ts\n * strFirstCharToUpperCase('hello');\n * //=> 'Hello'\n * ```\n */\nexport function strFirstCharToUpperCase(string: string): string {\n return string.charAt(0).toUpperCase() + string.substring(1)\n}\n", "import colors from 'ansi-colors'\nimport { isPrimitive } from 'es-toolkit/predicate'\nimport { isString } from 'es-toolkit/predicate'\n\n/**\n * Logger interface defining methods for different log levels.\n */\nexport interface Logger {\n start: (...args: unknown[]) => void\n done: (...args: unknown[]) => void\n info: (...args: unknown[]) => void\n log: (...args: unknown[]) => void\n warn: (...args: unknown[]) => void\n error: (...args: unknown[]) => void\n debug: (...args: unknown[]) => void\n}\n\n/**\n * Creates a logger instance with colored output and consistent formatting.\n */\nexport function createLogger(name: string): Logger {\n const NAME = name ? colors.dim.cyan(name) : name\n\n const START = [NAME, colors.dim.gray('[START]')].filter(Boolean)\n const DEBUG = [NAME, colors.dim.magenta('[DEBUG]')].filter(Boolean)\n const INFO = [NAME, colors.dim.gray('[INFO]')].filter(Boolean)\n const DONE = [NAME, colors.dim.green('[DONE] ')].filter(Boolean)\n const WARN = [NAME, colors.dim.yellow('[WARN] ')].filter(Boolean)\n const ERROR = [NAME, colors.dim.red('[ERROR]')].filter(Boolean)\n\n const grayArgs = createColoredArgs(colors.gray)\n const cyanArgs = createColoredArgs(colors.cyan)\n const yellowArgs = createColoredArgs(colors.yellow)\n\n return {\n start: (...args: unknown[]) => {\n return console.info(...START, ...args)\n },\n done: (...args: unknown[]) => {\n return console.info(...DONE, ...args)\n },\n info: (...args: unknown[]) => {\n return console.info(...INFO, ...grayArgs(args))\n },\n log: (...args: unknown[]) => {\n return console.log(...(NAME ? [NAME, ...args] : args))\n },\n warn: (...args: unknown[]) => {\n return console.warn(...WARN, ...yellowArgs(args))\n },\n debug: (...args: unknown[]) => {\n return console.debug(...DEBUG, ...cyanArgs(args))\n },\n error: (...args: unknown[]) => {\n return args.forEach((arg) => {\n return console.error(...ERROR, arg)\n })\n },\n }\n}\n\n/**\n * Creates a function that applies the given color function to string and primitive arguments.\n * Non-string and non-primitive arguments are returned unchanged.\n */\nfunction createColoredArgs(colorFn: (str: string) => string) {\n return (args: unknown[]) => {\n return args.map((arg) => {\n if (isString(arg)) {\n if (arg === colors.stripColor(arg)) {\n return colorFn(arg)\n } else {\n return arg\n }\n } else if (isPrimitive(arg)) {\n return colorFn(String(arg))\n } else {\n return arg\n }\n })\n }\n}\n", "import type { Logger } from './createLogger'\nimport colors from 'ansi-colors'\nimport { createLogger } from './createLogger'\nimport humanizeDuration from 'humanize-duration'\nimport { isPromise } from 'node:util/types'\n\n/**\n * Executes a task and logs the execution time.\n */\nexport function timer<T>(\n arg: string | [name: string, description: string],\n task: (log: Logger, name: string) => T,\n): T {\n const t0 = process.hrtime.bigint()\n const [name, description] = Array.isArray(arg) ? arg : [arg, '']\n const log = createLogger(name)\n\n if (name && description) {\n log.start(description)\n }\n\n const retval = task(log, name)\n\n if (!isPromise(retval)) {\n return done(retval)\n }\n\n return (retval as Promise<Awaited<T>>).then((result) => {\n return done(result)\n }) as T\n\n function done(retval: T) {\n if (process.exitCode) {\n return retval\n }\n const ns = process.hrtime.bigint() - t0\n const ms = Math.floor(Number(ns) / 1000000)\n log.done(colors.dim(humanizeDuration(ms)))\n return retval\n }\n}\n", "import type { Argument } from '../types'\nimport type { Option } from '../types'\nimport { entriesOf } from '@mono/object'\n\n/** Validate parsed arguments and option values, returning errors or undefined */\nexport function validateParsed(\n args: unknown[],\n optionValues: Record<string, unknown>,\n argDefs: Argument[],\n optionDefs: Option[],\n): string[] | undefined {\n return argDefs\n .map((def, index) => {\n const value = args[index]\n if (def.required) {\n if (def.variadic ? Array.isArray(value) && value.length === 0 : value === undefined) {\n return `Missing argument [${index}] ${def.usage}`\n }\n }\n if (def.choices && value !== undefined) {\n if (\n ![value].flat().every((v) => {\n return def.choices!.includes(v as string)\n })\n ) {\n return `Invalid argument [${index}] ${def.usage}: Got \\`${value}\\`. Accepted values: [${def.choices\n .map((c) => {\n return `\\`${c}\\``\n })\n .join(',')}]`\n }\n }\n })\n .concat(\n entriesOf(optionValues).map(([key, value]) => {\n const def = optionDefs.find((o) => {\n return o.name === key\n })!\n if (!def) {\n return `Unknown option --${key}`\n }\n if (def.choices && value !== undefined) {\n if (\n !((def.variadic ? value : [value]) as string[]).every((v) => {\n return def.choices!.includes(v)\n })\n ) {\n return `Invalid option value ${def.flags}: Got \\`${value}\\`. Accepted values: [${def.choices\n .map((c) => {\n return `\\`${c}\\``\n })\n .join(',')}]`\n }\n }\n }),\n )\n .filter((s) => {\n return s !== undefined\n })\n .reduce(\n (acc, curr) => {\n return (acc ?? []).concat(curr)\n },\n undefined as string[] | undefined,\n )\n}\n", "import type { AllUnionFields } from 'type-fest'\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Command } from './Command'\nimport type { SetFieldType } from 'type-fest'\nimport type { SetRequired } from 'type-fest'\nimport type { Simplify } from 'type-fest'\n\n/** Logger interface defining methods for different log levels. */\nexport interface Logger {\n start: (...args: unknown[]) => void\n done: (...args: unknown[]) => void\n info: (...args: unknown[]) => void\n log: (...args: unknown[]) => void\n warn: (...args: unknown[]) => void\n error: (...args: unknown[]) => void\n debug: (...args: unknown[]) => void\n}\n\n/** Parsed command-line arguments */\nexport type Arguments = (undefined | string | string[])[]\n\n/** Parsed command-line options */\nexport type Options = Record<string, undefined | boolean | string | string[]>\n\n/** Result of parsing command-line input, including arguments, options, triggered actions, and execution method */\n\nexport type SubCommands = { [name: string]: Command<Arguments, Options, any> }\n\n/** Base descriptor for command-line arguments with shared properties */\nexport interface Argument {\n usage: string\n name: string\n description?: string\n required?: boolean\n variadic?: boolean\n choices?: string[]\n defaultValue?: string | string[]\n defaultValueDescription?: string\n}\n\n/** Base descriptor for command-line options with shared properties */\nexport interface Option {\n type: 'boolean' | 'string'\n flags: string\n short: string\n long: string\n name: string\n argName?: string\n description?: string\n required?: boolean\n variadic?: boolean\n negate?: boolean\n defaultValue?: boolean | string | string[]\n defaultValueDescription?: string\n env?: string\n hidden?: boolean\n choices?: string[]\n group?: string\n}\n\n/** Complete command configuration including all properties and substructures */\nexport interface ICommand {\n /** Parent command if this is a subcommand */\n readonly parent?: ICommand\n /** Help configuration and rendering */\n // readonly help: IHelp\n /** Command name used for invocation */\n name: string\n /** Alternative names for this command */\n aliases: string[]\n /** Optional version string */\n version?: string\n /** Full command description */\n description: string\n /** Brief single-line description */\n summary?: string\n /** Whether command should be hidden from help */\n hidden?: boolean\n /** Group name for organizing commands in help */\n group?: string\n /** Positional arguments */\n arguments: Argument[]\n /** Named options/flags */\n options: Option[]\n /** Child subcommands */\n commands: { [name: string]: ICommand }\n}\n\nexport interface IHelp {\n /** output helpWidth, long lines are wrapped to fit */\n helpWidth: number\n minWidthToWrap: number\n sortSubcommands: boolean\n sortOptions: boolean\n usageDisplayOptionsAs: string\n usageDisplaySubcommandAs: string\n /**\n * Get an array of the visible subcommands. Includes a placeholder for the implicit help command, if there is one.\n */\n visibleCommands(): ICommand[]\n /**\n * Compare options for sort.\n */\n compareOptions(a: Option, b: Option): number\n /**\n * Get an array of the visible options. Includes a placeholder for the implicit help option, if there is one.\n */\n visibleOptions(): Option[]\n /**\n * Get an array of the arguments if any have a description.\n */\n visibleArguments(): Argument[]\n /**\n * Get the command term to show in the list of subcommands.\n */\n subcommandTerm(sub: ICommand): string\n /**\n * Get the option term to show in the list of options.\n */\n optionTerm(option: Option): string\n /**\n * Get the argument term to show in the list of arguments.\n */\n argumentTerm(argument: Argument): string\n /**\n * Get the longest subcommand primary alias length.\n */\n longestSubcommandAliasLength(): number\n /**\n * Get the longest subcommand term length.\n */\n longestSubcommandTermLength(): number\n /**\n * Get the longest option term length.\n */\n longestOptionTermLength(): number\n /**\n * Get the longest argument term length.\n */\n longestArgumentTermLength(): number\n /**\n * Get the command usage to be displayed at the top of the built-in help.\n */\n commandUsage(): string\n /**\n * Get the description for the command.\n */\n commandDescription(): string\n /**\n * Get the subcommand summary to show in the list of subcommands.\n * (Fallback to description for backwards compatibility.)\n */\n subcommandDescription(sub: ICommand): string\n /**\n * Get the option description to show in the list of options.\n */\n optionDescription(option: Option): string\n /**\n * Get the argument description to show in the list of arguments.\n */\n argumentDescription(argument: Argument): string\n /**\n * Format a list of items, given a heading and an array of formatted items.\n */\n formatItemList(heading: string, items: string[]): string[]\n /**\n * Group items by their help group heading.\n */\n groupItems<T extends ICommand | Option>(\n unsortedItems: T[],\n visibleItems: T[],\n getGroup: (item: T) => string,\n ): Map<string, T[]>\n /**\n * Return display width of string, ignoring ANSI escape sequences. Used in padding and wrapping calculations.\n */\n displayWidth(str: string): number\n /**\n * Style the title for displaying in the help. Called with 'Usage:', 'Options:', etc.\n */\n styleTitle(str: string): string\n /**\n * Style the usage line for displaying in the help. Applies specific styling to different parts like options, commands, and arguments.\n */\n styleUsage(str: string): string\n /**\n * Style command descriptions for display in help output.\n */\n styleCommandDescription(str: string): string\n /**\n * Style option descriptions for display in help output.\n */\n styleOptionDescription(str: string): string\n /**\n * Style subcommand descriptions for display in help output.\n */\n styleSubcommandDescription(str: string): string\n /**\n * Style argument descriptions for display in help output.\n */\n styleArgumentDescription(str: string): string\n /**\n * Base style used by descriptions. Override in subclass to apply custom formatting.\n */\n styleDescriptionText(str: string): string\n /**\n * Style option terms (flags) for display in help output.\n */\n styleOptionTerm(str: string): string\n /**\n * Style subcommand terms for display in help output. Applies specific styling to different parts like options and arguments.\n */\n styleSubcommandTerm(str: string): string\n /**\n * Style argument terms for display in help output.\n */\n styleArgumentTerm(str: string): string\n /**\n * Base style used in terms and usage for options. Override in subclass to apply custom formatting.\n */\n styleOptionText(str: string): string\n /**\n * Base style used in terms and usage for arguments. Override in subclass to apply custom formatting.\n */\n styleArgumentText(str: string): string\n /**\n * Base style used in terms and usage for subcommands. Override in subclass to apply custom formatting.\n */\n styleSubcommandText(str: string): string\n /**\n * Base style used in terms and usage for commands. Override in subclass to apply custom formatting.\n */\n styleCommandText(str: string): string\n /**\n * Calculate the pad width from the maximum term length.\n */\n padWidth(): number\n /**\n * Detect manually wrapped and indented strings by checking for line break followed by whitespace.\n */\n preformatted(str: string): boolean\n /**\n * Format the \"item\", which consists of a term and description. Pad the term and wrap the description, indenting the following lines.\n *\n * So \"TTT\", 5, \"DDD DDDD DD DDD\" might be formatted for this.helpWidth=17 like so:\n * TTT DDD DDDD\n * DD DDD\n */\n formatItem(term: string, termWidth: number, description: string): string\n /**\n * Wrap a string at whitespace, preserving existing line breaks.\n * Wrapping is skipped if the width is less than `minWidthToWrap`.\n */\n boxWrap(str: string, width: number): string\n /**\n * Generate the built-in help text.\n */\n render(): string\n}\n\n/** Action handler function type, which receives parsed arguments and options as well as metadata about the command execution context. */\nexport type ActionHandler<A extends Arguments, O extends Options, Subs extends SubCommands> = (\n ...args: [\n ...A,\n O,\n {\n path: string[]\n name: string\n argv: string[]\n args: A\n opts: O\n errors?: string[]\n cmd: Command<A, O, Subs>\n logger: Logger\n },\n ]\n) => Promise<void> | void\n\n/** Predicate function type for hooks, which receives the same metadata as action handlers and returns a boolean indicating whether the hook's action should be executed. */\nexport type HookPredicate<\n A extends Arguments = Arguments,\n O extends Options = Options,\n Subs extends SubCommands = SubCommands,\n> = (data: {\n path: string[]\n name: string\n argv: string[]\n args: A\n opts: O\n errors?: string[]\n cmd: Command<A, O, Subs>\n}) => boolean\n\n/** Action handler function type for hooks, which receives the same metadata as action handlers and is executed when its predicate returns true. Can also throw to indicate an error. */\nexport type HookActionHandler<\n A extends Arguments = Arguments,\n O extends Options = Options,\n Subs extends SubCommands = SubCommands,\n> = (data: {\n path: string[]\n name: string\n argv: string[]\n args: A\n opts: O\n errors?: string[]\n cmd: Command<A, O, Subs>\n}) => Promise<void> | void | never\n\n/** Hook definition type, which includes the option name that triggers the hook, a predicate function to determine when the hook should run, and an action handler to execute when triggered. */\nexport type HookDefinition<\n A extends Arguments = Arguments,\n O extends Options = Options,\n Subs extends SubCommands = SubCommands,\n> = {\n name: keyof O\n predicate: HookPredicate<A, O, Subs>\n action: HookActionHandler<A, O, Subs>\n}\n\n/**\n * @see Command.prototype.parseArgv\n */\nexport type ParseArgvResult<\n A extends Arguments = Arguments,\n O extends Options = Options,\n Subs extends SubCommands = SubCommands,\n> = {\n /** The command or subcommand instance */\n get cmd(): Command<A, O, Subs>\n /** The part of argv that makes out a subcommand path, or empty array when root command */\n path: string[]\n /** Command namer */\n name: string\n /** Original argv array passed in or from process.argv, excluding subcommand path */\n argv: string[]\n /** Parsed arguments */\n args: A\n /** Parsed options */\n opts: O\n /** Error messages if parsing failed, otherwise undefined */\n errors?: string[]\n /** Names of all triggered hooks whose predicate returned true */\n hooks: HookDefinition<A, O, Subs>[]\n\n /** Calls the action handler with its expected args */\n execute: () => Promise<void>\n}\n\n/** required variadic argument */\nexport type RequiredVariadicArgumentUsage = `<${string}...>`\n\n/** optional variadic argument */\nexport type OptionalVariadicArgumentUsage = `[${string}...]`\n\n/** required argument */\nexport type RequiredArgumentUsage = `<${string}>`\n\n/** optional argument */\nexport type OptionalArgumentUsage = `[${string}]`\n\n/** Union of all argument usage pattern types */\nexport type ArgumentUsage =\n | RequiredVariadicArgumentUsage\n | OptionalVariadicArgumentUsage\n | RequiredArgumentUsage\n | OptionalArgumentUsage\n\n/** Helper type to infer allowed argument usage patterns based on the command's existing argument types */\ntype InferArgumentUsage<T extends Command<any, any, any>> =\n T extends Command<infer A, any>\n ? A extends string[]\n ? ArgumentUsage\n : A extends (string | (string | undefined))[]\n ? OptionalArgumentUsage | OptionalVariadicArgumentUsage\n : never\n : never\n\n/** Helper type to infer allowed argument usage patterns based on the command's existing argument types */\nexport type AllowedArgumentUsage<T extends Command<any, any, any>, Usage extends ArgumentUsage> =\n Usage extends InferArgumentUsage<T> ? Usage : never\n\n/** Base type for addArgument options, extended by specific required/optional and variadic/non-variadic argument option types */\ntype ArgumentOptionsBase = Omit<\n Argument,\n 'name' | 'required' | 'variadic' | 'usage' | 'defaultValue' | 'defaultValueDescription'\n>\n\n/** Base type for addArgument options, extended by specific required/optional and variadic/non-variadic argument option types */\ntype ExtendArgumentOptionsBase<T extends object = object> = Simplify<ArgumentOptionsBase & T>\n\n/** Required positional argument descriptor. Usage: `<name>` */\nexport type RequiredArgumentOptions = ExtendArgumentOptionsBase\n\n/** Optional positional argument with string default. Usage: `[name]` */\nexport type OptionalArgumentOptions = ExtendArgumentOptionsBase<{\n defaultValue?: string\n defaultValueDescription?: string\n}>\n\n/** Optional positional argument with required string default. Usage: `[name]` */\nexport type OptionalArgumentOptionsWithDefaultValue = SetFieldType<\n SetRequired<OptionalArgumentOptions, 'defaultValue'>,\n 'defaultValue',\n string\n>\n\n/** Required variadic argument accepting variadic values. Usage: `<name...>` */\nexport type RequiredVariadicArgumentOptions = ExtendArgumentOptionsBase\n\n/** Optional variadic argument with array default. Usage: `[name...]` */\nexport type OptionalVariadicArgumentOptions = ExtendArgumentOptionsBase<{\n defaultValue?: string[]\n defaultValueDescription?: string\n}>\n\n/** Union of all addArgument options types */\nexport type ArgumentOptions = AllUnionFields<\n | RequiredArgumentOptions\n | OptionalArgumentOptions\n | OptionalArgumentOptionsWithDefaultValue\n | RequiredVariadicArgumentOptions\n | OptionalVariadicArgumentOptions\n>\n\n/** Helper type for extracting argument name from usage pattern */\nexport type InferAddedArgumentType<Opts> = Opts extends { choices: infer C extends string[] } ? C[number] : string\n\n/** Union of all option usage pattern types */\nexport type OptionUsage<Long extends string> =\n // boolean flag\n | `-${string}, --${Long}`\n // required string option\n | `-${string}, --${Long} <${string}>`\n // optional string option\n | `-${string}, --${Long} [${string}]`\n // required variadic option\n | `-${string}, --${Long} <${string}...>`\n // optional variadic option\n | `-${string}, --${Long} [${string}...]`\n\n/** Base type for addOption options, extended by specific boolean/string and required/optional and variadic/non-variadic option types */\ntype OptionOptionsBase = Omit<\n Option,\n 'name' | 'required' | 'variadic' | 'type' | 'argName' | 'short' | 'long' | 'flags'\n>\n\n/** Helper type to extend base addOption options with specific fields for different option types */\ntype ExtendAddOptionOptionsBase<T extends object = object> = Simplify<OptionOptionsBase & T>\n\n/** Boolean flag option. Usage: `-v, --verbose` */\nexport type BooleanOptionOptions = ExtendAddOptionOptionsBase<{\n defaultValue?: boolean\n defaultValueDescription?: string\n}>\n\n/** Required string option. Usage: `-f, --file <path>` */\nexport type RequiredOptionOptions = ExtendAddOptionOptionsBase<{\n env?: undefined\n}>\n\n/** Optional string option with default. Usage: `-o, --output [path]` */\nexport type OptionalOptionOptions = ExtendAddOptionOptionsBase<{\n defaultValue?: string\n defaultValueDescription?: string\n}>\n\n/** Required option accepting variadic values. Usage: `-i, --include <patterns...>` */\nexport type RequiredVariadicOptionOptions = ExtendAddOptionOptionsBase<{\n env?: undefined\n}>\n\n/** Optional option accepting variadic values with defaults. Usage: `-e, --exclude [patterns...]` */\nexport type OptionalVariadicOptionOptions = ExtendAddOptionOptionsBase<{\n defaultValue?: string[]\n defaultValueDescription?: string\n}>\n\n/** Union of all addOption options types */\nexport type OptionOptions = AllUnionFields<\n | BooleanOptionOptions\n | RequiredOptionOptions\n | OptionalOptionOptions\n | RequiredVariadicOptionOptions\n | OptionalVariadicOptionOptions\n>\n\n/** Helper type to infer the resulting Command type after adding an option with specific options */\nexport type InferAddOptionResult<\n A extends Arguments,\n O extends Options,\n NewOptions extends Options,\n Subs extends SubCommands,\n> = Command<A, Simplify<O & NewOptions>, Subs>\n", "export * from './lib/Command'\nexport * from './lib/Help'\nexport * from './lib/helpers/findCommand'\nexport * from './lib/helpers/findOption'\nexport * from './lib/helpers/getCommandAncestors'\nexport * from './lib/helpers/getCommandAndAncestors'\nexport * from './lib/helpers/parseOptionFlags'\nexport * from './lib/types'\n\nimport * as MODULE_1 from './lib/Command'\nimport * as MODULE_2 from './lib/Help'\nimport * as MODULE_3 from './lib/helpers/findCommand'\nimport * as MODULE_4 from './lib/helpers/findOption'\nimport * as MODULE_5 from './lib/helpers/getCommandAncestors'\nimport * as MODULE_6 from './lib/helpers/getCommandAndAncestors'\nimport * as MODULE_7 from './lib/helpers/parseOptionFlags'\nimport * as MODULE_8 from './lib/types'\n\nexport default {\n ...MODULE_1, //\n ...MODULE_2,\n ...MODULE_3,\n ...MODULE_4,\n ...MODULE_5,\n ...MODULE_6,\n ...MODULE_7,\n ...MODULE_8,\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["ms", "ms", "colors", "colors", "retval", "ms", "colors", "colors", "initials"]
|
|
7
7
|
}
|