dyson-swarm-cli 1.1.2 → 1.2.4
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/dist/index.js +33 -27
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../node_modules/@jsr/cliffy__internal/runtime/get_args.ts","../../node_modules/@jsr/std__text/levenshtein_distance.ts","../../node_modules/@jsr/std__text/closest_string.ts","../../node_modules/@jsr/cliffy__flags/_utils.ts","../../node_modules/@jsr/cliffy__flags/_errors.ts","../../node_modules/@jsr/cliffy__flags/types/boolean.ts","../../node_modules/@jsr/cliffy__flags/types/number.ts","../../node_modules/@jsr/cliffy__flags/types/string.ts","../../node_modules/@jsr/cliffy__flags/_validate_flags.ts","../../node_modules/@jsr/cliffy__flags/types/integer.ts","../../node_modules/@jsr/cliffy__flags/flags.ts","../../node_modules/@jsr/std__fmt/colors.ts","../../node_modules/@cliffy/command/_utils.ts","../../node_modules/@cliffy/command/_errors.ts","../../node_modules/@jsr/cliffy__internal/runtime/exit.ts","../../node_modules/@jsr/cliffy__internal/runtime/get_env.ts","../../node_modules/@jsr/cliffy__table/border.ts","../../node_modules/@jsr/cliffy__table/cell.ts","../../node_modules/@jsr/cliffy__table/column.ts","../../node_modules/@jsr/cliffy__table/unicode_width.ts","../../node_modules/@jsr/cliffy__table/_utils.ts","../../node_modules/@jsr/cliffy__table/consume_words.ts","../../node_modules/@jsr/cliffy__table/row.ts","../../node_modules/@jsr/cliffy__table/_layout.ts","../../node_modules/@jsr/cliffy__table/table.ts","../../node_modules/@jsr/cliffy__internal/runtime/inspect.ts","../../node_modules/@cliffy/command/type.ts","../../node_modules/@cliffy/command/help/_help_generator.ts","../../node_modules/@cliffy/command/types/boolean.ts","../../node_modules/@cliffy/command/types/string.ts","../../node_modules/@cliffy/command/types/file.ts","../../node_modules/@cliffy/command/types/integer.ts","../../node_modules/@cliffy/command/types/number.ts","../../node_modules/@cliffy/command/types/secret.ts","../../node_modules/@cliffy/command/upgrade/_check_version.ts","../../node_modules/@cliffy/command/command.ts","../src/index.ts","../src/commands/create.ts","../src/commands/list.ts","../src/commands/get.ts","../src/commands/update.ts","../src/commands/status.ts","../src/commands/assign.ts","../src/commands/unassign.ts","../src/commands/delete.ts"],"sourcesContent":["// deno-lint-ignore-file no-explicit-any\n\n/**\n * Get script arguments.\n *\n * @internal\n */\nexport function getArgs(): Array<string> {\n // dnt-shim-ignore\n const { Deno, process, Bun } = globalThis as any;\n\n return Deno?.args ?? Bun?.argv.slice(2) ?? process?.argv.slice(2) ?? [];\n}\n","// Copyright 2018-2026 the Deno authors. MIT license.\n// This module is browser compatible.\nconst { ceil } = Math;\n\n// This implements Myers' bit-vector algorithm as described here:\n// https://dl.acm.org/doi/pdf/10.1145/316542.316550\nconst peq = new Uint32Array(0x110000);\n\nfunction myers32(t: string[], p: string[]): number {\n const n = t.length;\n const m = p.length;\n for (let i = 0; i < m; i++) {\n peq[p[i]!.codePointAt(0)!]! |= 1 << i;\n }\n const last = m - 1;\n let pv = -1;\n let mv = 0;\n let score = m;\n for (let j = 0; j < n; j++) {\n const eq = peq[t[j]!.codePointAt(0)!]!;\n const xv = eq | mv;\n const xh = (((eq & pv) + pv) ^ pv) | eq;\n let ph = mv | ~(xh | pv);\n let mh = pv & xh;\n score += ((ph >>> last) & 1) - ((mh >>> last) & 1);\n // Set the horizontal delta in the first row to +1\n // because we are computing the distance between two full strings.\n ph = (ph << 1) | 1;\n mh = mh << 1;\n pv = mh | ~(xv | ph);\n mv = ph & xv;\n }\n for (let i = 0; i < m; i++) {\n peq[p[i]!.codePointAt(0)!] = 0;\n }\n return score;\n}\n\nfunction myersX(t: string[], p: string[]): number {\n const n = t.length;\n const m = p.length;\n // Initialize the horizontal deltas to +1.\n const h = new Int8Array(n).fill(1);\n const bmax = ceil(m / 32) - 1;\n // Process the blocks row by row so that we can use the fixed-size peq array.\n for (let b = 0; b < bmax; b++) {\n const start = b * 32;\n const end = (b + 1) * 32;\n for (let i = start; i < end; i++) {\n peq[p[i]!.codePointAt(0)!]! |= 1 << i;\n }\n let pv = -1;\n let mv = 0;\n for (let j = 0; j < n; j++) {\n const hin = h[j]!;\n let eq = peq[t[j]!.codePointAt(0)!]!;\n const xv = eq | mv;\n eq |= hin >>> 31;\n const xh = (((eq & pv) + pv) ^ pv) | eq;\n let ph = mv | ~(xh | pv);\n let mh = pv & xh;\n h[j] = (ph >>> 31) - (mh >>> 31);\n ph = (ph << 1) | (-hin >>> 31);\n mh = (mh << 1) | (hin >>> 31);\n pv = mh | ~(xv | ph);\n mv = ph & xv;\n }\n for (let i = start; i < end; i++) {\n peq[p[i]!.codePointAt(0)!] = 0;\n }\n }\n const start = bmax * 32;\n for (let i = start; i < m; i++) {\n peq[p[i]!.codePointAt(0)!]! |= 1 << i;\n }\n const last = m - 1;\n let pv = -1;\n let mv = 0;\n let score = m;\n for (let j = 0; j < n; j++) {\n const hin = h[j]!;\n let eq = peq[t[j]!.codePointAt(0)!]!;\n const xv = eq | mv;\n eq |= hin >>> 31;\n const xh = (((eq & pv) + pv) ^ pv) | eq;\n let ph = mv | ~(xh | pv);\n let mh = pv & xh;\n score += ((ph >>> last) & 1) - ((mh >>> last) & 1);\n ph = (ph << 1) | (-hin >>> 31);\n mh = (mh << 1) | (hin >>> 31);\n pv = mh | ~(xv | ph);\n mv = ph & xv;\n }\n for (let i = start; i < m; i++) {\n peq[p[i]!.codePointAt(0)!] = 0;\n }\n return score;\n}\n\n/**\n * Calculates the\n * {@link https://en.wikipedia.org/wiki/Levenshtein_distance | Levenshtein distance}\n * between two strings.\n *\n * > [!NOTE]\n * > The complexity of this function is O(m * n), where m and n are the lengths\n * > of the two strings. It's recommended to limit the length and validate input\n * > if arbitrarily accepting input.\n *\n * @example Usage\n * ```ts\n * import { levenshteinDistance } from \"@std/text/levenshtein-distance\";\n * import { assertEquals } from \"@std/assert\";\n *\n * assertEquals(levenshteinDistance(\"aa\", \"bb\"), 2);\n * ```\n * @param str1 The first string.\n * @param str2 The second string.\n * @returns The Levenshtein distance between the two strings.\n */\nexport function levenshteinDistance(str1: string, str2: string): number {\n let t = [...str1];\n let p = [...str2];\n\n if (t.length < p.length) {\n [p, t] = [t, p];\n }\n if (p.length === 0) {\n return t.length;\n }\n return p.length <= 32 ? myers32(t, p) : myersX(t, p);\n}\n","// Copyright 2018-2026 the Deno authors. MIT license.\n// This module is browser compatible.\nimport { levenshteinDistance } from \"./levenshtein_distance.js\";\n\n/** Options for {@linkcode closestString}. */\nexport interface ClosestStringOptions {\n /**\n * Whether the distance should include case.\n *\n * @default {false}\n */\n caseSensitive?: boolean;\n /**\n * A custom comparison function to use for comparing strings.\n *\n * @param a The first string for comparison.\n * @param b The second string for comparison.\n * @returns The distance between the two strings.\n * @default {levenshteinDistance}\n */\n compareFn?: (a: string, b: string) => number;\n}\n\n/**\n * Finds the most similar string from an array of strings.\n *\n * By default, calculates the distance between words using the\n * {@link https://en.wikipedia.org/wiki/Levenshtein_distance | Levenshtein distance}.\n *\n * @example Usage\n * ```ts\n * import { closestString } from \"@std/text/closest-string\";\n * import { assertEquals } from \"@std/assert\";\n *\n * const possibleWords = [\"length\", \"size\", \"blah\", \"help\"];\n * const suggestion = closestString(\"hep\", possibleWords);\n *\n * assertEquals(suggestion, \"help\");\n * ```\n *\n * @param givenWord The string to measure distance against\n * @param possibleWords The string-array to pick the closest string from\n * @param options The options for the comparison.\n * @returns The closest string\n */\nexport function closestString(\n givenWord: string,\n possibleWords: ReadonlyArray<string>,\n options?: ClosestStringOptions,\n): string {\n if (possibleWords.length === 0) {\n throw new TypeError(\n \"When using closestString(), the possibleWords array must contain at least one word\",\n );\n }\n const { caseSensitive, compareFn = levenshteinDistance } = { ...options };\n\n if (!caseSensitive) {\n givenWord = givenWord.toLowerCase();\n }\n\n let nearestWord = possibleWords[0]!;\n let closestStringDistance = Infinity;\n for (const each of possibleWords) {\n const distance = caseSensitive\n ? compareFn(givenWord, each)\n : compareFn(givenWord, each.toLowerCase());\n if (distance < closestStringDistance) {\n nearestWord = each;\n closestStringDistance = distance;\n }\n }\n return nearestWord;\n}\n","import type { FlagOptions } from \"./types.ts\";\nimport { closestString } from \"@jsr/std__text/closest-string\";\n\n/** Convert param case string to camel case. */\nexport function paramCaseToCamelCase(str: string): string {\n return str.replace(\n /-([a-z])/g,\n (g) => g[1].toUpperCase(),\n );\n}\n\n/**\n * Find option by flag, name or alias.\n *\n * @param flags Source options array.\n * @param name Name of the option.\n */\nexport function getOption<O extends FlagOptions>(\n flags: Array<O>,\n name: string,\n): O | undefined {\n while (name[0] === \"-\") {\n name = name.slice(1);\n }\n\n for (const flag of flags) {\n if (isOption(flag, name)) {\n return flag;\n }\n }\n\n return;\n}\n\nexport function didYouMeanOption(\n option: string,\n options: Array<FlagOptions>,\n): string {\n const optionNames = options\n .map((option) => [option.name, ...(option.aliases ?? [])])\n .flat()\n .map((option) => getFlag(option));\n return didYouMean(\" Did you mean option\", getFlag(option), optionNames);\n}\n\nexport function didYouMeanType(type: string, types: Array<string>): string {\n return didYouMean(\" Did you mean type\", type, types);\n}\n\nexport function didYouMean(\n message: string,\n type: string,\n types: Array<string>,\n): string {\n const match: string | undefined = types.length\n ? closestString(type, types)\n : undefined;\n return match ? `${message} \"${match}\"?` : \"\";\n}\n\nexport function getFlag(name: string) {\n if (name.startsWith(\"-\")) {\n return name;\n }\n if (name.length > 1) {\n return `--${name}`;\n }\n return `-${name}`;\n}\n\n/**\n * Check if option has name or alias.\n *\n * @param option The option to check.\n * @param name The option name or alias.\n */\nfunction isOption(option: FlagOptions, name: string) {\n return option.name === name ||\n (option.aliases && option.aliases.indexOf(name) !== -1);\n}\n\nexport function matchWildCardOptions(\n name: string,\n flags: Array<FlagOptions>,\n): FlagOptions | undefined {\n for (const option of flags) {\n if (option.name.indexOf(\"*\") === -1) {\n continue;\n }\n let matched = matchWildCardOption(name, option);\n if (matched) {\n matched = { ...matched, name };\n flags.push(matched);\n return matched;\n }\n }\n}\n\nfunction matchWildCardOption(\n name: string,\n option: FlagOptions,\n): FlagOptions | false {\n const parts = option.name.split(\".\");\n const parts2 = name.split(\".\");\n if (parts.length !== parts2.length) {\n return false;\n }\n const count = Math.max(parts.length, parts2.length);\n for (let i = 0; i < count; i++) {\n if (parts[i] !== parts2[i] && parts[i] !== \"*\") {\n return false;\n }\n }\n return option;\n}\n\nexport function getDefaultValue(option: FlagOptions): unknown {\n return typeof option.default === \"function\"\n ? option.default()\n : option.default;\n}\n","import { didYouMeanOption, didYouMeanType, getFlag } from \"./_utils.js\";\nimport type { ArgumentValue, FlagOptions } from \"./types.ts\";\n\nexport class FlagsError extends Error {\n constructor(message: string) {\n super(message);\n Object.setPrototypeOf(this, FlagsError.prototype);\n }\n}\n\nexport class UnknownRequiredOptionError extends FlagsError {\n constructor(option: string, options: Array<FlagOptions>) {\n super(\n `Unknown required option \"${getFlag(option)}\".${\n didYouMeanOption(option, options)\n }`,\n );\n Object.setPrototypeOf(this, UnknownRequiredOptionError.prototype);\n }\n}\n\nexport class UnknownConflictingOptionError extends FlagsError {\n constructor(option: string, options: Array<FlagOptions>) {\n super(\n `Unknown conflicting option \"${getFlag(option)}\".${\n didYouMeanOption(option, options)\n }`,\n );\n Object.setPrototypeOf(this, UnknownConflictingOptionError.prototype);\n }\n}\n\nexport class UnknownTypeError extends FlagsError {\n constructor(type: string, types: Array<string>) {\n super(`Unknown type \"${type}\".${didYouMeanType(type, types)}`);\n Object.setPrototypeOf(this, UnknownTypeError.prototype);\n }\n}\n\n/* Validation errors. */\n\n/**\n * A validation error is thrown when the command is wrongly used by the user.\n * For example: If the user passes some invalid options or arguments to the\n * command.\n */\nexport class ValidationError extends FlagsError {\n constructor(message: string) {\n super(message);\n Object.setPrototypeOf(this, ValidationError.prototype);\n }\n}\n\nexport class DuplicateOptionError extends ValidationError {\n constructor(name: string) {\n super(\n `Option \"${\n getFlag(name).replace(/^--no-/, \"--\")\n }\" can only occur once, but was found several times.`,\n );\n Object.setPrototypeOf(this, DuplicateOptionError.prototype);\n }\n}\n\nexport class InvalidOptionError extends ValidationError {\n constructor(option: string, options: Array<FlagOptions>) {\n super(\n `Invalid option \"${getFlag(option)}\".${\n didYouMeanOption(option, options)\n }`,\n );\n Object.setPrototypeOf(this, InvalidOptionError.prototype);\n }\n}\n\nexport class UnknownOptionError extends ValidationError {\n constructor(option: string, options: Array<FlagOptions>) {\n super(\n `Unknown option \"${getFlag(option)}\".${\n didYouMeanOption(option, options)\n }`,\n );\n Object.setPrototypeOf(this, UnknownOptionError.prototype);\n }\n}\n\nexport class MissingOptionValueError extends ValidationError {\n constructor(option: string) {\n super(`Missing value for option \"${getFlag(option)}\".`);\n Object.setPrototypeOf(this, MissingOptionValueError.prototype);\n }\n}\n\nexport class InvalidOptionValueError extends ValidationError {\n constructor(option: string, expected: string, value: string) {\n super(\n `Option \"${\n getFlag(option)\n }\" must be of type \"${expected}\", but got \"${value}\".`,\n );\n Object.setPrototypeOf(this, InvalidOptionValueError.prototype);\n }\n}\n\nexport class UnexpectedOptionValueError extends ValidationError {\n constructor(option: string, value: string) {\n super(\n `Option \"${getFlag(option)}\" doesn't take a value, but got \"${value}\".`,\n );\n Object.setPrototypeOf(this, InvalidOptionValueError.prototype);\n }\n}\n\nexport class OptionNotCombinableError extends ValidationError {\n constructor(option: string) {\n super(`Option \"${getFlag(option)}\" cannot be combined with other options.`);\n Object.setPrototypeOf(this, OptionNotCombinableError.prototype);\n }\n}\n\nexport class ConflictingOptionError extends ValidationError {\n constructor(option: string, conflictingOption: string) {\n super(\n `Option \"${getFlag(option)}\" conflicts with option \"${\n getFlag(conflictingOption)\n }\".`,\n );\n Object.setPrototypeOf(this, ConflictingOptionError.prototype);\n }\n}\n\nexport class DependingOptionError extends ValidationError {\n constructor(option: string, dependingOption: string) {\n super(\n `Option \"${getFlag(option)}\" depends on option \"${\n getFlag(dependingOption)\n }\".`,\n );\n Object.setPrototypeOf(this, DependingOptionError.prototype);\n }\n}\n\nexport class MissingRequiredOptionError extends ValidationError {\n constructor(option: string) {\n super(`Missing required option \"${getFlag(option)}\".`);\n Object.setPrototypeOf(this, MissingRequiredOptionError.prototype);\n }\n}\n\nexport class UnexpectedRequiredArgumentError extends ValidationError {\n constructor(arg: string) {\n super(\n `An required argument cannot follow an optional argument, but \"${arg}\" is defined as required.`,\n );\n Object.setPrototypeOf(\n this,\n UnexpectedRequiredArgumentError.prototype,\n );\n }\n}\n\nexport class UnexpectedArgumentAfterVariadicArgumentError\n extends ValidationError {\n constructor(arg: string) {\n super(`An argument cannot follow an variadic argument, but got \"${arg}\".`);\n Object.setPrototypeOf(\n this,\n UnexpectedArgumentAfterVariadicArgumentError.prototype,\n );\n }\n}\n\nexport class InvalidTypeError extends ValidationError {\n constructor(\n { label, name, value, type }: ArgumentValue,\n expected?: Array<string | number | boolean>,\n ) {\n super(\n `${label} \"${name}\" must be of type \"${type}\", but got \"${value}\".` + (\n expected\n ? ` Expected values: ${\n expected.map((value) => `\"${value}\"`).join(\", \")\n }`\n : \"\"\n ),\n );\n Object.setPrototypeOf(this, MissingOptionValueError.prototype);\n }\n}\n","import type { ArgumentValue, TypeHandler } from \"../types.ts\";\nimport { InvalidTypeError } from \"../_errors.js\";\n\n/** Boolean type handler. Excepts `true`, `false`, `1`, `0` */\nexport const boolean: TypeHandler<boolean> = (\n type: ArgumentValue,\n): boolean => {\n if (~[\"1\", \"true\"].indexOf(type.value)) {\n return true;\n }\n\n if (~[\"0\", \"false\"].indexOf(type.value)) {\n return false;\n }\n\n throw new InvalidTypeError(type, [\"true\", \"false\", \"1\", \"0\"]);\n};\n","import type { ArgumentValue, TypeHandler } from \"../types.ts\";\nimport { InvalidTypeError } from \"../_errors.js\";\n\n/** Number type handler. Excepts any numeric value. */\nexport const number: TypeHandler<number> = (type: ArgumentValue): number => {\n const value = Number(type.value);\n if (Number.isFinite(value)) {\n return value;\n }\n\n throw new InvalidTypeError(type);\n};\n","import type { ArgumentValue, TypeHandler } from \"../types.ts\";\n\n/** String type handler. Excepts any value. */\nexport const string: TypeHandler<string> = (\n { value }: ArgumentValue,\n): string => {\n return value;\n};\n","import { getDefaultValue, getOption, paramCaseToCamelCase } from \"./_utils.js\";\nimport {\n ConflictingOptionError,\n DependingOptionError,\n MissingOptionValueError,\n MissingRequiredOptionError,\n OptionNotCombinableError,\n UnknownOptionError,\n} from \"./_errors.js\";\nimport type { ParseFlagsContext, ParseFlagsOptions } from \"./types.ts\";\nimport type { ArgumentOptions, FlagOptions } from \"./types.ts\";\n\n/**\n * Flags post validation. Validations that are not already done by the parser.\n *\n * @param ctx Parse context.\n * @param opts Parse options.\n * @param options Option name mappings: propertyName -> option\n */\nexport function validateFlags<TOptions extends FlagOptions = FlagOptions>(\n ctx: ParseFlagsContext<Record<string, unknown>>,\n opts: ParseFlagsOptions<TOptions>,\n options: Map<string, FlagOptions> = new Map(),\n): void {\n if (!opts.flags) {\n return;\n }\n setDefaultValues(ctx, opts);\n\n const optionNames = Object.keys(ctx.flags);\n if (!optionNames.length && opts.allowEmpty) {\n return;\n }\n\n if (ctx.standalone) {\n validateStandaloneOption(\n ctx,\n options,\n optionNames,\n );\n return;\n }\n\n for (const [name, option] of options) {\n validateUnknownOption(option, opts);\n validateConflictingOptions(ctx, option);\n validateDependingOptions(ctx, option, opts);\n validateRequiredValues(ctx, option, name);\n }\n\n validateRequiredOptions(ctx, options, opts);\n}\n\nfunction validateUnknownOption<TOptions extends FlagOptions = FlagOptions>(\n option: FlagOptions,\n opts: ParseFlagsOptions<TOptions>,\n) {\n if (!getOption(opts.flags ?? [], option.name)) {\n throw new UnknownOptionError(option.name, opts.flags ?? []);\n }\n}\n\n/**\n * Adds all default values to ctx.flags and returns a boolean object map with\n * only the default option names `{ [OptionName: string]: boolean }`.\n */\nfunction setDefaultValues<TOptions extends FlagOptions = FlagOptions>(\n ctx: ParseFlagsContext<Record<string, unknown>>,\n opts: ParseFlagsOptions<TOptions>,\n) {\n if (!opts.flags?.length) {\n return;\n }\n\n // Set default values\n for (const option of opts.flags) {\n let name: string | undefined;\n let defaultValue: unknown = undefined;\n\n // if --no-[flag] is present set --[flag] default value to true\n if (option.name.startsWith(\"no-\")) {\n const propName = option.name.replace(/^no-/, \"\");\n if (typeof ctx.flags[propName] !== \"undefined\") {\n continue;\n }\n const positiveOption = getOption(opts.flags, propName);\n if (positiveOption) {\n continue;\n }\n name = paramCaseToCamelCase(propName);\n defaultValue = true;\n }\n\n if (!name) {\n name = paramCaseToCamelCase(option.name);\n }\n\n // TODO: remove ignoreDefaults if flags module has support for environment variables\n const hasDefaultValue: boolean = (!opts.ignoreDefaults ||\n typeof opts.ignoreDefaults[name] === \"undefined\") &&\n typeof ctx.flags[name] === \"undefined\" && (\n typeof option.default !== \"undefined\" ||\n typeof defaultValue !== \"undefined\"\n );\n\n if (hasDefaultValue) {\n ctx.flags[name] = getDefaultValue(option) ?? defaultValue;\n ctx.defaults[option.name] = true;\n if (typeof option.value === \"function\") {\n ctx.flags[name] = option.value(ctx.flags[name]);\n }\n }\n }\n}\n\nfunction validateStandaloneOption(\n ctx: ParseFlagsContext,\n options: Map<string, FlagOptions>,\n optionNames: Array<string>,\n): void {\n if (!ctx.standalone || optionNames.length === 1) {\n return;\n }\n\n // Don't throw an error if all values are coming from the default option.\n for (const [_, opt] of options) {\n if (!ctx.defaults[opt.name] && opt !== ctx.standalone) {\n throw new OptionNotCombinableError(ctx.standalone.name);\n }\n }\n}\n\nfunction validateConflictingOptions(\n ctx: ParseFlagsContext<Record<string, unknown>>,\n option: FlagOptions,\n): void {\n if (!option.conflicts?.length) {\n return;\n }\n for (const flag of option.conflicts) {\n if (isset(flag, ctx.flags)) {\n throw new ConflictingOptionError(option.name, flag);\n }\n }\n}\n\nfunction validateDependingOptions<TOptions extends FlagOptions = FlagOptions>(\n ctx: ParseFlagsContext<Record<string, unknown>>,\n option: FlagOptions,\n opts: ParseFlagsOptions<TOptions>,\n): void {\n if (!option.depends) {\n return;\n }\n for (const flag of option.depends) {\n // Don't throw an error if the value is coming from the default option.\n if (\n !isset(flag, ctx.flags) && !ctx.defaults[option.name] &&\n // TODO: remove ignoreDefaults if flags module has support for environment variables\n (!opts.ignoreDefaults || typeof opts.ignoreDefaults[flag] === \"undefined\")\n ) {\n throw new DependingOptionError(option.name, flag);\n }\n }\n}\n\nfunction validateRequiredValues(\n ctx: ParseFlagsContext<Record<string, unknown>>,\n option: FlagOptions,\n name: string,\n): void {\n if (!option.args) {\n return;\n }\n const isArray = option.args.length > 1;\n\n for (let i = 0; i < option.args.length; i++) {\n const arg: ArgumentOptions = option.args[i];\n if (arg.optional) {\n continue;\n }\n const hasValue = isArray\n ? typeof (ctx.flags[name] as Array<unknown>)[i] !== \"undefined\"\n : typeof ctx.flags[name] !== \"undefined\";\n\n if (!hasValue) {\n throw new MissingOptionValueError(option.name);\n }\n }\n}\n\nfunction validateRequiredOptions<TOptions extends FlagOptions = FlagOptions>(\n ctx: ParseFlagsContext<Record<string, unknown>>,\n options: Map<string, FlagOptions>,\n opts: ParseFlagsOptions<TOptions>,\n): void {\n if (!opts.flags?.length) {\n return;\n }\n const optionsValues = [...options.values()];\n\n for (const option of opts.flags) {\n if (!option.required || paramCaseToCamelCase(option.name) in ctx.flags) {\n continue;\n }\n const conflicts = option.conflicts ?? [];\n const hasConflict = conflicts.find((flag: string) => !!ctx.flags[flag]);\n const hasConflicts = hasConflict ||\n optionsValues.find((opt) =>\n opt.conflicts?.find((flag: string) => flag === option.name)\n );\n\n if (hasConflicts) {\n continue;\n }\n throw new MissingRequiredOptionError(option.name);\n }\n}\n\n/**\n * Check if value exists for flag.\n * @param flagName Flag name.\n * @param flags Parsed values.\n */\nfunction isset(flagName: string, flags: Record<string, unknown>): boolean {\n const name = paramCaseToCamelCase(flagName);\n // return typeof values[ name ] !== 'undefined' && values[ name ] !== false;\n return typeof flags[name] !== \"undefined\";\n}\n","import type { ArgumentValue, TypeHandler } from \"../types.ts\";\nimport { InvalidTypeError } from \"../_errors.js\";\n\n/** Integer type handler. Excepts any integer value. */\nexport const integer: TypeHandler<number> = (type: ArgumentValue): number => {\n const value = Number(type.value);\n if (Number.isInteger(value)) {\n return value;\n }\n\n throw new InvalidTypeError(type);\n};\n","import { getArgs } from \"@jsr/cliffy__internal/runtime/get-args\";\nimport {\n getDefaultValue,\n getOption,\n matchWildCardOptions,\n paramCaseToCamelCase,\n} from \"./_utils.js\";\nimport {\n DuplicateOptionError,\n InvalidOptionError,\n InvalidOptionValueError,\n MissingOptionValueError,\n UnexpectedArgumentAfterVariadicArgumentError,\n UnexpectedOptionValueError,\n UnexpectedRequiredArgumentError,\n UnknownConflictingOptionError,\n UnknownOptionError,\n UnknownRequiredOptionError,\n UnknownTypeError,\n} from \"./_errors.js\";\nimport type {\n ArgumentOptions,\n ArgumentType,\n FlagOptions,\n ParseFlagsContext,\n ParseFlagsOptions,\n TypeHandler,\n} from \"./types.ts\";\nimport { boolean } from \"./types/boolean.js\";\nimport { number } from \"./types/number.js\";\nimport { string } from \"./types/string.js\";\nimport { validateFlags } from \"./_validate_flags.js\";\nimport { integer } from \"./types/integer.js\";\n\nconst DefaultTypes: Record<ArgumentType, TypeHandler> = {\n string,\n number,\n integer,\n boolean,\n};\n\n/**\n * Command-line arguments parser with built-in validations.\n *\n * The `parseFlags` method takes as its first argument the arguments to be parsed,\n * usually `Deno.args`, or a {@linkcode ParseFlagsContext}. As the second\n * argument you can define {@linkcode ParseFlagsOptions}.\n *\n * ### Basic usage\n *\n * If `parseFlags` is called without defining specific flags with the options\n * object, all arguments are parsed and added to the flags object returned by the\n * `parseFlags` method. All non-options arguments are added to the `unknown` array\n * and all flags specified after the double dash (`--`) are added to the `literal`\n * array.\n *\n * @example Parse arguments without validation\n *\n * ```typescript\n * import { parseFlags } from \"https://deno.land/x/cliffy/flags/mod.ts\";\n *\n * console.log(parseFlags(Deno.args));\n * ```\n *\n * ```console\n * $ deno run https://deno.land/x/cliffy/examples/flags/flags.ts -a foo -b bar\n * {\n * flags: { a: \"foo\", b: \"bar\" },\n * literal: [],\n * unknown: [],\n * stopEarly: false,\n * stopOnUnknown: false\n * }\n *\n * $ deno run https://deno.land/x/cliffy/examples/flags/flags.ts \\\n * -x 3 \\\n * -y.z -n5 \\\n * -abc \\\n * --beep=boop \\\n * foo bar baz \\\n * --deno.land \\\n * --deno.com -- --cliffy\n * {\n * flags: {\n * x: \"3\",\n * y: { z: true },\n * n: \"5\",\n * a: true,\n * b: true,\n * c: true,\n * beep: \"boop\",\n * deno: { land: true, com: true }\n * },\n * literal: [ \"--cliffy\" ],\n * unknown: [ \"foo\", \"bar\", \"baz\" ],\n * stopEarly: false,\n * stopOnUnknown: false\n * }\n * ```\n *\n * ### Define flags\n *\n * You can specify flags with the options object. For all unknown or invalid flags\n * an `ValidationError` is thrown. Read more about error handling\n * [here](./error_handling.md). A list of all available flag options can be found\n * [here](./flag_options.md).\n *\n * @example Parse flags with validation\n *\n * ```typescript\n * import { parseFlags } from \"https://deno.land/x/cliffy/flags/mod.ts\";\n *\n * const { flags } = parseFlags(Deno.args, {\n * flags: [{\n * name: \"help\",\n * aliases: [\"h\"],\n * standalone: true,\n * }, {\n * name: \"verbose\",\n * aliases: [\"v\"],\n * collect: true,\n * value: (val: boolean, previous = 0) => val ? previous + 1 : 0,\n * }, {\n * name: \"file\",\n * aliases: [\"f\"],\n * type: \"string\",\n * }],\n * });\n *\n * console.log(flags);\n * ```\n *\n * ```console\n * $ deno run https://deno.land/x/cliffy/examples/flags/options.ts -vvv -f ./example.ts\n * { verbose: 3, file: \"./example.ts\" }\n * ```\n *\n * ### Parse context\n *\n * The `parseFlags` method accepts also a parse context as first argument. The\n * context can either be a manually created object or the result of a previously\n * called `parseFlags` method.\n *\n * This can be used to parse command line flags in multiple steps, for example,\n * when parsing options that precede a subcommand.\n *\n * @example Pre-parsing global options\n *\n * ```ts\n * import { parseFlags } from \"https://deno.land/x/cliffy/flags/mod.ts\";\n *\n * const globalFlags = [{\n * name: \"foo-global\",\n * alias: [\"g\"],\n * collect: true,\n * }];\n *\n * const flags = [{\n * name: \"foo\",\n * alias: [\"f\"],\n * collect: true,\n * }];\n *\n * const args = [\"--foo-global\", \"cmd1\", \"--foo-global\", \"--foo\", \"arg1\", \"--foo\"];\n *\n * // Parse main command args (all flags until the first unknown argument).\n * const ctx = parseFlags(args, {\n * flags: globalFlags,\n * stopEarly: true, // Stop on first non option argument.\n * stopOnUnknown: true, // Stop on first option argument.\n * dotted: false, // Don't convert dotted option keys to nested objects.\n * });\n *\n * // Shift sub-command from arguments.\n * const subCommand = ctx.unknown.shift();\n *\n * // Parse all sub command args.\n * parseFlags(ctx, {\n * flags: [\n * ...globalFlags,\n * ...flags,\n * ],\n * });\n *\n * console.log(\"sub-command:\", subCommand); // -> cmd1\n * console.log(\"options:\", ctx.flags); // -> { fooGlobal: [ true, true ], foo: [ true, true ] }\n * console.log(\"arguments:\", ctx.unknown); // -> [ \"arg1\" ]\n * ```\n *\n * @param argsOrCtx Command line arguments e.g: `Deno.args` or parse context.\n * @param opts Parse options.\n */\nexport function parseFlags<\n TFlags extends Record<string, unknown>,\n TFlagOptions extends FlagOptions,\n TFlagsResult extends ParseFlagsContext,\n>(\n argsOrCtx: string[] | TFlagsResult = getArgs(),\n opts: ParseFlagsOptions<TFlagOptions> = {},\n): TFlagsResult & ParseFlagsContext<TFlags, TFlagOptions> {\n let args: Array<string>;\n let ctx: ParseFlagsContext<Record<string, unknown>>;\n\n if (Array.isArray(argsOrCtx)) {\n ctx = {} as ParseFlagsContext<Record<string, unknown>>;\n args = argsOrCtx;\n } else {\n ctx = argsOrCtx;\n args = argsOrCtx.unknown;\n argsOrCtx.unknown = [];\n }\n args = args.slice();\n\n ctx.flags ??= {};\n ctx.literal ??= [];\n ctx.unknown ??= [];\n ctx.stopEarly = false;\n ctx.stopOnUnknown = false;\n ctx.defaults ??= {};\n\n opts.dotted ??= true;\n\n validateOptions(opts);\n const options = parseArgs(ctx, args, opts);\n validateFlags(ctx, opts, options);\n\n if (opts.dotted) {\n parseDottedOptions(ctx);\n }\n\n return ctx as TFlagsResult & ParseFlagsContext<TFlags, TFlagOptions>;\n}\n\nfunction validateOptions<TFlagOptions extends FlagOptions>(\n opts: ParseFlagsOptions<TFlagOptions>,\n) {\n opts.flags?.forEach((opt) => {\n opt.depends?.forEach((flag) => {\n if (!opts.flags || !getOption(opts.flags, flag)) {\n throw new UnknownRequiredOptionError(flag, opts.flags ?? []);\n }\n });\n opt.conflicts?.forEach((flag) => {\n if (!opts.flags || !getOption(opts.flags, flag)) {\n throw new UnknownConflictingOptionError(flag, opts.flags ?? []);\n }\n });\n });\n}\n\nfunction parseArgs<TFlagOptions extends FlagOptions>(\n ctx: ParseFlagsContext<Record<string, unknown>>,\n args: Array<string>,\n opts: ParseFlagsOptions<TFlagOptions>,\n): Map<string, FlagOptions> {\n /** Option name mapping: propertyName -> option.name */\n const optionsMap: Map<string, FlagOptions> = new Map();\n let inLiteral = false;\n\n for (\n let argsIndex = 0;\n argsIndex < args.length;\n argsIndex++\n ) {\n let option: FlagOptions | undefined;\n let current: string = args[argsIndex];\n let currentValue: string | undefined;\n let negate = false;\n\n // literal args after --\n if (inLiteral) {\n ctx.literal.push(current);\n continue;\n } else if (current === \"--\") {\n inLiteral = true;\n continue;\n } else if (ctx.stopEarly || ctx.stopOnUnknown) {\n ctx.unknown.push(current);\n continue;\n }\n\n const isFlag = current.length > 1 && current[0] === \"-\";\n\n if (!isFlag) {\n if (opts.stopEarly) {\n ctx.stopEarly = true;\n }\n ctx.unknown.push(current);\n continue;\n }\n const isShort = current[1] !== \"-\";\n const isLong = isShort ? false : current.length > 3 && current[2] !== \"-\";\n\n if (!isShort && !isLong) {\n throw new InvalidOptionError(current, opts.flags ?? []);\n }\n\n // normalize short flags: -abc => -a -b -c\n if (isShort && current.length > 2 && current[2] !== \".\") {\n args.splice(argsIndex, 1, ...splitFlags(current));\n current = args[argsIndex];\n } else if (isLong && current.startsWith(\"--no-\")) {\n negate = true;\n }\n\n // split value: --foo=\"bar=baz\" => --foo bar=baz\n const equalSignIndex = current.indexOf(\"=\");\n if (equalSignIndex !== -1) {\n currentValue = current.slice(equalSignIndex + 1) || undefined;\n current = current.slice(0, equalSignIndex);\n }\n\n if (opts.flags) {\n option = getOption(opts.flags, current);\n\n if (!option) {\n const name = current.replace(/^-+/, \"\");\n option = matchWildCardOptions(name, opts.flags);\n\n if (!option) {\n if (opts.stopOnUnknown) {\n ctx.stopOnUnknown = true;\n ctx.unknown.push(args[argsIndex]);\n continue;\n }\n throw new UnknownOptionError(current, opts.flags);\n }\n }\n } else {\n option = {\n name: current.replace(/^-+/, \"\"),\n optionalValue: true,\n type: \"string\",\n };\n }\n\n if (option.standalone) {\n ctx.standalone = option;\n }\n\n const positiveName: string = negate\n ? option.name.replace(/^no-?/, \"\")\n : option.name;\n const propName: string = paramCaseToCamelCase(positiveName);\n\n if (typeof ctx.flags[propName] !== \"undefined\") {\n if (!opts.flags?.length) {\n option.collect = true;\n } else if (!option.collect && !ctx.defaults[option.name]) {\n throw new DuplicateOptionError(current);\n }\n }\n\n if (option.type && !option.args?.length) {\n option.args = [{\n type: option.type,\n optional: option.optionalValue,\n variadic: option.variadic,\n list: option.list,\n separator: option.separator,\n }];\n }\n\n if (\n opts.flags?.length && !option.args?.length &&\n typeof currentValue !== \"undefined\"\n ) {\n throw new UnexpectedOptionValueError(option.name, currentValue);\n }\n\n let optionArgsIndex = 0;\n let inOptionalArg = false;\n const next = () => currentValue ?? args[argsIndex + 1];\n const previous = ctx.flags[propName];\n\n parseNext(option);\n\n if (typeof ctx.flags[propName] === \"undefined\") {\n if (option.args?.length && !option.args?.[optionArgsIndex].optional) {\n throw new MissingOptionValueError(option.name);\n } else if (\n typeof option.default !== \"undefined\" &&\n (option.type || option.value || option.args?.length)\n ) {\n ctx.flags[propName] = getDefaultValue(option);\n } else {\n setFlagValue(true);\n }\n }\n\n if (option.value) {\n const value = option.value(ctx.flags[propName], previous);\n setFlagValue(value);\n } else if (option.collect) {\n const value: unknown[] = typeof previous !== \"undefined\"\n ? (Array.isArray(previous) ? previous : [previous])\n : [];\n\n value.push(ctx.flags[propName]);\n setFlagValue(value);\n }\n\n optionsMap.set(propName, option);\n\n opts.option?.(option as TFlagOptions, ctx.flags[propName]);\n\n /** Parse next argument for current option. */\n // deno-lint-ignore no-inner-declarations\n function parseNext(option: FlagOptions): void {\n if (negate) {\n setFlagValue(false);\n return;\n } else if (!option.args?.length) {\n setFlagValue(undefined);\n return;\n }\n const arg: ArgumentOptions | undefined = option.args[optionArgsIndex];\n\n if (!arg) {\n const flag = next();\n throw new UnknownOptionError(flag, opts.flags ?? []);\n }\n\n if (!arg.type) {\n arg.type = \"boolean\";\n }\n\n // make boolean values optional by default\n if (\n !option.args?.length &&\n arg.type === \"boolean\" &&\n arg.optional === undefined\n ) {\n arg.optional = true;\n }\n\n if (arg.optional) {\n inOptionalArg = true;\n } else if (inOptionalArg) {\n throw new UnexpectedRequiredArgumentError(option.name);\n }\n\n let result: unknown;\n let increase = false;\n\n if (arg.list && hasNext(arg)) {\n const parsed: unknown[] = next()\n .split(arg.separator || \",\")\n .map((nextValue: string) => {\n const value = parseValue(option, arg, nextValue);\n if (typeof value === \"undefined\") {\n throw new InvalidOptionValueError(\n option.name,\n arg.type ?? \"?\",\n nextValue,\n );\n }\n return value;\n });\n\n if (parsed?.length) {\n result = parsed;\n }\n } else {\n if (hasNext(arg)) {\n result = parseValue(option, arg, next());\n } else if (arg.optional && arg.type === \"boolean\") {\n result = true;\n }\n }\n\n if (increase && typeof currentValue === \"undefined\") {\n argsIndex++;\n if (!arg.variadic) {\n optionArgsIndex++;\n } else if (option.args[optionArgsIndex + 1]) {\n throw new UnexpectedArgumentAfterVariadicArgumentError(next());\n }\n }\n\n if (\n typeof result !== \"undefined\" &&\n (option.args.length > 1 || arg.variadic)\n ) {\n if (!ctx.flags[propName]) {\n setFlagValue([]);\n }\n\n (ctx.flags[propName] as Array<unknown>).push(result);\n\n if (hasNext(arg)) {\n parseNext(option);\n }\n } else {\n setFlagValue(result);\n }\n\n /** Check if current option should have an argument. */\n function hasNext(arg: ArgumentOptions): boolean {\n if (!option.args?.length) {\n return false;\n }\n const nextValue = currentValue ?? args[argsIndex + 1];\n if (!nextValue) {\n return false;\n }\n if (option.args.length > 1 && optionArgsIndex >= option.args.length) {\n return false;\n }\n if (!arg.optional) {\n return true;\n }\n // require optional values to be called with an equal sign: foo=bar\n if (\n option.equalsSign && arg.optional && !arg.variadic &&\n typeof currentValue === \"undefined\"\n ) {\n return false;\n }\n if (arg.optional || arg.variadic) {\n return nextValue[0] !== \"-\" ||\n typeof currentValue !== \"undefined\" ||\n (arg.type === \"number\" && !isNaN(Number(nextValue)));\n }\n\n return false;\n }\n\n /** Parse argument value. */\n function parseValue(\n option: FlagOptions,\n arg: ArgumentOptions,\n value: string,\n ): unknown {\n const result: unknown = opts.parse\n ? opts.parse({\n label: \"Option\",\n type: arg.type || \"string\",\n name: `--${option.name}`,\n value,\n })\n : parseDefaultType(option, arg, value);\n\n if (typeof result !== \"undefined\") {\n increase = true;\n }\n\n return result;\n }\n }\n\n // deno-lint-ignore no-inner-declarations\n function setFlagValue(value: unknown) {\n ctx.flags[propName] = value;\n if (ctx.defaults[propName]) {\n delete ctx.defaults[propName];\n }\n }\n }\n\n return optionsMap;\n}\n\nfunction parseDottedOptions(ctx: ParseFlagsContext): void {\n // convert dotted option keys into nested objects\n ctx.flags = Object.keys(ctx.flags).reduce(\n (result: Record<string, unknown>, key: string) => {\n if (~key.indexOf(\".\")) {\n key.split(\".\").reduce(\n (\n // deno-lint-ignore no-explicit-any\n result: Record<string, any>,\n subKey: string,\n index: number,\n parts: string[],\n ) => {\n if (index === parts.length - 1) {\n result[subKey] = ctx.flags[key];\n } else {\n result[subKey] = result[subKey] ?? {};\n }\n return result[subKey];\n },\n result,\n );\n } else {\n result[key] = ctx.flags[key];\n }\n return result;\n },\n {},\n );\n}\n\nfunction splitFlags(flag: string): Array<string> {\n flag = flag.slice(1);\n const normalized: Array<string> = [];\n const index = flag.indexOf(\"=\");\n const flags = (index !== -1 ? flag.slice(0, index) : flag).split(\"\");\n\n if (isNaN(Number(flag[flag.length - 1]))) {\n flags.forEach((val) => normalized.push(`-${val}`));\n } else {\n normalized.push(`-${flags.shift()}`);\n if (flags.length) {\n normalized.push(flags.join(\"\"));\n }\n }\n\n if (index !== -1) {\n normalized[normalized.length - 1] += flag.slice(index);\n }\n\n return normalized;\n}\n\nfunction parseDefaultType(\n option: FlagOptions,\n arg: ArgumentOptions,\n value: string,\n): unknown {\n const type: ArgumentType = arg.type as ArgumentType || \"string\";\n const parseType = DefaultTypes[type];\n\n if (!parseType) {\n throw new UnknownTypeError(type, Object.keys(DefaultTypes));\n }\n\n return parseType({\n label: \"Option\",\n type,\n name: `--${option.name}`,\n value,\n });\n}\n","// Copyright 2018-2026 the Deno authors. MIT license.\n// This module is browser compatible.\n// A module to print ANSI terminal colors. Inspired by chalk, kleur, and colors\n// on npm.\n\n/**\n * String formatters and utilities for dealing with ANSI color codes.\n *\n * > [!IMPORTANT]\n * > If printing directly to the console, it's recommended to style console\n * > output using CSS (guide\n * > {@linkcode https://developer.mozilla.org/en-US/docs/Web/API/console#styling_console_output | here}).\n *\n * This module supports `NO_COLOR` environmental variable disabling any coloring\n * if `NO_COLOR` is set.\n *\n * ```ts no-assert\n * import {\n * bgBlue,\n * bgRgb24,\n * bgRgb8,\n * bold,\n * italic,\n * red,\n * rgb24,\n * rgb8,\n * } from \"@std/fmt/colors\";\n *\n * console.log(bgBlue(italic(red(bold(\"Hello, World!\")))));\n *\n * // also supports 8bit colors\n *\n * console.log(rgb8(\"Hello, World!\", 42));\n *\n * console.log(bgRgb8(\"Hello, World!\", 42));\n *\n * // and 24bit rgb\n *\n * console.log(rgb24(\"Hello, World!\", {\n * r: 41,\n * g: 42,\n * b: 43,\n * }));\n *\n * console.log(bgRgb24(\"Hello, World!\", {\n * r: 41,\n * g: 42,\n * b: 43,\n * }));\n * ```\n *\n * @module\n */\n\n// deno-lint-ignore no-explicit-any\nconst { Deno } = globalThis as any;\nconst noColor = typeof Deno?.noColor === \"boolean\"\n ? Deno.noColor as boolean\n : false;\n\ninterface Code {\n open: string;\n close: string;\n regexp: RegExp;\n}\n\n/** RGB 8-bits per channel. Each in range `0->255` or `0x00->0xff` */\nexport interface Rgb {\n /** Red component value */\n r: number;\n /** Green component value */\n g: number;\n /** Blue component value */\n b: number;\n}\n\nlet enabled = !noColor;\n\n/**\n * Enable or disable text color when styling.\n *\n * `@std/fmt/colors` automatically detects NO_COLOR environmental variable\n * and disables text color. Use this API only when the automatic detection\n * doesn't work.\n *\n * @example Usage\n * ```ts no-assert\n * import { setColorEnabled } from \"@std/fmt/colors\";\n *\n * // Disable text color\n * setColorEnabled(false);\n *\n * // Enable text color\n * setColorEnabled(true);\n * ```\n *\n * @param value The boolean value to enable or disable text color\n */\nexport function setColorEnabled(value: boolean) {\n if (Deno?.noColor) {\n return;\n }\n\n enabled = value;\n}\n\n/**\n * Get whether text color change is enabled or disabled.\n *\n * @example Usage\n * ```ts no-assert\n * import { getColorEnabled } from \"@std/fmt/colors\";\n *\n * console.log(getColorEnabled()); // true if enabled, false if disabled\n * ```\n * @returns `true` if text color is enabled, `false` otherwise\n */\nexport function getColorEnabled(): boolean {\n return enabled;\n}\n\n/**\n * Builds color code\n * @param open\n * @param close\n */\nfunction code(open: number[], close: number): Code {\n return {\n open: `\\x1b[${open.join(\";\")}m`,\n close: `\\x1b[${close}m`,\n regexp: new RegExp(`\\\\x1b\\\\[${close}m`, \"g\"),\n };\n}\n\n/**\n * Applies color and background based on color code and its associated text\n * @param str The text to apply color settings to\n * @param code The color code to apply\n */\nfunction run(str: string, code: Code): string {\n return enabled\n ? `${code.open}${str.replace(code.regexp, code.open)}${code.close}`\n : str;\n}\n\n/**\n * Reset the text modified.\n *\n * @example Usage\n * ```ts no-assert\n * import { reset } from \"@std/fmt/colors\";\n *\n * console.log(reset(\"Hello, world!\"));\n * ```\n *\n * @param str The text to reset\n * @returns The text with reset color\n */\nexport function reset(str: string): string {\n return run(str, code([0], 0));\n}\n\n/**\n * Make the text bold.\n *\n * @example Usage\n * ```ts no-assert\n * import { bold } from \"@std/fmt/colors\";\n *\n * console.log(bold(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make bold\n * @returns The bold text\n */\nexport function bold(str: string): string {\n return run(str, code([1], 22));\n}\n\n/**\n * The text emits only a small amount of light.\n *\n * Warning: Not all terminal emulators support `dim`.\n * For compatibility across all terminals, use {@linkcode gray} or {@linkcode brightBlack} instead.\n *\n * @example Usage\n * ```ts no-assert\n * import { dim } from \"@std/fmt/colors\";\n *\n * console.log(dim(\"Hello, world!\"));\n * ```\n *\n * @param str The text to dim\n * @returns The dimmed text\n */\nexport function dim(str: string): string {\n return run(str, code([2], 22));\n}\n\n/**\n * Make the text italic.\n *\n * @example Usage\n * ```ts no-assert\n * import { italic } from \"@std/fmt/colors\";\n *\n * console.log(italic(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make italic\n * @returns The italic text\n */\nexport function italic(str: string): string {\n return run(str, code([3], 23));\n}\n\n/**\n * Make the text underline.\n *\n * @example Usage\n * ```ts no-assert\n * import { underline } from \"@std/fmt/colors\";\n *\n * console.log(underline(\"Hello, world!\"));\n * ```\n *\n * @param str The text to underline\n * @returns The underlined text\n */\nexport function underline(str: string): string {\n return run(str, code([4], 24));\n}\n\n/**\n * Invert background color and text color.\n *\n * @example Usage\n * ```ts no-assert\n * import { inverse } from \"@std/fmt/colors\";\n *\n * console.log(inverse(\"Hello, world!\"));\n * ```\n *\n * @param str The text to invert its color\n * @returns The inverted text\n */\nexport function inverse(str: string): string {\n return run(str, code([7], 27));\n}\n\n/**\n * Make the text hidden.\n *\n * @example Usage\n * ```ts no-assert\n * import { hidden } from \"@std/fmt/colors\";\n *\n * console.log(hidden(\"Hello, world!\"));\n * ```\n *\n * @param str The text to hide\n * @returns The hidden text\n */\nexport function hidden(str: string): string {\n return run(str, code([8], 28));\n}\n\n/**\n * Put horizontal line through the center of the text.\n *\n * @example Usage\n * ```ts no-assert\n * import { strikethrough } from \"@std/fmt/colors\";\n *\n * console.log(strikethrough(\"Hello, world!\"));\n * ```\n *\n * @param str The text to strike through\n * @returns The text with horizontal line through the center\n */\nexport function strikethrough(str: string): string {\n return run(str, code([9], 29));\n}\n\n/**\n * Set text color to black.\n *\n * @example Usage\n * ```ts no-assert\n * import { black } from \"@std/fmt/colors\";\n *\n * console.log(black(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make black\n * @returns The black text\n */\nexport function black(str: string): string {\n return run(str, code([30], 39));\n}\n\n/**\n * Set text color to red.\n *\n * @example Usage\n * ```ts no-assert\n * import { red } from \"@std/fmt/colors\";\n *\n * console.log(red(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make red\n * @returns The red text\n */\nexport function red(str: string): string {\n return run(str, code([31], 39));\n}\n\n/**\n * Set text color to green.\n *\n * @example Usage\n * ```ts no-assert\n * import { green } from \"@std/fmt/colors\";\n *\n * console.log(green(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make green\n * @returns The green text\n */\nexport function green(str: string): string {\n return run(str, code([32], 39));\n}\n\n/**\n * Set text color to yellow.\n *\n * @example Usage\n * ```ts no-assert\n * import { yellow } from \"@std/fmt/colors\";\n *\n * console.log(yellow(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make yellow\n * @returns The yellow text\n */\nexport function yellow(str: string): string {\n return run(str, code([33], 39));\n}\n\n/**\n * Set text color to blue.\n *\n * @example Usage\n * ```ts no-assert\n * import { blue } from \"@std/fmt/colors\";\n *\n * console.log(blue(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make blue\n * @returns The blue text\n */\nexport function blue(str: string): string {\n return run(str, code([34], 39));\n}\n\n/**\n * Set text color to magenta.\n *\n * @example Usage\n * ```ts no-assert\n * import { magenta } from \"@std/fmt/colors\";\n *\n * console.log(magenta(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make magenta\n * @returns The magenta text\n */\nexport function magenta(str: string): string {\n return run(str, code([35], 39));\n}\n\n/**\n * Set text color to cyan.\n *\n * @example Usage\n * ```ts no-assert\n * import { cyan } from \"@std/fmt/colors\";\n *\n * console.log(cyan(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make cyan\n * @returns The cyan text\n */\nexport function cyan(str: string): string {\n return run(str, code([36], 39));\n}\n\n/**\n * Set text color to white.\n *\n * @example Usage\n * ```ts no-assert\n * import { white } from \"@std/fmt/colors\";\n *\n * console.log(white(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make white\n * @returns The white text\n */\nexport function white(str: string): string {\n return run(str, code([37], 39));\n}\n\n/**\n * Set text color to gray.\n *\n * @example Usage\n * ```ts no-assert\n * import { gray } from \"@std/fmt/colors\";\n *\n * console.log(gray(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make gray\n * @returns The gray text\n */\nexport function gray(str: string): string {\n return brightBlack(str);\n}\n\n/**\n * Set text color to bright black.\n *\n * @example Usage\n * ```ts no-assert\n * import { brightBlack } from \"@std/fmt/colors\";\n *\n * console.log(brightBlack(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make bright black\n * @returns The bright black text\n */\nexport function brightBlack(str: string): string {\n return run(str, code([90], 39));\n}\n\n/**\n * Set text color to bright red.\n *\n * @example Usage\n * ```ts no-assert\n * import { brightRed } from \"@std/fmt/colors\";\n *\n * console.log(brightRed(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make bright red\n * @returns The bright red text\n */\nexport function brightRed(str: string): string {\n return run(str, code([91], 39));\n}\n\n/**\n * Set text color to bright green.\n *\n * @example Usage\n * ```ts no-assert\n * import { brightGreen } from \"@std/fmt/colors\";\n *\n * console.log(brightGreen(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make bright green\n * @returns The bright green text\n */\nexport function brightGreen(str: string): string {\n return run(str, code([92], 39));\n}\n\n/**\n * Set text color to bright yellow.\n *\n * @example Usage\n * ```ts no-assert\n * import { brightYellow } from \"@std/fmt/colors\";\n *\n * console.log(brightYellow(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make bright yellow\n * @returns The bright yellow text\n */\nexport function brightYellow(str: string): string {\n return run(str, code([93], 39));\n}\n\n/**\n * Set text color to bright blue.\n *\n * @example Usage\n * ```ts no-assert\n * import { brightBlue } from \"@std/fmt/colors\";\n *\n * console.log(brightBlue(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make bright blue\n * @returns The bright blue text\n */\nexport function brightBlue(str: string): string {\n return run(str, code([94], 39));\n}\n\n/**\n * Set text color to bright magenta.\n *\n * @example Usage\n * ```ts no-assert\n * import { brightMagenta } from \"@std/fmt/colors\";\n *\n * console.log(brightMagenta(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make bright magenta\n * @returns The bright magenta text\n */\nexport function brightMagenta(str: string): string {\n return run(str, code([95], 39));\n}\n\n/**\n * Set text color to bright cyan.\n *\n * @example Usage\n * ```ts no-assert\n * import { brightCyan } from \"@std/fmt/colors\";\n *\n * console.log(brightCyan(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make bright cyan\n * @returns The bright cyan text\n */\nexport function brightCyan(str: string): string {\n return run(str, code([96], 39));\n}\n\n/**\n * Set text color to bright white.\n *\n * @example Usage\n * ```ts no-assert\n * import { brightWhite } from \"@std/fmt/colors\";\n *\n * console.log(brightWhite(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make bright white\n * @returns The bright white text\n */\nexport function brightWhite(str: string): string {\n return run(str, code([97], 39));\n}\n\n/**\n * Set background color to black.\n *\n * @example Usage\n * ```ts no-assert\n * import { bgBlack } from \"@std/fmt/colors\";\n *\n * console.log(bgBlack(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make its background black\n * @returns The text with black background\n */\nexport function bgBlack(str: string): string {\n return run(str, code([40], 49));\n}\n\n/**\n * Set background color to red.\n *\n * @example Usage\n * ```ts no-assert\n * import { bgRed } from \"@std/fmt/colors\";\n *\n * console.log(bgRed(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make its background red\n * @returns The text with red background\n */\nexport function bgRed(str: string): string {\n return run(str, code([41], 49));\n}\n\n/**\n * Set background color to green.\n *\n * @example Usage\n * ```ts no-assert\n * import { bgGreen } from \"@std/fmt/colors\";\n *\n * console.log(bgGreen(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make its background green\n * @returns The text with green background\n */\nexport function bgGreen(str: string): string {\n return run(str, code([42], 49));\n}\n\n/**\n * Set background color to yellow.\n *\n * @example Usage\n * ```ts no-assert\n * import { bgYellow } from \"@std/fmt/colors\";\n *\n * console.log(bgYellow(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make its background yellow\n * @returns The text with yellow background\n */\nexport function bgYellow(str: string): string {\n return run(str, code([43], 49));\n}\n\n/**\n * Set background color to blue.\n *\n * @example Usage\n * ```ts no-assert\n * import { bgBlue } from \"@std/fmt/colors\";\n *\n * console.log(bgBlue(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make its background blue\n * @returns The text with blue background\n */\nexport function bgBlue(str: string): string {\n return run(str, code([44], 49));\n}\n\n/**\n * Set background color to magenta.\n *\n * @example Usage\n * ```ts no-assert\n * import { bgMagenta } from \"@std/fmt/colors\";\n *\n * console.log(bgMagenta(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make its background magenta\n * @returns The text with magenta background\n */\nexport function bgMagenta(str: string): string {\n return run(str, code([45], 49));\n}\n\n/**\n * Set background color to cyan.\n *\n * @example Usage\n * ```ts no-assert\n * import { bgCyan } from \"@std/fmt/colors\";\n *\n * console.log(bgCyan(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make its background cyan\n * @returns The text with cyan background\n */\nexport function bgCyan(str: string): string {\n return run(str, code([46], 49));\n}\n\n/**\n * Set background color to white.\n *\n * @example Usage\n * ```ts no-assert\n * import { bgWhite } from \"@std/fmt/colors\";\n *\n * console.log(bgWhite(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make its background white\n * @returns The text with white background\n */\nexport function bgWhite(str: string): string {\n return run(str, code([47], 49));\n}\n\n/**\n * Set background color to bright black.\n *\n * @example Usage\n * ```ts no-assert\n * import { bgBrightBlack } from \"@std/fmt/colors\";\n *\n * console.log(bgBrightBlack(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make its background bright black\n * @returns The text with bright black background\n */\nexport function bgBrightBlack(str: string): string {\n return run(str, code([100], 49));\n}\n\n/**\n * Set background color to bright red.\n *\n * @example Usage\n * ```ts no-assert\n * import { bgBrightRed } from \"@std/fmt/colors\";\n *\n * console.log(bgBrightRed(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make its background bright red\n * @returns The text with bright red background\n */\nexport function bgBrightRed(str: string): string {\n return run(str, code([101], 49));\n}\n\n/**\n * Set background color to bright green.\n *\n * @example Usage\n * ```ts no-assert\n * import { bgBrightGreen } from \"@std/fmt/colors\";\n *\n * console.log(bgBrightGreen(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make its background bright green\n * @returns The text with bright green background\n */\nexport function bgBrightGreen(str: string): string {\n return run(str, code([102], 49));\n}\n\n/**\n * Set background color to bright yellow.\n *\n * @example Usage\n * ```ts no-assert\n * import { bgBrightYellow } from \"@std/fmt/colors\";\n *\n * console.log(bgBrightYellow(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make its background bright yellow\n * @returns The text with bright yellow background\n */\nexport function bgBrightYellow(str: string): string {\n return run(str, code([103], 49));\n}\n\n/**\n * Set background color to bright blue.\n *\n * @example Usage\n * ```ts no-assert\n * import { bgBrightBlue } from \"@std/fmt/colors\";\n *\n * console.log(bgBrightBlue(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make its background bright blue\n * @returns The text with bright blue background\n */\nexport function bgBrightBlue(str: string): string {\n return run(str, code([104], 49));\n}\n\n/**\n * Set background color to bright magenta.\n *\n * @example Usage\n * ```ts no-assert\n * import { bgBrightMagenta } from \"@std/fmt/colors\";\n *\n * console.log(bgBrightMagenta(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make its background bright magenta\n * @returns The text with bright magenta background\n */\nexport function bgBrightMagenta(str: string): string {\n return run(str, code([105], 49));\n}\n\n/**\n * Set background color to bright cyan.\n *\n * @example Usage\n * ```ts no-assert\n * import { bgBrightCyan } from \"@std/fmt/colors\";\n *\n * console.log(bgBrightCyan(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make its background bright cyan\n * @returns The text with bright cyan background\n */\nexport function bgBrightCyan(str: string): string {\n return run(str, code([106], 49));\n}\n\n/**\n * Set background color to bright white.\n *\n * @example Usage\n * ```ts no-assert\n * import { bgBrightWhite } from \"@std/fmt/colors\";\n *\n * console.log(bgBrightWhite(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make its background bright white\n * @returns The text with bright white background\n */\nexport function bgBrightWhite(str: string): string {\n return run(str, code([107], 49));\n}\n\n/* Special Color Sequences */\n\n/**\n * Clamp and truncate color codes\n * @param n The input number\n * @param max The number to truncate to\n * @param min The number to truncate from\n */\nfunction clampAndTruncate(n: number, max = 255, min = 0): number {\n return Math.trunc(Math.max(Math.min(n, max), min));\n}\n\n/**\n * Set text color using paletted 8bit colors.\n * https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit\n *\n * @example Usage\n * ```ts no-assert\n * import { rgb8 } from \"@std/fmt/colors\";\n *\n * console.log(rgb8(\"Hello, world!\", 42));\n * ```\n *\n * @param str The text to color\n * @param color The color code\n * @returns The text with paletted 8bit color\n */\nexport function rgb8(str: string, color: number): string {\n return run(str, code([38, 5, clampAndTruncate(color)], 39));\n}\n\n/**\n * Set background color using paletted 8bit colors.\n * https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit\n *\n * @example Usage\n * ```ts no-assert\n * import { bgRgb8 } from \"@std/fmt/colors\";\n *\n * console.log(bgRgb8(\"Hello, world!\", 42));\n * ```\n *\n * @param str The text to set the background color of\n * @param color The color code\n * @returns The text with paletted 8bit background color\n */\nexport function bgRgb8(str: string, color: number): string {\n return run(str, code([48, 5, clampAndTruncate(color)], 49));\n}\n\n/**\n * Set text color using 24bit rgb.\n * `color` can be a number in range `0x000000` to `0xffffff` or\n * an `Rgb`.\n *\n * @example Usage\n * ```ts no-assert\n * import { rgb24 } from \"@std/fmt/colors\";\n *\n * rgb24(\"foo\", 0xff00ff);\n * rgb24(\"foo\", {r: 255, g: 0, b: 255});\n * ```\n * @param str The text to color\n * @param color The color code\n * @returns The text with 24bit rgb color\n */\nexport function rgb24(str: string, color: number | Rgb): string {\n if (typeof color === \"number\") {\n return run(\n str,\n code(\n [38, 2, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff],\n 39,\n ),\n );\n }\n return run(\n str,\n code(\n [\n 38,\n 2,\n clampAndTruncate(color.r),\n clampAndTruncate(color.g),\n clampAndTruncate(color.b),\n ],\n 39,\n ),\n );\n}\n\n/**\n * Set background color using 24bit rgb.\n * `color` can be a number in range `0x000000` to `0xffffff` or\n * an `Rgb`.\n *\n * @example Usage\n * ```ts no-assert\n * import { bgRgb24 } from \"@std/fmt/colors\";\n *\n * bgRgb24(\"foo\", 0xff00ff);\n * bgRgb24(\"foo\", {r: 255, g: 0, b: 255});\n * ```\n * @param str The text to set the background color of\n * @param color The color code\n * @returns The text with 24bit rgb background color\n */\nexport function bgRgb24(str: string, color: number | Rgb): string {\n if (typeof color === \"number\") {\n return run(\n str,\n code(\n [48, 2, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff],\n 49,\n ),\n );\n }\n return run(\n str,\n code(\n [\n 48,\n 2,\n clampAndTruncate(color.r),\n clampAndTruncate(color.g),\n clampAndTruncate(color.b),\n ],\n 49,\n ),\n );\n}\n\n// https://github.com/chalk/ansi-regex/blob/02fa893d619d3da85411acc8fd4e2eea0e95a9d9/index.js\nconst ANSI_PATTERN = new RegExp(\n [\n \"[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)\",\n \"(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TXZcf-nq-uy=><~]))\",\n ].join(\"|\"),\n \"g\",\n);\n\n/**\n * Remove ANSI escape codes from the string.\n *\n * @example Usage\n * ```ts no-assert\n * import { stripAnsiCode, red } from \"@std/fmt/colors\";\n *\n * console.log(stripAnsiCode(red(\"Hello, world!\")));\n * ```\n *\n * @param string The text to remove ANSI escape codes from\n * @returns The text without ANSI escape codes\n */\nexport function stripAnsiCode(string: string): string {\n return string.replace(ANSI_PATTERN, \"\");\n}\n","import {\n UnexpectedArgumentAfterVariadicArgumentError,\n UnexpectedRequiredArgumentError,\n} from \"@jsr/cliffy__flags\";\nimport { closestString } from \"@jsr/std__text/closest-string\";\nimport type { ArgDefinition } from \"./command.ts\";\nimport type { Command } from \"./command.ts\";\nimport type { Argument } from \"./types.ts\";\n\nexport function getFlag(name: string) {\n if (name.startsWith(\"-\")) {\n return name;\n }\n if (name.length > 1) {\n return `--${name}`;\n }\n return `-${name}`;\n}\n\nexport function didYouMean(\n message: string,\n type: string,\n types: Array<string>,\n): string {\n const match: string | undefined = types.length\n ? closestString(type, types)\n : undefined;\n return match ? `${message} \"${match}\"?` : \"\";\n}\n\nexport function didYouMeanCommand(\n command: string,\n commands: Array<Command>,\n excludes: Array<string> = [],\n): string {\n const commandNames = commands\n .map((command) => command.getName())\n .filter((command) => !excludes.includes(command));\n\n return didYouMean(\" Did you mean command\", command, commandNames);\n}\n\nconst ARGUMENT_REGEX = /^[<\\[].+[\\]>]$/;\nconst ARGUMENT_DETAILS_REGEX = /[<\\[:>\\]]/;\n\ninterface SplitArgumentsResult {\n flags: string[];\n typeDefinition: string;\n equalsSign: boolean;\n}\n\n/**\n * Split options and arguments.\n * @param args Arguments definition: `--color, -c <color1:string> <color2:string>`\n *\n * For example: `-c, --color <color1:string> <color2:string>`\n *\n * Will result in:\n * ```json\n * {\n * flags: [ \"-c\", \"--color\" ],\n * typeDefinition: \"<color1:string> <color2:string>\",\n * }\n * ```\n */\nexport function splitArguments(\n args: string,\n): SplitArgumentsResult {\n const parts = args.trim().split(/[, =] */g);\n const typeParts = [];\n\n while (\n parts[parts.length - 1] &&\n ARGUMENT_REGEX.test(parts[parts.length - 1])\n ) {\n typeParts.unshift(parts.pop());\n }\n\n const typeDefinition: string = typeParts.join(\" \");\n\n return { flags: parts, typeDefinition, equalsSign: args.includes(\"=\") };\n}\n\n/**\n * Parse arguments string.\n * @param argsDefinition Arguments definition: `<color1:string> <color2:string>`\n */\nexport function parseArgumentsDefinition<T extends boolean>(\n argsDefinition: string | Array<string | ArgDefinition>,\n validate: boolean,\n all: true,\n): Array<Argument | string>;\nexport function parseArgumentsDefinition<T extends boolean>(\n argsDefinition: string | Array<string | ArgDefinition>,\n validate?: boolean,\n all?: false,\n): Array<Argument>;\nexport function parseArgumentsDefinition<T extends boolean>(\n argsDefinition: string | Array<string | ArgDefinition>,\n validate = true,\n all?: T,\n): T extends true ? Array<Argument | string> : Array<Argument> {\n const argumentDetails: Array<Argument | string> = [];\n\n let hasOptional = false;\n let hasVariadic = false;\n const parts: Array<string | ArgDefinition> = Array.isArray(argsDefinition)\n ? argsDefinition\n : argsDefinition.split(/ +/);\n\n for (let argDef of parts) {\n if (typeof argDef === \"string\") {\n argDef = { arg: argDef };\n }\n if (validate && hasVariadic) {\n throw new UnexpectedArgumentAfterVariadicArgumentError(argDef.arg);\n }\n const parts: string[] = argDef.arg.split(ARGUMENT_DETAILS_REGEX);\n\n if (!parts[1]) {\n if (all) {\n argumentDetails.push(parts[0]);\n }\n continue;\n }\n const type: string | undefined = parts[2] || \"string\";\n\n const details: Argument = {\n description: argDef.description,\n optional: argDef.arg[0] === \"[\",\n raw: argDef.arg,\n name: parts[1],\n action: parts[3] || type,\n variadic: false,\n list: type ? argDef.arg.indexOf(type + \"[]\") !== -1 : false,\n type,\n };\n\n if (validate && !details.optional && hasOptional) {\n throw new UnexpectedRequiredArgumentError(details.name);\n }\n\n if (argDef.arg[0] === \"[\") {\n hasOptional = true;\n }\n\n if (details.name.length > 3) {\n const istVariadicLeft = details.name.slice(0, 3) === \"...\";\n const istVariadicRight = details.name.slice(-3) === \"...\";\n\n hasVariadic = details.variadic = istVariadicLeft || istVariadicRight;\n\n if (istVariadicLeft) {\n details.name = details.name.slice(3);\n } else if (istVariadicRight) {\n details.name = details.name.slice(0, -3);\n }\n }\n\n argumentDetails.push(details);\n }\n\n return argumentDetails as (\n T extends true ? Array<Argument | string> : Array<Argument>\n );\n}\n\nexport function dedent(str: string): string {\n const lines = str.split(/\\r?\\n|\\r/g);\n let text = \"\";\n let indent = 0;\n\n for (const line of lines) {\n if (text || line.trim()) {\n if (!text) {\n text = line.trimStart();\n indent = line.length - text.length;\n } else {\n text += line.slice(indent);\n }\n text += \"\\n\";\n }\n }\n\n return text.trimEnd();\n}\n\nexport function getDescription(\n description: string,\n short?: boolean,\n): string {\n return short\n ? description.trim().split(\"\\n\", 1)[0].trim()\n : dedent(description);\n}\n\n/** Convert underscore case string to camel case. */\nexport function underscoreToCamelCase(str: string): string {\n return str\n .replace(/([a-z])([A-Z])/g, \"$1_$2\")\n .toLowerCase()\n .replace(\n /_([a-z])/g,\n (g) => g[1].toUpperCase(),\n );\n}\n","import { didYouMeanCommand } from \"./_utils.js\";\nimport type { Command } from \"./command.ts\";\nimport { getFlag } from \"./_utils.js\";\nimport { bold } from \"@jsr/std__fmt/colors\";\nimport type { EnvVar } from \"./types.ts\";\n\nexport class CommandError extends Error {\n constructor(message: string) {\n super(message);\n Object.setPrototypeOf(this, CommandError.prototype);\n }\n}\n\nexport interface ValidationErrorOptions {\n exitCode?: number;\n}\n\nexport class ValidationError extends CommandError {\n public readonly exitCode: number;\n public cmd?: Command;\n\n constructor(message: string, { exitCode }: ValidationErrorOptions = {}) {\n super(message);\n Object.setPrototypeOf(this, ValidationError.prototype);\n this.exitCode = exitCode ?? 2;\n }\n}\n\nexport class DuplicateOptionNameError extends CommandError {\n constructor(optionName: string, commandName: string) {\n super(\n `An option with name '${\n bold(getFlag(optionName))\n }' is already registered on command '${\n bold(commandName)\n }'. If it is intended to override the option, set the '${\n bold(\"override\")\n }' option of the '${bold(\"option\")}' method to true.`,\n );\n Object.setPrototypeOf(this, DuplicateOptionNameError.prototype);\n }\n}\n\nexport class MissingCommandNameCompletionsError extends CommandError {\n constructor(shell: string) {\n super(\n `Failed to generate shell completions. Missing main command name. Use '${\n bold('cmd.name(\"<comand-name>\")')\n }' to set the name of the main command or use the '${\n bold(\"--name\")\n }' option from the '${\n bold(\"completions\")\n }' command to set the cli name: '${\n bold(`<command> completions ${shell} --name <cli-name>`)\n }'.`,\n );\n Object.setPrototypeOf(\n this,\n MissingCommandNameCompletionsError.prototype,\n );\n }\n}\n\nexport class MissingCommandNameError extends CommandError {\n constructor() {\n super(\"Missing command name.\");\n Object.setPrototypeOf(this, MissingCommandNameError.prototype);\n }\n}\n\nexport class DuplicateCommandNameError extends CommandError {\n constructor(name: string) {\n super(`Duplicate command name \"${name}\".`);\n Object.setPrototypeOf(this, DuplicateCommandNameError.prototype);\n }\n}\n\nexport class DuplicateCommandAliasError extends CommandError {\n constructor(alias: string) {\n super(`Duplicate command alias \"${alias}\".`);\n Object.setPrototypeOf(this, DuplicateCommandAliasError.prototype);\n }\n}\n\nexport class CommandNotFoundError extends CommandError {\n constructor(\n name: string,\n commands: Array<Command>,\n excluded?: Array<string>,\n ) {\n super(\n `Unknown command \"${name}\".${\n didYouMeanCommand(name, commands, excluded)\n }`,\n );\n Object.setPrototypeOf(this, CommandNotFoundError.prototype);\n }\n}\n\nexport class DuplicateTypeError extends CommandError {\n constructor(name: string) {\n super(`Type with name \"${name}\" already exists.`);\n Object.setPrototypeOf(this, DuplicateTypeError.prototype);\n }\n}\n\nexport class DuplicateCompletionError extends CommandError {\n constructor(name: string) {\n super(`Completion with name \"${name}\" already exists.`);\n Object.setPrototypeOf(this, DuplicateCompletionError.prototype);\n }\n}\n\nexport class DuplicateExampleError extends CommandError {\n constructor(name: string) {\n super(`Example with name \"${name}\" already exists.`);\n Object.setPrototypeOf(this, DuplicateExampleError.prototype);\n }\n}\n\nexport class DuplicateEnvVarError extends CommandError {\n constructor(name: string) {\n super(`Environment variable with name \"${name}\" already exists.`);\n Object.setPrototypeOf(this, DuplicateEnvVarError.prototype);\n }\n}\n\nexport class MissingRequiredEnvVarError extends ValidationError {\n constructor(envVar: EnvVar) {\n super(`Missing required environment variable \"${envVar.names[0]}\".`);\n Object.setPrototypeOf(this, MissingRequiredEnvVarError.prototype);\n }\n}\n\nexport class TooManyEnvVarValuesError extends CommandError {\n constructor(name: string) {\n super(\n `An environment variable can only have one value, but \"${name}\" has more than one.`,\n );\n Object.setPrototypeOf(this, TooManyEnvVarValuesError.prototype);\n }\n}\n\nexport class UnexpectedOptionalEnvVarValueError extends CommandError {\n constructor(name: string) {\n super(\n `An environment variable cannot have an optional value, but \"${name}\" is defined as optional.`,\n );\n Object.setPrototypeOf(this, UnexpectedOptionalEnvVarValueError.prototype);\n }\n}\n\nexport class UnexpectedVariadicEnvVarValueError extends CommandError {\n constructor(name: string) {\n super(\n `An environment variable cannot have an variadic value, but \"${name}\" is defined as variadic.`,\n );\n Object.setPrototypeOf(this, UnexpectedVariadicEnvVarValueError.prototype);\n }\n}\n\nexport class DefaultCommandNotFoundError extends CommandError {\n constructor(name: string, commands: Array<Command>) {\n super(\n `Default command \"${name}\" not found.${\n didYouMeanCommand(name, commands)\n }`,\n );\n Object.setPrototypeOf(this, DefaultCommandNotFoundError.prototype);\n }\n}\n\nexport class UnknownCompletionCommandError extends CommandError {\n constructor(name: string, commands: Array<Command>) {\n super(\n `Auto-completion failed. Unknown command \"${name}\".${\n didYouMeanCommand(name, commands)\n }`,\n );\n Object.setPrototypeOf(this, UnknownCompletionCommandError.prototype);\n }\n}\n\n/* Validation errors. */\n\nexport class UnknownCommandError extends ValidationError {\n constructor(\n name: string,\n commands: Array<Command>,\n excluded?: Array<string>,\n ) {\n super(\n `Unknown command \"${name}\".${\n didYouMeanCommand(name, commands, excluded)\n }`,\n );\n Object.setPrototypeOf(this, UnknownCommandError.prototype);\n }\n}\n\nexport class NoArgumentsAllowedError extends ValidationError {\n constructor(name: string) {\n super(`No arguments allowed for command \"${name}\".`);\n Object.setPrototypeOf(this, NoArgumentsAllowedError.prototype);\n }\n}\n\nexport class MissingArgumentsError extends ValidationError {\n constructor(names: Array<string>) {\n super(`Missing argument(s): ${names.join(\", \")}`);\n Object.setPrototypeOf(this, MissingArgumentsError.prototype);\n }\n}\n\nexport class MissingArgumentError extends ValidationError {\n constructor(name: string) {\n super(`Missing argument: ${name}`);\n Object.setPrototypeOf(this, MissingArgumentError.prototype);\n }\n}\n\nexport class TooManyArgumentsError extends ValidationError {\n constructor(args: Array<string>) {\n super(`Too many arguments: ${args.join(\" \")}`);\n Object.setPrototypeOf(this, TooManyArgumentsError.prototype);\n }\n}\n","// deno-lint-ignore-file no-explicit-any\n\n/**\n * Exit the current process with optional exit code.\n *\n * @internal\n * @param code The exit code.\n */\nexport function exit(code: number): never {\n // dnt-shim-ignore\n const { Deno, process } = globalThis as any;\n const exit: (code: number) => never = Deno?.exit ?? process?.exit;\n\n if (exit) {\n exit(code);\n }\n\n throw new Error(\"unsupported runtime\");\n}\n","// deno-lint-ignore-file no-explicit-any\n\n/**\n * Get environment variable.\n *\n * @internal\n * @param name The name of the environment variable.\n */\nexport function getEnv(name: string): string | undefined {\n // dnt-shim-ignore\n const { Deno, process } = globalThis as any;\n\n if (Deno) {\n return Deno.env.get(name);\n } else if (process) {\n return process.env[name];\n }\n\n throw new Error(\"unsupported runtime\");\n}\n","/** Default border characters. */\nexport const border = {\n top: \"─\",\n topMid: \"┬\",\n topLeft: \"┌\",\n topRight: \"┐\",\n bottom: \"─\",\n bottomMid: \"┴\",\n bottomLeft: \"└\",\n bottomRight: \"┘\",\n left: \"│\",\n leftMid: \"├\",\n mid: \"─\",\n midMid: \"┼\",\n right: \"│\",\n rightMid: \"┤\",\n middle: \"│\",\n};\n\n/** Default border characters. */\nexport type Border = typeof border;\n","/** Allowed cell value type. */\nexport type CellValue = number | string;\n\n/** Allowed cell type. */\nexport type CellType = CellValue | Cell;\n\n/** Cell alignment direction. */\nexport type Direction = \"left\" | \"right\" | \"center\";\n\n/** Cell options. */\ninterface CellOptions {\n /** Enable/disable cell border. */\n border?: boolean;\n /** Set coll span. */\n colSpan?: number;\n /** Set row span. */\n rowSpan?: number;\n /** Cell cell alignment direction. */\n align?: Direction;\n /**\n * Any unterminated ANSI formatting overflowed from previous lines of a\n * multi-line cell.\n */\n unclosedAnsiRuns?: string;\n}\n\n/**\n * Cell representation.\n *\n * Can be used to customize a single cell.\n *\n * ```ts\n * import { Cell, Table } from \"./mod.ts\";\n *\n * new Table()\n * .body([\n * [\"Foo\", new Cell(\"Bar\").align(\"right\")],\n * [\"Beep\", \"Boop\"],\n * ])\n * .render();\n * ```\n */\nexport class Cell {\n protected options: CellOptions = {};\n\n /** Get cell length. */\n public get length(): number {\n return this.toString().length;\n }\n\n /**\n * Any unterminated ANSI formatting overflowed from previous lines of a\n * multi-line cell.\n */\n public get unclosedAnsiRuns(): string {\n return this.options.unclosedAnsiRuns ?? \"\";\n }\n public set unclosedAnsiRuns(val: string) {\n this.options.unclosedAnsiRuns = val;\n }\n\n /**\n * Create a new cell. If value is a cell, the value and all options of the cell\n * will be copied to the new cell.\n *\n * @param value Cell or cell value.\n */\n public static from(value: CellType): Cell {\n let cell: Cell;\n if (value instanceof Cell) {\n cell = new this(value.getValue());\n cell.options = { ...value.options };\n } else {\n cell = new this(value);\n }\n return cell;\n }\n\n /**\n * Cell constructor.\n *\n * @param value Cell value.\n */\n public constructor(private value: CellValue) {}\n\n /** Get cell string value. */\n public toString(): string {\n return this.value.toString();\n }\n\n /** Get cell value. */\n public getValue(): CellValue {\n return this.value;\n }\n\n /**\n * Set cell value.\n *\n * @param value Cell or cell value.\n */\n public setValue(value: CellValue): this {\n this.value = value;\n return this;\n }\n\n /**\n * Clone cell with all options.\n *\n * @param value Cell or cell value.\n */\n public clone(value?: CellValue): Cell {\n return Cell.from(value ?? this);\n }\n\n /**\n * Setter:\n */\n\n /**\n * Enable/disable cell border.\n *\n * @param enable Enable/disable cell border.\n * @param override Override existing value.\n */\n public border(enable = true, override = true): this {\n if (override || typeof this.options.border === \"undefined\") {\n this.options.border = enable;\n }\n return this;\n }\n\n /**\n * Set col span.\n *\n * ```ts\n * import { Cell, Table } from \"./mod.ts\";\n *\n * new Table()\n * .body([\n * [\n * new Cell(\"Row 1 & 2 Column 1\").rowSpan(2),\n * \"Row 1 Column 2\",\n * \"Row 1 Column 3\",\n * ],\n * [new Cell(\"Row 2 Column 2 & 3\").colSpan(2)],\n * ])\n * .border()\n * .render();\n * ```\n *\n * @param span Number of cols to span.\n * @param override Override existing value.\n */\n public colSpan(span: number, override = true): this {\n if (override || typeof this.options.colSpan === \"undefined\") {\n this.options.colSpan = span;\n }\n return this;\n }\n\n /**\n * Set row span.\n *\n * ```ts\n * import { Cell, Table } from \"./mod.ts\";\n *\n * new Table()\n * .body([\n * [\n * new Cell(\"Row 1 & 2 Column 1\").rowSpan(2),\n * \"Row 1 Column 2\",\n * \"Row 1 Column 3\",\n * ],\n * [new Cell(\"Row 2 Column 2 & 3\").colSpan(2)],\n * ])\n * .border()\n * .render();\n * ```\n *\n * @param span Number of rows to span.\n * @param override Override existing value.\n */\n public rowSpan(span: number, override = true): this {\n if (override || typeof this.options.rowSpan === \"undefined\") {\n this.options.rowSpan = span;\n }\n return this;\n }\n\n /**\n * Align cell content.\n *\n * @param direction Align direction.\n * @param override Override existing value.\n */\n public align(direction: Direction, override = true): this {\n if (override || typeof this.options.align === \"undefined\") {\n this.options.align = direction;\n }\n return this;\n }\n\n /**\n * Getter:\n */\n\n /** Check if cell has border. */\n public getBorder(): boolean {\n return this.options.border === true;\n }\n\n /** Get col span. */\n public getColSpan(): number {\n return typeof this.options.colSpan === \"number\" && this.options.colSpan > 0\n ? this.options.colSpan\n : 1;\n }\n\n /** Get row span. */\n public getRowSpan(): number {\n return typeof this.options.rowSpan === \"number\" && this.options.rowSpan > 0\n ? this.options.rowSpan\n : 1;\n }\n\n /** Get row span. */\n public getAlign(): Direction {\n return this.options.align ?? \"left\";\n }\n}\n","import type { Direction } from \"./cell.ts\";\n\n/** Column options. */\nexport interface ColumnOptions {\n /** Enable/disable cell border. */\n border?: boolean;\n /** Cell cell alignment direction. */\n align?: Direction;\n /** Set min column width. */\n minWidth?: number;\n /** Set max column width. */\n maxWidth?: number;\n /** Set cell padding. */\n padding?: number;\n}\n\n/**\n * Column representation.\n *\n * Can be used to customize a single column.\n *\n * ```ts\n * import { Column, Table } from \"./mod.ts\";\n *\n * new Table()\n * .body([\n * [\"Foo\", \"bar\"],\n * [\"Beep\", \"Boop\"],\n * ])\n * .column(0, new Column().border())\n * .render();\n * ```\n */\nexport class Column {\n /**\n * Create a new cell from column options or an existing column.\n * @param options\n */\n static from(options: ColumnOptions | Column): Column {\n const opts = options instanceof Column ? options.opts : options;\n return new Column().options(opts);\n }\n\n protected opts: ColumnOptions = {};\n\n /** Set column options. */\n options(options: ColumnOptions): this {\n Object.assign(this.opts, options);\n return this;\n }\n\n /** Set min column width. */\n minWidth(width: number): this {\n this.opts.minWidth = width;\n return this;\n }\n\n /** Set max column width. */\n maxWidth(width: number): this {\n this.opts.maxWidth = width;\n return this;\n }\n\n /** Set column border. */\n border(border = true): this {\n this.opts.border = border;\n return this;\n }\n\n /** Set column padding. */\n padding(padding: number): this {\n this.opts.padding = padding;\n return this;\n }\n\n /** Set column alignment. */\n align(direction: Direction): this {\n this.opts.align = direction;\n return this;\n }\n\n /** Get min column width. */\n getMinWidth(): number | undefined {\n return this.opts.minWidth;\n }\n\n /** Get max column width. */\n getMaxWidth(): number | undefined {\n return this.opts.maxWidth;\n }\n\n /** Get column border. */\n getBorder(): boolean | undefined {\n return this.opts.border;\n }\n\n /** Get column padding. */\n getPadding(): number | undefined {\n return this.opts.padding;\n }\n\n /** Get column alignment. */\n getAlign(): Direction | undefined {\n return this.opts.align;\n }\n}\n","let tables: Uint8Array[] | null = null;\n\nconst data = {\n \"UNICODE_VERSION\": \"15.0.0\",\n \"tables\": [\n {\n \"d\": \"AAECAwQFBgcICQoLDA0OAw8DDwkQCRESERIA\",\n \"r\": \"AQEBAgEBAQEBAQEBAQEBBwEHAVABBwcBBwF4\",\n },\n {\n \"d\":\n \"AAECAwQFBgcGCAYJCgsMDQ4PEAYREhMUBhUWFxgZGhscHR4fICEiIyIkJSYnKCkqJSssLS4vMDEyMzQ1Njc4OToGOzwKBj0GPj9AQUIGQwZEBkVGR0hJSktMTQZOBgoGT1BRUlNUVVZXWFkGWgZbBlxdXl1fYGFiY2RlZmdoBmlqBmsGAQZsBm1uO29wcXI7czt0dXZ3OwY7eHkGent8Bn0Gfn+AgYKDhIWGBoc7iAZdO4kGiosGAXGMBo0GjgaPBpAGkQaSBpMGlJUGlpcGmJmam5ydnp+gLgahLKIGo6SlpganqKmqqwasBq0Grq8GsLGyswa0BrUGtre4Brm6uwZHvAa9vga/wME7wjvDxAbFO8bHO8gGyQbKywbMzQbOBs/Q0QbSBr8GvgbT1AbUBtUG1gbXBtjZ2tsG3N0G3t/g4eLjO+Tl5ufoO+k76gbrBuztOwbu7/AGO+XxCgYKCwZd8g==\",\n \"r\":\n \"AQEBAQEBAQEBAQEBAQEBAQEBAQMBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECBQEOAQEBAQEBAQEBAwEBAQEBAQEBAQIBAwEIAQEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBDQEBBQEBAQEBAgEBAwEBAQEBAQEBAQEBbQHaAQEFAQEBBAECAQEBAQEBAQEBAwGuASFkCAELAQEBAQEBAQEHAQMBAQEaAQIBCAEFAQEBAQEBAQEBAQEBAQEBAQEBAQECAQEBAQIBAQEBAQEBAwEDAQEBAQEBAQUBAQEBAQEBBAEBAVIBAdkBARABAQFfARMBAYoBBAEBBQEmAUkBAQcBAQIBHgEBARUBAQEBAQUBAQcBDwEBARoBAgEBAQEBAQECAQEBAQEBAQEBAQEBAQEBAQMBBAEBAgEBAQEUfwEBAQIDAXj/AQ==\",\n },\n {\n \"d\":\n \"AFUVAF3Xd3X/93//VXVVV9VX9V91f1/31X93XVXdVdVV9dVV/VVX1X9X/131VfXVVXV3V1VdVV1V1/1dV1X/3VUAVf3/3/9fVf3/3/9fVV1V/11VFQBQVQEAEEEQVQBQVQBAVFUVAFVUVQUAEAAUBFBVFVFVAEBVBQBUVRUAVVFVBRAAAVBVAVVQVQBVBQBAVUVUAQBUUQEAVQVVUVVUAVRVUVUFVUVBVVRBFRRQUVVQUVUBEFRRVQVVBQBRVRQBVFVRVUFVBVVFVVRVUVVUVQRUBQRQVUFVBVVFVVBVBVVQVRVUAVRVUVUFVVFVRVUFRFVRAEBVFQBAVVEAVFUAQFVQVRFRVQEAQAAEVQEAAQBUVUVVAQQAQVVQBVRVAVRVRUFVUVVRVaoAVQFVBVRVBVUFVQVVEABQVUUBAFVRVRUAVUFVUVVAFVRVRVUBVRUUVUUAQEQBAFQVABRVAEBVAFUEQFRFVRUAVVBVBVAQUFVFUBFQVQAFVUAABABUUVVUUFUVANd/X3//BUD3XdV1VQAEAFVXVdX9V1VXVQBUVdVdVdV1VX111VXVV9V//1X/X1VdVf9fVV9VdVdV1VX31dfVXXX9193/d1X/VV9VV3VVX//1VfVVXVVdVdVVdVWlVWlVqVaWVf/f/1X/Vf/1X1Xf/19V9VVf9df1X1X1X1XVVWlVfV31VVpVd1V3VapV33/fVZVVlVX1WVWlVelV+v/v//7/31Xv/6/77/tVWaVVVlVdVWaVmlX1/1WpVVZVlVWVVlVW+V9VFVBVAKqaqlWqWlWqVaoKoKpqqapqgapVqaqpqmqqVapqqv+qVqpqVRVAAFBVBVVQVUUVVUFVVFVQVQBQVRVVBQBQVRUAUFWqVkBVFQVQVVFVAUBBVRVVVFVUVQQUVAVRVVBVRVVRVFFVqlVFVQCqWlUAqmqqaqpVqlZVqmpVAV1VUVVUVQVAVQFBVQBVQBVVQVUAVRVUVQFVBQBUVQVQVVFVAEBVFFRVFVBVFUBBUUVVUVVAVRUAAQBUVRVVUFUFAEBVARRVFVAEVUVVFQBAVVRVBQBUAFRVAAVEVUVVFQBEFQRVBVBVEFRVUFUVAEARVFUVUQAQVQEFEABVFQBBVRVEFVUABVVUVQEAQFUVABRAVRVVAUABVQUAQFBVAEAAEFUFAAUABEFVAUBFEAAQVVARVRVUVVBVBUBVRFVUFQBQVQBUVQBAVRVVFUBVqlRVWlWqVapaVapWVaqpqmmqalVlVWpZVapVqlVBAFUAUABAVRVQVRUAQAEAVQVQVQVUVQBAFQBUVVFVVFUVAAEAVQBAABQAEARAVUVVAFUAQFUAQFVWVZVV/39V/1//X1X/76uq6v9XVWpVqlWqVlVaVapaVapWVamqmqqmqlWqapWqVapWqmqmqpaqWlWVaqpVZVVpVVZVlapVqlpVVmqpVapVlVZVqlZVqlVWVapqqpqqVapWqlZVqpqqWlWlqlWqVlWqVlVRVQD/Xw==\",\n \"r\":\n \"CBcBCAEBAQEBAQEBAQECAQEBAQEBAQEBAQEBAQMBAQECAQEBAQEBAQEBAQEBBAEBGAEDAQwBAwEIAQEBAQEBAQgcCAEDAQEBAQEDAQEBDQEDEAELAQEBEQEKAQEBDgEBAgIBAQoBBQQBCAEBAQEBAQEHAQEHBgEWAQIBDQECAgEFAQECAgEKAQ0BAQIKAQ0BDQEBAQEBAQEBAgEHAQ4BAQEBAQQBBgEBDgEBAQEBAQcBAQIBAQEBBAEFAQEBDgEBAQEBAQECAQcBDwECAQwCDQEBAQEBAQECAQgBAQEEAQcBDQEBAQEBAQQBBwERAQEBARYBAQECAQEBGAECAQIBARIBBgEBDQECAQEBAQECAQgBAQEZAQEBAgYBAQEDAQECAQEBAQMBCBgIBwEMAQEGAQcBBwEQAQEBAQEBAgIBCgEBDQEIAQ0BAQEBAQEBBgEBDgEBAQEBAQEBAgEMBwEMAQwBAQEBCQECAwEHAQEBAQ0BAQEBDgIBBgEDAQEBAQEBAQMBAQEBAgEBAQEBAQEBCAEBAgEBAQEBAQkBCAgBAwECAQEBAgEBAQkBAQEBAwECAQMBAQIBBwEFAQEDAQYBAQEBAgEBAQEBAQEBAQECAgEDAQECBAIDAgIBBQEEAQEBAwEPAQEBCyIBCAEJAwQBAQIBAQEBAgECAQEBAQMBAQEBAwEBAQEBAQEBAQgBAQMDAgEBAwEEAQIBAQEBBAEBAQEBAQECAQEBAQEBAQEBAQEHAQQBAwEBAQcBAgUBBgECAQYBAQwBAQEUAQELCAYBFgMFAQYDAQoBAQMBARQBAQkBAQoBBgEVAwsBCgIPAQ0BGQEBAgEHARQBAwIBBgEBAQUBBgQBAgEJAQEBBQECAQMHAQELAQECCQEQAQECAgECAQsBDAEBAQEBCgEBAQsBAQEECQ4BCAQCAQEECAEEAQEFCAEPAQEEAQEPAQgBFAEBAQEBAQEKAQEJAQ8BEAEBEwEBAQIBCwEBDgENAwEKAQEBAQELAQEBAQECAQwBCAEBAQEBDgEDAQwBAQECAQEXAQEBAQEHAgEBBQEIAQEBAQEQAgEBBQEUAQEBAQEbAQEBAQEGARQBAQEBARkBAQEBCQEBAQEQAQIBDwEBARQBAQEBBwEBAQkBAQEBAQECAQEBCwECAQEVAQEBAQQBBQEBAQEOAQEBAQEBEgEBFgEBAgEMAQEBAQ8BAQMBFgEBDgEBBQEPAQETAQECAQMOAgUBCgIBGQEBAQEIAQMBBwEBAwECEwgBAQcLAQUBFwEBAQEDAQEBBwEBBAEBDg0BAQwBAQEDAQQBAQEDBAEBBAEBAQEBEAEPAQgBAQsBAQ4BEQEMAgEBBwEOAQEHAQEBAQQBBAEDCwECAQEBAwEBBggBAgEBAREBBQMKAQEBAwQCEQEBHgEPAQIBAQYEAQYBAwEUAQUMAQEBAQEBAQECAQEBAgEIAwEBBgsBAgEODAMBAgEBCwEBAQEBAwECAQECAQEBBwgPAQ==\",\n },\n ],\n} as const;\n\nfunction lookupWidth(cp: number) {\n if (!tables) tables = data.tables.map(runLengthDecode);\n const t1Offset = tables[0]![(cp >> 13) & 0xff]!;\n const t2Offset = tables[1]![128 * t1Offset + ((cp >> 6) & 0x7f)]!;\n const packedWidths = tables[2]![16 * t2Offset + ((cp >> 2) & 0xf)]!;\n\n const width = (packedWidths >> (2 * (cp & 0b11))) & 0b11;\n\n return width === 3 ? 1 : width;\n}\n\nconst cache = new Map<string, number | null>();\nfunction charWidth(char: string) {\n if (cache.has(char)) return cache.get(char)!;\n\n const codePoint = char.codePointAt(0)!;\n let width: number | null = null;\n\n if (codePoint < 0x7f) {\n width = codePoint >= 0x20 ? 1 : codePoint === 0 ? 0 : null;\n } else if (codePoint >= 0xa0) {\n width = lookupWidth(codePoint);\n } else {\n width = null;\n }\n\n cache.set(char, width);\n return width;\n}\n\n/**\n * Calculate the physical width of a string in a TTY-like environment. This is\n * useful for cases such as calculating where a line-wrap will occur and\n * underlining strings.\n *\n * The physical width is given by the number of columns required to display\n * the string. The number of columns a given unicode character occupies can\n * vary depending on the character itself.\n *\n * @param str The string to measure.\n * @returns The unicode width of the string.\n *\n * @example Calculating the unicode width of a string\n * ```ts\n * import { unicodeWidth } from \"@std/cli/unicode-width\";\n * import { assertEquals } from \"@std/assert\";\n *\n * assertEquals(unicodeWidth(\"hello world\"), 11);\n * assertEquals(unicodeWidth(\"天地玄黃宇宙洪荒\"), 16);\n * assertEquals(unicodeWidth(\"fullwidth\"), 18);\n * ```\n *\n * @example Calculating the unicode width of a color-encoded string\n * ```ts\n * import { unicodeWidth } from \"@std/cli/unicode-width\";\n * import { stripAnsiCode } from \"@std/fmt/colors\";\n * import { assertEquals } from \"@std/assert\";\n *\n * assertEquals(unicodeWidth(stripAnsiCode(\"\\x1b[36mголубой\\x1b[39m\")), 7);\n * assertEquals(unicodeWidth(stripAnsiCode(\"\\x1b[31m紅色\\x1b[39m\")), 4);\n * assertEquals(unicodeWidth(stripAnsiCode(\"\\x1B]8;;https://deno.land\\x07🦕\\x1B]8;;\\x07\")), 2);\n * ```\n *\n * Use\n * {@linkcode https://jsr.io/@std/fmt/doc/colors/~/stripAnsiCode | stripAnsiCode}\n * to remove ANSI escape codes from a string before passing it to\n * {@linkcode unicodeWidth}.\n */\nexport function unicodeWidth(str: string): number {\n return [...str].map((ch) => charWidth(ch) ?? 0).reduce((a, b) => a + b, 0);\n}\n\nfunction runLengthDecode({ d, r }: { d: string; r: string }) {\n const data = atob(d);\n const runLengths = atob(r);\n let out = \"\";\n\n for (const [i, ch] of [...runLengths].entries()) {\n out += data[i]!.repeat(ch.codePointAt(0)!);\n }\n\n return Uint8Array.from([...out].map((x) => x.codePointAt(0)!));\n}\n","/**\n * Get next words from the beginning of [content] until all words have a length lower or equal then [length].\n *\n * @param length Max length of all words.\n * @param content The text content.\n */\nimport { Cell, type CellType } from \"./cell.js\";\nimport { consumeWords } from \"./consume_words.js\";\nimport { stripAnsiCode } from \"@jsr/std__fmt/colors\";\nimport { unicodeWidth } from \"./unicode_width.js\";\n// import { unicodeWidth } from \"@std/cli/unicode-width\";\n\n/**\n * Get longest cell from given row index.\n */\nexport function longest(\n index: number,\n rows: Array<Array<CellType>>,\n maxWidth?: number,\n): number {\n const cellLengths = rows.map((row) => {\n const cell = row[index];\n const cellValue = cell instanceof Cell && cell.getColSpan() > 1\n ? \"\"\n : cell?.toString() || \"\";\n\n return cellValue\n .split(\"\\n\")\n .map((line: string) => {\n const str = typeof maxWidth === \"undefined\"\n ? line\n : consumeWords(maxWidth, line);\n\n return strLength(str) || 0;\n });\n }).flat();\n\n return Math.max(...cellLengths);\n}\n\nexport const strLength = (str: string): number => {\n return unicodeWidth(stripAnsiCode(str));\n};\n\n/** Regex `source` to match any relevant ANSI code. */\nexport const ansiRegexSource =\n // deno-lint-ignore no-control-regex\n /\\x1b\\[(?:(?<_0>0)|(?<_22>1|2|22)|(?<_23>3|23)|(?<_24>4|24)|(?<_27>7|27)|(?<_28>8|28)|(?<_29>9|29)|(?<_39>30|31|32|33|34|35|36|37|38;2;\\d+;\\d+;\\d+|38;5;\\d+|39|90|91|92|93|94|95|96|97)|(?<_49>40|41|42|43|44|45|46|47|48;2;\\d+;\\d+;\\d+|48;5;\\d+|49|100|101|102|103|104|105|106|107))m/\n .source;\n\n/**\n * Get unclosed ANSI runs in a string.\n *\n * @param text - A string segment possibly containing unclosed ANSI runs.\n */\nexport function getUnclosedAnsiRuns(text: string) {\n type Token = { kind: string; content: string };\n const tokens: Token[] = [];\n for (const { groups } of text.matchAll(new RegExp(ansiRegexSource, \"g\"))) {\n const [_kind, content] = Object.entries(groups!).find(([_, val]) => val)!;\n tokens.push({ kind: _kind.slice(1), content });\n }\n\n let unclosed: Token[] = [];\n for (const token of tokens) {\n // Subsequent ANSI codes of a given kind automatically \"close\" previous\n // codes of the same kind, so we remove the previous ones.\n // E.g. in the string `${bg_red} A ${bg_yellow} B ${close_bg} C`, \"B\" only\n // has a single background color (yellow), and \"C\" has no background color.\n unclosed = [...unclosed.filter((y) => y.kind !== token.kind), token];\n }\n\n unclosed = unclosed.filter(({ content, kind }) => content !== kind);\n\n const currentSuffix = unclosed\n .map(({ kind }) => `\\x1b[${kind}m`).reverse().join(\"\");\n const nextPrefix = unclosed.map(({ content }) => `\\x1b[${content}m`).join(\"\");\n\n return {\n /** The suffix to be appended to the text to close all unclosed runs. */\n currentSuffix,\n /**\n * The prefix to be appended to the next segment to continue unclosed\n * runs if the input text forms the first segment of a multi-line string.\n */\n nextPrefix,\n };\n}\n","import { ansiRegexSource, strLength } from \"./_utils.js\";\n\n/**\n * Consumes the maximum amount of words from a string which is not longer than\n * given length. This function returns at least one word.\n *\n * ```ts\n * import { consumeWords } from \"./mod.ts\";\n *\n * const str = consumeWords(9, \"This is an example.\"); // returns: \"This is\"\n * ```\n *\n * @param length The maximum length of the returned string.\n * @param content The content from which the string should be consumed.\n */\nexport function consumeWords(length: number, content: string): string {\n let consumed = \"\";\n const words: Array<string> = content.split(\"\\n\")[0]?.split(/ /g);\n\n for (let i = 0; i < words.length; i++) {\n const word: string = words[i];\n\n // consume minimum one word\n if (consumed) {\n const nextLength = strLength(word);\n const consumedLength = strLength(consumed);\n if (consumedLength + nextLength >= length) {\n break;\n }\n }\n\n consumed += (i > 0 ? \" \" : \"\") + word;\n }\n\n return consumed;\n}\n\n/**\n * Consumes the maximum amount of chars from a string which is not longer than\n * given length, ignoring ANSI codes when calculating the length.\n * This function returns at least one char.\n *\n * ```ts\n * import { consumeChars } from \"./consume_words.ts\";\n *\n * const str = consumeChars(9, \"\\x1b[31mThis is an example.\"); // returns: \"\\x1b[31mThis is a\"\n * ```\n *\n * @param length The maximum length of the returned string.\n * @param content The content from which the string should be consumed.\n */\nexport function consumeChars(length: number, content: string): string {\n let consumed = \"\";\n const chars = [\n ...content.split(\"\\n\")[0].matchAll(\n new RegExp(`(?:${ansiRegexSource})+|.`, \"gu\"),\n ),\n ]\n .map(([match]) => match);\n\n for (const char of chars) {\n // consume minimum one char\n if (consumed) {\n const nextLength = strLength(char);\n const consumedLength = strLength(consumed);\n if (consumedLength + nextLength > length) {\n break;\n }\n }\n\n consumed += char;\n }\n\n return consumed;\n}\n","import { Cell, type CellType, type Direction } from \"./cell.js\";\n\n/** Allowed row type. */\nexport type RowType<\n T extends CellType | undefined = CellType | undefined,\n> =\n | Array<T>\n | Row<T>;\n\n/** Json row. */\nexport type DataRow = Record<string, string | number>;\n\n/** Row options. */\ninterface RowOptions {\n indent?: number;\n border?: boolean;\n align?: Direction;\n}\n\n/**\n * Row representation.\n *\n * Can be used to customize a single row.\n *\n * ```ts\n * import { Row, Table } from \"./mod.ts\";\n *\n * new Table()\n * .body([\n * new Row(\"Foo\", \"Bar\").align(\"right\"),\n * [\"Beep\", \"Boop\"],\n * ])\n * .render();\n * ```\n */\nexport class Row<\n T extends CellType | undefined = CellType | undefined,\n> extends Array<T> {\n protected options: RowOptions = {};\n\n /**\n * Create a new row. If cells is a row, all cells and options of the row will\n * be copied to the new row.\n *\n * @param cells Cells or row.\n */\n public static override from<T extends CellType | undefined>(\n cells: RowType<T>,\n ): Row<T> {\n const row = new this(...cells);\n if (cells instanceof Row) {\n row.options = { ...(cells as Row).options };\n }\n return row;\n }\n\n /** Clone row recursively with all options. */\n public clone(): Row {\n const row = new Row(\n ...this.map((cell: T) => cell instanceof Cell ? cell.clone() : cell),\n );\n row.options = { ...this.options };\n return row;\n }\n\n /**\n * Setter:\n */\n\n /**\n * Enable/disable cell border.\n *\n * @param enable Enable/disable cell border.\n * @param override Override existing value.\n */\n public border(enable = true, override = true): this {\n if (override || typeof this.options.border === \"undefined\") {\n this.options.border = enable;\n }\n return this;\n }\n\n /**\n * Align row content.\n *\n * @param direction Align direction.\n * @param override Override existing value.\n */\n public align(direction: Direction, override = true): this {\n if (override || typeof this.options.align === \"undefined\") {\n this.options.align = direction;\n }\n return this;\n }\n\n /**\n * Getter:\n */\n\n /** Check if row has border. */\n public getBorder(): boolean {\n return this.options.border === true;\n }\n\n /** Check if row or any child cell has border. */\n public hasBorder(): boolean {\n return this.getBorder() ||\n this.some((cell) => cell instanceof Cell && cell.getBorder());\n }\n\n /** Get row alignment. */\n public getAlign(): Direction {\n return this.options.align ?? \"left\";\n }\n}\n","import type { Column } from \"./column.ts\";\nimport { Cell, type CellType, type Direction } from \"./cell.js\";\nimport { consumeChars, consumeWords } from \"./consume_words.js\";\nimport { Row, type RowType } from \"./row.js\";\nimport type { BorderOptions, Table, TableSettings } from \"./table.ts\";\nimport { getUnclosedAnsiRuns, longest, strLength } from \"./_utils.js\";\n\n/** Layout render settings. */\ninterface RenderSettings {\n padding: Array<number>;\n width: Array<number>;\n columns: number;\n hasBorder: boolean;\n hasHeaderBorder: boolean;\n hasBodyBorder: boolean;\n rows: Array<Row<Cell>>;\n}\n\n/** Table layout renderer. */\nexport class TableLayout {\n /**\n * Table layout constructor.\n * @param table Table instance.\n * @param options Render options.\n */\n public constructor(\n private table: Table,\n private options: TableSettings,\n ) {}\n\n /** Generate table string. */\n public toString(): string {\n const opts: RenderSettings = this.createLayout();\n return opts.rows.length ? this.renderRows(opts) : \"\";\n }\n\n /**\n * Generates table layout including row and col span, converts all none\n * Cell/Row values to Cells and Rows and returns the layout rendering\n * settings.\n */\n protected createLayout(): RenderSettings {\n Object.keys(this.options.chars).forEach((key: string) => {\n if (typeof this.options.chars[key as keyof BorderOptions] !== \"string\") {\n this.options.chars[key as keyof BorderOptions] = \"\";\n }\n });\n\n const hasBodyBorder: boolean = this.table.getBorder() ||\n this.table.hasBodyBorder();\n const hasHeaderBorder: boolean = this.table.hasHeaderBorder();\n const hasBorder: boolean = hasHeaderBorder || hasBodyBorder;\n\n const rows = this.#getRows();\n\n const columns: number = Math.max(...rows.map((row) => row.length));\n for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) {\n const row = rows[rowIndex];\n const length: number = row.length;\n if (length < columns) {\n const diff = columns - length;\n for (let i = 0; i < diff; i++) {\n row.push(this.createCell(null, row, rowIndex, length + i));\n }\n }\n }\n\n const padding: Array<number> = [];\n const width: Array<number> = [];\n for (let colIndex = 0; colIndex < columns; colIndex++) {\n const column = this.options.columns.at(colIndex);\n const minColWidth: number = column?.getMinWidth() ??\n (Array.isArray(this.options.minColWidth)\n ? this.options.minColWidth[colIndex]\n : this.options.minColWidth);\n\n const maxColWidth: number = column?.getMaxWidth() ??\n (Array.isArray(this.options.maxColWidth)\n ? this.options.maxColWidth[colIndex]\n : this.options.maxColWidth);\n\n const colWidth: number = longest(colIndex, rows, maxColWidth);\n width[colIndex] = Math.min(maxColWidth, Math.max(minColWidth, colWidth));\n\n padding[colIndex] = column?.getPadding() ??\n (Array.isArray(this.options.padding)\n ? this.options.padding[colIndex]\n : this.options.padding);\n }\n\n return {\n padding,\n width,\n rows,\n columns,\n hasBorder,\n hasBodyBorder,\n hasHeaderBorder,\n };\n }\n\n #getRows(): Array<Row<Cell>> {\n const header: Row | undefined = this.table.getHeader();\n const rows = header ? [header, ...this.table] : this.table.slice();\n const hasSpan = rows.some((row) =>\n row.some((cell) =>\n cell instanceof Cell && (cell.getColSpan() > 1 || cell.getRowSpan() > 1)\n )\n );\n\n if (hasSpan) {\n return this.spanRows(rows);\n }\n\n return rows.map((row, rowIndex) => {\n const newRow = this.createRow(row);\n for (let colIndex = 0; colIndex < row.length; colIndex++) {\n newRow[colIndex] = this.createCell(\n row[colIndex],\n newRow,\n rowIndex,\n colIndex,\n );\n }\n return newRow;\n });\n }\n\n /**\n * Fills rows and cols by specified row/col span with a reference of the\n * original cell.\n */\n protected spanRows(rows: Array<RowType>) {\n const rowSpan: Array<number> = [];\n let colSpan = 1;\n let rowIndex = -1;\n\n while (true) {\n rowIndex++;\n if (rowIndex === rows.length && rowSpan.every((span) => span === 1)) {\n break;\n }\n const row = rows[rowIndex] = this.createRow(rows[rowIndex] || []);\n let colIndex = -1;\n\n while (true) {\n colIndex++;\n if (\n colIndex === row.length &&\n colIndex === rowSpan.length && colSpan === 1\n ) {\n break;\n }\n\n if (colSpan > 1) {\n colSpan--;\n rowSpan[colIndex] = rowSpan[colIndex - 1];\n row.splice(\n colIndex,\n this.getDeleteCount(rows, rowIndex, colIndex),\n row[colIndex - 1],\n );\n\n continue;\n }\n\n if (rowSpan[colIndex] > 1) {\n rowSpan[colIndex]--;\n rows[rowIndex].splice(\n colIndex,\n this.getDeleteCount(rows, rowIndex, colIndex),\n rows[rowIndex - 1][colIndex],\n );\n\n continue;\n }\n\n const cell = row[colIndex] = this.createCell(\n row[colIndex] || null,\n row,\n rowIndex,\n colIndex,\n );\n\n colSpan = cell.getColSpan();\n rowSpan[colIndex] = cell.getRowSpan();\n }\n }\n\n return rows as Array<Row<Cell>>;\n }\n\n protected getDeleteCount(\n rows: Array<Array<unknown>>,\n rowIndex: number,\n colIndex: number,\n ) {\n return colIndex <= rows[rowIndex].length - 1 &&\n typeof rows[rowIndex][colIndex] === \"undefined\"\n ? 1\n : 0;\n }\n\n /**\n * Create a new row from existing row or cell array.\n * @param row Original row.\n */\n protected createRow(row: RowType): Row<Cell> {\n return Row.from(row)\n .border(this.table.getBorder(), false)\n .align(this.table.getAlign(), false) as Row<Cell>;\n }\n\n /**\n * Create a new cell from existing cell or cell value.\n *\n * @param cell Original cell.\n * @param row Parent row.\n * @param rowIndex The row index of the cell.\n * @param colIndex The column index of the cell.\n */\n protected createCell(\n cell: CellType | null | undefined,\n row: Row,\n rowIndex: number,\n colIndex: number,\n ): Cell {\n const column: Column | undefined = this.options.columns.at(colIndex);\n const isHeaderRow = this.isHeaderRow(rowIndex);\n return Cell.from(cell ?? \"\")\n .border(\n (isHeaderRow ? null : column?.getBorder()) ?? row.getBorder(),\n false,\n )\n .align(\n (isHeaderRow ? null : column?.getAlign()) ?? row.getAlign(),\n false,\n );\n }\n\n private isHeaderRow(rowIndex: number) {\n return rowIndex === 0 && this.table.getHeader() !== undefined;\n }\n\n /**\n * Render table layout.\n * @param opts Render options.\n */\n protected renderRows(opts: RenderSettings): string {\n let result = \"\";\n const rowSpan: Array<number> = new Array(opts.columns).fill(1);\n\n for (let rowIndex = 0; rowIndex < opts.rows.length; rowIndex++) {\n result += this.renderRow(rowSpan, rowIndex, opts);\n }\n\n return result.slice(0, -1);\n }\n\n /**\n * Render row.\n * @param rowSpan Current row span.\n * @param rowIndex Current row index.\n * @param opts Render options.\n * @param isMultiline Is multiline row.\n */\n protected renderRow(\n rowSpan: Array<number>,\n rowIndex: number,\n opts: RenderSettings,\n isMultiline?: boolean,\n ): string {\n const row: Row<Cell> = opts.rows[rowIndex];\n const prevRow: Row<Cell> | undefined = opts.rows[rowIndex - 1];\n const nextRow: Row<Cell> | undefined = opts.rows[rowIndex + 1];\n let result = \"\";\n\n let colSpan = 1;\n\n // border top row\n if (!isMultiline && rowIndex === 0 && row.hasBorder()) {\n result += this.renderBorderRow(undefined, row, rowSpan, opts);\n }\n\n let isMultilineRow = false;\n\n result += \" \".repeat(this.options.indent || 0);\n\n for (let colIndex = 0; colIndex < opts.columns; colIndex++) {\n if (colSpan > 1) {\n colSpan--;\n rowSpan[colIndex] = rowSpan[colIndex - 1];\n continue;\n }\n\n result += this.renderCell(colIndex, row, opts);\n\n if (rowSpan[colIndex] > 1) {\n if (!isMultiline) {\n rowSpan[colIndex]--;\n }\n } else if (!prevRow || prevRow[colIndex] !== row[colIndex]) {\n rowSpan[colIndex] = row[colIndex].getRowSpan();\n }\n\n colSpan = row[colIndex].getColSpan();\n\n if (rowSpan[colIndex] === 1 && row[colIndex].length) {\n isMultilineRow = true;\n }\n }\n\n if (opts.columns > 0) {\n if (row[opts.columns - 1].getBorder()) {\n result += this.options.chars.right;\n } else if (opts.hasBorder) {\n result += \" \";\n }\n }\n\n result += \"\\n\";\n\n if (isMultilineRow) { // skip border\n return result + this.renderRow(rowSpan, rowIndex, opts, isMultilineRow);\n }\n\n // border mid row\n if (\n (opts.rows.length > 1) &&\n ((rowIndex === 0 && opts.hasHeaderBorder) ||\n (rowIndex < opts.rows.length - 1 && opts.hasBodyBorder))\n ) {\n result += this.renderBorderRow(row, nextRow, rowSpan, opts);\n }\n\n // border bottom row\n if (rowIndex === opts.rows.length - 1 && row.hasBorder()) {\n result += this.renderBorderRow(row, undefined, rowSpan, opts);\n }\n\n return result;\n }\n\n /**\n * Render cell.\n * @param colIndex Current col index.\n * @param row Current row.\n * @param opts Render options.\n * @param noBorder Disable border.\n */\n protected renderCell(\n colIndex: number,\n row: Row<Cell>,\n opts: RenderSettings,\n noBorder?: boolean,\n ): string {\n let result = \"\";\n const prevCell: Cell | undefined = row[colIndex - 1];\n\n const cell: Cell = row[colIndex];\n\n if (!noBorder) {\n if (colIndex === 0) {\n if (cell.getBorder()) {\n result += this.options.chars.left;\n } else if (opts.hasBorder) {\n result += \" \";\n }\n } else {\n if (cell.getBorder() || prevCell?.getBorder()) {\n result += this.options.chars.middle;\n } else if (opts.hasBorder) {\n result += \" \";\n }\n }\n }\n\n let maxLength: number = opts.width[colIndex];\n\n const colSpan: number = cell.getColSpan();\n if (colSpan > 1) {\n for (let o = 1; o < colSpan; o++) {\n // add padding and with of next cell\n maxLength += opts.width[colIndex + o] + opts.padding[colIndex + o];\n if (opts.hasBorder) {\n // add padding again and border with\n maxLength += opts.padding[colIndex + o] + 1;\n }\n }\n }\n\n const { current, next } = this.renderCellValue(cell, maxLength);\n\n row[colIndex].setValue(next);\n\n if (opts.hasBorder) {\n result += \" \".repeat(opts.padding[colIndex]);\n }\n\n result += current;\n\n if (opts.hasBorder || colIndex < opts.columns - 1) {\n result += \" \".repeat(opts.padding[colIndex]);\n }\n\n return result;\n }\n\n /**\n * Render specified length of cell. Returns the rendered value and a new cell\n * with the rest value.\n * @param cell Cell to render.\n * @param maxLength Max length of content to render.\n */\n protected renderCellValue(\n cell: Cell,\n maxLength: number,\n ): { current: string; next: string } {\n const length: number = Math.min(\n maxLength,\n strLength(cell.toString()),\n );\n let words: string = consumeWords(length, cell.toString());\n\n // break word if word is longer than max length\n const breakWord = strLength(words) > length;\n if (breakWord) {\n words = consumeChars(length, words);\n }\n\n // get next content and remove leading space if breakWord is not true\n // calculate from words.length _before_ any handling of unclosed ANSI codes\n const next = cell.toString().slice(words.length + (breakWord ? 0 : 1));\n\n words = cell.unclosedAnsiRuns + words;\n\n const { currentSuffix, nextPrefix } = getUnclosedAnsiRuns(words);\n\n words += currentSuffix;\n cell.unclosedAnsiRuns = nextPrefix;\n\n const fillLength = maxLength - strLength(words);\n\n // Align content\n const align: Direction = cell.getAlign();\n let current: string;\n if (fillLength === 0) {\n current = words;\n } else if (align === \"left\") {\n current = words + \" \".repeat(fillLength);\n } else if (align === \"center\") {\n current = \" \".repeat(Math.floor(fillLength / 2)) + words +\n \" \".repeat(Math.ceil(fillLength / 2));\n } else if (align === \"right\") {\n current = \" \".repeat(fillLength) + words;\n } else {\n throw new Error(\"Unknown direction: \" + align);\n }\n\n return { current, next };\n }\n\n /**\n * Render border row.\n * @param prevRow Previous row.\n * @param nextRow Next row.\n * @param rowSpan Current row span.\n * @param opts Render options.\n */\n protected renderBorderRow(\n prevRow: Row<Cell> | undefined,\n nextRow: Row<Cell> | undefined,\n rowSpan: Array<number>,\n opts: RenderSettings,\n ): string {\n let result = \"\";\n\n let colSpan = 1;\n for (let colIndex = 0; colIndex < opts.columns; colIndex++) {\n if (rowSpan[colIndex] > 1) {\n if (!nextRow) {\n throw new Error(\"invalid layout\");\n }\n if (colSpan > 1) {\n colSpan--;\n continue;\n }\n }\n result += this.renderBorderCell(\n colIndex,\n prevRow,\n nextRow,\n rowSpan,\n opts,\n );\n colSpan = nextRow?.[colIndex].getColSpan() ?? 1;\n }\n\n return result.length ? \" \".repeat(this.options.indent) + result + \"\\n\" : \"\";\n }\n\n /**\n * Render border cell.\n * @param colIndex Current index.\n * @param prevRow Previous row.\n * @param nextRow Next row.\n * @param rowSpan Current row span.\n * @param opts Render options.\n */\n protected renderBorderCell(\n colIndex: number,\n prevRow: Row<Cell> | undefined,\n nextRow: Row<Cell> | undefined,\n rowSpan: Array<number>,\n opts: RenderSettings,\n ): string {\n // a1 | b1\n // -------\n // a2 | b2\n\n const a1: Cell | undefined = prevRow?.[colIndex - 1];\n const a2: Cell | undefined = nextRow?.[colIndex - 1];\n const b1: Cell | undefined = prevRow?.[colIndex];\n const b2: Cell | undefined = nextRow?.[colIndex];\n\n const a1Border = !!a1?.getBorder();\n const a2Border = !!a2?.getBorder();\n const b1Border = !!b1?.getBorder();\n const b2Border = !!b2?.getBorder();\n\n const hasColSpan = (cell: Cell | undefined): boolean =>\n (cell?.getColSpan() ?? 1) > 1;\n const hasRowSpan = (cell: Cell | undefined): boolean =>\n (cell?.getRowSpan() ?? 1) > 1;\n\n let result = \"\";\n\n if (colIndex === 0) {\n if (rowSpan[colIndex] > 1) {\n if (b1Border) {\n result += this.options.chars.left;\n } else {\n result += \" \";\n }\n } else if (b1Border && b2Border) {\n result += this.options.chars.leftMid;\n } else if (b1Border) {\n result += this.options.chars.bottomLeft;\n } else if (b2Border) {\n result += this.options.chars.topLeft;\n } else {\n result += \" \";\n }\n } else if (colIndex < opts.columns) {\n if ((a1Border && b2Border) || (b1Border && a2Border)) {\n const a1ColSpan: boolean = hasColSpan(a1);\n const a2ColSpan: boolean = hasColSpan(a2);\n const b1ColSpan: boolean = hasColSpan(b1);\n const b2ColSpan: boolean = hasColSpan(b2);\n\n const a1RowSpan: boolean = hasRowSpan(a1);\n const a2RowSpan: boolean = hasRowSpan(a2);\n const b1RowSpan: boolean = hasRowSpan(b1);\n const b2RowSpan: boolean = hasRowSpan(b2);\n\n const hasAllBorder = a1Border && b2Border && b1Border && a2Border;\n const hasAllRowSpan = a1RowSpan && b1RowSpan && a2RowSpan && b2RowSpan;\n const hasAllColSpan = a1ColSpan && b1ColSpan && a2ColSpan && b2ColSpan;\n\n if (hasAllRowSpan && hasAllBorder) {\n result += this.options.chars.middle;\n } else if (hasAllColSpan && hasAllBorder && a1 === b1 && a2 === b2) {\n result += this.options.chars.mid;\n } else if (a1ColSpan && b1ColSpan && a1 === b1) {\n result += this.options.chars.topMid;\n } else if (a2ColSpan && b2ColSpan && a2 === b2) {\n result += this.options.chars.bottomMid;\n } else if (a1RowSpan && a2RowSpan && a1 === a2) {\n result += this.options.chars.leftMid;\n } else if (b1RowSpan && b2RowSpan && b1 === b2) {\n result += this.options.chars.rightMid;\n } else {\n result += this.options.chars.midMid;\n }\n } else if (a1Border && b1Border) {\n if (hasColSpan(a1) && hasColSpan(b1) && a1 === b1) {\n result += this.options.chars.bottom;\n } else {\n result += this.options.chars.bottomMid;\n }\n } else if (b1Border && b2Border) {\n if (rowSpan[colIndex] > 1) {\n result += this.options.chars.left;\n } else {\n result += this.options.chars.leftMid;\n }\n } else if (b2Border && a2Border) {\n if (hasColSpan(a2) && hasColSpan(b2) && a2 === b2) {\n result += this.options.chars.top;\n } else {\n result += this.options.chars.topMid;\n }\n } else if (a1Border && a2Border) {\n if (hasRowSpan(a1) && a1 === a2) {\n result += this.options.chars.right;\n } else {\n result += this.options.chars.rightMid;\n }\n } else if (a1Border) {\n result += this.options.chars.bottomRight;\n } else if (b1Border) {\n result += this.options.chars.bottomLeft;\n } else if (a2Border) {\n result += this.options.chars.topRight;\n } else if (b2Border) {\n result += this.options.chars.topLeft;\n } else {\n result += \" \";\n }\n }\n\n const length = opts.padding[colIndex] + opts.width[colIndex] +\n opts.padding[colIndex];\n\n if (rowSpan[colIndex] > 1 && nextRow) {\n result += this.renderCell(\n colIndex,\n nextRow,\n opts,\n true,\n );\n if (nextRow[colIndex] === nextRow[nextRow.length - 1]) {\n if (b1Border) {\n result += this.options.chars.right;\n } else {\n result += \" \";\n }\n return result;\n }\n } else if (b1Border && b2Border) {\n result += this.options.chars.mid.repeat(length);\n } else if (b1Border) {\n result += this.options.chars.bottom.repeat(length);\n } else if (b2Border) {\n result += this.options.chars.top.repeat(length);\n } else {\n result += \" \".repeat(length);\n }\n\n if (colIndex === opts.columns - 1) {\n if (b1Border && b2Border) {\n result += this.options.chars.rightMid;\n } else if (b1Border) {\n result += this.options.chars.bottomRight;\n } else if (b2Border) {\n result += this.options.chars.topRight;\n } else {\n result += \" \";\n }\n }\n\n return result;\n }\n}\n","import { type Border, border } from \"./border.js\";\nimport { Cell, type Direction } from \"./cell.js\";\nimport { Column, type ColumnOptions } from \"./column.js\";\nimport { TableLayout } from \"./_layout.js\";\nimport { type DataRow, Row, type RowType } from \"./row.js\";\n\n/** Border characters settings. */\nexport type BorderOptions = Partial<Border>;\n\n/** Table settings. */\nexport interface TableSettings {\n /** Table indentation. */\n indent: number;\n /** Enable/disable border on all cells. */\n border: boolean;\n /** Set min column width. */\n minColWidth: number | Array<number>;\n /** Set max column width. */\n maxColWidth: number | Array<number>;\n /** Set cell padding. */\n padding: number | Array<number>;\n /** Set table characters. */\n chars: Border;\n /** Set cell content alignment. */\n align?: Direction;\n /** Set column options. */\n columns: Array<Column>;\n}\n\n/** Table type. */\nexport type TableType<TRow extends RowType = RowType> =\n | Array<TRow>\n | Table<TRow>;\n\n/**\n * Table representation.\n *\n * ```ts\n * import { Row, Table } from \"./mod.ts\";\n *\n * new Table()\n * .header(new Row(\"Name\", \"Date\", \"City\", \"Country\").border())\n * .body([\n * [\"Baxter Herman\", \"Oct 1, 2020\", \"Harderwijk\", \"Slovenia\"],\n * [\"Jescie Wolfe\", \"Dec 4, 2020\", \"Alto Hospicio\", \"Japan\"],\n * [\"Allegra Cleveland\", \"Apr 16, 2020\", \"Avernas-le-Bauduin\", \"Samoa\"],\n * [\"Aretha Gamble\", \"Feb 22, 2021\", \"Honolulu\", \"Georgia\"],\n * ])\n * .render();\n * ```\n */\nexport class Table<TRow extends RowType = RowType> extends Array<TRow> {\n protected static _chars: Border = { ...border };\n protected options: TableSettings = {\n indent: 0,\n border: false,\n maxColWidth: Infinity,\n minColWidth: 0,\n padding: 1,\n chars: { ...Table._chars },\n columns: [],\n };\n private headerRow?: Row;\n\n /**\n * Create a new table. If rows is a table, all rows and options of the table\n * will be copied to the new table.\n *\n * @param rows An array of rows or a table instance.\n */\n public static override from<TRow extends RowType>(\n rows: TableType<TRow>,\n ): Table<TRow> {\n const table = new this(...rows);\n if (rows instanceof Table) {\n table.options = { ...(rows as Table).options };\n table.headerRow = rows.headerRow ? Row.from(rows.headerRow) : undefined;\n }\n return table;\n }\n\n /**\n * Create a new table from an array of json objects. An object represents a\n * row and each property a column.\n *\n * @param rows Array of objects.\n */\n public static fromJson(rows: Array<DataRow>): Table {\n return new this().fromJson(rows);\n }\n\n /**\n * Set global default border characters.\n *\n * @param chars Border options.\n */\n public static chars(chars: BorderOptions): typeof Table {\n Object.assign(this._chars, chars);\n return this;\n }\n\n /**\n * Write table or rows to stdout.\n *\n * @param rows Table or rows.\n */\n public static render<TRow extends RowType>(rows: TableType<TRow>): void {\n Table.from(rows).render();\n }\n\n /**\n * Read data from an array of json objects. An object represents a\n * row and each property a column.\n *\n * @param rows Array of objects.\n */\n public fromJson(rows: Array<DataRow>): this {\n this.header(Object.keys(rows[0]));\n this.body(rows.map((row) => Object.values(row) as TRow));\n return this;\n }\n\n /**\n * Set column options.\n *\n * @param columns An array of columns or column options.\n */\n public columns(columns: Array<Column | ColumnOptions>): this {\n this.options.columns = columns.map((column) =>\n column instanceof Column ? column : Column.from(column)\n );\n return this;\n }\n\n /**\n * Set column options by index.\n *\n @param index The column index.\n @param column Column or column options.\n */\n public column(\n index: number,\n column: Column | ColumnOptions,\n ): this {\n if (column instanceof Column) {\n this.options.columns[index] = column;\n } else if (this.options.columns[index]) {\n this.options.columns[index].options(column);\n } else {\n this.options.columns[index] = Column.from(column);\n }\n return this;\n }\n\n /**\n * Set table header.\n *\n * @param header Header row or cells.\n */\n public header(header: RowType): this {\n this.headerRow = header instanceof Row ? header : Row.from(header);\n return this;\n }\n\n /**\n * Set table body.\n *\n * @param rows Array of rows.\n */\n public body(rows: Array<TRow>): this {\n this.length = 0;\n this.push(...rows);\n return this;\n }\n\n /** Clone table recursively with header and options. */\n public clone(): Table {\n const table = new Table(\n ...this.map((row: TRow) =>\n row instanceof Row ? row.clone() : Row.from(row).clone()\n ),\n );\n table.options = { ...this.options };\n table.headerRow = this.headerRow?.clone();\n return table;\n }\n\n /** Generate table string. */\n public override toString(): string {\n return new TableLayout(this, this.options).toString();\n }\n\n /** Write table to stdout. */\n public render(): this {\n console.log(this.toString());\n return this;\n }\n\n /**\n * Set max column width.\n *\n * @param width Max column width.\n * @param override Override existing value.\n */\n public maxColWidth(width: number | Array<number>, override = true): this {\n if (override || typeof this.options.maxColWidth === \"undefined\") {\n this.options.maxColWidth = width;\n }\n return this;\n }\n\n /**\n * Set min column width.\n *\n * @param width Min column width.\n * @param override Override existing value.\n */\n public minColWidth(width: number | Array<number>, override = true): this {\n if (override || typeof this.options.minColWidth === \"undefined\") {\n this.options.minColWidth = width;\n }\n return this;\n }\n\n /**\n * Set table indentation.\n *\n * @param width Indent width.\n * @param override Override existing value.\n */\n public indent(width: number, override = true): this {\n if (override || typeof this.options.indent === \"undefined\") {\n this.options.indent = width;\n }\n return this;\n }\n\n /**\n * Set cell padding.\n *\n * @param padding Cell padding.\n * @param override Override existing value.\n */\n public padding(padding: number | Array<number>, override = true): this {\n if (override || typeof this.options.padding === \"undefined\") {\n this.options.padding = padding;\n }\n return this;\n }\n\n /**\n * Enable/disable cell border.\n *\n * @param enable Enable/disable cell border.\n * @param override Override existing value.\n */\n public border(enable = true, override = true): this {\n if (override || typeof this.options.border === \"undefined\") {\n this.options.border = enable;\n }\n return this;\n }\n\n /**\n * Align table content.\n *\n * @param direction Align direction.\n * @param override Override existing value.\n */\n public align(direction: Direction, override = true): this {\n if (override || typeof this.options.align === \"undefined\") {\n this.options.align = direction;\n }\n return this;\n }\n\n /**\n * Set border characters.\n *\n * @param chars Border options.\n */\n public chars(chars: BorderOptions): this {\n Object.assign(this.options.chars, chars);\n return this;\n }\n\n /** Get table header. */\n public getHeader(): Row | undefined {\n return this.headerRow;\n }\n\n /** Get table body. */\n public getBody(): Array<TRow> {\n return [...this];\n }\n\n /** Get max column width. */\n public getMaxColWidth(): number | Array<number> {\n return this.options.maxColWidth;\n }\n\n /** Get min column width. */\n public getMinColWidth(): number | Array<number> {\n return this.options.minColWidth;\n }\n\n /** Get table indentation. */\n public getIndent(): number {\n return this.options.indent;\n }\n\n /** Get cell padding. */\n public getPadding(): number | Array<number> {\n return this.options.padding;\n }\n\n /** Check if table has border. */\n public getBorder(): boolean {\n return this.options.border === true;\n }\n\n /** Check if header row has border. */\n public hasHeaderBorder(): boolean {\n const hasBorder = this.headerRow?.hasBorder();\n return hasBorder === true || (this.getBorder() && hasBorder !== false);\n }\n\n /** Check if table bordy has border. */\n public hasBodyBorder(): boolean {\n return this.getBorder() ||\n this.options.columns.some((column) => column.getBorder()) ||\n this.some((row) =>\n row instanceof Row\n ? row.hasBorder()\n : row.some((cell) => cell instanceof Cell ? cell.getBorder() : false)\n );\n }\n\n /** Check if table header or body has border. */\n public hasBorder(): boolean {\n return this.hasHeaderBorder() || this.hasBodyBorder();\n }\n\n /** Get table alignment. */\n public getAlign(): Direction {\n return this.options.align ?? \"left\";\n }\n\n /** Get columns. */\n public getColumns(): Array<Column> {\n return this.options.columns;\n }\n\n /** Get column by column index. */\n public getColumn(index: number): Column {\n return this.options.columns[index] ??= new Column();\n }\n}\n","// deno-lint-ignore-file no-explicit-any\n\n/**\n * Inspect values.\n *\n * @internal\n */\nexport function inspect(value: unknown, colors: boolean): string {\n // dnt-shim-ignore\n const { Deno } = globalThis as any;\n\n return Deno?.inspect(\n value,\n { depth: 1, colors, trailingComma: false },\n ) ?? JSON.stringify(value, null, 2);\n}\n","import type { Command } from \"./command.ts\";\nimport type {\n ArgumentValue,\n CompleteHandlerResult,\n TypeOrTypeHandler,\n ValuesHandlerResult,\n} from \"./types.ts\";\n\n/**\n * Base class for custom types.\n *\n * **Custom type example:**\n *\n * ```ts\n * import { Type, ArgumentValue } from \"./mod.ts\";\n *\n * export class ColorType extends Type<string> {\n * public parse({ label, name, value, type }: ArgumentValue): string {\n * if ([\"red\", \"blue\"].includes(value)) {\n * throw new Error(\n * `${label} \"${name}\" must be of type \"${type}\", but got \"${value}\".` +\n * \"Valid colors are: red, blue\"\n * );\n * }\n * return value;\n * }\n *\n * public override complete(): string[] {\n * return [\"red\", \"blue\"];\n * }\n * }\n * ```\n */\nexport abstract class Type<TValue> {\n public abstract parse(type: ArgumentValue): TValue;\n\n /**\n * Returns the default display text value for the type. This text will be shown\n * unless a custom value is provided for option default text.\n */\n public defaultText?(): string;\n\n /**\n * Returns values displayed in help text. If no complete method is provided,\n * these values are also used for shell completions.\n */\n public values?(\n cmd: Command,\n parent?: Command,\n ): ValuesHandlerResult;\n\n /**\n * Returns shell completion values. If no complete method is provided,\n * values from the values method are used.\n */\n public complete?(\n cmd: Command,\n parent?: Command,\n ): CompleteHandlerResult;\n}\n\n// deno-lint-ignore no-namespace\nexport namespace Type {\n /** @deprecated Use `InferType` instead. */\n export type infer<TType, TDefault = TType> = InferType<TType, TDefault>;\n}\n\nexport type InferType<TType, TDefault = TType> = TType extends\n TypeOrTypeHandler<infer Value> ? Value : TDefault;\n","import { Table } from \"@jsr/cliffy__table\";\nimport {\n bold,\n brightBlue,\n brightMagenta,\n dim,\n getColorEnabled,\n green,\n italic,\n red,\n setColorEnabled,\n yellow,\n} from \"@jsr/std__fmt/colors\";\nimport { inspect } from \"@jsr/cliffy__internal/runtime/inspect\";\nimport {\n dedent,\n getDescription,\n getFlag,\n parseArgumentsDefinition,\n} from \"../_utils.js\";\nimport type { Command } from \"../command.ts\";\nimport { Type } from \"../type.js\";\nimport type {\n Argument,\n EnvVar,\n Example,\n Option,\n TypeHandler,\n} from \"../types.ts\";\n\nexport interface HelpOptions {\n types?: boolean;\n hints?: boolean;\n colors?: boolean;\n long?: boolean;\n}\n\ninterface OptionGroup {\n name?: string;\n options: Array<Option>;\n}\n\n/** Help text generator. */\nexport class HelpGenerator {\n private indent = 2;\n private options: Required<HelpOptions>;\n\n /** Generate help text for given command. */\n public static generate(cmd: Command, options?: HelpOptions): string {\n return new HelpGenerator(cmd, options).generate();\n }\n\n private constructor(\n private cmd: Command,\n options: HelpOptions = {},\n ) {\n this.options = {\n types: false,\n hints: true,\n colors: true,\n long: false,\n ...options,\n };\n }\n\n private generate(): string {\n const areColorsEnabled = getColorEnabled();\n setColorEnabled(this.options.colors);\n\n const result = this.generateHeader() +\n this.generateMeta() +\n this.generateDescription() +\n this.generateArguments() +\n this.generateOptions() +\n this.generateCommands() +\n this.generateEnvironmentVariables() +\n this.generateExamples();\n\n setColorEnabled(areColorsEnabled);\n\n return result;\n }\n\n private generateHeader(): string {\n const usage = this.cmd.getUsage();\n const rows = [\n [\n bold(\"Usage:\"),\n brightMagenta(\n this.cmd.getPath() +\n (usage ? \" \" + highlightArguments(usage, this.options.types) : \"\"),\n ),\n ],\n ];\n const version: string | undefined = this.cmd.getVersion();\n if (version) {\n rows.push([bold(\"Version:\"), yellow(`${this.cmd.getVersion()}`)]);\n }\n return \"\\n\" +\n Table.from(rows)\n .padding(1)\n .toString() +\n \"\\n\";\n }\n\n private generateMeta(): string {\n const meta = Object.entries(this.cmd.getMeta());\n if (!meta.length) {\n return \"\";\n }\n\n const rows = [];\n for (const [name, value] of meta) {\n rows.push([bold(`${name}: `) + value]);\n }\n\n return \"\\n\" +\n Table.from(rows)\n .padding(1)\n .toString() +\n \"\\n\";\n }\n\n private generateDescription(): string {\n if (!this.cmd.getDescription()) {\n return \"\";\n }\n return this.label(\"Description\") +\n Table.from([\n [dedent(this.cmd.getDescription())],\n ])\n .indent(this.indent)\n .maxColWidth(140)\n .padding(1)\n .toString() +\n \"\\n\";\n }\n\n private generateArguments(): string {\n const args = this.cmd.getArguments();\n if (!args.length || !args.find((arg) => arg.description)) {\n return \"\";\n }\n\n return this.label(\"Arguments\") +\n Table.from([\n ...args\n .filter((arg) => arg.description)\n .map((argument: Argument) => [\n highlightArguments(\n argument.raw || \"\",\n this.options.types,\n ),\n red(bold(\"-\")),\n getDescription(argument.description ?? \"\", !this.options.long),\n this.generateArgumentHints(argument),\n ]),\n ])\n .padding([2, 1, 2])\n .indent(this.indent)\n .maxColWidth([60, 1, 80, 60])\n .toString() +\n \"\\n\";\n }\n\n private generateOptions(): string {\n const options = this.cmd.getOptions(false);\n if (!options.length) {\n return \"\";\n }\n\n let groups: Array<OptionGroup> = [];\n const hasGroups = options.some((option) => option.groupName);\n if (hasGroups) {\n for (const option of options) {\n let group = groups.find((group) => group.name === option.groupName);\n if (!group) {\n group = {\n name: option.groupName,\n options: [],\n };\n groups.push(group);\n }\n group.options.push(option);\n }\n } else {\n groups = [{\n name: \"Options\",\n options,\n }];\n }\n\n let result = \"\";\n for (const group of groups) {\n result += this.generateOptionGroup(group);\n }\n\n return result;\n }\n\n private generateOptionGroup(group: OptionGroup): string {\n if (!group.options.length) {\n return \"\";\n }\n const hasTypeDefinitions = !!group.options.find((option) =>\n !!option.typeDefinition\n );\n\n if (hasTypeDefinitions) {\n return this.label(group.name ?? \"Options\") +\n Table.from([\n ...group.options.map((option: Option) => [\n option.flags.map((flag) => brightBlue(flag)).join(\", \"),\n highlightArguments(\n option.typeDefinition || \"\",\n this.options.types,\n ),\n red(bold(\"-\")),\n getDescription(option.description, !this.options.long),\n this.generateOptionHints(option),\n ]),\n ])\n .padding([2, 2, 1, 2])\n .indent(this.indent)\n .maxColWidth([60, 60, 1, 80, 60])\n .toString() +\n \"\\n\";\n }\n\n return this.label(group.name ?? \"Options\") +\n Table.from([\n ...group.options.map((option: Option) => [\n option.flags.map((flag) => brightBlue(flag)).join(\", \"),\n red(bold(\"-\")),\n getDescription(option.description, !this.options.long),\n this.generateOptionHints(option),\n ]),\n ])\n .indent(this.indent)\n .maxColWidth([60, 1, 80, 60])\n .padding([2, 1, 2])\n .toString() +\n \"\\n\";\n }\n\n private generateCommands(): string {\n const commands = this.cmd.getCommands(false);\n if (!commands.length) {\n return \"\";\n }\n\n const hasTypeDefinitions = !!commands.find((command) =>\n !!command.getArgsDefinition()\n );\n\n if (hasTypeDefinitions) {\n return this.label(\"Commands\") +\n Table.from([\n ...commands.map((command: Command) => [\n [command.getName(), ...command.getAliases()].map((name) =>\n brightBlue(name)\n ).join(\", \"),\n highlightArguments(\n command.getArgsDefinition() || \"\",\n this.options.types,\n ),\n red(bold(\"-\")),\n command.getShortDescription(),\n ]),\n ])\n .indent(this.indent)\n .maxColWidth([60, 60, 1, 80])\n .padding([2, 2, 1, 2])\n .toString() +\n \"\\n\";\n }\n\n return this.label(\"Commands\") +\n Table.from([\n ...commands.map((command: Command) => [\n [command.getName(), ...command.getAliases()].map((name) =>\n brightBlue(name)\n )\n .join(\", \"),\n red(bold(\"-\")),\n command.getShortDescription(),\n ]),\n ])\n .maxColWidth([60, 1, 80])\n .padding([2, 1, 2])\n .indent(this.indent)\n .toString() +\n \"\\n\";\n }\n\n private generateEnvironmentVariables(): string {\n const envVars = this.cmd.getEnvVars(false);\n if (!envVars.length) {\n return \"\";\n }\n return this.label(\"Environment variables\") +\n Table.from([\n ...envVars.map((envVar: EnvVar) => [\n envVar.names.map((name: string) => brightBlue(name)).join(\", \"),\n highlightArgumentDetails(\n envVar.details,\n this.options.types,\n ),\n red(bold(\"-\")),\n this.options.long\n ? dedent(envVar.description)\n : envVar.description.trim().split(\"\\n\", 1)[0],\n envVar.required ? `(${yellow(`required`)})` : \"\",\n ]),\n ])\n .padding([2, 2, 1, 2])\n .indent(this.indent)\n .maxColWidth([60, 60, 1, 80, 10])\n .toString() +\n \"\\n\";\n }\n\n private generateExamples(): string {\n const examples = this.cmd.getExamples();\n if (!examples.length) {\n return \"\";\n }\n return this.label(\"Examples\") +\n Table.from(examples.map((example: Example) => [\n dim(bold(example.name)),\n dedent(example.description),\n ]))\n .padding(1)\n .indent(this.indent)\n .maxColWidth(150)\n .toString() +\n \"\\n\";\n }\n\n private generateOptionHints(option: Option): string {\n if (!this.options.hints) {\n return \"\";\n }\n const hints: Array<string> = [];\n\n option.required && hints.push(yellow(`required`));\n\n const type = this.cmd.getType(option.args[0]?.type)?.handler;\n\n if (\n typeof option.default !== \"undefined\" ||\n typeof option.defaultText !== \"undefined\"\n ) {\n const defaultValue = typeof option.default === \"function\"\n ? option.default()\n : option.default;\n\n const defaultText = typeof option.defaultText === \"function\"\n ? option.defaultText(defaultValue)\n : (typeof option.defaultText !== \"undefined\"\n ? option.defaultText\n : ((type instanceof Type && type.defaultText)\n ? type.defaultText()\n : defaultValue));\n\n if (typeof defaultText !== \"undefined\") {\n hints.push(\n bold(`Default: `) + inspect(defaultText, this.options.colors),\n );\n }\n }\n\n option.depends?.length && hints.push(\n yellow(bold(`Depends: `)) +\n italic(option.depends.map(getFlag).join(\", \")),\n );\n\n option.conflicts?.length && hints.push(\n red(bold(`Conflicts: `)) +\n italic(option.conflicts.map(getFlag).join(\", \")),\n );\n\n return this.generateHints(type, hints);\n }\n\n private generateArgumentHints(option: Argument): string {\n if (!this.options.hints) {\n return \"\";\n }\n const hints: Array<string> = [];\n\n !option.optional && hints.push(yellow(`required`));\n\n const type = this.cmd.getType(option.type)?.handler;\n\n return this.generateHints(type, hints);\n }\n\n private generateHints(\n type: Type<unknown> | TypeHandler<unknown> | undefined,\n hints: Array<string>,\n ) {\n if (type instanceof Type) {\n const possibleValues = type.values?.(this.cmd, this.cmd.getParent());\n if (possibleValues?.length) {\n hints.push(\n bold(`Values: `) +\n possibleValues.map((value: unknown) =>\n inspect(value, this.options.colors)\n ).join(\", \"),\n );\n }\n }\n\n if (hints.length) {\n return `(${hints.join(\", \")})`;\n }\n\n return \"\";\n }\n\n private label(label: string) {\n return \"\\n\" + bold(`${label}:`) + \"\\n\\n\";\n }\n}\n\n/**\n * Colorize arguments string.\n * @param argsDefinition Arguments definition: `<color1:string> <color2:string>`\n * @param types Show types.\n */\nfunction highlightArguments(argsDefinition: string, types = true) {\n if (!argsDefinition) {\n return \"\";\n }\n\n return parseArgumentsDefinition(argsDefinition, false, true)\n .map((arg: Argument | string) =>\n typeof arg === \"string\" ? arg : highlightArgumentDetails(arg, types)\n )\n .join(\" \");\n}\n\n/**\n * Colorize argument string.\n * @param arg Argument details.\n * @param types Show types.\n */\nfunction highlightArgumentDetails(\n arg: Argument,\n types = true,\n): string {\n let str = \"\";\n\n str += yellow(arg.optional ? \"[\" : \"<\");\n\n let name = \"\";\n name += arg.name;\n if (arg.variadic) {\n name += \"...\";\n }\n name = brightMagenta(name);\n\n str += name;\n\n if (types) {\n str += yellow(\":\");\n str += red(arg.type);\n if (arg.list) {\n str += green(\"[]\");\n }\n }\n\n str += yellow(arg.optional ? \"]\" : \">\");\n\n return str;\n}\n","import { boolean } from \"@jsr/cliffy__flags\";\nimport type { ArgumentValue } from \"../types.ts\";\nimport { Type } from \"../type.js\";\n\n/** Boolean type with auto completion. Allows `true`, `false`, `0` and `1`. */\nexport class BooleanType extends Type<boolean> {\n /** Parse boolean type. */\n public parse(type: ArgumentValue): boolean {\n return boolean(type);\n }\n\n /** Complete boolean type. */\n public override complete(): string[] {\n return [\"true\", \"false\"];\n }\n}\n","import { string } from \"@jsr/cliffy__flags\";\nimport { Type } from \"../type.js\";\nimport type { ArgumentValue } from \"../types.ts\";\n\n/** String type. Allows any value. */\nexport class StringType extends Type<string> {\n /** Complete string type. */\n public parse(type: ArgumentValue): string {\n return string(type);\n }\n}\n","import { StringType } from \"./string.js\";\n\n// export interface FileTypeOptions {\n// dirsOnly?: boolean;\n// pattern?: string;\n// ignore?: Array<string>;\n// }\n\n/** Integer type. */\nexport class FileType extends StringType {\n constructor() {\n super();\n }\n\n // getOptions(): FileTypeOptions {\n // return this.opts;\n // }\n}\n","import { Type } from \"../type.js\";\nimport type { ArgumentValue } from \"../types.ts\";\nimport { integer } from \"@jsr/cliffy__flags\";\n\n/** Integer type. */\nexport class IntegerType extends Type<number> {\n /** Parse integer type. */\n public parse(type: ArgumentValue): number {\n return integer(type);\n }\n}\n","import { number } from \"@jsr/cliffy__flags\";\nimport { Type } from \"../type.js\";\nimport type { ArgumentValue } from \"../types.ts\";\n\n/** Number type. */\nexport class NumberType extends Type<number> {\n /** Parse number type. */\n public parse(type: ArgumentValue): number {\n return number(type);\n }\n}\n","import { StringType } from \"./string.js\";\n\n/** Secret type. Allows any value, and does not show values in help text. */\nexport class SecretType extends StringType {\n public override defaultText(): string {\n return \"******\";\n }\n}\n","import { bold, yellow } from \"@jsr/std__fmt/colors\";\nimport { Command } from \"../command.js\";\n\n/** Check if new version is available and add hint to version. */\n// deno-lint-ignore no-explicit-any\nexport async function checkVersion(cmd: Command<any>): Promise<void> {\n const mainCommand = cmd.getMainCommand();\n const upgradeCommand = mainCommand.getCommand(\"upgrade\");\n\n if (!isUpgradeCommand(upgradeCommand)) {\n return;\n }\n\n if (!await upgradeCommand.hasRequiredPermissions()) {\n // If not all required permissions were pre-granted, skip the version check to prevent prompting user\n return;\n }\n const latestVersion = await upgradeCommand.getLatestVersion();\n const currentVersion = mainCommand.getVersion();\n\n if (!currentVersion || currentVersion === latestVersion) {\n return;\n }\n const versionHelpText =\n `(New version available: ${latestVersion}. Run '${mainCommand.getName()} upgrade' to upgrade to the latest version!)`;\n\n mainCommand.version(`${currentVersion} ${bold(yellow(versionHelpText))}`);\n}\n\nfunction isUpgradeCommand(command: unknown): command is UpgradeCommandImpl {\n return command instanceof Command && \"getLatestVersion\" in command &&\n \"hasRequiredPermissions\" in command;\n}\n\ninterface UpgradeCommandImpl {\n hasRequiredPermissions(): Promise<boolean>;\n getLatestVersion(): Promise<string>;\n}\n","// deno-lint-ignore-file no-explicit-any\nimport {\n parseFlags,\n type ParseFlagsContext,\n UnknownTypeError,\n ValidationError as FlagsValidationError,\n} from \"@jsr/cliffy__flags\";\nimport { bold, brightBlue, red } from \"@jsr/std__fmt/colors\";\nimport type {\n IsRequired,\n MapTypes,\n MapValue,\n MergeOptions,\n TypedArgument,\n TypedArguments,\n TypedArgumentValue,\n TypedCommandArguments,\n TypedEnv,\n TypedOption,\n TypedType,\n} from \"./_argument_types.ts\";\nimport {\n CommandNotFoundError,\n DefaultCommandNotFoundError,\n DuplicateCommandAliasError,\n DuplicateCommandNameError,\n DuplicateCompletionError,\n DuplicateEnvVarError,\n DuplicateExampleError,\n DuplicateOptionNameError,\n DuplicateTypeError,\n MissingArgumentError,\n MissingArgumentsError,\n MissingCommandNameError,\n MissingRequiredEnvVarError,\n NoArgumentsAllowedError,\n TooManyArgumentsError,\n TooManyEnvVarValuesError,\n UnexpectedOptionalEnvVarValueError,\n UnexpectedVariadicEnvVarValueError,\n UnknownCommandError,\n ValidationError,\n} from \"./_errors.js\";\nimport { exit } from \"@jsr/cliffy__internal/runtime/exit\";\nimport { getArgs } from \"@jsr/cliffy__internal/runtime/get-args\";\nimport { getEnv } from \"@jsr/cliffy__internal/runtime/get-env\";\nimport type { Merge, Mutable, OneOf, ValueOf } from \"./_type_utils.ts\";\nimport {\n getDescription,\n parseArgumentsDefinition,\n splitArguments,\n underscoreToCamelCase,\n} from \"./_utils.js\";\nimport { HelpGenerator, type HelpOptions } from \"./help/_help_generator.js\";\nimport { Type } from \"./type.js\";\nimport type {\n ActionHandler,\n Argument,\n ArgumentValue,\n ArgumentValueHandler,\n CommandArgumentOptions,\n CommandResult,\n CompleteHandler,\n CompleteOptions,\n Completion,\n DefaultText,\n DefaultValue,\n Description,\n EnvVar,\n EnvVarOptions,\n EnvVarValueHandler,\n ErrorHandler,\n Example,\n GlobalEnvVarOptions,\n GlobalOptionOptions,\n HelpHandler,\n Option,\n OptionOptions,\n OptionValueHandler,\n TypeDef,\n TypeOptions,\n TypeOrTypeHandler,\n VersionHandler,\n} from \"./types.ts\";\nimport { BooleanType } from \"./types/boolean.js\";\nimport { FileType } from \"./types/file.js\";\nimport { IntegerType } from \"./types/integer.js\";\nimport { NumberType } from \"./types/number.js\";\nimport { SecretType } from \"./types/secret.js\";\nimport { StringType } from \"./types/string.js\";\nimport { checkVersion } from \"./upgrade/_check_version.js\";\n\nexport interface ArgDefinition extends CommandArgumentOptions<any, any, any> {\n arg: string;\n description?: string;\n}\n\ninterface CommandSettings {\n name: string;\n version?: VersionHandler;\n help?: HelpHandler;\n errorHandler?: ErrorHandler;\n actionHandler?: ActionHandler;\n globalActionHandler?: ActionHandler;\n description: Description;\n usage?: string;\n examples: Array<Example>;\n aliases: Array<string>;\n arguments?: Array<ArgDefinition>;\n throwOnError?: boolean;\n allowEmpty?: boolean;\n stopEarly?: boolean;\n defaultCommand?: string;\n useRawArgs?: boolean;\n isHidden?: boolean;\n isGlobal?: boolean;\n shouldExit?: boolean;\n noGlobals?: boolean;\n meta: Record<string, string>;\n commands: Map<string, Command<any>>;\n versionOptions?: DefaultOption | false;\n helpOptions?: DefaultOption | false;\n}\n\ninterface CommandProps {\n rawArgs: Array<string>;\n literalArgs: Array<string>;\n hasDefaults?: boolean;\n globalParent?: Command<any>;\n args: Array<Argument>;\n versionOption?: Option;\n helpOption?: Option;\n isRoot?: boolean;\n}\n\ninterface BuilderProps {\n groupName: string | null;\n types: Map<string, TypeDef>;\n options: Array<Option>;\n envVars: Array<EnvVar>;\n completions: Map<string, Completion>;\n}\n\nexport interface SubCommandOptions {\n override?: boolean;\n}\n\n/**\n * Chainable command factory class.\n *\n * The command class can be used to create main and sub commands. All methods\n * from the command class are chainable. Options, arguments, types, etc. that\n * belong to the main command, should be registered before the first sub-command\n * is registered. All options, arguments, etc. that are registered after calling\n * the `.command()` method will be registered to that child-command.\n *\n * When calling the `.reset()` method, options, arguments, etc. will be\n * registered again to the main command.\n *\n * @example Todo cli\n *\n * ```ts\n * import { Command } from \"./mod.ts\";\n *\n * export const cli = new Command()\n * .name(\"todo\")\n * .description(\"Todo cli.\")\n * .globalOption(\"--verbose\", \"Enable verbose output.\")\n * .globalEnv(\"VERBOSE=<value>\", \"Enable verbose output.\")\n * .command(\"add <todo>\", \"Add todo.\")\n * .action(({ verbose }, todo: string) => {\n * if (verbose) {\n * console.log(\"Add todo '%s'.\", todo);\n * }\n * })\n * .command(\"delete <id>\", \"Delete todo.\")\n * .action(({ verbose }, id: string) => {\n * if (verbose) {\n * console.log(\"Delete todo with id '%s'.\", id);\n * }\n * });\n *\n * if (import.meta.main) {\n * await cli.parse();\n * }\n * ```\n *\n * @example Use command instance as child command\n *\n * ```ts\n * import { Command } from \"./mod.ts\";\n *\n * export const addCommand = new Command<{ verbose?: boolean }>()\n * .description(\"Add todo.\")\n * .arguments(\"<todo>\")\n * .action(({ verbose }, todo: string) => {\n * if (verbose) {\n * console.log(\"Add todo '%s'.\", todo);\n * }\n * });\n *\n * export const deleteCommand = new Command<{ verbose?: boolean }>()\n * .description(\"Delete todo.\")\n * .arguments(\"<id>\")\n * .action(({ verbose }, id: string) => {\n * if (verbose) {\n * console.log(\"Delete todo with id '%s'.\", id);\n * }\n * });\n *\n * export const cli = new Command()\n * .name(\"todo\")\n * .description(\"Todo cli.\")\n * .globalOption(\"--verbose\", \"Enable verbose output.\")\n * .globalEnv(\"VERBOSE=<value:boolean>\", \"Enable verbose output.\")\n * .command(\"add\", addCommand)\n * .command(\"delete\", deleteCommand);\n *\n * if (import.meta.main) {\n * await cli.parse();\n * }\n * ```\n */\nexport class Command<\n TParentCommandGlobals extends Record<string, unknown> | void = void,\n TParentCommandTypes extends Record<string, unknown> | void =\n TParentCommandGlobals extends number ? any : void,\n TCommandOptions extends Record<string, unknown> | void =\n TParentCommandGlobals extends number ? any : void,\n TCommandArguments extends Array<unknown> = TParentCommandGlobals extends\n number ? any : [],\n TCommandGlobals extends Record<string, unknown> | void =\n TParentCommandGlobals extends number ? any : void,\n TCommandTypes extends Record<string, unknown> | void =\n TParentCommandGlobals extends number ? any : {\n number: number;\n integer: number;\n string: string;\n boolean: boolean;\n file: string;\n secret: string;\n },\n TCommandGlobalTypes extends Record<string, unknown> | void =\n TParentCommandGlobals extends number ? any : void,\n TParentCommand extends Command<any> | undefined =\n TParentCommandGlobals extends number ? any : undefined,\n> {\n cmd: Command<any> = this;\n parent?: TParentCommand;\n props: CommandProps = {\n rawArgs: [],\n literalArgs: [],\n args: [],\n };\n settings: CommandSettings = {\n name: \"COMMAND\",\n description: \"\",\n examples: [],\n aliases: [],\n meta: {},\n commands: new Map<string, Command<any>>(),\n };\n builder: BuilderProps = {\n groupName: null,\n types: new Map(),\n options: [],\n envVars: [],\n completions: new Map<string, Completion>(),\n };\n\n /** Disable version option. */\n public versionOption(enable: false): this;\n\n /**\n * Set global version option.\n *\n * @param flags The flags of the version option.\n * @param desc The description of the version option.\n * @param opts Version option options.\n */\n public versionOption(\n flags: string,\n desc?: string,\n opts?:\n & OptionOptions<\n Partial<TCommandOptions>,\n TCommandArguments,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand\n >\n & {\n global: true;\n },\n ): this;\n\n /**\n * Set version option.\n *\n * @param flags The flags of the version option.\n * @param desc The description of the version option.\n * @param opts Version option options.\n */\n public versionOption(\n flags: string,\n desc?: string,\n opts?: OptionOptions<\n TCommandOptions,\n TCommandArguments,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand\n >,\n ): this;\n\n /**\n * Set version option.\n *\n * @param flags The flags of the version option.\n * @param desc The description of the version option.\n * @param opts The action of the version option.\n */\n public versionOption(\n flags: string,\n desc?: string,\n opts?: ActionHandler<\n TCommandOptions,\n TCommandArguments,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand\n >,\n ): this;\n\n public versionOption(\n flags: string | false,\n desc?: string,\n opts?:\n | ActionHandler<\n TCommandOptions,\n TCommandArguments,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand\n >\n | OptionOptions<\n TCommandOptions,\n TCommandArguments,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand\n >\n | OptionOptions<\n Partial<TCommandOptions>,\n TCommandArguments,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand\n >\n & {\n global: true;\n },\n ): this {\n this.settings.versionOptions = flags === false ? flags : {\n flags,\n desc,\n opts: typeof opts === \"function\" ? { action: opts } : opts,\n };\n return this;\n }\n\n /** Disable help option. */\n public helpOption(enable: false): this;\n\n /**\n * Set global help option.\n *\n * @param flags The flags of the help option.\n * @param desc The description of the help option.\n * @param opts Help option options.\n */\n public helpOption(\n flags: string,\n desc?: string,\n opts?:\n & OptionOptions<\n Partial<TCommandOptions>,\n TCommandArguments,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand\n >\n & {\n global: true;\n },\n ): this;\n\n /**\n * Set help option.\n *\n * @param flags The flags of the help option.\n * @param desc The description of the help option.\n * @param opts Help option options.\n */\n public helpOption(\n flags: string,\n desc?: string,\n opts?: OptionOptions<\n TCommandOptions,\n TCommandArguments,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand\n >,\n ): this;\n\n /**\n * Set help option.\n *\n * @param flags The flags of the help option.\n * @param desc The description of the help option.\n * @param opts The action of the help option.\n */\n public helpOption(\n flags: string,\n desc?: string,\n opts?: ActionHandler<\n TCommandOptions,\n TCommandArguments,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand\n >,\n ): this;\n\n public helpOption(\n flags: string | false,\n desc?: string,\n opts?:\n | ActionHandler<\n TCommandOptions,\n TCommandArguments,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand\n >\n | OptionOptions<\n TCommandOptions,\n TCommandArguments,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand\n >\n | OptionOptions<\n Partial<TCommandOptions>,\n TCommandArguments,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand\n >\n & {\n global: true;\n },\n ): this {\n this.settings.helpOptions = flags === false ? flags : {\n flags,\n desc,\n opts: typeof opts === \"function\" ? { action: opts } : opts,\n };\n return this;\n }\n\n /**\n * Add new sub-command.\n *\n * @param name Command definition. E.g: `my-command <input-file:string> <output-file:string>`\n * @param cmd The new child command to register.\n * @param options Sub-command options.\n */\n public command<\n TCommand extends Command<\n (TGlobalOptions & Record<string, unknown>) | void | undefined,\n TGlobalTypes | void | undefined,\n Record<string, unknown> | void,\n Array<unknown>,\n Record<string, unknown> | void,\n Record<string, unknown> | void,\n Record<string, unknown> | void,\n Command<\n TGlobalOptions | void | undefined,\n TGlobalTypes | void | undefined,\n Record<string, unknown> | void,\n Array<unknown>,\n Record<string, unknown> | void,\n Record<string, unknown> | void,\n Record<string, unknown> | void,\n undefined\n >\n >,\n TGlobalOptions\n extends (TParentCommand extends Command<any> ? TParentCommandGlobals\n : Merge<TParentCommandGlobals, TCommandGlobals>),\n TGlobalTypes\n extends (TParentCommand extends Command<any> ? TParentCommandTypes\n : Merge<TParentCommandTypes, TCommandTypes>),\n >(\n name: string,\n cmd: TCommand,\n options?: SubCommandOptions,\n ): ReturnType<TCommand[\"reset\"]> extends Command<\n Record<string, unknown> | void,\n Record<string, unknown> | void,\n infer Options,\n infer Arguments,\n infer GlobalOptions,\n infer Types,\n infer GlobalTypes,\n undefined\n > ? Command<\n TGlobalOptions,\n TGlobalTypes,\n Options,\n Arguments,\n GlobalOptions,\n Types,\n GlobalTypes,\n OneOf<TParentCommand, this>\n >\n : never;\n\n /**\n * Add new sub-command.\n *\n * @param name Command definition. E.g: `my-command <input-file:string> <output-file:string>`\n * @param cmd The new child command to register.\n * @param options Sub-command options.\n */\n public command<\n TCommand extends Command<\n TGlobalOptions | void | undefined,\n TGlobalTypes | void | undefined,\n Record<string, unknown> | void,\n Array<unknown>,\n Record<string, unknown> | void,\n Record<string, unknown> | void,\n Record<string, unknown> | void,\n OneOf<TParentCommand, this> | undefined\n >,\n TGlobalOptions\n extends (TParentCommand extends Command<any> ? TParentCommandGlobals\n : Merge<TParentCommandGlobals, TCommandGlobals>),\n TGlobalTypes\n extends (TParentCommand extends Command<any> ? TParentCommandTypes\n : Merge<TParentCommandTypes, TCommandTypes>),\n >(\n name: string,\n cmd: TCommand,\n options?: SubCommandOptions,\n ): TCommand extends Command<\n Record<string, unknown> | void,\n Record<string, unknown> | void,\n infer Options,\n infer Arguments,\n infer GlobalOptions,\n infer Types,\n infer GlobalTypes,\n OneOf<TParentCommand, this> | undefined\n > ? Command<\n TGlobalOptions,\n TGlobalTypes,\n Options,\n Arguments,\n GlobalOptions,\n Types,\n GlobalTypes,\n OneOf<TParentCommand, this>\n >\n : never;\n\n /**\n * Add new sub-command.\n *\n * @param nameAndArguments Command definition. E.g: `my-command <input-file:string> <output-file:string>`\n * @param desc The description of the new child command.\n * @param options Sub-command options.\n */\n public command<\n TNameAndArguments extends string,\n TArguments extends TypedCommandArguments<\n TNameAndArguments,\n TParentCommand extends Command<any> ? TParentCommandTypes\n : Merge<TParentCommandTypes, TCommandGlobalTypes>\n >,\n >(\n nameAndArguments: TNameAndArguments,\n desc?: string,\n options?: SubCommandOptions,\n ): TParentCommandGlobals extends number ? Command<any> : Command<\n TParentCommand extends Command<any> ? TParentCommandGlobals\n : Merge<TParentCommandGlobals, TCommandGlobals>,\n TParentCommand extends Command<any> ? TParentCommandTypes\n : Merge<TParentCommandTypes, TCommandGlobalTypes>,\n void,\n TArguments,\n void,\n void,\n void,\n OneOf<TParentCommand, this>\n >;\n\n /**\n * Add new sub-command.\n * @param nameAndArguments Command definition. E.g: `my-command <input-file:string> <output-file:string>`\n * @param cmdOrDescription The description of the new child command.\n * @param options Sub-command options.\n */\n command(\n nameAndArguments: string,\n cmdOrDescription?: Command<any> | string,\n { override }: SubCommandOptions = {},\n ): Command<any> {\n this.reset();\n\n const result = splitArguments(nameAndArguments);\n\n const name: string | undefined = result.flags.shift();\n const aliases: string[] = result.flags;\n\n if (!name) {\n throw new MissingCommandNameError();\n }\n\n if (this.getBaseCommand(name, true)) {\n if (!override) {\n throw new DuplicateCommandNameError(name);\n }\n this.removeCommand(name);\n }\n\n let description: string | undefined;\n let cmd: Command<any>;\n\n if (typeof cmdOrDescription === \"string\") {\n description = cmdOrDescription;\n }\n\n if (cmdOrDescription instanceof Command) {\n cmd = cmdOrDescription.reset();\n } else {\n cmd = new Command();\n }\n\n cmd.settings.name = name;\n cmd.parent = this;\n\n if (description) {\n cmd.description(description);\n }\n\n if (result.typeDefinition) {\n cmd.arguments(result.typeDefinition);\n }\n\n aliases.forEach((alias: string) => cmd.alias(alias));\n\n this.settings.commands.set(name, cmd);\n\n this.select(name);\n\n return this;\n }\n\n /**\n * Add new command alias.\n *\n * @param alias Tha name of the alias.\n */\n public alias(alias: string): this {\n if (\n this.cmd.settings.name === alias ||\n this.cmd.settings.aliases.includes(alias)\n ) {\n throw new DuplicateCommandAliasError(alias);\n }\n\n this.cmd.settings.aliases.push(alias);\n\n return this;\n }\n\n /** Reset internal command reference to main command. */\n public reset(): OneOf<TParentCommand, this> {\n this.builder.groupName = null;\n this.cmd = this;\n return this as OneOf<TParentCommand, this>;\n }\n\n /**\n * Set internal command pointer to child command with given name.\n * @param name The name of the command to select.\n */\n public select<\n TOptions extends Record<string, unknown> | void = any,\n TArguments extends Array<unknown> = any,\n TGlobalOptions extends Record<string, unknown> | void = any,\n >(\n name: string,\n ): Command<\n TParentCommandGlobals,\n TParentCommandTypes,\n TOptions,\n TArguments,\n TGlobalOptions,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommand\n > {\n const cmd = this.getBaseCommand(name, true);\n\n if (!cmd) {\n throw new CommandNotFoundError(name, this.getBaseCommands(true));\n }\n\n this.cmd = cmd;\n\n return this as Command<any>;\n }\n\n /*****************************************************************************\n **** SUB HANDLER ************************************************************\n *****************************************************************************/\n\n /**\n * Set command name.\n *\n * This method is usually used to set the command name for the main command.\n * The name should match the name of your program. It is displayed in the auto\n * generated help and used for shell completions by default.\n *\n * When used on child command, the name will be overridden by the command name\n * passed to the parent command when the command is registered with the\n * {@linkcode Command.command}.\n *\n * @param name The name for the command.\n */\n public name(name: string): this {\n this.cmd.settings.name = name;\n return this;\n }\n\n /**\n * Set command version.\n *\n * Set the version of your cli. The version is displayed in the auto generated\n * help and the output from the [version](./help.md#version-option) option.\n *\n * @param version Semantic version string string or method that returns the version string.\n */\n public version(\n version:\n | string\n | VersionHandler<\n Partial<TCommandOptions>,\n Partial<TCommandArguments>,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand\n >,\n ): this {\n if (typeof version === \"string\") {\n this.cmd.settings.version = () => version;\n } else if (typeof version === \"function\") {\n this.cmd.settings.version = version;\n }\n return this;\n }\n\n /**\n * Add meta data. Will be displayed in the auto generated help and in the\n * output of the long version.\n *\n * @param name The name/label of the metadata.\n * @param value The value of the metadata.\n */\n public meta(name: string, value: string): this {\n this.cmd.settings.meta[name] = value;\n return this;\n }\n\n /** Returns an object of metadata. */\n public getMeta(): Record<string, string>;\n\n /** Get metadata value by name. */\n public getMeta(name: string): string;\n\n public getMeta(name?: string): Record<string, string> | string {\n return typeof name === \"undefined\"\n ? this.settings.meta\n : this.settings.meta[name];\n }\n\n /**\n * Set command help.\n *\n * @param help Help string, method, or config for generator that returns the help string.\n */\n public help(\n help:\n | string\n | HelpHandler<\n Partial<TCommandOptions>,\n Partial<TCommandArguments>,\n TCommandGlobals,\n TParentCommandGlobals\n >\n | HelpOptions,\n ): this {\n if (typeof help === \"string\") {\n this.cmd.settings.help = () => help;\n } else if (typeof help === \"function\") {\n this.cmd.settings.help = help;\n } else {\n this.cmd.settings.help = (cmd: Command, options: HelpOptions): string =>\n HelpGenerator.generate(cmd, { ...help, ...options });\n }\n return this;\n }\n\n /**\n * Set the command description.\n *\n * The description will be displayed in the auto generated help. If the help\n * option is called with the short flag `-h`, only the first line is\n * displayed. If called with the long name `--help`, the full description is\n * displayed.\n *\n * For better multiline formatting, unnecessary indentations and empty leading\n * and trailing lines will be automatically removed.\n *\n * @example Multiline formatting\n *\n * For example, following description:\n *\n * ```ts\n * import { Command } from \"https://deno.land/x/cliffy/command/mod.ts\";\n *\n * new Command()\n * .description(`\n * This is a multiline description.\n * The indentation of this line will be preserved.\n * `);\n * ```\n *\n * is formatted as follows:\n *\n * ```console\n * This is a multiline description.\n * The indentation of this line will be preserved.\n * ```\n *\n * @param description The command description.\n */\n public description(\n description: Description<\n TCommandOptions,\n TCommandArguments,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand\n >,\n ): this {\n this.cmd.settings.description = description;\n return this;\n }\n\n /**\n * Set the command usage. Defaults to arguments.\n *\n * With the `.usage()` method you can override the usage text that is\n * displayed at the top of the auto generated help. By default the command\n * arguments are used. The usage is always prefixed with the command name.\n *\n * @example Set custom usage\n *\n * ```ts\n * import { Command } from \"https://deno.land/x/cliffy/command/mod.ts\";\n *\n * await new Command()\n * .name(\"script-runner\")\n * .description(\"Simple script runner.\")\n * .usage(\"[options] [script] [script options]\")\n * // ...\n * .parse(Deno.args);\n * ```\n *\n * @param usage The command usage.\n */\n public usage(usage: string): this {\n this.cmd.settings.usage = usage;\n return this;\n }\n\n /** Hide command from help, completions, etc. */\n public hidden(): this {\n this.cmd.settings.isHidden = true;\n return this;\n }\n\n /** Make command globally available. */\n public global(): this {\n this.cmd.settings.isGlobal = true;\n return this;\n }\n\n /**\n * Set command arguments.\n *\n * You can use the {@linkcode Command.arguments} method to specify the\n * arguments for the command.\n *\n * This method will override any previously defined arguments.\n *\n * Angled brackets (e.g. `<required>`) indicate required input and\n * square brackets (e.g. `[optional]`) indicate optional input. A required\n * input cannot be defined after an optional input.\n *\n * Arguments can be also defined with the {@linkcode Command.command} method.\n *\n * Optionally you can define [types](./types.md) and\n * [completions](./shell_completions.md) for your arguments after the argument\n * name separated by colon. If no type is specified the type defaults to\n * `string`.\n *\n * @example Define arguments\n *\n * ```ts\n * import { Command } from \"@cliffy/command\";\n *\n * const cmd = new Command()\n * .name(\"example\")\n * .arguments(\"<input-file:string> [output-file:string] [...tags:string]\", [\n * \"The input file.\",\n * \"The output file.\",\n * \"Tags for the file.\"\n * ]);\n *\n * // Parsing arguments\n * const { args } = await cmd.parse([\"input.txt\", \"result.txt\", \"tag1\", \"tag2\"]);\n *\n * console.log(args); // Output: ['input.txt', 'result.txt', 'tag1', 'tag2']\n * ```\n *\n * @example Use custom types in arguments\n *\n * ```typescript\n * import { Command, EnumType } from \"@cliffy/command\";\n *\n * await new Command()\n * .type(\"color\", new EnumType([\"red\", \"blue\"]))\n * .arguments(\"<color:color>\")\n * .action((_, color: \"red\" | \"blue\") => {\n * console.log(\"color:\", color);\n * })\n * .parse(Deno.args);\n * ```\n *\n * @example Variadic arguments\n *\n * The last argument of a command can be variadic. To make an argument\n * variadic you can append or prepend `...` to the argument name (`<...NAME>`\n * or `<NAME...>`).\n *\n * Required rest arguments `<...args>` requires at least one argument, optional\n * rest args `[...args]` are completely optional.\n *\n * ```typescript\n * import { Command } from \"https://deno.land/x/cliffy/command/mod.ts\";\n *\n * await new Command()\n * .description(\"Remove directories.\")\n * .arguments(\"<dirs...>\")\n * .action((_, ...dirs: Array<string>) => {\n * for (const dir of dirs) {\n * console.log(\"rmdir %s\", dir);\n * }\n * })\n * .parse(Deno.args);\n * ```\n *\n * ```console\n * $ deno run example.ts dir1 dir2 dir3\n * rmdir dir1\n * rmdir dir2\n * rmdir dir3\n * ```\n *\n * @param args The arguments definition string.\n * @param descriptions The argument descriptions.\n * @returns The command instance.\n */\n public arguments<\n TArguments extends TypedArguments<\n TArgs,\n Merge<TParentCommandTypes, Merge<TCommandGlobalTypes, TCommandTypes>>\n >,\n TArgs extends string = string,\n >(\n args: TArgs,\n descriptions?: Array<string>,\n ): Command<\n TParentCommandGlobals,\n TParentCommandTypes,\n TCommandOptions,\n TArguments,\n TCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommand\n > {\n this.cmd.settings.arguments = args.split(\" \").map((arg, index) => ({\n arg,\n description: descriptions?.[index],\n }));\n return this as Command<any>;\n }\n\n /**\n * Add a new command argument.\n *\n * - When called multiple times, arguments are appended in the order of calls.\n * - When called after `arguments()`, the new argument is appended after the previously\n * defined arguments.\n * - When called before `arguments()`, the new argument is overwritten by the later\n * defined arguments.\n *\n * @example\n * ```ts\n * import { Command } from \"@cliffy/command\";\n *\n * const cmd = new Command()\n * .name(\"example\")\n * .argument(\"<input-file:string>\", \"The input file.\")\n * .argument(\"[output-file:string]\", \"The output file.\", { default: \"out.txt\" })\n * .argument(\"[...tags:string]\", \"Tags for the file.\");\n *\n * // Parsing arguments\n * const { args } = await cmd.parse([\"input.txt\", \"result.txt\", \"tag1\", \"tag2\"]);\n *\n * console.log(args); // Output: ['input.txt', 'result.txt', 'tag1', 'tag2']\n * ```\n *\n * @param arg The argument definition. E.g: `<input-file:string>`\n * @param description The argument description.\n * @param opts Argument options.\n * @returns The command instance.\n */\n public argument<\n TArguments extends TypedArgument<\n TArg,\n Merge<TParentCommandTypes, Merge<TCommandGlobalTypes, TCommandTypes>>,\n TDefaultValue\n >,\n const TArg extends string = string,\n const TDefaultValue\n extends (TArg extends `${string}...${string}`\n ? ReadonlyArray<unknown> | undefined\n : unknown) = undefined,\n const TMappedArguments = undefined,\n TValue = MapTypes<\n TypedArgumentValue<\n TArg,\n Merge<\n TParentCommandTypes,\n Merge<TCommandGlobalTypes, TCommandTypes>\n >,\n Mutable<TDefaultValue>\n >\n >,\n >(\n arg: TArg,\n description: string,\n opts?:\n | CommandArgumentOptions<TDefaultValue, TValue, TMappedArguments>\n | ArgumentValueHandler<TValue, TMappedArguments>,\n ): Command<\n TParentCommandGlobals,\n TParentCommandTypes,\n TCommandOptions,\n [\n ...TCommandArguments,\n ...TMappedArguments extends undefined ? TArguments\n : TArg extends `${string}...${string}`\n ? TMappedArguments extends ReadonlyArray<unknown> ? TMappedArguments\n : IsRequired<\n TArg extends `<${string}>` ? true : false,\n TDefaultValue\n > extends true ? [Awaited<TMappedArguments>]\n : [Awaited<TMappedArguments>?]\n : IsRequired<\n TArg extends `<${string}>` ? true : false,\n TDefaultValue\n > extends true ? [Awaited<TMappedArguments>]\n : [Awaited<TMappedArguments>?],\n ],\n TCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommand\n > {\n this.cmd.settings.arguments ??= [];\n this.cmd.settings.arguments.push({ arg, description, ...opts });\n return this as Command<any>;\n }\n\n /**\n * Set command callback method.\n *\n * @param fn Command action handler.\n */\n public action(\n fn: ActionHandler<\n TCommandOptions,\n TCommandArguments,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand\n >,\n ): this {\n this.cmd.settings.actionHandler = fn;\n return this;\n }\n\n /**\n * Set command callback method.\n *\n * @param fn Command action handler.\n */\n public globalAction(\n fn: ActionHandler<\n Partial<TCommandOptions>,\n Array<unknown>,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand\n >,\n ): this {\n this.cmd.settings.globalActionHandler = fn;\n return this;\n }\n\n /**\n * Don't throw an error if the command was called without arguments.\n *\n * @param allowEmpty Enable/disable allow empty.\n */\n public allowEmpty<TAllowEmpty extends boolean | undefined = undefined>(\n allowEmpty?: TAllowEmpty,\n ): false extends TAllowEmpty ? this\n : Command<\n Partial<TParentCommandGlobals>,\n TParentCommandTypes,\n Partial<TCommandOptions>,\n TCommandArguments,\n TCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommand\n > {\n this.cmd.settings.allowEmpty = allowEmpty !== false;\n return this as false extends TAllowEmpty ? this\n : Command<\n Partial<TParentCommandGlobals>,\n TParentCommandTypes,\n Partial<TCommandOptions>,\n TCommandArguments,\n TCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommand\n >;\n }\n\n /**\n * Enable stop early. If enabled, all arguments starting from the first non\n * option argument will be passed as arguments with type string to the command\n * action handler.\n *\n * For example:\n * `command --debug-level warning server --port 80`\n *\n * Will result in:\n * - options: `{ debugLevel: 'warning' }`\n * - args: `['server', '--port', '80']`\n *\n * @param stopEarly Enable/disable stop early.\n */\n public stopEarly(stopEarly = true): this {\n this.cmd.settings.stopEarly = stopEarly;\n return this;\n }\n\n /**\n * Disable parsing arguments. If enabled the raw arguments will be passed to\n * the action handler. This has no effect for parent or child commands. Only\n * for the command on which this method was called.\n *\n * @param useRawArgs Enable/disable raw arguments.\n */\n public useRawArgs(\n useRawArgs = true,\n ): Command<\n void,\n void,\n void,\n Array<string>,\n void,\n void,\n void,\n TParentCommand\n > {\n this.cmd.settings.useRawArgs = useRawArgs;\n return this as Command<any>;\n }\n\n /**\n * Set default command.\n *\n * The default command is executed when the program was called without any\n * arguments.\n *\n * @param name Name of the default command.\n */\n public default(name: string): this {\n this.cmd.settings.defaultCommand = name;\n return this;\n }\n\n public globalType<\n THandler extends TypeOrTypeHandler<unknown>,\n TName extends string = string,\n >(\n name: TName,\n handler: THandler,\n options?: Omit<TypeOptions, \"global\">,\n ): Command<\n TParentCommandGlobals,\n TParentCommandTypes,\n TCommandOptions,\n TCommandArguments,\n TCommandGlobals,\n TCommandTypes,\n Merge<TCommandGlobalTypes, TypedType<TName, THandler>>,\n TParentCommand\n > {\n return this.type(name, handler, { ...options, global: true }) as Command<\n TParentCommandGlobals,\n TParentCommandTypes,\n TCommandOptions,\n TCommandArguments,\n TCommandGlobals,\n TCommandTypes,\n Merge<TCommandGlobalTypes, TypedType<TName, THandler>>,\n TParentCommand\n >;\n }\n\n /**\n * Register custom type.\n *\n * @param name The name of the type.\n * @param handler The callback method to parse the type.\n * @param options Type options.\n */\n public type<\n THandler extends TypeOrTypeHandler<unknown>,\n TName extends string = string,\n >(\n name: TName,\n handler: THandler,\n options?: TypeOptions,\n ): Command<\n TParentCommandGlobals,\n TParentCommandTypes,\n TCommandOptions,\n TCommandArguments,\n TCommandGlobals,\n Merge<TCommandTypes, TypedType<TName, THandler>>,\n TCommandGlobalTypes,\n TParentCommand\n > {\n if (this.cmd.builder.types.get(name) && !options?.override) {\n throw new DuplicateTypeError(name);\n }\n\n this.cmd.builder.types.set(name, {\n ...options,\n name,\n handler: handler as TypeOrTypeHandler<unknown>,\n });\n\n if (\n handler instanceof Type &&\n (typeof handler.complete !== \"undefined\" ||\n typeof handler.values !== \"undefined\")\n ) {\n const completeHandler: CompleteHandler = (\n cmd: Command,\n parent?: Command,\n ) => handler.complete?.(cmd, parent) || [];\n this.complete(name, completeHandler, options);\n }\n\n return this as Command<any>;\n }\n\n /**\n * Register global complete handler.\n *\n * @param name The name of the completion.\n * @param complete The callback method to complete the type.\n * @param options Complete options.\n */\n public globalComplete(\n name: string,\n complete: CompleteHandler,\n options?: Omit<CompleteOptions, \"global\">,\n ): this {\n return this.complete(name, complete, { ...options, global: true });\n }\n\n /**\n * Register global complete handler.\n *\n * @param name The name of the completion.\n * @param complete The callback method to complete the type.\n * @param options Complete options.\n */\n public complete(\n name: string,\n complete: CompleteHandler<\n Partial<TCommandOptions>,\n Partial<TCommandArguments>,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n any\n >,\n options: CompleteOptions & { global: boolean },\n ): this;\n\n /**\n * Register complete handler.\n *\n * @param name The name of the completion.\n * @param complete The callback method to complete the type.\n * @param options Complete options.\n */\n public complete(\n name: string,\n complete: CompleteHandler<\n TCommandOptions,\n TCommandArguments,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand\n >,\n options?: CompleteOptions,\n ): this;\n\n public complete(\n name: string,\n complete:\n | CompleteHandler<\n TCommandOptions,\n TCommandArguments,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand\n >\n | CompleteHandler<\n Partial<TCommandOptions>,\n Partial<TCommandArguments>,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n any\n >,\n options?: CompleteOptions,\n ): this {\n if (this.cmd.builder.completions.has(name) && !options?.override) {\n throw new DuplicateCompletionError(name);\n }\n\n this.cmd.builder.completions.set(name, {\n name,\n complete,\n ...options,\n });\n\n return this;\n }\n\n /**\n * Throw validation errors instead of calling `exit()` to handle\n * validation errors manually.\n *\n * A validation error is thrown when the command is wrongly used by the user.\n * For example: If the user passes some invalid options or arguments to the\n * command.\n *\n * This has no effect for parent commands. Only for the command on which this\n * method was called and all child commands.\n *\n * **Example:**\n *\n * ```ts\n * import { Command, ValidationError } from \"./mod.ts\";\n *\n * const cmd = new Command();\n * // ...\n *\n * try {\n * cmd.parse();\n * } catch(error) {\n * if (error instanceof ValidationError) {\n * cmd.showHelp();\n * Deno.exit(1);\n * }\n * throw error;\n * }\n * ```\n *\n * @see ValidationError\n */\n public throwErrors(): this {\n this.cmd.settings.throwOnError = true;\n return this;\n }\n\n /**\n * Set custom error handler.\n *\n * @param handler Error handler callback function.\n */\n public error(handler: ErrorHandler): this {\n this.cmd.settings.errorHandler = handler;\n return this;\n }\n\n /** Get error handler callback function. */\n private getErrorHandler(): ErrorHandler | undefined {\n return this.settings.errorHandler ??\n (this.parent && this.parent.settings.errorHandler);\n }\n\n /**\n * Same as `.throwErrors()` but also prevents calling `exit()` after\n * printing help or version with the --help and --version option.\n */\n public noExit(): this {\n this.cmd.settings.shouldExit = false;\n this.throwErrors();\n return this;\n }\n\n /**\n * Disable inheriting global commands, options and environment variables from\n * parent commands.\n */\n public noGlobals(): this {\n this.cmd.settings.noGlobals = true;\n return this;\n }\n\n /** Check whether the command should throw errors or exit. */\n protected shouldThrowErrors(): boolean {\n return this.settings.throwOnError || !!this.parent?.shouldThrowErrors();\n }\n\n /** Check whether the command should exit after printing help or version. */\n protected shouldExit(): boolean {\n return this.settings.shouldExit ?? this.parent?.shouldExit() ?? true;\n }\n\n /**\n * Enable grouping of options and set the name of the group.\n * All option which are added after calling the `.group()` method will be\n * grouped in the help output. If the `.group()` method can be use multiple\n * times to create more groups.\n *\n * @param name The name of the option group.\n */\n public group(name: string | null): this {\n this.cmd.builder.groupName = name;\n return this;\n }\n\n /**\n * Register a global option.\n *\n * @param flags Flags string e.g: -h, --help, --manual <requiredArg:string> [optionalArg:number] [...restArgs:string]\n * @param desc Flag description.\n * @param opts Flag options or custom handler for processing flag value.\n */\n public globalOption<\n TFlags extends string,\n TGlobalOptions extends TypedOption<\n TFlags,\n TCommandOptions,\n Merge<TParentCommandTypes, Merge<TCommandGlobalTypes, TCommandTypes>>,\n undefined extends TConflicts ? TRequired : false,\n TDefaultValue\n >,\n TMappedGlobalOptions extends MapValue<\n TGlobalOptions,\n TMappedValue,\n TCollect\n >,\n TRequired extends OptionOptions[\"required\"] = undefined,\n TCollect extends OptionOptions[\"collect\"] = undefined,\n TConflicts extends OptionOptions[\"conflicts\"] = undefined,\n const TDefaultValue = undefined,\n TMappedValue = undefined,\n >(\n flags: TFlags,\n desc: string,\n opts?:\n | Omit<\n GlobalOptionOptions<\n Partial<TCommandOptions>,\n TCommandArguments,\n MergeOptions<TFlags, TCommandGlobals, TGlobalOptions>,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand,\n TDefaultValue\n >,\n \"value\"\n >\n & {\n default?: DefaultValue<TDefaultValue>;\n defaultText?: DefaultText<TDefaultValue>;\n required?: TRequired;\n collect?: TCollect;\n value?: OptionValueHandler<\n MapTypes<ValueOf<TGlobalOptions>>,\n TMappedValue\n >;\n }\n | OptionValueHandler<MapTypes<ValueOf<TGlobalOptions>>, TMappedValue>,\n ): Command<\n TParentCommandGlobals,\n TParentCommandTypes,\n TCommandOptions,\n TCommandArguments,\n MergeOptions<TFlags, TCommandGlobals, TMappedGlobalOptions>,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommand\n > {\n if (typeof opts === \"function\") {\n return this.option(\n flags,\n desc,\n { value: opts, global: true } as OptionOptions,\n ) as Command<any>;\n }\n return this.option(\n flags,\n desc,\n { ...opts, global: true } as OptionOptions,\n ) as Command<any>;\n }\n\n /**\n * Add a global option.\n *\n * @param flags Flags string e.g: -h, --help, --manual <requiredArg:string> [optionalArg:number] [...restArgs:string]\n * @param desc Flag description.\n * @param opts Flag options or custom handler for processing flag value.\n */\n public option<\n TFlags extends string,\n TGlobalOptions extends TypedOption<\n TFlags,\n TCommandOptions,\n Merge<TParentCommandTypes, Merge<TCommandGlobalTypes, TCommandTypes>>,\n undefined extends TConflicts ? TRequired : false,\n TDefaultValue\n >,\n TMappedGlobalOptions extends MapValue<\n TGlobalOptions,\n TMappedValue,\n TCollect\n >,\n TRequired extends OptionOptions[\"required\"] = undefined,\n TCollect extends OptionOptions[\"collect\"] = undefined,\n TConflicts extends OptionOptions[\"conflicts\"] = undefined,\n const TDefaultValue = undefined,\n TMappedValue = undefined,\n >(\n flags: TFlags,\n desc: string,\n opts:\n | Omit<\n OptionOptions<\n Partial<TCommandOptions>,\n TCommandArguments,\n MergeOptions<TFlags, TCommandGlobals, TGlobalOptions>,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand,\n TDefaultValue\n >,\n \"value\"\n >\n & {\n global: true;\n default?: DefaultValue<TDefaultValue>;\n defaultText?: DefaultText<TDefaultValue>;\n required?: TRequired;\n collect?: TCollect;\n value?: OptionValueHandler<\n MapTypes<ValueOf<TGlobalOptions>>,\n TMappedValue\n >;\n }\n | OptionValueHandler<MapTypes<ValueOf<TGlobalOptions>>, TMappedValue>,\n ): Command<\n TParentCommandGlobals,\n TParentCommandTypes,\n TCommandOptions,\n TCommandArguments,\n MergeOptions<TFlags, TCommandGlobals, TMappedGlobalOptions>,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommand\n >;\n\n /**\n * Register an option.\n *\n * @param flags Flags string e.g: -h, --help, --manual <requiredArg:string> [optionalArg:number] [...restArgs:string]\n * @param desc Flag description.\n * @param opts Flag options or custom handler for processing flag value.\n */\n public option<\n TFlags extends string,\n TOptions extends TypedOption<\n TFlags,\n TCommandOptions,\n Merge<TParentCommandTypes, Merge<TCommandGlobalTypes, TCommandTypes>>,\n undefined extends TConflicts ? TRequired : false,\n TDefaultValue\n >,\n TMappedOptions extends MapValue<TOptions, TMappedValue, TCollect>,\n TRequired extends OptionOptions[\"required\"] = undefined,\n TCollect extends OptionOptions[\"collect\"] = undefined,\n TConflicts extends OptionOptions[\"conflicts\"] = undefined,\n const TDefaultValue = undefined,\n TMappedValue = undefined,\n >(\n flags: TFlags,\n desc: string,\n opts?:\n | Omit<\n OptionOptions<\n MergeOptions<TFlags, TCommandOptions, TMappedOptions>,\n TCommandArguments,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand,\n TDefaultValue\n >,\n \"value\"\n >\n & {\n default?: DefaultValue<TDefaultValue>;\n defaultText?: DefaultText<TDefaultValue>;\n required?: TRequired;\n collect?: TCollect;\n conflicts?: TConflicts;\n value?: OptionValueHandler<MapTypes<ValueOf<TOptions>>, TMappedValue>;\n }\n | OptionValueHandler<MapTypes<ValueOf<TOptions>>, TMappedValue>,\n ): Command<\n TParentCommandGlobals,\n TParentCommandTypes,\n MergeOptions<TFlags, TCommandOptions, TMappedOptions>,\n TCommandArguments,\n TCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommand\n >;\n\n public option(\n flags: string,\n desc: string,\n opts?: OptionOptions | OptionValueHandler,\n ): Command<any> {\n if (typeof opts === \"function\") {\n opts = { value: opts };\n }\n\n const result = splitArguments(flags);\n\n const args: Argument[] = result.typeDefinition\n ? parseArgumentsDefinition(result.typeDefinition)\n : [];\n\n const option: Option = {\n ...opts,\n name: \"\",\n description: desc,\n args,\n flags: result.flags,\n equalsSign: result.equalsSign,\n typeDefinition: result.typeDefinition,\n groupName: this.builder.groupName ?? undefined,\n };\n\n if (option.separator) {\n for (const arg of args) {\n if (arg.list) {\n arg.separator = option.separator;\n }\n }\n }\n\n for (const part of option.flags) {\n const arg = part.trim();\n const isLong = /^--/.test(arg);\n const name = isLong ? arg.slice(2) : arg.slice(1);\n\n if (this.cmd.getBaseOption(name, true)) {\n if (opts?.override) {\n this.removeOption(name);\n } else {\n throw new DuplicateOptionNameError(name, this.getPath());\n }\n }\n\n if (!option.name && isLong) {\n option.name = name;\n } else if (!option.aliases) {\n option.aliases = [name];\n } else {\n option.aliases.push(name);\n }\n }\n\n if (option.prepend) {\n this.cmd.builder.options.unshift(option);\n } else {\n this.cmd.builder.options.push(option);\n }\n\n return this;\n }\n\n /**\n * Register command example.\n *\n * @param name Name of the example.\n * @param description The content of the example.\n */\n public example(name: string, description: string): this {\n if (this.cmd.hasExample(name)) {\n throw new DuplicateExampleError(name);\n }\n\n this.cmd.settings.examples.push({ name, description });\n\n return this;\n }\n\n /**\n * @param flags Flags string e.g: -h, --help, --manual <requiredArg:string> [optionalArg:number] [...restArgs:string]\n * @param desc Flag description.\n * @param opts Flag options or custom handler for processing flag value.\n */\n\n /**\n * Register a global environment variable.\n *\n * @param name Name of the environment variable.\n * @param description The description of the environment variable.\n * @param options Environment variable options.\n */\n public globalEnv<\n TNameAndValue extends string,\n TGlobalEnvVars extends TypedEnv<\n TNameAndValue,\n TPrefix,\n TCommandOptions,\n Merge<TParentCommandTypes, Merge<TCommandGlobalTypes, TCommandTypes>>,\n TRequired\n >,\n TMappedGlobalEnvVars extends MapValue<TGlobalEnvVars, TMappedValue>,\n TRequired extends EnvVarOptions[\"required\"] = undefined,\n TPrefix extends EnvVarOptions[\"prefix\"] = undefined,\n TMappedValue = undefined,\n >(\n name: TNameAndValue,\n description: string,\n options?: Omit<GlobalEnvVarOptions, \"value\"> & {\n required?: TRequired;\n prefix?: TPrefix;\n value?: EnvVarValueHandler<\n MapTypes<ValueOf<TGlobalEnvVars>>,\n TMappedValue\n >;\n },\n ): Command<\n TParentCommandGlobals,\n TParentCommandTypes,\n TCommandOptions,\n TCommandArguments,\n Merge<TCommandGlobals, TMappedGlobalEnvVars>,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommand\n > {\n return this.env(\n name,\n description,\n { ...options, global: true } as EnvVarOptions,\n ) as Command<any>;\n }\n\n /**\n * Register a global environment variable.\n *\n * @param name Name of the environment variable.\n * @param description The description of the environment variable.\n * @param options Environment variable options.\n */\n public env<\n N extends string,\n G extends TypedEnv<\n N,\n P,\n TCommandOptions,\n Merge<TParentCommandTypes, Merge<TCommandGlobalTypes, TCommandTypes>>,\n R\n >,\n MG extends MapValue<G, V>,\n R extends EnvVarOptions[\"required\"] = undefined,\n P extends EnvVarOptions[\"prefix\"] = undefined,\n V = undefined,\n >(\n name: N,\n description: string,\n options: Omit<EnvVarOptions, \"value\"> & {\n global: true;\n required?: R;\n prefix?: P;\n value?: EnvVarValueHandler<MapTypes<ValueOf<G>>, V>;\n },\n ): Command<\n TParentCommandGlobals,\n TParentCommandTypes,\n TCommandOptions,\n TCommandArguments,\n Merge<TCommandGlobals, MG>,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommand\n >;\n\n /**\n * Register an environment variable.\n *\n * @param name Name of the environment variable.\n * @param description The description of the environment variable.\n * @param options Environment variable options.\n */\n public env<\n TNameAndValue extends string,\n TEnvVar extends TypedEnv<\n TNameAndValue,\n TPrefix,\n TCommandOptions,\n Merge<TParentCommandTypes, Merge<TCommandGlobalTypes, TCommandTypes>>,\n TRequired\n >,\n TMappedEnvVar extends MapValue<TEnvVar, TMappedValue>,\n TRequired extends EnvVarOptions[\"required\"] = undefined,\n TPrefix extends EnvVarOptions[\"prefix\"] = undefined,\n TMappedValue = undefined,\n >(\n name: TNameAndValue,\n description: string,\n options?: Omit<EnvVarOptions, \"value\"> & {\n required?: TRequired;\n prefix?: TPrefix;\n value?: EnvVarValueHandler<MapTypes<ValueOf<TEnvVar>>, TMappedValue>;\n },\n ): Command<\n TParentCommandGlobals,\n TParentCommandTypes,\n Merge<TCommandOptions, TMappedEnvVar>,\n TCommandArguments,\n TCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommand\n >;\n\n public env(\n name: string,\n description: string,\n options?: EnvVarOptions,\n ): Command<any> {\n const result = splitArguments(name);\n\n if (!result.typeDefinition) {\n result.typeDefinition = \"<value:boolean>\";\n }\n\n if (\n result.flags.some((envName) => this.cmd.getBaseEnvVar(envName, true))\n ) {\n throw new DuplicateEnvVarError(name);\n }\n\n const details: Argument[] = parseArgumentsDefinition(\n result.typeDefinition,\n );\n\n if (details.length > 1) {\n throw new TooManyEnvVarValuesError(name);\n } else if (details.length && details[0].optional) {\n throw new UnexpectedOptionalEnvVarValueError(name);\n } else if (details.length && details[0].variadic) {\n throw new UnexpectedVariadicEnvVarValueError(name);\n }\n\n this.cmd.builder.envVars.push({\n name: result.flags[0],\n names: result.flags,\n description,\n type: details[0].type,\n details: details.shift() as Argument,\n ...options,\n });\n\n return this;\n }\n\n /*****************************************************************************\n **** MAIN HANDLER ***********************************************************\n *****************************************************************************/\n\n /**\n * Parse command line arguments and execute matched command.\n *\n * @param args Command line args to parse. Ex: `cmd.parse( Deno.args )`\n */\n public parse(\n args: string[] = getArgs(),\n ): Promise<\n TParentCommand extends Command<any> ? CommandResult<\n Record<string, unknown>,\n Array<unknown>,\n Record<string, unknown>,\n Record<string, unknown>,\n Record<string, unknown>,\n Record<string, unknown>,\n Record<string, unknown>,\n undefined\n >\n : CommandResult<\n MapTypes<TCommandOptions>,\n MapTypes<TCommandArguments>,\n MapTypes<TCommandGlobals>,\n MapTypes<TParentCommandGlobals>,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand\n >\n > {\n this.props.isRoot = true;\n const ctx: ParseContext = {\n unknown: args.slice(),\n flags: {},\n env: {},\n literal: [],\n stopEarly: false,\n stopOnUnknown: false,\n defaults: {},\n actions: [],\n };\n return this.parseCommand(ctx) as any;\n }\n\n private async parseCommand(ctx: ParseContext): Promise<CommandResult> {\n try {\n this.reset();\n this.registerDefaults();\n this.props.rawArgs = ctx.unknown.slice();\n\n if (this.settings.useRawArgs) {\n await this.parseEnvVars(ctx, this.builder.envVars);\n return await this.execute(ctx.env, ctx.unknown);\n }\n\n let preParseGlobals = false;\n let subCommand: Command<any> | undefined;\n\n // Pre parse globals to support: cmd --global-option sub-command --option\n if (ctx.unknown.length > 0) {\n // Detect sub command.\n subCommand = this.getSubCommand(ctx);\n\n if (!subCommand) {\n // Only pre parse globals if first arg ist a global option.\n const optionName = ctx.unknown[0].replace(/^-+/, \"\").split(\"=\")[0];\n const option = this.getOption(optionName, true);\n\n if (option?.global) {\n preParseGlobals = true;\n await this.parseGlobalOptionsAndEnvVars(ctx);\n }\n }\n }\n\n if (subCommand || ctx.unknown.length > 0) {\n subCommand ??= this.getSubCommand(ctx);\n\n if (subCommand) {\n subCommand.props.globalParent = this;\n return subCommand.parseCommand(ctx);\n }\n }\n\n // Parse rest options & env vars.\n await this.parseOptionsAndEnvVars(ctx, preParseGlobals);\n const options = { ...ctx.env, ...ctx.flags };\n const args = await this.parseArguments(ctx, options);\n this.props.literalArgs = ctx.literal;\n\n // Execute option action.\n if (ctx.actions.length) {\n await Promise.all(\n ctx.actions.map((action) => action.call(this, options, ...args)),\n );\n\n if (ctx.standalone) {\n return {\n options,\n args,\n cmd: this,\n literal: this.props.literalArgs,\n };\n }\n }\n\n return await this.execute(options, args);\n } catch (error: unknown) {\n this.handleError(error);\n }\n }\n\n private getSubCommand(ctx: ParseContext) {\n const subCommand = this.getCommand(ctx.unknown[0], true);\n\n if (subCommand) {\n ctx.unknown.shift();\n }\n\n return subCommand;\n }\n\n private async parseGlobalOptionsAndEnvVars(\n ctx: ParseContext,\n ): Promise<void> {\n const isHelpOption = this.getHelpOption()?.flags.includes(ctx.unknown[0]);\n\n // Parse global env vars.\n const envVars = [\n ...this.builder.envVars.filter((envVar) => envVar.global),\n ...this.getGlobalEnvVars(true),\n ];\n\n await this.parseEnvVars(ctx, envVars, !isHelpOption);\n\n // Parse global options.\n const options = [\n ...this.builder.options.filter((option) => option.global),\n ...this.getGlobalOptions(true),\n ];\n\n this.parseOptions(ctx, options, {\n stopEarly: true,\n stopOnUnknown: true,\n dotted: false,\n });\n }\n\n private async parseOptionsAndEnvVars(\n ctx: ParseContext,\n preParseGlobals: boolean,\n ): Promise<void> {\n const helpOption = this.getHelpOption();\n const isVersionOption = this.props.versionOption?.flags.includes(\n ctx.unknown[0],\n );\n const isHelpOption = helpOption && ctx.flags?.[helpOption.name] === true;\n\n // Parse env vars.\n const envVars = preParseGlobals\n ? this.builder.envVars.filter((envVar) => !envVar.global)\n : this.getEnvVars(true);\n\n await this.parseEnvVars(\n ctx,\n envVars,\n !isHelpOption && !isVersionOption,\n );\n\n // Parse options.\n const options = this.getOptions(true);\n\n this.parseOptions(ctx, options);\n }\n\n /** Register default options like `--version` and `--help`. */\n private registerDefaults(): this {\n if (this.props.hasDefaults) {\n return this;\n }\n if (this.parent) {\n if (this.props.isRoot) {\n this.getMainCommand().registerDefaults();\n }\n return this;\n }\n this.props.hasDefaults = true;\n\n this.reset();\n\n !this.builder.types.has(\"string\") &&\n this.type(\"string\", new StringType(), { global: true });\n !this.builder.types.has(\"number\") &&\n this.type(\"number\", new NumberType(), { global: true });\n !this.builder.types.has(\"integer\") &&\n this.type(\"integer\", new IntegerType(), { global: true });\n !this.builder.types.has(\"boolean\") &&\n this.type(\"boolean\", new BooleanType(), { global: true });\n !this.builder.types.has(\"file\") &&\n this.type(\"file\", new FileType(), { global: true });\n !this.builder.types.has(\"secret\") &&\n this.type(\"secret\", new SecretType(), { global: true });\n\n if (!this.settings.help) {\n this.help({});\n }\n\n if (\n this.settings.versionOptions !== false &&\n (this.settings.versionOptions || this.settings.version)\n ) {\n this.option(\n this.settings.versionOptions?.flags || \"-V, --version\",\n this.settings.versionOptions?.desc ||\n \"Show the version number for this program.\",\n {\n standalone: true,\n prepend: true,\n action: async function () {\n const long = this.getRawArgs().includes(\n `--${this.props.versionOption?.name}`,\n );\n if (long) {\n await checkVersion(this);\n this.showLongVersion();\n } else {\n this.showVersion();\n }\n this.exit();\n },\n ...(this.settings.versionOptions?.opts ?? {}),\n },\n );\n this.props.versionOption = this.builder.options[0];\n }\n\n if (this.settings.helpOptions !== false) {\n this.option(\n this.settings.helpOptions?.flags || \"-h, --help\",\n this.settings.helpOptions?.desc || \"Show this help.\",\n {\n standalone: true,\n global: true,\n prepend: true,\n action: async function () {\n const long = this.getRawArgs().includes(\n `--${this.getHelpOption()?.name}`,\n );\n await checkVersion(this);\n this.showHelp({ long });\n this.exit();\n },\n ...(this.settings.helpOptions?.opts ?? {}),\n },\n );\n this.props.helpOption = this.builder.options[0];\n }\n\n return this;\n }\n\n /**\n * Execute command.\n * @param options A map of options.\n * @param args Command arguments.\n */\n private async execute(\n options: Record<string, unknown>,\n args: Array<unknown>,\n ): Promise<CommandResult> {\n if (\n this.settings.defaultCommand && !args.length &&\n !Object.keys(options).length\n ) {\n const cmd = this.getCommand(this.settings.defaultCommand, true);\n\n if (!cmd) {\n throw new DefaultCommandNotFoundError(\n this.settings.defaultCommand,\n this.getCommands(),\n );\n }\n cmd.props.globalParent = this;\n\n return cmd.execute(options, args);\n }\n\n await this.executeGlobalAction(options, args);\n\n if (this.settings.actionHandler) {\n await this.settings.actionHandler.call(this, options, ...args);\n }\n\n return {\n options,\n args,\n cmd: this,\n literal: this.props.literalArgs,\n };\n }\n\n private async executeGlobalAction(\n options: Record<string, unknown>,\n args: Array<unknown>,\n ) {\n if (!this.settings.noGlobals) {\n await this.parent?.executeGlobalAction(options, args);\n }\n await this.settings.globalActionHandler?.call(this, options, ...args);\n }\n\n /** Parse raw command line arguments. */\n protected parseOptions(\n ctx: ParseContext,\n options: Option[],\n {\n stopEarly = this.settings.stopEarly,\n stopOnUnknown = false,\n dotted = true,\n }: ParseOptionsOptions = {},\n ): void {\n parseFlags(ctx, {\n stopEarly,\n stopOnUnknown,\n dotted,\n allowEmpty: this.settings.allowEmpty,\n flags: options,\n ignoreDefaults: ctx.env,\n parse: (type: ArgumentValue) => this.parseType(type),\n option: (option: Option) => {\n if (option.action) {\n ctx.actions.push(option.action);\n }\n },\n });\n }\n\n /** Parse argument type. */\n protected parseType(type: ArgumentValue): unknown {\n const typeSettings: TypeDef | undefined = this.getType(type.type);\n\n if (!typeSettings) {\n throw new UnknownTypeError(\n type.type,\n this.getTypes().map((type) => type.name),\n );\n }\n\n return typeSettings.handler instanceof Type\n ? typeSettings.handler.parse(type)\n : typeSettings.handler(type);\n }\n\n /**\n * Read and validate environment variables.\n * @param ctx Parse context.\n * @param envVars env vars defined by the command.\n * @param validate when true, throws an error if a required env var is missing.\n */\n protected async parseEnvVars(\n ctx: ParseContext,\n envVars: Array<EnvVar>,\n validate = true,\n ): Promise<void> {\n for (const envVar of envVars) {\n const env = await this.findEnvVar(envVar.names);\n\n if (env) {\n const parseType = (value: string) => {\n return this.parseType({\n label: \"Environment variable\",\n type: envVar.type,\n name: env.name,\n value,\n });\n };\n\n const propertyName = underscoreToCamelCase(\n envVar.prefix\n ? envVar.names[0].replace(new RegExp(`^${envVar.prefix}`), \"\")\n : envVar.names[0],\n );\n\n if (envVar.details.list) {\n ctx.env[propertyName] = env.value\n .split(envVar.details.separator ?? \",\")\n .map(parseType);\n } else {\n ctx.env[propertyName] = parseType(env.value);\n }\n\n if (envVar.value && typeof ctx.env[propertyName] !== \"undefined\") {\n ctx.env[propertyName] = envVar.value(ctx.env[propertyName]);\n }\n } else if (envVar.required && validate) {\n throw new MissingRequiredEnvVarError(envVar);\n }\n }\n }\n\n protected async findEnvVar(\n names: readonly string[],\n ): Promise<{ name: string; value: string } | undefined> {\n for (const name of names) {\n // dnt-shim-ignore\n const status = await (globalThis as any).Deno?.permissions.query({\n name: \"env\",\n variable: name,\n });\n\n if (!status || status.state === \"granted\") {\n const value = getEnv(name);\n\n if (value) {\n return { name, value };\n }\n }\n }\n\n return undefined;\n }\n\n /**\n * Parse command-line arguments.\n * @param ctx Parse context.\n * @param options Parsed command line options.\n */\n protected async parseArguments(\n ctx: ParseContext,\n options: Record<string, unknown>,\n ): Promise<TCommandArguments> {\n const params: Array<unknown> = [];\n const args = ctx.unknown.slice();\n\n if (!this.hasArguments()) {\n if (args.length) {\n if (this.hasCommands(true)) {\n if (this.hasCommand(args[0], true)) {\n // e.g: command --global-foo --foo sub-command\n throw new TooManyArgumentsError(args);\n } else {\n throw new UnknownCommandError(args[0], this.getCommands());\n }\n } else {\n throw new NoArgumentsAllowedError(this.getPath());\n }\n }\n } else {\n const hasDefaults = this.settings.arguments?.some((arg) => arg.default);\n\n if (!args.length && !hasDefaults) {\n const required = this.getArguments()\n .filter((expectedArg) => !expectedArg.optional)\n .map((expectedArg) => expectedArg.name);\n\n if (required.length) {\n const optionNames: string[] = Object.keys(options);\n const hasStandaloneOption = !!optionNames.find((name) =>\n this.getOption(name, true)?.standalone\n );\n\n if (!hasStandaloneOption) {\n throw new MissingArgumentsError(required);\n }\n }\n } else {\n for (const [index, expectedArg] of this.getArguments().entries()) {\n const mapArgValue = (parsed: unknown) => {\n return this.settings.arguments?.[index].value\n ? this.settings.arguments[index].value(parsed)\n : parsed;\n };\n\n if (!args.length) {\n if (this.settings.arguments?.[index].default !== undefined) {\n const defaultValue =\n typeof this.settings.arguments[index].default === \"function\"\n ? this.settings.arguments[index].default.call(this)\n : this.settings.arguments[index].default;\n\n const mappedValue = mapArgValue(defaultValue);\n\n if (expectedArg.variadic && Array.isArray(mappedValue)) {\n params.push(...mappedValue);\n continue;\n }\n params.push(mappedValue);\n continue;\n }\n\n if (expectedArg.optional) {\n if (hasDefaults) {\n params.push(undefined);\n }\n continue;\n }\n throw new MissingArgumentError(expectedArg.name);\n }\n\n let arg: unknown;\n\n const parseArgValue = (value: string) => {\n return expectedArg.list\n ? value.split(\",\").map((value) => parseArgType(value))\n : parseArgType(value);\n };\n\n const parseArgType = (value: string) => {\n return this.parseType({\n label: \"Argument\",\n type: expectedArg.type,\n name: expectedArg.name,\n value,\n });\n };\n\n if (expectedArg.variadic) {\n arg = args.splice(0, args.length).map((value) =>\n parseArgValue(value)\n );\n } else {\n arg = parseArgValue(args.shift() as string);\n }\n\n arg = mapArgValue(arg);\n\n if (expectedArg.variadic && Array.isArray(arg)) {\n params.push(...arg);\n } else if (typeof arg !== \"undefined\") {\n params.push(arg);\n }\n }\n\n if (args.length) {\n throw new TooManyArgumentsError(args);\n }\n }\n }\n const values = await Promise.all(params);\n\n while (values.length && values.at(-1) === undefined) {\n values.pop();\n }\n\n return values as TCommandArguments;\n }\n\n private handleError(error: unknown): never {\n this.throw(\n error instanceof FlagsValidationError\n ? new ValidationError(error.message)\n : error instanceof Error\n ? error\n : new Error(`[non-error-thrown] ${error}`),\n );\n }\n\n /**\n * Handle error. If `throwErrors` is enabled the error will be thrown,\n * otherwise a formatted error message will be printed and `exit(1)`\n * will be called. This will also trigger registered error handlers.\n *\n * @param error The error to handle.\n */\n public throw(error: Error): never {\n if (error instanceof ValidationError) {\n error.cmd = this as unknown as Command;\n }\n this.getErrorHandler()?.(error, this as unknown as Command);\n\n if (this.shouldThrowErrors() || !(error instanceof ValidationError)) {\n throw error;\n }\n this.showHelp();\n\n console.error(red(` ${bold(\"error\")}: ${error.message}\\n`));\n\n exit(error instanceof ValidationError ? error.exitCode : 1);\n }\n\n /*****************************************************************************\n **** GETTER *****************************************************************\n *****************************************************************************/\n\n /** Get command name. */\n public getName(): string {\n return this.settings.name;\n }\n\n /** Get parent command. */\n public getParent(): TParentCommand {\n return this.parent as TParentCommand;\n }\n\n /**\n * Get parent command from global executed command.\n * Be sure, to call this method only inside an action handler. Unless this or any child command was executed,\n * this method returns always undefined.\n */\n public getGlobalParent(): Command<any> | undefined {\n return this.props.globalParent;\n }\n\n /** Get main command. */\n public getMainCommand(): Command<any> {\n return this.parent?.getMainCommand() ?? this;\n }\n\n /** Get command name aliases. */\n public getAliases(): string[] {\n return this.settings.aliases;\n }\n\n /**\n * Get full command path.\n *\n * @param name Override the main command name.\n */\n public getPath(name?: string): string {\n return this.parent && !this.props.isRoot\n ? this.parent.getPath(name) + \" \" + this.settings.name\n : name || this.settings.name;\n }\n\n /** Get arguments definition. E.g: <input-file:string> <output-file:string> */\n public getArgsDefinition(): string | undefined {\n return this.settings.arguments?.map(({ arg }) => arg).join(\" \");\n }\n\n /**\n * Get argument by name.\n *\n * @param name Name of the argument.\n */\n public getArgument(name: string): Argument | undefined {\n return this.getArguments().find((arg) => arg.name === name);\n }\n\n /** Get arguments. */\n public getArguments(): Argument[] {\n if (!this.props.args.length && this.settings.arguments) {\n this.props.args = parseArgumentsDefinition(this.settings.arguments);\n }\n\n return this.props.args;\n }\n\n /** Check if command has arguments. */\n public hasArguments(): boolean {\n return !!this.settings.arguments?.length;\n }\n\n /** Get command version. */\n public getVersion(): string | undefined {\n return this.getVersionHandler()?.call(this, this);\n }\n\n /** Get help handler method. */\n private getVersionHandler(): VersionHandler | undefined {\n return this.settings.version ?? this.parent?.getVersionHandler();\n }\n\n /** Get command description. */\n public getDescription(): string {\n // call description method only once\n return typeof this.settings.description === \"function\"\n ? this.settings.description = this.settings.description.call(this)\n : this.settings.description;\n }\n\n /** Get auto generated command usage. */\n public getUsage(): string {\n return this.settings.usage ??\n [this.getArgsDefinition(), this.getRequiredOptionsDefinition()]\n .join(\" \")\n .trim();\n }\n\n private getRequiredOptionsDefinition() {\n return this.getOptions()\n .filter((option) => option.required)\n .map((option) =>\n [findFlag(option.flags), option.typeDefinition].filter((v) => v)\n .join(\" \")\n .trim()\n )\n .join(\" \");\n }\n\n /** Get short command description. This is the first line of the description. */\n public getShortDescription(): string {\n return getDescription(this.getDescription(), true);\n }\n\n /** Get original command-line arguments. */\n public getRawArgs(): string[] {\n return this.props.rawArgs;\n }\n\n /** Get all arguments defined after the double dash. */\n public getLiteralArgs(): string[] {\n return this.props.literalArgs;\n }\n\n /** Output generated help without exiting. */\n public showVersion(): void {\n console.log(this.getVersion());\n }\n\n /** Returns command name, version and meta data. */\n public getLongVersion(): string {\n return `${bold(this.getMainCommand().getName())} ${\n brightBlue(this.getVersion() ?? \"\")\n }` +\n Object.entries(this.getMeta()).map(\n ([k, v]) => `\\n${bold(k)} ${brightBlue(v)}`,\n ).join(\"\");\n }\n\n /** Outputs command name, version and meta data. */\n public showLongVersion(): void {\n console.log(this.getLongVersion());\n }\n\n /** Output generated help without exiting. */\n public showHelp(options?: HelpOptions): void {\n console.log(this.getHelp(options));\n }\n\n /** Get generated help. */\n public getHelp(options?: HelpOptions): string {\n this.registerDefaults();\n return this.getHelpHandler().call(this, this, options ?? {});\n }\n\n /** Get help handler method. */\n private getHelpHandler(): HelpHandler {\n return this.settings.help ?? this.parent?.getHelpHandler() as HelpHandler;\n }\n\n private exit(code = 0) {\n if (this.shouldExit()) {\n exit(code);\n }\n }\n\n /*****************************************************************************\n **** Options GETTER *********************************************************\n *****************************************************************************/\n\n /**\n * Checks whether the command has options or not.\n *\n * @param hidden Include hidden options.\n */\n public hasOptions(hidden?: boolean): boolean {\n return this.getOptions(hidden).length > 0;\n }\n\n /**\n * Get options.\n *\n * @param hidden Include hidden options.\n */\n public getOptions(hidden?: boolean): Option[] {\n return this.getGlobalOptions(hidden).concat(this.getBaseOptions(hidden));\n }\n\n /**\n * Get base options.\n *\n * @param hidden Include hidden options.\n */\n public getBaseOptions(hidden?: boolean): Option[] {\n if (!this.builder.options.length) {\n return [];\n }\n\n return hidden\n ? this.builder.options.slice(0)\n : this.builder.options.filter((opt) => !opt.hidden);\n }\n\n /**\n * Get global options.\n *\n * @param hidden Include hidden options.\n */\n public getGlobalOptions(hidden?: boolean): Option[] {\n const helpOption = this.getHelpOption();\n const getGlobals = (\n cmd: Command<any>,\n noGlobals: boolean | undefined,\n options: Option[] = [],\n names: string[] = [],\n ): Option[] => {\n if (cmd.builder.options.length) {\n for (const option of cmd.builder.options) {\n if (\n option.global &&\n !this.builder.options.find((opt) => opt.name === option.name) &&\n names.indexOf(option.name) === -1 &&\n (hidden || !option.hidden)\n ) {\n if (noGlobals && option !== helpOption) {\n continue;\n }\n\n names.push(option.name);\n options.push(option);\n }\n }\n }\n\n return cmd.parent\n ? getGlobals(\n cmd.parent,\n noGlobals || cmd.settings.noGlobals,\n options,\n names,\n )\n : options;\n };\n\n return this.parent ? getGlobals(this.parent, this.settings.noGlobals) : [];\n }\n\n /**\n * Checks whether the command has an option with given name or not.\n *\n * @param name Name of the option. Must be in param-case.\n * @param hidden Include hidden options.\n */\n public hasOption(name: string, hidden?: boolean): boolean {\n return !!this.getOption(name, hidden);\n }\n\n /**\n * Get option by name.\n *\n * @param name Name of the option. Must be in param-case.\n * @param hidden Include hidden options.\n */\n public getOption(name: string, hidden?: boolean): Option | undefined {\n return this.getBaseOption(name, hidden) ??\n this.getGlobalOption(name, hidden);\n }\n\n /**\n * Get base option by name.\n *\n * @param name Name of the option. Must be in param-case.\n * @param hidden Include hidden options.\n */\n public getBaseOption(name: string, hidden?: boolean): Option | undefined {\n const option = this.builder.options.find((option) =>\n option.name === name || option.aliases?.includes(name)\n );\n\n return option && (hidden || !option.hidden) ? option : undefined;\n }\n\n /**\n * Get global option from parent commands by name.\n *\n * @param name Name of the option. Must be in param-case.\n * @param hidden Include hidden options.\n */\n public getGlobalOption(name: string, hidden?: boolean): Option | undefined {\n const helpOption = this.getHelpOption();\n const getGlobalOption = (\n parent: Command,\n noGlobals: boolean | undefined,\n ): Option | undefined => {\n const option: Option | undefined = parent.getBaseOption(\n name,\n hidden,\n );\n\n if (!option?.global) {\n return parent.parent && getGlobalOption(\n parent.parent,\n noGlobals || parent.settings.noGlobals,\n );\n }\n if (noGlobals && option !== helpOption) {\n return;\n }\n\n return option;\n };\n\n return this.parent && getGlobalOption(\n this.parent,\n this.settings.noGlobals,\n );\n }\n\n /**\n * Remove option by name.\n *\n * @param name Name of the option. Must be in param-case.\n */\n public removeOption(name: string): Option | undefined {\n const index = this.builder.options.findIndex((option) =>\n option.name === name\n );\n\n if (index === -1) {\n return;\n }\n\n return this.builder.options.splice(index, 1)[0];\n }\n\n /**\n * Checks whether the command has sub-commands or not.\n *\n * @param hidden Include hidden commands.\n */\n public hasCommands(hidden?: boolean): boolean {\n return this.getCommands(hidden).length > 0;\n }\n\n /**\n * Get commands.\n *\n * @param hidden Include hidden commands.\n */\n public getCommands(hidden?: boolean): Array<Command<any>> {\n return this.getGlobalCommands(hidden).concat(this.getBaseCommands(hidden));\n }\n\n /**\n * Get base commands.\n *\n * @param hidden Include hidden commands.\n */\n public getBaseCommands(hidden?: boolean): Array<Command<any>> {\n const commands = Array.from(this.settings.commands.values());\n return hidden ? commands : commands.filter((cmd) => !cmd.settings.isHidden);\n }\n\n /**\n * Get global commands.\n *\n * @param hidden Include hidden commands.\n */\n public getGlobalCommands(hidden?: boolean): Array<Command<any>> {\n const getCommands = (\n command: Command<any>,\n noGlobals: boolean | undefined,\n commands: Array<Command<any>> = [],\n names: string[] = [],\n ): Array<Command<any>> => {\n if (command.settings.commands.size) {\n for (const [_, cmd] of command.settings.commands) {\n if (\n cmd.settings.isGlobal &&\n this !== cmd &&\n !this.settings.commands.has(cmd.settings.name) &&\n names.indexOf(cmd.settings.name) === -1 &&\n (hidden || !cmd.settings.isHidden)\n ) {\n if (noGlobals && cmd?.getName() !== \"help\") {\n continue;\n }\n\n names.push(cmd.settings.name);\n commands.push(cmd);\n }\n }\n }\n\n return command.parent\n ? getCommands(\n command.parent,\n noGlobals || command.settings.noGlobals,\n commands,\n names,\n )\n : commands;\n };\n\n return this.parent ? getCommands(this.parent, this.settings.noGlobals) : [];\n }\n\n /**\n * Checks whether a child command exists by given name or alias.\n *\n * @param name Name or alias of the command.\n * @param hidden Include hidden commands.\n */\n public hasCommand(name: string, hidden?: boolean): boolean {\n return !!this.getCommand(name, hidden);\n }\n\n /**\n * Get command by name or alias.\n *\n * @param name Name or alias of the command.\n * @param hidden Include hidden commands.\n */\n public getCommand<TCommand extends Command<any>>(\n name: string,\n hidden?: boolean,\n ): TCommand | undefined {\n return this.getBaseCommand(name, hidden) ??\n this.getGlobalCommand(name, hidden);\n }\n\n /**\n * Get base command by name or alias.\n *\n * @param name Name or alias of the command.\n * @param hidden Include hidden commands.\n */\n public getBaseCommand<TCommand extends Command<any>>(\n name: string,\n hidden?: boolean,\n ): TCommand | undefined {\n for (const cmd of this.settings.commands.values()) {\n if (cmd.settings.name === name || cmd.settings.aliases.includes(name)) {\n return (cmd && (hidden || !cmd.settings.isHidden) ? cmd : undefined) as\n | TCommand\n | undefined;\n }\n }\n }\n\n /**\n * Get global command by name or alias.\n *\n * @param name Name or alias of the command.\n * @param hidden Include hidden commands.\n */\n public getGlobalCommand<TCommand extends Command<any>>(\n name: string,\n hidden?: boolean,\n ): TCommand | undefined {\n const getGlobalCommand = (\n parent: Command,\n noGlobals: boolean | undefined,\n ): Command | undefined => {\n const cmd: Command | undefined = parent.getBaseCommand(name, hidden);\n\n if (!cmd || !cmd.settings.isGlobal) {\n return parent.parent &&\n getGlobalCommand(\n parent.parent,\n noGlobals || parent.settings.noGlobals,\n );\n }\n if (noGlobals && cmd.getName() !== \"help\") {\n return;\n }\n\n return cmd;\n };\n\n return this.parent &&\n getGlobalCommand(this.parent, this.settings.noGlobals) as TCommand;\n }\n\n /**\n * Remove sub-command by name or alias.\n *\n * @param name Name or alias of the command.\n */\n public removeCommand(name: string): Command<any> | undefined {\n const command = this.getBaseCommand(name, true);\n\n if (command) {\n this.settings.commands.delete(command.settings.name);\n }\n\n return command;\n }\n\n /** Get types. */\n public getTypes(): Array<TypeDef> {\n return this.getGlobalTypes().concat(this.getBaseTypes());\n }\n\n /** Get base types. */\n public getBaseTypes(): Array<TypeDef> {\n return Array.from(this.builder.types.values());\n }\n\n /** Get global types. */\n public getGlobalTypes(): Array<TypeDef> {\n const getTypes = (\n cmd: Command<any> | undefined,\n types: Array<TypeDef> = [],\n names: Array<string> = [],\n ): Array<TypeDef> => {\n if (cmd) {\n if (cmd.builder.types.size) {\n cmd.builder.types.forEach((type: TypeDef) => {\n if (\n type.global &&\n !this.builder.types.has(type.name) &&\n names.indexOf(type.name) === -1\n ) {\n names.push(type.name);\n types.push(type);\n }\n });\n }\n\n return getTypes(cmd.parent, types, names);\n }\n\n return types;\n };\n\n return getTypes(this.parent);\n }\n\n /**\n * Get type by name.\n *\n * @param name Name of the type.\n */\n public getType(name: string): TypeDef | undefined {\n return this.getBaseType(name) ?? this.getGlobalType(name);\n }\n\n /**\n * Get base type by name.\n *\n * @param name Name of the type.\n */\n public getBaseType(name: string): TypeDef | undefined {\n return this.builder.types.get(name);\n }\n\n /**\n * Get global type by name.\n *\n * @param name Name of the type.\n */\n public getGlobalType(name: string): TypeDef | undefined {\n if (!this.parent) {\n return;\n }\n\n const cmd: TypeDef | undefined = this.parent.getBaseType(name);\n\n if (!cmd?.global) {\n return this.parent.getGlobalType(name);\n }\n\n return cmd;\n }\n\n /** Get completions. */\n public getCompletions(): Completion<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >[] {\n return this.getGlobalCompletions().concat(this.getBaseCompletions());\n }\n\n /** Get base completions. */\n public getBaseCompletions(): Completion[] {\n return Array.from(this.builder.completions.values());\n }\n\n /** Get global completions. */\n public getGlobalCompletions(): Completion[] {\n const getCompletions = (\n cmd: Command<any> | undefined,\n completions: Completion[] = [],\n names: string[] = [],\n ): Completion[] => {\n if (cmd) {\n if (cmd.builder.completions.size) {\n cmd.builder.completions.forEach((completion: Completion) => {\n if (\n completion.global &&\n !this.builder.completions.has(completion.name) &&\n names.indexOf(completion.name) === -1\n ) {\n names.push(completion.name);\n completions.push(completion);\n }\n });\n }\n\n return getCompletions(cmd.parent, completions, names);\n }\n\n return completions;\n };\n\n return getCompletions(this.parent);\n }\n\n /**\n * Get completion by name.\n *\n * @param name Name of the completion.\n */\n public getCompletion(name: string): Completion | undefined {\n return this.getBaseCompletion(name) ?? this.getGlobalCompletion(name);\n }\n\n /**\n * Get base completion by name.\n *\n * @param name Name of the completion.\n */\n public getBaseCompletion(name: string): Completion | undefined {\n return this.builder.completions.get(name);\n }\n\n /**\n * Get global completions by name.\n *\n * @param name Name of the completion.\n */\n public getGlobalCompletion(name: string): Completion | undefined {\n if (!this.parent) {\n return;\n }\n\n const completion: Completion | undefined = this.parent.getBaseCompletion(\n name,\n );\n\n if (!completion?.global) {\n return this.parent.getGlobalCompletion(name);\n }\n\n return completion;\n }\n\n /**\n * Checks whether the command has environment variables or not.\n *\n * @param hidden Include hidden environment variable.\n */\n public hasEnvVars(hidden?: boolean): boolean {\n return this.getEnvVars(hidden).length > 0;\n }\n\n /**\n * Get environment variables.\n *\n * @param hidden Include hidden environment variable.\n */\n public getEnvVars(hidden?: boolean): EnvVar[] {\n return this.getGlobalEnvVars(hidden).concat(this.getBaseEnvVars(hidden));\n }\n\n /**\n * Get base environment variables.\n *\n * @param hidden Include hidden environment variable.\n */\n public getBaseEnvVars(hidden?: boolean): EnvVar[] {\n if (!this.builder.envVars.length) {\n return [];\n }\n\n return hidden\n ? this.builder.envVars.slice(0)\n : this.builder.envVars.filter((env) => !env.hidden);\n }\n\n /**\n * Get global environment variables.\n *\n * @param hidden Include hidden environment variable.\n */\n public getGlobalEnvVars(hidden?: boolean): EnvVar[] {\n if (this.settings.noGlobals) {\n return [];\n }\n\n const getEnvVars = (\n cmd: Command<any> | undefined,\n envVars: EnvVar[] = [],\n names: string[] = [],\n ): EnvVar[] => {\n if (cmd) {\n if (cmd.builder.envVars.length) {\n cmd.builder.envVars.forEach((envVar: EnvVar) => {\n if (\n envVar.global &&\n !this.builder.envVars.find((env) =>\n env.names[0] === envVar.names[0]\n ) &&\n names.indexOf(envVar.names[0]) === -1 &&\n (hidden || !envVar.hidden)\n ) {\n names.push(envVar.names[0]);\n envVars.push(envVar);\n }\n });\n }\n\n return getEnvVars(cmd.parent, envVars, names);\n }\n\n return envVars;\n };\n\n return getEnvVars(this.parent);\n }\n\n /**\n * Checks whether the command has an environment variable with given name or not.\n *\n * @param name Name of the environment variable.\n * @param hidden Include hidden environment variable.\n */\n public hasEnvVar(name: string, hidden?: boolean): boolean {\n return !!this.getEnvVar(name, hidden);\n }\n\n /**\n * Get environment variable by name.\n *\n * @param name Name of the environment variable.\n * @param hidden Include hidden environment variable.\n */\n public getEnvVar(name: string, hidden?: boolean): EnvVar | undefined {\n return this.getBaseEnvVar(name, hidden) ??\n this.getGlobalEnvVar(name, hidden);\n }\n\n /**\n * Get base environment variable by name.\n *\n * @param name Name of the environment variable.\n * @param hidden Include hidden environment variable.\n */\n public getBaseEnvVar(name: string, hidden?: boolean): EnvVar | undefined {\n const envVar: EnvVar | undefined = this.builder.envVars.find((env) =>\n env.names.indexOf(name) !== -1\n );\n\n return envVar && (hidden || !envVar.hidden) ? envVar : undefined;\n }\n\n /**\n * Get global environment variable by name.\n *\n * @param name Name of the environment variable.\n * @param hidden Include hidden environment variable.\n */\n public getGlobalEnvVar(name: string, hidden?: boolean): EnvVar | undefined {\n if (!this.parent || this.settings.noGlobals) {\n return;\n }\n\n const envVar: EnvVar | undefined = this.parent.getBaseEnvVar(\n name,\n hidden,\n );\n\n if (!envVar?.global) {\n return this.parent.getGlobalEnvVar(name, hidden);\n }\n\n return envVar;\n }\n\n /** Checks whether the command has examples or not. */\n public hasExamples(): boolean {\n return this.settings.examples.length > 0;\n }\n\n /** Get all examples. */\n public getExamples(): Example[] {\n return this.settings.examples;\n }\n\n /** Checks whether the command has an example with given name or not. */\n public hasExample(name: string): boolean {\n return !!this.getExample(name);\n }\n\n /** Get example with given name. */\n public getExample(name: string): Example | undefined {\n return this.settings.examples.find((example) => example.name === name);\n }\n\n private getHelpOption(): Option | undefined {\n return this.props.helpOption ?? this.parent?.getHelpOption();\n }\n}\n\nfunction findFlag(flags: Array<string>): string {\n for (const flag of flags) {\n if (flag.startsWith(\"--\")) {\n return flag;\n }\n }\n return flags[0];\n}\n\ninterface DefaultOption {\n flags: string;\n desc?: string;\n opts?: OptionOptions;\n}\n\ninterface ParseContext extends ParseFlagsContext<Record<string, unknown>> {\n actions: Array<ActionHandler>;\n env: Record<string, unknown>;\n}\n\ninterface ParseOptionsOptions {\n stopEarly?: boolean;\n stopOnUnknown?: boolean;\n dotted?: boolean;\n}\n","#!/usr/bin/env node\n\nimport { Command } from \"@cliffy/command\";\nimport { flatHelp } from \"cliffy-flat-help\";\n\nimport { createCommand } from \"./commands/create.js\";\nimport { listCommand } from \"./commands/list.js\";\nimport { getCommand } from \"./commands/get.js\";\nimport { updateCommand } from \"./commands/update.js\";\nimport { statusCommand } from \"./commands/status.js\";\nimport { assignCommand } from \"./commands/assign.js\";\nimport { unassignCommand } from \"./commands/unassign.js\";\nimport { deleteCommand } from \"./commands/delete.js\";\n\nawait new Command()\n .help(flatHelp())\n .name(\"swarm\")\n .description(\"A markdown-based issue tracking system CLI\")\n .version(\"1.0.0\")\n .action(function () {\n this.showHelp();\n })\n .command(\"create\", createCommand)\n .command(\"list\", listCommand)\n .command(\"get\", getCommand)\n .command(\"update\", updateCommand)\n .command(\"status\", statusCommand)\n .command(\"assign\", assignCommand)\n .command(\"unassign\", unassignCommand)\n .command(\"delete\", deleteCommand)\n .parse();\n","import { Command } from \"@cliffy/command\";\nimport { TaskManager } from \"dyson-swarm\";\n\nexport async function createAction(options: any) {\n const taskManager = new TaskManager();\n\n try {\n const task = await taskManager.createTask({\n title: options.title,\n description: options.description,\n assignee: options.assignee,\n parentTaskId: options.parent,\n });\n\n console.log(`Created task: ${task.id}`);\n console.log(`Title: ${task.frontmatter.title}`);\n console.log(`Status: ${task.status}`);\n if (task.frontmatter.assignee) {\n console.log(`Assignee: ${task.frontmatter.assignee}`);\n }\n if (options.parent) {\n console.log(`Parent: ${options.parent}`);\n }\n } catch (error) {\n console.error(\"Failed to create task:\", error instanceof Error ? error.message : error);\n process.exit(1);\n }\n}\n\nexport const createCommand: any = new Command()\n .description(\"Create a new task.\")\n .option(\"-t, --title <title>\", \"Task title.\", { required: true })\n .option(\"-d, --description <description>\", \"Task description.\", { required: true })\n .option(\"-a, --assignee <assignee>\", \"Assignee username.\")\n .option(\"-p, --parent <parentTaskId>\", \"Parent task ID to create a subtask.\")\n .action(createAction);\n","import { Command } from \"@cliffy/command\";\nimport { TaskManager } from \"dyson-swarm\";\n\nexport async function listAction(options: any) {\n const taskManager = new TaskManager();\n\n try {\n const filter: any = {};\n\n if (options.status) {\n if (![\"open\", \"in-progress\", \"closed\"].includes(options.status)) {\n console.error(\"Invalid status. Must be one of: open, in-progress, closed\");\n process.exit(1);\n }\n filter.status = options.status;\n }\n\n if (options.assignee) {\n filter.assignee = options.assignee;\n }\n\n if (options.task) {\n filter.taskId = options.task;\n }\n\n const tasks = await taskManager.listTasks(filter);\n\n if (tasks.length === 0) {\n console.log(\"No tasks found.\");\n return;\n }\n\n console.log(`Found ${tasks.length} task(s):\\n`);\n\n for (const task of tasks) {\n console.log(`ID: ${task.id}`);\n console.log(`Title: ${task.frontmatter.title}`);\n console.log(`Status: ${task.status}`);\n if (task.frontmatter.assignee) {\n console.log(`Assignee: ${task.frontmatter.assignee}`);\n }\n console.log(\"---\");\n }\n } catch (error) {\n console.error(\"Failed to list tasks:\", error instanceof Error ? error.message : error);\n process.exit(1);\n }\n}\n\nexport const listCommand: any = new Command()\n .description(\"List tasks with optional filters.\")\n .option(\"-s, --status <status>\", \"Filter by status (open, in-progress, closed).\")\n .option(\"-a, --assignee <assignee>\", \"Filter by assignee.\")\n .option(\"-t, --task <taskId>\", \"Filter by task ID and include all subtasks (nested).\")\n .action(listAction);\n","import { Command } from \"@cliffy/command\";\nimport { TaskManager } from \"dyson-swarm\";\n\nexport async function getAction(taskId: string) {\n const taskManager = new TaskManager();\n\n try {\n const task = await taskManager.getTask(taskId);\n\n if (!task) {\n console.error(`Task not found: ${taskId}`);\n process.exit(1);\n }\n\n console.log(`ID: ${task.id}`);\n console.log(`Title: ${task.frontmatter.title}`);\n console.log(`Status: ${task.status}`);\n if (task.frontmatter.assignee) {\n console.log(`Assignee: ${task.frontmatter.assignee}`);\n }\n console.log(`\\nDescription:`);\n console.log(task.description);\n } catch (error) {\n console.error(\"Failed to get task:\", error instanceof Error ? error.message : error);\n process.exit(1);\n }\n}\n\nexport const getCommand: any = new Command()\n .name(\"get\")\n .description(\"Get a specific task by ID.\")\n .argument(\"<taskId>\", \"The id of the task to get.\")\n .action(async (_options: any, taskId: string) => getAction(taskId));\n","import { Command } from \"@cliffy/command\";\nimport { TaskManager } from \"dyson-swarm\";\n\nexport async function updateAction(taskId: string, options: any) {\n const taskManager = new TaskManager();\n\n try {\n const updateOptions: any = {};\n\n if (options.title) updateOptions.title = options.title;\n if (options.description) updateOptions.description = options.description;\n if (options.assignee) updateOptions.assignee = options.assignee;\n\n if (Object.keys(updateOptions).length === 0) {\n console.error(\"No updates specified. Use --title, --description, or --assignee.\");\n process.exit(1);\n }\n\n const task = await taskManager.updateTask(taskId, updateOptions);\n\n if (!task) {\n console.error(`Task not found: ${taskId}`);\n process.exit(1);\n }\n\n console.log(`Updated task: ${task.id}`);\n console.log(`Title: ${task.frontmatter.title}`);\n console.log(`Status: ${task.status}`);\n if (task.frontmatter.assignee) {\n console.log(`Assignee: ${task.frontmatter.assignee}`);\n }\n } catch (error) {\n console.error(\"Failed to update task:\", error instanceof Error ? error.message : error);\n process.exit(1);\n }\n}\n\nexport const updateCommand: any = new Command()\n .name(\"update\")\n .description(\"Update a task.\")\n .argument(\"<taskId>\", \"The id of the task to update.\")\n .option(\"-t, --title <title>\", \"New title.\")\n .option(\"-d, --description <description>\", \"New description.\")\n .option(\"-a, --assignee <assignee>\", \"New assignee.\")\n .action(async (options: any, taskId: string) => updateAction(taskId, options));\n","import { Command } from \"@cliffy/command\";\nimport { TaskManager } from \"dyson-swarm\";\n\nexport async function statusAction(taskId: string, status: string) {\n const taskManager = new TaskManager();\n\n if (![\"open\", \"in-progress\", \"closed\"].includes(status)) {\n console.error(\"Invalid status. Must be one of: open, in-progress, closed\");\n process.exit(1);\n }\n\n try {\n const task = await taskManager.changeTaskStatus(taskId, status as \"open\" | \"in-progress\" | \"closed\");\n\n if (!task) {\n console.error(`Task not found: ${taskId}`);\n process.exit(1);\n }\n\n console.log(`Changed status of task ${task.id} to: ${task.status}`);\n console.log(`Title: ${task.frontmatter.title}`);\n } catch (error) {\n console.error(\"Failed to change task status:\", error instanceof Error ? error.message : error);\n process.exit(1);\n }\n}\n\nexport const statusCommand: any = new Command()\n .name(\"status\")\n .description(\"Change the status of a task.\")\n .argument(\"<taskId>\", \"The id of the task to update.\")\n .argument(\"<status>\", \"The new status (open, in-progress, or closed).\")\n .action(async (_options: any, taskId: string, status: string) => statusAction(taskId, status));\n","import { Command } from \"@cliffy/command\";\nimport { TaskManager } from \"dyson-swarm\";\n\nexport async function assignAction(taskId: string, assignee: string) {\n const taskManager = new TaskManager();\n\n try {\n const task = await taskManager.assignTask(taskId, assignee);\n\n if (!task) {\n console.error(`Task not found: ${taskId}`);\n process.exit(1);\n }\n\n console.log(`Assigned task ${task.id} to: ${task.frontmatter.assignee}`);\n console.log(`Title: ${task.frontmatter.title}`);\n console.log(`Status: ${task.status}`);\n } catch (error) {\n console.error(\"Failed to assign task:\", error instanceof Error ? error.message : error);\n process.exit(1);\n }\n}\n\nexport const assignCommand: any = new Command()\n .name(\"assign\")\n .description(\"Assign a task to someone.\")\n .argument(\"<taskId>\", \"The id of the task to add an assignee to.\")\n .argument(\"<assignee>\", \"The assignee to assign the task to.\")\n .action(async (_options: any, taskId: string, assignee: string) => assignAction(taskId, assignee));\n","import { Command } from \"@cliffy/command\";\nimport { TaskManager } from \"dyson-swarm\";\n\nexport async function unassignAction(taskId: string) {\n const taskManager = new TaskManager();\n\n try {\n const task = await taskManager.unassignTask(taskId);\n\n if (!task) {\n console.error(`Task not found: ${taskId}`);\n process.exit(1);\n }\n\n console.log(`Unassigned task: ${task.id}`);\n console.log(`Title: ${task.frontmatter.title}`);\n console.log(`Status: ${task.status}`);\n } catch (error) {\n console.error(\"Failed to unassign task:\", error instanceof Error ? error.message : error);\n process.exit(1);\n }\n}\n\nexport const unassignCommand: any = new Command()\n .name(\"unassign\")\n .description(\"Unassign a task.\")\n .argument(\"<taskId>\", \"The id of the task to unassign.\")\n .action(async (_options: any, taskId: string) => unassignAction(taskId));\n","import { Command } from \"@cliffy/command\";\nimport { TaskManager } from \"dyson-swarm\";\n\nexport async function deleteAction(taskId: string, options: any) {\n const taskManager = new TaskManager();\n\n if (!options.force) {\n console.log(`Are you sure you want to delete task ${taskId}?`);\n console.log(\"Use --force to skip this confirmation.\");\n process.exit(1);\n }\n\n try {\n const deleted = await taskManager.deleteTask(taskId);\n\n if (!deleted) {\n console.error(`Task not found: ${taskId}`);\n process.exit(1);\n }\n\n console.log(`Deleted task: ${taskId}`);\n } catch (error) {\n console.error(\"Failed to delete task:\", error instanceof Error ? error.message : error);\n process.exit(1);\n }\n}\n\nexport const deleteCommand: any = new Command()\n .name(\"delete\")\n .description(\"Delete a task.\")\n .argument(\"<taskId>\", \"The id of the task to delete.\")\n .option(\"-f, --force\", \"Force deletion without confirmation.\")\n .action(async (options: any, taskId: string) => deleteAction(taskId, options));\n"],"mappings":"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","names":["getArgs","Deno","process","Bun","ceil","peq","myers32","t","p","n","m","last","pv","mv","score","j","eq","xv","xh","ph","mh","myersX","h","bmax","b","start","end","i","hin","levenshteinDistance","str1","str2","closestString","givenWord","possibleWords","options","caseSensitive","compareFn","levenshteinDistance","nearestWord","closestStringDistance","each","distance","paramCaseToCamelCase","str","g","getOption","flags","name","flag","isOption","didYouMeanOption","option","options","optionNames","getFlag","didYouMean","didYouMeanType","type","types","message","match","closestString","matchWildCardOptions","matched","matchWildCardOption","parts","parts2","count","i","getDefaultValue","FlagsError","_FlagsError","message","UnknownRequiredOptionError","_UnknownRequiredOptionError","option","options","getFlag","didYouMeanOption","UnknownConflictingOptionError","_UnknownConflictingOptionError","UnknownTypeError","_UnknownTypeError","type","types","didYouMeanType","ValidationError","_ValidationError","DuplicateOptionError","_DuplicateOptionError","name","InvalidOptionError","_InvalidOptionError","UnknownOptionError","_UnknownOptionError","MissingOptionValueError","_MissingOptionValueError","InvalidOptionValueError","_InvalidOptionValueError","expected","value","UnexpectedOptionValueError","OptionNotCombinableError","_OptionNotCombinableError","ConflictingOptionError","_ConflictingOptionError","conflictingOption","DependingOptionError","_DependingOptionError","dependingOption","MissingRequiredOptionError","_MissingRequiredOptionError","UnexpectedRequiredArgumentError","_UnexpectedRequiredArgumentError","arg","UnexpectedArgumentAfterVariadicArgumentError","_UnexpectedArgumentAfterVariadicArgumentError","InvalidTypeError","label","boolean","type","InvalidTypeError","number","type","value","InvalidTypeError","string","value","validateFlags","ctx","opts","options","setDefaultValues","optionNames","validateStandaloneOption","name","option","validateUnknownOption","validateConflictingOptions","validateDependingOptions","validateRequiredValues","validateRequiredOptions","getOption","UnknownOptionError","defaultValue","propName","paramCaseToCamelCase","getDefaultValue","_","opt","OptionNotCombinableError","flag","isset","ConflictingOptionError","DependingOptionError","isArray","i","MissingOptionValueError","optionsValues","MissingRequiredOptionError","flagName","flags","integer","type","value","InvalidTypeError","DefaultTypes","string","number","integer","boolean","parseFlags","argsOrCtx","getArgs","opts","args","ctx","validateOptions","options","parseArgs","validateFlags","parseDottedOptions","opt","flag","getOption","UnknownRequiredOptionError","UnknownConflictingOptionError","optionsMap","inLiteral","argsIndex","parseNext","option","negate","setFlagValue","arg","optionArgsIndex","next","UnknownOptionError","inOptionalArg","UnexpectedRequiredArgumentError","result","increase","hasNext","parsed","nextValue","value","parseValue","InvalidOptionValueError","currentValue","UnexpectedArgumentAfterVariadicArgumentError","propName","parseDefaultType","current","isShort","isLong","InvalidOptionError","splitFlags","equalSignIndex","name","matchWildCardOptions","positiveName","paramCaseToCamelCase","DuplicateOptionError","UnexpectedOptionValueError","previous","MissingOptionValueError","getDefaultValue","key","subKey","index","parts","normalized","flags","val","type","parseType","UnknownTypeError","Deno","noColor","enabled","setColorEnabled","value","getColorEnabled","code","open","close","run","str","bold","str","run","code","dim","italic","red","str","run","code","green","yellow","brightBlue","str","run","code","brightMagenta","ANSI_PATTERN","stripAnsiCode","string","getFlag","name","didYouMean","message","type","types","match","closestString","didYouMeanCommand","command","commands","excludes","commandNames","ARGUMENT_REGEX","ARGUMENT_DETAILS_REGEX","splitArguments","args","parts","typeParts","typeDefinition","parseArgumentsDefinition","argsDefinition","validate","all","argumentDetails","hasOptional","hasVariadic","argDef","UnexpectedArgumentAfterVariadicArgumentError","details","UnexpectedRequiredArgumentError","istVariadicLeft","istVariadicRight","dedent","str","lines","text","indent","line","getDescription","description","short","underscoreToCamelCase","g","CommandError","_CommandError","message","ValidationError","_ValidationError","exitCode","DuplicateOptionNameError","_DuplicateOptionNameError","optionName","commandName","bold","getFlag","MissingCommandNameError","_MissingCommandNameError","CommandError","DuplicateCommandNameError","_DuplicateCommandNameError","name","DuplicateCommandAliasError","_DuplicateCommandAliasError","alias","CommandNotFoundError","_CommandNotFoundError","commands","excluded","didYouMeanCommand","DuplicateTypeError","_DuplicateTypeError","DuplicateCompletionError","_DuplicateCompletionError","DuplicateExampleError","_DuplicateExampleError","DuplicateEnvVarError","_DuplicateEnvVarError","MissingRequiredEnvVarError","_MissingRequiredEnvVarError","ValidationError","envVar","TooManyEnvVarValuesError","_TooManyEnvVarValuesError","UnexpectedOptionalEnvVarValueError","_UnexpectedOptionalEnvVarValueError","UnexpectedVariadicEnvVarValueError","_UnexpectedVariadicEnvVarValueError","DefaultCommandNotFoundError","_DefaultCommandNotFoundError","UnknownCommandError","_UnknownCommandError","ValidationError","name","commands","excluded","didYouMeanCommand","NoArgumentsAllowedError","_NoArgumentsAllowedError","MissingArgumentsError","_MissingArgumentsError","names","MissingArgumentError","_MissingArgumentError","TooManyArgumentsError","_TooManyArgumentsError","args","exit","code","Deno","process","getEnv","name","Deno","process","border","Cell","_Cell","val","value","cell","enable","override","span","direction","Column","_Column","options","opts","width","border","padding","direction","tables","data","lookupWidth","cp","runLengthDecode","t1Offset","t2Offset","width","cache","charWidth","char","codePoint","unicodeWidth","str","ch","a","b","d","r","runLengths","out","i","x","longest","index","rows","maxWidth","cellLengths","row","cell","Cell","line","str","consumeWords","strLength","unicodeWidth","stripAnsiCode","ansiRegexSource","getUnclosedAnsiRuns","text","tokens","groups","_kind","content","_","val","unclosed","token","y","kind","currentSuffix","nextPrefix","consumeWords","length","content","consumed","words","i","word","nextLength","strLength","consumeChars","chars","ansiRegexSource","match","char","Row","_Row","cells","row","cell","Cell","enable","override","direction","TableLayout","table","options","opts","key","hasBodyBorder","hasHeaderBorder","hasBorder","rows","#getRows","columns","row","rowIndex","length","diff","i","padding","width","colIndex","column","minColWidth","maxColWidth","colWidth","longest","header","cell","Cell","newRow","rowSpan","colSpan","span","Row","isHeaderRow","result","isMultiline","prevRow","nextRow","isMultilineRow","noBorder","prevCell","maxLength","o","current","next","strLength","words","consumeWords","breakWord","consumeChars","currentSuffix","nextPrefix","getUnclosedAnsiRuns","fillLength","align","a1","a2","b1","b2","a1Border","a2Border","b1Border","b2Border","hasColSpan","hasRowSpan","a1ColSpan","a2ColSpan","b1ColSpan","b2ColSpan","a1RowSpan","a2RowSpan","b1RowSpan","b2RowSpan","hasAllBorder","Table","_Table","border","rows","table","Row","chars","row","columns","column","Column","index","header","TableLayout","width","override","padding","enable","direction","hasBorder","cell","Cell","inspect","value","colors","Deno","Type","HelpGenerator","_HelpGenerator","cmd","options","areColorsEnabled","getColorEnabled","setColorEnabled","result","usage","rows","bold","brightMagenta","highlightArguments","yellow","Table","meta","name","value","dedent","args","arg","argument","red","getDescription","groups","option","group","flag","brightBlue","commands","command","envVars","envVar","highlightArgumentDetails","examples","example","dim","hints","type","defaultValue","defaultText","Type","inspect","italic","getFlag","possibleValues","label","argsDefinition","types","parseArgumentsDefinition","str","green","BooleanType","Type","type","boolean","StringType","Type","type","string","FileType","StringType","IntegerType","Type","type","integer","NumberType","Type","type","number","SecretType","StringType","checkVersion","cmd","mainCommand","upgradeCommand","isUpgradeCommand","latestVersion","currentVersion","versionHelpText","bold","yellow","command","Command","Command","_Command","flags","desc","opts","nameAndArguments","cmdOrDescription","override","result","splitArguments","name","aliases","MissingCommandNameError","DuplicateCommandNameError","description","cmd","alias","DuplicateCommandAliasError","CommandNotFoundError","version","value","help","options","HelpGenerator","usage","args","descriptions","arg","index","fn","allowEmpty","stopEarly","useRawArgs","handler","DuplicateTypeError","Type","completeHandler","parent","complete","DuplicateCompletionError","parseArgumentsDefinition","option","part","isLong","DuplicateOptionNameError","DuplicateExampleError","envName","DuplicateEnvVarError","details","TooManyEnvVarValuesError","UnexpectedOptionalEnvVarValueError","UnexpectedVariadicEnvVarValueError","getArgs","ctx","preParseGlobals","subCommand","optionName","action","error","isHelpOption","envVars","envVar","helpOption","isVersionOption","StringType","NumberType","IntegerType","BooleanType","FileType","SecretType","checkVersion","long","DefaultCommandNotFoundError","stopOnUnknown","dotted","parseFlags","type","typeSettings","UnknownTypeError","validate","env","parseType","propertyName","underscoreToCamelCase","MissingRequiredEnvVarError","names","status","getEnv","params","hasDefaults","required","expectedArg","MissingArgumentsError","mapArgValue","parsed","defaultValue","mappedValue","MissingArgumentError","parseArgValue","parseArgType","TooManyArgumentsError","UnknownCommandError","NoArgumentsAllowedError","values","ValidationError","red","bold","exit","findFlag","v","getDescription","brightBlue","k","code","hidden","opt","getGlobals","noGlobals","getGlobalOption","commands","getCommands","command","_","getGlobalCommand","getTypes","types","getCompletions","completions","completion","getEnvVars","example","flag","flatHelp","TaskManager","createAction","options","taskManager","task","error","createCommand","Command","TaskManager","listAction","options","taskManager","filter","tasks","task","error","listCommand","Command","TaskManager","getAction","taskId","taskManager","task","error","getCommand","Command","_options","TaskManager","updateAction","taskId","options","taskManager","updateOptions","task","error","updateCommand","Command","TaskManager","statusAction","taskId","status","taskManager","task","error","statusCommand","Command","_options","TaskManager","assignAction","taskId","assignee","taskManager","task","error","assignCommand","Command","_options","TaskManager","unassignAction","taskId","taskManager","task","error","unassignCommand","Command","_options","TaskManager","deleteAction","taskId","options","taskManager","error","deleteCommand","Command","Command","flatHelp","createCommand","listCommand","getCommand","updateCommand","statusCommand","assignCommand","unassignCommand","deleteCommand"]}
|
|
1
|
+
{"version":3,"sources":["../../node_modules/@jsr/cliffy__internal/runtime/get_args.ts","../../node_modules/@jsr/std__text/levenshtein_distance.ts","../../node_modules/@jsr/std__text/closest_string.ts","../../node_modules/@jsr/cliffy__flags/_utils.ts","../../node_modules/@jsr/cliffy__flags/_errors.ts","../../node_modules/@jsr/cliffy__flags/types/boolean.ts","../../node_modules/@jsr/cliffy__flags/types/number.ts","../../node_modules/@jsr/cliffy__flags/types/string.ts","../../node_modules/@jsr/cliffy__flags/_validate_flags.ts","../../node_modules/@jsr/cliffy__flags/types/integer.ts","../../node_modules/@jsr/cliffy__flags/flags.ts","../../node_modules/@jsr/std__fmt/colors.ts","../../node_modules/@cliffy/command/_utils.ts","../../node_modules/@cliffy/command/_errors.ts","../../node_modules/@jsr/cliffy__internal/runtime/exit.ts","../../node_modules/@jsr/cliffy__internal/runtime/get_env.ts","../../node_modules/@jsr/cliffy__table/border.ts","../../node_modules/@jsr/cliffy__table/cell.ts","../../node_modules/@jsr/cliffy__table/column.ts","../../node_modules/@jsr/cliffy__table/unicode_width.ts","../../node_modules/@jsr/cliffy__table/_utils.ts","../../node_modules/@jsr/cliffy__table/consume_words.ts","../../node_modules/@jsr/cliffy__table/row.ts","../../node_modules/@jsr/cliffy__table/_layout.ts","../../node_modules/@jsr/cliffy__table/table.ts","../../node_modules/@jsr/cliffy__internal/runtime/inspect.ts","../../node_modules/@cliffy/command/type.ts","../../node_modules/@cliffy/command/help/_help_generator.ts","../../node_modules/@cliffy/command/types/boolean.ts","../../node_modules/@cliffy/command/types/string.ts","../../node_modules/@cliffy/command/types/file.ts","../../node_modules/@cliffy/command/types/integer.ts","../../node_modules/@cliffy/command/types/number.ts","../../node_modules/@cliffy/command/types/secret.ts","../../node_modules/@cliffy/command/upgrade/_check_version.ts","../../node_modules/@cliffy/command/command.ts","../../node_modules/@cliffy/table/border.ts","../../node_modules/@cliffy/table/cell.ts","../../node_modules/@cliffy/table/column.ts","../../node_modules/@cliffy/table/unicode_width.ts","../../node_modules/@cliffy/table/_utils.ts","../../node_modules/@cliffy/table/consume_words.ts","../../node_modules/@cliffy/table/row.ts","../../node_modules/@cliffy/table/_layout.ts","../../node_modules/@cliffy/table/table.ts","../../node_modules/@cliffy/ansi/colors.ts","../../node_modules/cliffy-flat-help/src/mod.ts","../src/commands/create.ts","../src/commands/list.ts","../src/commands/get.ts","../src/commands/update.ts","../src/commands/status.ts","../src/commands/assign.ts","../src/commands/unassign.ts","../src/commands/delete.ts","../src/index.ts"],"sourcesContent":["// deno-lint-ignore-file no-explicit-any\n\n/**\n * Get script arguments.\n *\n * @internal\n */\nexport function getArgs(): Array<string> {\n // dnt-shim-ignore\n const { Deno, process, Bun } = globalThis as any;\n\n return Deno?.args ?? Bun?.argv.slice(2) ?? process?.argv.slice(2) ?? [];\n}\n","// Copyright 2018-2026 the Deno authors. MIT license.\n// This module is browser compatible.\nconst { ceil } = Math;\n\n// This implements Myers' bit-vector algorithm as described here:\n// https://dl.acm.org/doi/pdf/10.1145/316542.316550\nconst peq = new Uint32Array(0x110000);\n\nfunction myers32(t: string[], p: string[]): number {\n const n = t.length;\n const m = p.length;\n for (let i = 0; i < m; i++) {\n peq[p[i]!.codePointAt(0)!]! |= 1 << i;\n }\n const last = m - 1;\n let pv = -1;\n let mv = 0;\n let score = m;\n for (let j = 0; j < n; j++) {\n const eq = peq[t[j]!.codePointAt(0)!]!;\n const xv = eq | mv;\n const xh = (((eq & pv) + pv) ^ pv) | eq;\n let ph = mv | ~(xh | pv);\n let mh = pv & xh;\n score += ((ph >>> last) & 1) - ((mh >>> last) & 1);\n // Set the horizontal delta in the first row to +1\n // because we are computing the distance between two full strings.\n ph = (ph << 1) | 1;\n mh = mh << 1;\n pv = mh | ~(xv | ph);\n mv = ph & xv;\n }\n for (let i = 0; i < m; i++) {\n peq[p[i]!.codePointAt(0)!] = 0;\n }\n return score;\n}\n\nfunction myersX(t: string[], p: string[]): number {\n const n = t.length;\n const m = p.length;\n // Initialize the horizontal deltas to +1.\n const h = new Int8Array(n).fill(1);\n const bmax = ceil(m / 32) - 1;\n // Process the blocks row by row so that we can use the fixed-size peq array.\n for (let b = 0; b < bmax; b++) {\n const start = b * 32;\n const end = (b + 1) * 32;\n for (let i = start; i < end; i++) {\n peq[p[i]!.codePointAt(0)!]! |= 1 << i;\n }\n let pv = -1;\n let mv = 0;\n for (let j = 0; j < n; j++) {\n const hin = h[j]!;\n let eq = peq[t[j]!.codePointAt(0)!]!;\n const xv = eq | mv;\n eq |= hin >>> 31;\n const xh = (((eq & pv) + pv) ^ pv) | eq;\n let ph = mv | ~(xh | pv);\n let mh = pv & xh;\n h[j] = (ph >>> 31) - (mh >>> 31);\n ph = (ph << 1) | (-hin >>> 31);\n mh = (mh << 1) | (hin >>> 31);\n pv = mh | ~(xv | ph);\n mv = ph & xv;\n }\n for (let i = start; i < end; i++) {\n peq[p[i]!.codePointAt(0)!] = 0;\n }\n }\n const start = bmax * 32;\n for (let i = start; i < m; i++) {\n peq[p[i]!.codePointAt(0)!]! |= 1 << i;\n }\n const last = m - 1;\n let pv = -1;\n let mv = 0;\n let score = m;\n for (let j = 0; j < n; j++) {\n const hin = h[j]!;\n let eq = peq[t[j]!.codePointAt(0)!]!;\n const xv = eq | mv;\n eq |= hin >>> 31;\n const xh = (((eq & pv) + pv) ^ pv) | eq;\n let ph = mv | ~(xh | pv);\n let mh = pv & xh;\n score += ((ph >>> last) & 1) - ((mh >>> last) & 1);\n ph = (ph << 1) | (-hin >>> 31);\n mh = (mh << 1) | (hin >>> 31);\n pv = mh | ~(xv | ph);\n mv = ph & xv;\n }\n for (let i = start; i < m; i++) {\n peq[p[i]!.codePointAt(0)!] = 0;\n }\n return score;\n}\n\n/**\n * Calculates the\n * {@link https://en.wikipedia.org/wiki/Levenshtein_distance | Levenshtein distance}\n * between two strings.\n *\n * > [!NOTE]\n * > The complexity of this function is O(m * n), where m and n are the lengths\n * > of the two strings. It's recommended to limit the length and validate input\n * > if arbitrarily accepting input.\n *\n * @example Usage\n * ```ts\n * import { levenshteinDistance } from \"@std/text/levenshtein-distance\";\n * import { assertEquals } from \"@std/assert\";\n *\n * assertEquals(levenshteinDistance(\"aa\", \"bb\"), 2);\n * ```\n * @param str1 The first string.\n * @param str2 The second string.\n * @returns The Levenshtein distance between the two strings.\n */\nexport function levenshteinDistance(str1: string, str2: string): number {\n let t = [...str1];\n let p = [...str2];\n\n if (t.length < p.length) {\n [p, t] = [t, p];\n }\n if (p.length === 0) {\n return t.length;\n }\n return p.length <= 32 ? myers32(t, p) : myersX(t, p);\n}\n","// Copyright 2018-2026 the Deno authors. MIT license.\n// This module is browser compatible.\nimport { levenshteinDistance } from \"./levenshtein_distance.js\";\n\n/** Options for {@linkcode closestString}. */\nexport interface ClosestStringOptions {\n /**\n * Whether the distance should include case.\n *\n * @default {false}\n */\n caseSensitive?: boolean;\n /**\n * A custom comparison function to use for comparing strings.\n *\n * @param a The first string for comparison.\n * @param b The second string for comparison.\n * @returns The distance between the two strings.\n * @default {levenshteinDistance}\n */\n compareFn?: (a: string, b: string) => number;\n}\n\n/**\n * Finds the most similar string from an array of strings.\n *\n * By default, calculates the distance between words using the\n * {@link https://en.wikipedia.org/wiki/Levenshtein_distance | Levenshtein distance}.\n *\n * @example Usage\n * ```ts\n * import { closestString } from \"@std/text/closest-string\";\n * import { assertEquals } from \"@std/assert\";\n *\n * const possibleWords = [\"length\", \"size\", \"blah\", \"help\"];\n * const suggestion = closestString(\"hep\", possibleWords);\n *\n * assertEquals(suggestion, \"help\");\n * ```\n *\n * @param givenWord The string to measure distance against\n * @param possibleWords The string-array to pick the closest string from\n * @param options The options for the comparison.\n * @returns The closest string\n */\nexport function closestString(\n givenWord: string,\n possibleWords: ReadonlyArray<string>,\n options?: ClosestStringOptions,\n): string {\n if (possibleWords.length === 0) {\n throw new TypeError(\n \"When using closestString(), the possibleWords array must contain at least one word\",\n );\n }\n const { caseSensitive, compareFn = levenshteinDistance } = { ...options };\n\n if (!caseSensitive) {\n givenWord = givenWord.toLowerCase();\n }\n\n let nearestWord = possibleWords[0]!;\n let closestStringDistance = Infinity;\n for (const each of possibleWords) {\n const distance = caseSensitive\n ? compareFn(givenWord, each)\n : compareFn(givenWord, each.toLowerCase());\n if (distance < closestStringDistance) {\n nearestWord = each;\n closestStringDistance = distance;\n }\n }\n return nearestWord;\n}\n","import type { FlagOptions } from \"./types.ts\";\nimport { closestString } from \"@jsr/std__text/closest-string\";\n\n/** Convert param case string to camel case. */\nexport function paramCaseToCamelCase(str: string): string {\n return str.replace(\n /-([a-z])/g,\n (g) => g[1].toUpperCase(),\n );\n}\n\n/**\n * Find option by flag, name or alias.\n *\n * @param flags Source options array.\n * @param name Name of the option.\n */\nexport function getOption<O extends FlagOptions>(\n flags: Array<O>,\n name: string,\n): O | undefined {\n while (name[0] === \"-\") {\n name = name.slice(1);\n }\n\n for (const flag of flags) {\n if (isOption(flag, name)) {\n return flag;\n }\n }\n\n return;\n}\n\nexport function didYouMeanOption(\n option: string,\n options: Array<FlagOptions>,\n): string {\n const optionNames = options\n .map((option) => [option.name, ...(option.aliases ?? [])])\n .flat()\n .map((option) => getFlag(option));\n return didYouMean(\" Did you mean option\", getFlag(option), optionNames);\n}\n\nexport function didYouMeanType(type: string, types: Array<string>): string {\n return didYouMean(\" Did you mean type\", type, types);\n}\n\nexport function didYouMean(\n message: string,\n type: string,\n types: Array<string>,\n): string {\n const match: string | undefined = types.length\n ? closestString(type, types)\n : undefined;\n return match ? `${message} \"${match}\"?` : \"\";\n}\n\nexport function getFlag(name: string) {\n if (name.startsWith(\"-\")) {\n return name;\n }\n if (name.length > 1) {\n return `--${name}`;\n }\n return `-${name}`;\n}\n\n/**\n * Check if option has name or alias.\n *\n * @param option The option to check.\n * @param name The option name or alias.\n */\nfunction isOption(option: FlagOptions, name: string) {\n return option.name === name ||\n (option.aliases && option.aliases.indexOf(name) !== -1);\n}\n\nexport function matchWildCardOptions(\n name: string,\n flags: Array<FlagOptions>,\n): FlagOptions | undefined {\n for (const option of flags) {\n if (option.name.indexOf(\"*\") === -1) {\n continue;\n }\n let matched = matchWildCardOption(name, option);\n if (matched) {\n matched = { ...matched, name };\n flags.push(matched);\n return matched;\n }\n }\n}\n\nfunction matchWildCardOption(\n name: string,\n option: FlagOptions,\n): FlagOptions | false {\n const parts = option.name.split(\".\");\n const parts2 = name.split(\".\");\n if (parts.length !== parts2.length) {\n return false;\n }\n const count = Math.max(parts.length, parts2.length);\n for (let i = 0; i < count; i++) {\n if (parts[i] !== parts2[i] && parts[i] !== \"*\") {\n return false;\n }\n }\n return option;\n}\n\nexport function getDefaultValue(option: FlagOptions): unknown {\n return typeof option.default === \"function\"\n ? option.default()\n : option.default;\n}\n","import { didYouMeanOption, didYouMeanType, getFlag } from \"./_utils.js\";\nimport type { ArgumentValue, FlagOptions } from \"./types.ts\";\n\nexport class FlagsError extends Error {\n constructor(message: string) {\n super(message);\n Object.setPrototypeOf(this, FlagsError.prototype);\n }\n}\n\nexport class UnknownRequiredOptionError extends FlagsError {\n constructor(option: string, options: Array<FlagOptions>) {\n super(\n `Unknown required option \"${getFlag(option)}\".${\n didYouMeanOption(option, options)\n }`,\n );\n Object.setPrototypeOf(this, UnknownRequiredOptionError.prototype);\n }\n}\n\nexport class UnknownConflictingOptionError extends FlagsError {\n constructor(option: string, options: Array<FlagOptions>) {\n super(\n `Unknown conflicting option \"${getFlag(option)}\".${\n didYouMeanOption(option, options)\n }`,\n );\n Object.setPrototypeOf(this, UnknownConflictingOptionError.prototype);\n }\n}\n\nexport class UnknownTypeError extends FlagsError {\n constructor(type: string, types: Array<string>) {\n super(`Unknown type \"${type}\".${didYouMeanType(type, types)}`);\n Object.setPrototypeOf(this, UnknownTypeError.prototype);\n }\n}\n\n/* Validation errors. */\n\n/**\n * A validation error is thrown when the command is wrongly used by the user.\n * For example: If the user passes some invalid options or arguments to the\n * command.\n */\nexport class ValidationError extends FlagsError {\n constructor(message: string) {\n super(message);\n Object.setPrototypeOf(this, ValidationError.prototype);\n }\n}\n\nexport class DuplicateOptionError extends ValidationError {\n constructor(name: string) {\n super(\n `Option \"${\n getFlag(name).replace(/^--no-/, \"--\")\n }\" can only occur once, but was found several times.`,\n );\n Object.setPrototypeOf(this, DuplicateOptionError.prototype);\n }\n}\n\nexport class InvalidOptionError extends ValidationError {\n constructor(option: string, options: Array<FlagOptions>) {\n super(\n `Invalid option \"${getFlag(option)}\".${\n didYouMeanOption(option, options)\n }`,\n );\n Object.setPrototypeOf(this, InvalidOptionError.prototype);\n }\n}\n\nexport class UnknownOptionError extends ValidationError {\n constructor(option: string, options: Array<FlagOptions>) {\n super(\n `Unknown option \"${getFlag(option)}\".${\n didYouMeanOption(option, options)\n }`,\n );\n Object.setPrototypeOf(this, UnknownOptionError.prototype);\n }\n}\n\nexport class MissingOptionValueError extends ValidationError {\n constructor(option: string) {\n super(`Missing value for option \"${getFlag(option)}\".`);\n Object.setPrototypeOf(this, MissingOptionValueError.prototype);\n }\n}\n\nexport class InvalidOptionValueError extends ValidationError {\n constructor(option: string, expected: string, value: string) {\n super(\n `Option \"${\n getFlag(option)\n }\" must be of type \"${expected}\", but got \"${value}\".`,\n );\n Object.setPrototypeOf(this, InvalidOptionValueError.prototype);\n }\n}\n\nexport class UnexpectedOptionValueError extends ValidationError {\n constructor(option: string, value: string) {\n super(\n `Option \"${getFlag(option)}\" doesn't take a value, but got \"${value}\".`,\n );\n Object.setPrototypeOf(this, InvalidOptionValueError.prototype);\n }\n}\n\nexport class OptionNotCombinableError extends ValidationError {\n constructor(option: string) {\n super(`Option \"${getFlag(option)}\" cannot be combined with other options.`);\n Object.setPrototypeOf(this, OptionNotCombinableError.prototype);\n }\n}\n\nexport class ConflictingOptionError extends ValidationError {\n constructor(option: string, conflictingOption: string) {\n super(\n `Option \"${getFlag(option)}\" conflicts with option \"${\n getFlag(conflictingOption)\n }\".`,\n );\n Object.setPrototypeOf(this, ConflictingOptionError.prototype);\n }\n}\n\nexport class DependingOptionError extends ValidationError {\n constructor(option: string, dependingOption: string) {\n super(\n `Option \"${getFlag(option)}\" depends on option \"${\n getFlag(dependingOption)\n }\".`,\n );\n Object.setPrototypeOf(this, DependingOptionError.prototype);\n }\n}\n\nexport class MissingRequiredOptionError extends ValidationError {\n constructor(option: string) {\n super(`Missing required option \"${getFlag(option)}\".`);\n Object.setPrototypeOf(this, MissingRequiredOptionError.prototype);\n }\n}\n\nexport class UnexpectedRequiredArgumentError extends ValidationError {\n constructor(arg: string) {\n super(\n `An required argument cannot follow an optional argument, but \"${arg}\" is defined as required.`,\n );\n Object.setPrototypeOf(\n this,\n UnexpectedRequiredArgumentError.prototype,\n );\n }\n}\n\nexport class UnexpectedArgumentAfterVariadicArgumentError\n extends ValidationError {\n constructor(arg: string) {\n super(`An argument cannot follow an variadic argument, but got \"${arg}\".`);\n Object.setPrototypeOf(\n this,\n UnexpectedArgumentAfterVariadicArgumentError.prototype,\n );\n }\n}\n\nexport class InvalidTypeError extends ValidationError {\n constructor(\n { label, name, value, type }: ArgumentValue,\n expected?: Array<string | number | boolean>,\n ) {\n super(\n `${label} \"${name}\" must be of type \"${type}\", but got \"${value}\".` + (\n expected\n ? ` Expected values: ${\n expected.map((value) => `\"${value}\"`).join(\", \")\n }`\n : \"\"\n ),\n );\n Object.setPrototypeOf(this, MissingOptionValueError.prototype);\n }\n}\n","import type { ArgumentValue, TypeHandler } from \"../types.ts\";\nimport { InvalidTypeError } from \"../_errors.js\";\n\n/** Boolean type handler. Excepts `true`, `false`, `1`, `0` */\nexport const boolean: TypeHandler<boolean> = (\n type: ArgumentValue,\n): boolean => {\n if (~[\"1\", \"true\"].indexOf(type.value)) {\n return true;\n }\n\n if (~[\"0\", \"false\"].indexOf(type.value)) {\n return false;\n }\n\n throw new InvalidTypeError(type, [\"true\", \"false\", \"1\", \"0\"]);\n};\n","import type { ArgumentValue, TypeHandler } from \"../types.ts\";\nimport { InvalidTypeError } from \"../_errors.js\";\n\n/** Number type handler. Excepts any numeric value. */\nexport const number: TypeHandler<number> = (type: ArgumentValue): number => {\n const value = Number(type.value);\n if (Number.isFinite(value)) {\n return value;\n }\n\n throw new InvalidTypeError(type);\n};\n","import type { ArgumentValue, TypeHandler } from \"../types.ts\";\n\n/** String type handler. Excepts any value. */\nexport const string: TypeHandler<string> = (\n { value }: ArgumentValue,\n): string => {\n return value;\n};\n","import { getDefaultValue, getOption, paramCaseToCamelCase } from \"./_utils.js\";\nimport {\n ConflictingOptionError,\n DependingOptionError,\n MissingOptionValueError,\n MissingRequiredOptionError,\n OptionNotCombinableError,\n UnknownOptionError,\n} from \"./_errors.js\";\nimport type { ParseFlagsContext, ParseFlagsOptions } from \"./types.ts\";\nimport type { ArgumentOptions, FlagOptions } from \"./types.ts\";\n\n/**\n * Flags post validation. Validations that are not already done by the parser.\n *\n * @param ctx Parse context.\n * @param opts Parse options.\n * @param options Option name mappings: propertyName -> option\n */\nexport function validateFlags<TOptions extends FlagOptions = FlagOptions>(\n ctx: ParseFlagsContext<Record<string, unknown>>,\n opts: ParseFlagsOptions<TOptions>,\n options: Map<string, FlagOptions> = new Map(),\n): void {\n if (!opts.flags) {\n return;\n }\n setDefaultValues(ctx, opts);\n\n const optionNames = Object.keys(ctx.flags);\n if (!optionNames.length && opts.allowEmpty) {\n return;\n }\n\n if (ctx.standalone) {\n validateStandaloneOption(\n ctx,\n options,\n optionNames,\n );\n return;\n }\n\n for (const [name, option] of options) {\n validateUnknownOption(option, opts);\n validateConflictingOptions(ctx, option);\n validateDependingOptions(ctx, option, opts);\n validateRequiredValues(ctx, option, name);\n }\n\n validateRequiredOptions(ctx, options, opts);\n}\n\nfunction validateUnknownOption<TOptions extends FlagOptions = FlagOptions>(\n option: FlagOptions,\n opts: ParseFlagsOptions<TOptions>,\n) {\n if (!getOption(opts.flags ?? [], option.name)) {\n throw new UnknownOptionError(option.name, opts.flags ?? []);\n }\n}\n\n/**\n * Adds all default values to ctx.flags and returns a boolean object map with\n * only the default option names `{ [OptionName: string]: boolean }`.\n */\nfunction setDefaultValues<TOptions extends FlagOptions = FlagOptions>(\n ctx: ParseFlagsContext<Record<string, unknown>>,\n opts: ParseFlagsOptions<TOptions>,\n) {\n if (!opts.flags?.length) {\n return;\n }\n\n // Set default values\n for (const option of opts.flags) {\n let name: string | undefined;\n let defaultValue: unknown = undefined;\n\n // if --no-[flag] is present set --[flag] default value to true\n if (option.name.startsWith(\"no-\")) {\n const propName = option.name.replace(/^no-/, \"\");\n if (typeof ctx.flags[propName] !== \"undefined\") {\n continue;\n }\n const positiveOption = getOption(opts.flags, propName);\n if (positiveOption) {\n continue;\n }\n name = paramCaseToCamelCase(propName);\n defaultValue = true;\n }\n\n if (!name) {\n name = paramCaseToCamelCase(option.name);\n }\n\n // TODO: remove ignoreDefaults if flags module has support for environment variables\n const hasDefaultValue: boolean = (!opts.ignoreDefaults ||\n typeof opts.ignoreDefaults[name] === \"undefined\") &&\n typeof ctx.flags[name] === \"undefined\" && (\n typeof option.default !== \"undefined\" ||\n typeof defaultValue !== \"undefined\"\n );\n\n if (hasDefaultValue) {\n ctx.flags[name] = getDefaultValue(option) ?? defaultValue;\n ctx.defaults[option.name] = true;\n if (typeof option.value === \"function\") {\n ctx.flags[name] = option.value(ctx.flags[name]);\n }\n }\n }\n}\n\nfunction validateStandaloneOption(\n ctx: ParseFlagsContext,\n options: Map<string, FlagOptions>,\n optionNames: Array<string>,\n): void {\n if (!ctx.standalone || optionNames.length === 1) {\n return;\n }\n\n // Don't throw an error if all values are coming from the default option.\n for (const [_, opt] of options) {\n if (!ctx.defaults[opt.name] && opt !== ctx.standalone) {\n throw new OptionNotCombinableError(ctx.standalone.name);\n }\n }\n}\n\nfunction validateConflictingOptions(\n ctx: ParseFlagsContext<Record<string, unknown>>,\n option: FlagOptions,\n): void {\n if (!option.conflicts?.length) {\n return;\n }\n for (const flag of option.conflicts) {\n if (isset(flag, ctx.flags)) {\n throw new ConflictingOptionError(option.name, flag);\n }\n }\n}\n\nfunction validateDependingOptions<TOptions extends FlagOptions = FlagOptions>(\n ctx: ParseFlagsContext<Record<string, unknown>>,\n option: FlagOptions,\n opts: ParseFlagsOptions<TOptions>,\n): void {\n if (!option.depends) {\n return;\n }\n for (const flag of option.depends) {\n // Don't throw an error if the value is coming from the default option.\n if (\n !isset(flag, ctx.flags) && !ctx.defaults[option.name] &&\n // TODO: remove ignoreDefaults if flags module has support for environment variables\n (!opts.ignoreDefaults || typeof opts.ignoreDefaults[flag] === \"undefined\")\n ) {\n throw new DependingOptionError(option.name, flag);\n }\n }\n}\n\nfunction validateRequiredValues(\n ctx: ParseFlagsContext<Record<string, unknown>>,\n option: FlagOptions,\n name: string,\n): void {\n if (!option.args) {\n return;\n }\n const isArray = option.args.length > 1;\n\n for (let i = 0; i < option.args.length; i++) {\n const arg: ArgumentOptions = option.args[i];\n if (arg.optional) {\n continue;\n }\n const hasValue = isArray\n ? typeof (ctx.flags[name] as Array<unknown>)[i] !== \"undefined\"\n : typeof ctx.flags[name] !== \"undefined\";\n\n if (!hasValue) {\n throw new MissingOptionValueError(option.name);\n }\n }\n}\n\nfunction validateRequiredOptions<TOptions extends FlagOptions = FlagOptions>(\n ctx: ParseFlagsContext<Record<string, unknown>>,\n options: Map<string, FlagOptions>,\n opts: ParseFlagsOptions<TOptions>,\n): void {\n if (!opts.flags?.length) {\n return;\n }\n const optionsValues = [...options.values()];\n\n for (const option of opts.flags) {\n if (!option.required || paramCaseToCamelCase(option.name) in ctx.flags) {\n continue;\n }\n const conflicts = option.conflicts ?? [];\n const hasConflict = conflicts.find((flag: string) => !!ctx.flags[flag]);\n const hasConflicts = hasConflict ||\n optionsValues.find((opt) =>\n opt.conflicts?.find((flag: string) => flag === option.name)\n );\n\n if (hasConflicts) {\n continue;\n }\n throw new MissingRequiredOptionError(option.name);\n }\n}\n\n/**\n * Check if value exists for flag.\n * @param flagName Flag name.\n * @param flags Parsed values.\n */\nfunction isset(flagName: string, flags: Record<string, unknown>): boolean {\n const name = paramCaseToCamelCase(flagName);\n // return typeof values[ name ] !== 'undefined' && values[ name ] !== false;\n return typeof flags[name] !== \"undefined\";\n}\n","import type { ArgumentValue, TypeHandler } from \"../types.ts\";\nimport { InvalidTypeError } from \"../_errors.js\";\n\n/** Integer type handler. Excepts any integer value. */\nexport const integer: TypeHandler<number> = (type: ArgumentValue): number => {\n const value = Number(type.value);\n if (Number.isInteger(value)) {\n return value;\n }\n\n throw new InvalidTypeError(type);\n};\n","import { getArgs } from \"@jsr/cliffy__internal/runtime/get-args\";\nimport {\n getDefaultValue,\n getOption,\n matchWildCardOptions,\n paramCaseToCamelCase,\n} from \"./_utils.js\";\nimport {\n DuplicateOptionError,\n InvalidOptionError,\n InvalidOptionValueError,\n MissingOptionValueError,\n UnexpectedArgumentAfterVariadicArgumentError,\n UnexpectedOptionValueError,\n UnexpectedRequiredArgumentError,\n UnknownConflictingOptionError,\n UnknownOptionError,\n UnknownRequiredOptionError,\n UnknownTypeError,\n} from \"./_errors.js\";\nimport type {\n ArgumentOptions,\n ArgumentType,\n FlagOptions,\n ParseFlagsContext,\n ParseFlagsOptions,\n TypeHandler,\n} from \"./types.ts\";\nimport { boolean } from \"./types/boolean.js\";\nimport { number } from \"./types/number.js\";\nimport { string } from \"./types/string.js\";\nimport { validateFlags } from \"./_validate_flags.js\";\nimport { integer } from \"./types/integer.js\";\n\nconst DefaultTypes: Record<ArgumentType, TypeHandler> = {\n string,\n number,\n integer,\n boolean,\n};\n\n/**\n * Command-line arguments parser with built-in validations.\n *\n * The `parseFlags` method takes as its first argument the arguments to be parsed,\n * usually `Deno.args`, or a {@linkcode ParseFlagsContext}. As the second\n * argument you can define {@linkcode ParseFlagsOptions}.\n *\n * ### Basic usage\n *\n * If `parseFlags` is called without defining specific flags with the options\n * object, all arguments are parsed and added to the flags object returned by the\n * `parseFlags` method. All non-options arguments are added to the `unknown` array\n * and all flags specified after the double dash (`--`) are added to the `literal`\n * array.\n *\n * @example Parse arguments without validation\n *\n * ```typescript\n * import { parseFlags } from \"https://deno.land/x/cliffy/flags/mod.ts\";\n *\n * console.log(parseFlags(Deno.args));\n * ```\n *\n * ```console\n * $ deno run https://deno.land/x/cliffy/examples/flags/flags.ts -a foo -b bar\n * {\n * flags: { a: \"foo\", b: \"bar\" },\n * literal: [],\n * unknown: [],\n * stopEarly: false,\n * stopOnUnknown: false\n * }\n *\n * $ deno run https://deno.land/x/cliffy/examples/flags/flags.ts \\\n * -x 3 \\\n * -y.z -n5 \\\n * -abc \\\n * --beep=boop \\\n * foo bar baz \\\n * --deno.land \\\n * --deno.com -- --cliffy\n * {\n * flags: {\n * x: \"3\",\n * y: { z: true },\n * n: \"5\",\n * a: true,\n * b: true,\n * c: true,\n * beep: \"boop\",\n * deno: { land: true, com: true }\n * },\n * literal: [ \"--cliffy\" ],\n * unknown: [ \"foo\", \"bar\", \"baz\" ],\n * stopEarly: false,\n * stopOnUnknown: false\n * }\n * ```\n *\n * ### Define flags\n *\n * You can specify flags with the options object. For all unknown or invalid flags\n * an `ValidationError` is thrown. Read more about error handling\n * [here](./error_handling.md). A list of all available flag options can be found\n * [here](./flag_options.md).\n *\n * @example Parse flags with validation\n *\n * ```typescript\n * import { parseFlags } from \"https://deno.land/x/cliffy/flags/mod.ts\";\n *\n * const { flags } = parseFlags(Deno.args, {\n * flags: [{\n * name: \"help\",\n * aliases: [\"h\"],\n * standalone: true,\n * }, {\n * name: \"verbose\",\n * aliases: [\"v\"],\n * collect: true,\n * value: (val: boolean, previous = 0) => val ? previous + 1 : 0,\n * }, {\n * name: \"file\",\n * aliases: [\"f\"],\n * type: \"string\",\n * }],\n * });\n *\n * console.log(flags);\n * ```\n *\n * ```console\n * $ deno run https://deno.land/x/cliffy/examples/flags/options.ts -vvv -f ./example.ts\n * { verbose: 3, file: \"./example.ts\" }\n * ```\n *\n * ### Parse context\n *\n * The `parseFlags` method accepts also a parse context as first argument. The\n * context can either be a manually created object or the result of a previously\n * called `parseFlags` method.\n *\n * This can be used to parse command line flags in multiple steps, for example,\n * when parsing options that precede a subcommand.\n *\n * @example Pre-parsing global options\n *\n * ```ts\n * import { parseFlags } from \"https://deno.land/x/cliffy/flags/mod.ts\";\n *\n * const globalFlags = [{\n * name: \"foo-global\",\n * alias: [\"g\"],\n * collect: true,\n * }];\n *\n * const flags = [{\n * name: \"foo\",\n * alias: [\"f\"],\n * collect: true,\n * }];\n *\n * const args = [\"--foo-global\", \"cmd1\", \"--foo-global\", \"--foo\", \"arg1\", \"--foo\"];\n *\n * // Parse main command args (all flags until the first unknown argument).\n * const ctx = parseFlags(args, {\n * flags: globalFlags,\n * stopEarly: true, // Stop on first non option argument.\n * stopOnUnknown: true, // Stop on first option argument.\n * dotted: false, // Don't convert dotted option keys to nested objects.\n * });\n *\n * // Shift sub-command from arguments.\n * const subCommand = ctx.unknown.shift();\n *\n * // Parse all sub command args.\n * parseFlags(ctx, {\n * flags: [\n * ...globalFlags,\n * ...flags,\n * ],\n * });\n *\n * console.log(\"sub-command:\", subCommand); // -> cmd1\n * console.log(\"options:\", ctx.flags); // -> { fooGlobal: [ true, true ], foo: [ true, true ] }\n * console.log(\"arguments:\", ctx.unknown); // -> [ \"arg1\" ]\n * ```\n *\n * @param argsOrCtx Command line arguments e.g: `Deno.args` or parse context.\n * @param opts Parse options.\n */\nexport function parseFlags<\n TFlags extends Record<string, unknown>,\n TFlagOptions extends FlagOptions,\n TFlagsResult extends ParseFlagsContext,\n>(\n argsOrCtx: string[] | TFlagsResult = getArgs(),\n opts: ParseFlagsOptions<TFlagOptions> = {},\n): TFlagsResult & ParseFlagsContext<TFlags, TFlagOptions> {\n let args: Array<string>;\n let ctx: ParseFlagsContext<Record<string, unknown>>;\n\n if (Array.isArray(argsOrCtx)) {\n ctx = {} as ParseFlagsContext<Record<string, unknown>>;\n args = argsOrCtx;\n } else {\n ctx = argsOrCtx;\n args = argsOrCtx.unknown;\n argsOrCtx.unknown = [];\n }\n args = args.slice();\n\n ctx.flags ??= {};\n ctx.literal ??= [];\n ctx.unknown ??= [];\n ctx.stopEarly = false;\n ctx.stopOnUnknown = false;\n ctx.defaults ??= {};\n\n opts.dotted ??= true;\n\n validateOptions(opts);\n const options = parseArgs(ctx, args, opts);\n validateFlags(ctx, opts, options);\n\n if (opts.dotted) {\n parseDottedOptions(ctx);\n }\n\n return ctx as TFlagsResult & ParseFlagsContext<TFlags, TFlagOptions>;\n}\n\nfunction validateOptions<TFlagOptions extends FlagOptions>(\n opts: ParseFlagsOptions<TFlagOptions>,\n) {\n opts.flags?.forEach((opt) => {\n opt.depends?.forEach((flag) => {\n if (!opts.flags || !getOption(opts.flags, flag)) {\n throw new UnknownRequiredOptionError(flag, opts.flags ?? []);\n }\n });\n opt.conflicts?.forEach((flag) => {\n if (!opts.flags || !getOption(opts.flags, flag)) {\n throw new UnknownConflictingOptionError(flag, opts.flags ?? []);\n }\n });\n });\n}\n\nfunction parseArgs<TFlagOptions extends FlagOptions>(\n ctx: ParseFlagsContext<Record<string, unknown>>,\n args: Array<string>,\n opts: ParseFlagsOptions<TFlagOptions>,\n): Map<string, FlagOptions> {\n /** Option name mapping: propertyName -> option.name */\n const optionsMap: Map<string, FlagOptions> = new Map();\n let inLiteral = false;\n\n for (\n let argsIndex = 0;\n argsIndex < args.length;\n argsIndex++\n ) {\n let option: FlagOptions | undefined;\n let current: string = args[argsIndex];\n let currentValue: string | undefined;\n let negate = false;\n\n // literal args after --\n if (inLiteral) {\n ctx.literal.push(current);\n continue;\n } else if (current === \"--\") {\n inLiteral = true;\n continue;\n } else if (ctx.stopEarly || ctx.stopOnUnknown) {\n ctx.unknown.push(current);\n continue;\n }\n\n const isFlag = current.length > 1 && current[0] === \"-\";\n\n if (!isFlag) {\n if (opts.stopEarly) {\n ctx.stopEarly = true;\n }\n ctx.unknown.push(current);\n continue;\n }\n const isShort = current[1] !== \"-\";\n const isLong = isShort ? false : current.length > 3 && current[2] !== \"-\";\n\n if (!isShort && !isLong) {\n throw new InvalidOptionError(current, opts.flags ?? []);\n }\n\n // normalize short flags: -abc => -a -b -c\n if (isShort && current.length > 2 && current[2] !== \".\") {\n args.splice(argsIndex, 1, ...splitFlags(current));\n current = args[argsIndex];\n } else if (isLong && current.startsWith(\"--no-\")) {\n negate = true;\n }\n\n // split value: --foo=\"bar=baz\" => --foo bar=baz\n const equalSignIndex = current.indexOf(\"=\");\n if (equalSignIndex !== -1) {\n currentValue = current.slice(equalSignIndex + 1) || undefined;\n current = current.slice(0, equalSignIndex);\n }\n\n if (opts.flags) {\n option = getOption(opts.flags, current);\n\n if (!option) {\n const name = current.replace(/^-+/, \"\");\n option = matchWildCardOptions(name, opts.flags);\n\n if (!option) {\n if (opts.stopOnUnknown) {\n ctx.stopOnUnknown = true;\n ctx.unknown.push(args[argsIndex]);\n continue;\n }\n throw new UnknownOptionError(current, opts.flags);\n }\n }\n } else {\n option = {\n name: current.replace(/^-+/, \"\"),\n optionalValue: true,\n type: \"string\",\n };\n }\n\n if (option.standalone) {\n ctx.standalone = option;\n }\n\n const positiveName: string = negate\n ? option.name.replace(/^no-?/, \"\")\n : option.name;\n const propName: string = paramCaseToCamelCase(positiveName);\n\n if (typeof ctx.flags[propName] !== \"undefined\") {\n if (!opts.flags?.length) {\n option.collect = true;\n } else if (!option.collect && !ctx.defaults[option.name]) {\n throw new DuplicateOptionError(current);\n }\n }\n\n if (option.type && !option.args?.length) {\n option.args = [{\n type: option.type,\n optional: option.optionalValue,\n variadic: option.variadic,\n list: option.list,\n separator: option.separator,\n }];\n }\n\n if (\n opts.flags?.length && !option.args?.length &&\n typeof currentValue !== \"undefined\"\n ) {\n throw new UnexpectedOptionValueError(option.name, currentValue);\n }\n\n let optionArgsIndex = 0;\n let inOptionalArg = false;\n const next = () => currentValue ?? args[argsIndex + 1];\n const previous = ctx.flags[propName];\n\n parseNext(option);\n\n if (typeof ctx.flags[propName] === \"undefined\") {\n if (option.args?.length && !option.args?.[optionArgsIndex].optional) {\n throw new MissingOptionValueError(option.name);\n } else if (\n typeof option.default !== \"undefined\" &&\n (option.type || option.value || option.args?.length)\n ) {\n ctx.flags[propName] = getDefaultValue(option);\n } else {\n setFlagValue(true);\n }\n }\n\n if (option.value) {\n const value = option.value(ctx.flags[propName], previous);\n setFlagValue(value);\n } else if (option.collect) {\n const value: unknown[] = typeof previous !== \"undefined\"\n ? (Array.isArray(previous) ? previous : [previous])\n : [];\n\n value.push(ctx.flags[propName]);\n setFlagValue(value);\n }\n\n optionsMap.set(propName, option);\n\n opts.option?.(option as TFlagOptions, ctx.flags[propName]);\n\n /** Parse next argument for current option. */\n // deno-lint-ignore no-inner-declarations\n function parseNext(option: FlagOptions): void {\n if (negate) {\n setFlagValue(false);\n return;\n } else if (!option.args?.length) {\n setFlagValue(undefined);\n return;\n }\n const arg: ArgumentOptions | undefined = option.args[optionArgsIndex];\n\n if (!arg) {\n const flag = next();\n throw new UnknownOptionError(flag, opts.flags ?? []);\n }\n\n if (!arg.type) {\n arg.type = \"boolean\";\n }\n\n // make boolean values optional by default\n if (\n !option.args?.length &&\n arg.type === \"boolean\" &&\n arg.optional === undefined\n ) {\n arg.optional = true;\n }\n\n if (arg.optional) {\n inOptionalArg = true;\n } else if (inOptionalArg) {\n throw new UnexpectedRequiredArgumentError(option.name);\n }\n\n let result: unknown;\n let increase = false;\n\n if (arg.list && hasNext(arg)) {\n const parsed: unknown[] = next()\n .split(arg.separator || \",\")\n .map((nextValue: string) => {\n const value = parseValue(option, arg, nextValue);\n if (typeof value === \"undefined\") {\n throw new InvalidOptionValueError(\n option.name,\n arg.type ?? \"?\",\n nextValue,\n );\n }\n return value;\n });\n\n if (parsed?.length) {\n result = parsed;\n }\n } else {\n if (hasNext(arg)) {\n result = parseValue(option, arg, next());\n } else if (arg.optional && arg.type === \"boolean\") {\n result = true;\n }\n }\n\n if (increase && typeof currentValue === \"undefined\") {\n argsIndex++;\n if (!arg.variadic) {\n optionArgsIndex++;\n } else if (option.args[optionArgsIndex + 1]) {\n throw new UnexpectedArgumentAfterVariadicArgumentError(next());\n }\n }\n\n if (\n typeof result !== \"undefined\" &&\n (option.args.length > 1 || arg.variadic)\n ) {\n if (!ctx.flags[propName]) {\n setFlagValue([]);\n }\n\n (ctx.flags[propName] as Array<unknown>).push(result);\n\n if (hasNext(arg)) {\n parseNext(option);\n }\n } else {\n setFlagValue(result);\n }\n\n /** Check if current option should have an argument. */\n function hasNext(arg: ArgumentOptions): boolean {\n if (!option.args?.length) {\n return false;\n }\n const nextValue = currentValue ?? args[argsIndex + 1];\n if (!nextValue) {\n return false;\n }\n if (option.args.length > 1 && optionArgsIndex >= option.args.length) {\n return false;\n }\n if (!arg.optional) {\n return true;\n }\n // require optional values to be called with an equal sign: foo=bar\n if (\n option.equalsSign && arg.optional && !arg.variadic &&\n typeof currentValue === \"undefined\"\n ) {\n return false;\n }\n if (arg.optional || arg.variadic) {\n return nextValue[0] !== \"-\" ||\n typeof currentValue !== \"undefined\" ||\n (arg.type === \"number\" && !isNaN(Number(nextValue)));\n }\n\n return false;\n }\n\n /** Parse argument value. */\n function parseValue(\n option: FlagOptions,\n arg: ArgumentOptions,\n value: string,\n ): unknown {\n const result: unknown = opts.parse\n ? opts.parse({\n label: \"Option\",\n type: arg.type || \"string\",\n name: `--${option.name}`,\n value,\n })\n : parseDefaultType(option, arg, value);\n\n if (typeof result !== \"undefined\") {\n increase = true;\n }\n\n return result;\n }\n }\n\n // deno-lint-ignore no-inner-declarations\n function setFlagValue(value: unknown) {\n ctx.flags[propName] = value;\n if (ctx.defaults[propName]) {\n delete ctx.defaults[propName];\n }\n }\n }\n\n return optionsMap;\n}\n\nfunction parseDottedOptions(ctx: ParseFlagsContext): void {\n // convert dotted option keys into nested objects\n ctx.flags = Object.keys(ctx.flags).reduce(\n (result: Record<string, unknown>, key: string) => {\n if (~key.indexOf(\".\")) {\n key.split(\".\").reduce(\n (\n // deno-lint-ignore no-explicit-any\n result: Record<string, any>,\n subKey: string,\n index: number,\n parts: string[],\n ) => {\n if (index === parts.length - 1) {\n result[subKey] = ctx.flags[key];\n } else {\n result[subKey] = result[subKey] ?? {};\n }\n return result[subKey];\n },\n result,\n );\n } else {\n result[key] = ctx.flags[key];\n }\n return result;\n },\n {},\n );\n}\n\nfunction splitFlags(flag: string): Array<string> {\n flag = flag.slice(1);\n const normalized: Array<string> = [];\n const index = flag.indexOf(\"=\");\n const flags = (index !== -1 ? flag.slice(0, index) : flag).split(\"\");\n\n if (isNaN(Number(flag[flag.length - 1]))) {\n flags.forEach((val) => normalized.push(`-${val}`));\n } else {\n normalized.push(`-${flags.shift()}`);\n if (flags.length) {\n normalized.push(flags.join(\"\"));\n }\n }\n\n if (index !== -1) {\n normalized[normalized.length - 1] += flag.slice(index);\n }\n\n return normalized;\n}\n\nfunction parseDefaultType(\n option: FlagOptions,\n arg: ArgumentOptions,\n value: string,\n): unknown {\n const type: ArgumentType = arg.type as ArgumentType || \"string\";\n const parseType = DefaultTypes[type];\n\n if (!parseType) {\n throw new UnknownTypeError(type, Object.keys(DefaultTypes));\n }\n\n return parseType({\n label: \"Option\",\n type,\n name: `--${option.name}`,\n value,\n });\n}\n","// Copyright 2018-2026 the Deno authors. MIT license.\n// This module is browser compatible.\n// A module to print ANSI terminal colors. Inspired by chalk, kleur, and colors\n// on npm.\n\n/**\n * String formatters and utilities for dealing with ANSI color codes.\n *\n * > [!IMPORTANT]\n * > If printing directly to the console, it's recommended to style console\n * > output using CSS (guide\n * > {@linkcode https://developer.mozilla.org/en-US/docs/Web/API/console#styling_console_output | here}).\n *\n * This module supports `NO_COLOR` environmental variable disabling any coloring\n * if `NO_COLOR` is set.\n *\n * ```ts no-assert\n * import {\n * bgBlue,\n * bgRgb24,\n * bgRgb8,\n * bold,\n * italic,\n * red,\n * rgb24,\n * rgb8,\n * } from \"@std/fmt/colors\";\n *\n * console.log(bgBlue(italic(red(bold(\"Hello, World!\")))));\n *\n * // also supports 8bit colors\n *\n * console.log(rgb8(\"Hello, World!\", 42));\n *\n * console.log(bgRgb8(\"Hello, World!\", 42));\n *\n * // and 24bit rgb\n *\n * console.log(rgb24(\"Hello, World!\", {\n * r: 41,\n * g: 42,\n * b: 43,\n * }));\n *\n * console.log(bgRgb24(\"Hello, World!\", {\n * r: 41,\n * g: 42,\n * b: 43,\n * }));\n * ```\n *\n * @module\n */\n\n// deno-lint-ignore no-explicit-any\nconst { Deno } = globalThis as any;\nconst noColor = typeof Deno?.noColor === \"boolean\"\n ? Deno.noColor as boolean\n : false;\n\ninterface Code {\n open: string;\n close: string;\n regexp: RegExp;\n}\n\n/** RGB 8-bits per channel. Each in range `0->255` or `0x00->0xff` */\nexport interface Rgb {\n /** Red component value */\n r: number;\n /** Green component value */\n g: number;\n /** Blue component value */\n b: number;\n}\n\nlet enabled = !noColor;\n\n/**\n * Enable or disable text color when styling.\n *\n * `@std/fmt/colors` automatically detects NO_COLOR environmental variable\n * and disables text color. Use this API only when the automatic detection\n * doesn't work.\n *\n * @example Usage\n * ```ts no-assert\n * import { setColorEnabled } from \"@std/fmt/colors\";\n *\n * // Disable text color\n * setColorEnabled(false);\n *\n * // Enable text color\n * setColorEnabled(true);\n * ```\n *\n * @param value The boolean value to enable or disable text color\n */\nexport function setColorEnabled(value: boolean) {\n if (Deno?.noColor) {\n return;\n }\n\n enabled = value;\n}\n\n/**\n * Get whether text color change is enabled or disabled.\n *\n * @example Usage\n * ```ts no-assert\n * import { getColorEnabled } from \"@std/fmt/colors\";\n *\n * console.log(getColorEnabled()); // true if enabled, false if disabled\n * ```\n * @returns `true` if text color is enabled, `false` otherwise\n */\nexport function getColorEnabled(): boolean {\n return enabled;\n}\n\n/**\n * Builds color code\n * @param open\n * @param close\n */\nfunction code(open: number[], close: number): Code {\n return {\n open: `\\x1b[${open.join(\";\")}m`,\n close: `\\x1b[${close}m`,\n regexp: new RegExp(`\\\\x1b\\\\[${close}m`, \"g\"),\n };\n}\n\n/**\n * Applies color and background based on color code and its associated text\n * @param str The text to apply color settings to\n * @param code The color code to apply\n */\nfunction run(str: string, code: Code): string {\n return enabled\n ? `${code.open}${str.replace(code.regexp, code.open)}${code.close}`\n : str;\n}\n\n/**\n * Reset the text modified.\n *\n * @example Usage\n * ```ts no-assert\n * import { reset } from \"@std/fmt/colors\";\n *\n * console.log(reset(\"Hello, world!\"));\n * ```\n *\n * @param str The text to reset\n * @returns The text with reset color\n */\nexport function reset(str: string): string {\n return run(str, code([0], 0));\n}\n\n/**\n * Make the text bold.\n *\n * @example Usage\n * ```ts no-assert\n * import { bold } from \"@std/fmt/colors\";\n *\n * console.log(bold(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make bold\n * @returns The bold text\n */\nexport function bold(str: string): string {\n return run(str, code([1], 22));\n}\n\n/**\n * The text emits only a small amount of light.\n *\n * Warning: Not all terminal emulators support `dim`.\n * For compatibility across all terminals, use {@linkcode gray} or {@linkcode brightBlack} instead.\n *\n * @example Usage\n * ```ts no-assert\n * import { dim } from \"@std/fmt/colors\";\n *\n * console.log(dim(\"Hello, world!\"));\n * ```\n *\n * @param str The text to dim\n * @returns The dimmed text\n */\nexport function dim(str: string): string {\n return run(str, code([2], 22));\n}\n\n/**\n * Make the text italic.\n *\n * @example Usage\n * ```ts no-assert\n * import { italic } from \"@std/fmt/colors\";\n *\n * console.log(italic(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make italic\n * @returns The italic text\n */\nexport function italic(str: string): string {\n return run(str, code([3], 23));\n}\n\n/**\n * Make the text underline.\n *\n * @example Usage\n * ```ts no-assert\n * import { underline } from \"@std/fmt/colors\";\n *\n * console.log(underline(\"Hello, world!\"));\n * ```\n *\n * @param str The text to underline\n * @returns The underlined text\n */\nexport function underline(str: string): string {\n return run(str, code([4], 24));\n}\n\n/**\n * Invert background color and text color.\n *\n * @example Usage\n * ```ts no-assert\n * import { inverse } from \"@std/fmt/colors\";\n *\n * console.log(inverse(\"Hello, world!\"));\n * ```\n *\n * @param str The text to invert its color\n * @returns The inverted text\n */\nexport function inverse(str: string): string {\n return run(str, code([7], 27));\n}\n\n/**\n * Make the text hidden.\n *\n * @example Usage\n * ```ts no-assert\n * import { hidden } from \"@std/fmt/colors\";\n *\n * console.log(hidden(\"Hello, world!\"));\n * ```\n *\n * @param str The text to hide\n * @returns The hidden text\n */\nexport function hidden(str: string): string {\n return run(str, code([8], 28));\n}\n\n/**\n * Put horizontal line through the center of the text.\n *\n * @example Usage\n * ```ts no-assert\n * import { strikethrough } from \"@std/fmt/colors\";\n *\n * console.log(strikethrough(\"Hello, world!\"));\n * ```\n *\n * @param str The text to strike through\n * @returns The text with horizontal line through the center\n */\nexport function strikethrough(str: string): string {\n return run(str, code([9], 29));\n}\n\n/**\n * Set text color to black.\n *\n * @example Usage\n * ```ts no-assert\n * import { black } from \"@std/fmt/colors\";\n *\n * console.log(black(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make black\n * @returns The black text\n */\nexport function black(str: string): string {\n return run(str, code([30], 39));\n}\n\n/**\n * Set text color to red.\n *\n * @example Usage\n * ```ts no-assert\n * import { red } from \"@std/fmt/colors\";\n *\n * console.log(red(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make red\n * @returns The red text\n */\nexport function red(str: string): string {\n return run(str, code([31], 39));\n}\n\n/**\n * Set text color to green.\n *\n * @example Usage\n * ```ts no-assert\n * import { green } from \"@std/fmt/colors\";\n *\n * console.log(green(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make green\n * @returns The green text\n */\nexport function green(str: string): string {\n return run(str, code([32], 39));\n}\n\n/**\n * Set text color to yellow.\n *\n * @example Usage\n * ```ts no-assert\n * import { yellow } from \"@std/fmt/colors\";\n *\n * console.log(yellow(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make yellow\n * @returns The yellow text\n */\nexport function yellow(str: string): string {\n return run(str, code([33], 39));\n}\n\n/**\n * Set text color to blue.\n *\n * @example Usage\n * ```ts no-assert\n * import { blue } from \"@std/fmt/colors\";\n *\n * console.log(blue(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make blue\n * @returns The blue text\n */\nexport function blue(str: string): string {\n return run(str, code([34], 39));\n}\n\n/**\n * Set text color to magenta.\n *\n * @example Usage\n * ```ts no-assert\n * import { magenta } from \"@std/fmt/colors\";\n *\n * console.log(magenta(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make magenta\n * @returns The magenta text\n */\nexport function magenta(str: string): string {\n return run(str, code([35], 39));\n}\n\n/**\n * Set text color to cyan.\n *\n * @example Usage\n * ```ts no-assert\n * import { cyan } from \"@std/fmt/colors\";\n *\n * console.log(cyan(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make cyan\n * @returns The cyan text\n */\nexport function cyan(str: string): string {\n return run(str, code([36], 39));\n}\n\n/**\n * Set text color to white.\n *\n * @example Usage\n * ```ts no-assert\n * import { white } from \"@std/fmt/colors\";\n *\n * console.log(white(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make white\n * @returns The white text\n */\nexport function white(str: string): string {\n return run(str, code([37], 39));\n}\n\n/**\n * Set text color to gray.\n *\n * @example Usage\n * ```ts no-assert\n * import { gray } from \"@std/fmt/colors\";\n *\n * console.log(gray(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make gray\n * @returns The gray text\n */\nexport function gray(str: string): string {\n return brightBlack(str);\n}\n\n/**\n * Set text color to bright black.\n *\n * @example Usage\n * ```ts no-assert\n * import { brightBlack } from \"@std/fmt/colors\";\n *\n * console.log(brightBlack(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make bright black\n * @returns The bright black text\n */\nexport function brightBlack(str: string): string {\n return run(str, code([90], 39));\n}\n\n/**\n * Set text color to bright red.\n *\n * @example Usage\n * ```ts no-assert\n * import { brightRed } from \"@std/fmt/colors\";\n *\n * console.log(brightRed(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make bright red\n * @returns The bright red text\n */\nexport function brightRed(str: string): string {\n return run(str, code([91], 39));\n}\n\n/**\n * Set text color to bright green.\n *\n * @example Usage\n * ```ts no-assert\n * import { brightGreen } from \"@std/fmt/colors\";\n *\n * console.log(brightGreen(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make bright green\n * @returns The bright green text\n */\nexport function brightGreen(str: string): string {\n return run(str, code([92], 39));\n}\n\n/**\n * Set text color to bright yellow.\n *\n * @example Usage\n * ```ts no-assert\n * import { brightYellow } from \"@std/fmt/colors\";\n *\n * console.log(brightYellow(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make bright yellow\n * @returns The bright yellow text\n */\nexport function brightYellow(str: string): string {\n return run(str, code([93], 39));\n}\n\n/**\n * Set text color to bright blue.\n *\n * @example Usage\n * ```ts no-assert\n * import { brightBlue } from \"@std/fmt/colors\";\n *\n * console.log(brightBlue(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make bright blue\n * @returns The bright blue text\n */\nexport function brightBlue(str: string): string {\n return run(str, code([94], 39));\n}\n\n/**\n * Set text color to bright magenta.\n *\n * @example Usage\n * ```ts no-assert\n * import { brightMagenta } from \"@std/fmt/colors\";\n *\n * console.log(brightMagenta(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make bright magenta\n * @returns The bright magenta text\n */\nexport function brightMagenta(str: string): string {\n return run(str, code([95], 39));\n}\n\n/**\n * Set text color to bright cyan.\n *\n * @example Usage\n * ```ts no-assert\n * import { brightCyan } from \"@std/fmt/colors\";\n *\n * console.log(brightCyan(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make bright cyan\n * @returns The bright cyan text\n */\nexport function brightCyan(str: string): string {\n return run(str, code([96], 39));\n}\n\n/**\n * Set text color to bright white.\n *\n * @example Usage\n * ```ts no-assert\n * import { brightWhite } from \"@std/fmt/colors\";\n *\n * console.log(brightWhite(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make bright white\n * @returns The bright white text\n */\nexport function brightWhite(str: string): string {\n return run(str, code([97], 39));\n}\n\n/**\n * Set background color to black.\n *\n * @example Usage\n * ```ts no-assert\n * import { bgBlack } from \"@std/fmt/colors\";\n *\n * console.log(bgBlack(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make its background black\n * @returns The text with black background\n */\nexport function bgBlack(str: string): string {\n return run(str, code([40], 49));\n}\n\n/**\n * Set background color to red.\n *\n * @example Usage\n * ```ts no-assert\n * import { bgRed } from \"@std/fmt/colors\";\n *\n * console.log(bgRed(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make its background red\n * @returns The text with red background\n */\nexport function bgRed(str: string): string {\n return run(str, code([41], 49));\n}\n\n/**\n * Set background color to green.\n *\n * @example Usage\n * ```ts no-assert\n * import { bgGreen } from \"@std/fmt/colors\";\n *\n * console.log(bgGreen(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make its background green\n * @returns The text with green background\n */\nexport function bgGreen(str: string): string {\n return run(str, code([42], 49));\n}\n\n/**\n * Set background color to yellow.\n *\n * @example Usage\n * ```ts no-assert\n * import { bgYellow } from \"@std/fmt/colors\";\n *\n * console.log(bgYellow(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make its background yellow\n * @returns The text with yellow background\n */\nexport function bgYellow(str: string): string {\n return run(str, code([43], 49));\n}\n\n/**\n * Set background color to blue.\n *\n * @example Usage\n * ```ts no-assert\n * import { bgBlue } from \"@std/fmt/colors\";\n *\n * console.log(bgBlue(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make its background blue\n * @returns The text with blue background\n */\nexport function bgBlue(str: string): string {\n return run(str, code([44], 49));\n}\n\n/**\n * Set background color to magenta.\n *\n * @example Usage\n * ```ts no-assert\n * import { bgMagenta } from \"@std/fmt/colors\";\n *\n * console.log(bgMagenta(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make its background magenta\n * @returns The text with magenta background\n */\nexport function bgMagenta(str: string): string {\n return run(str, code([45], 49));\n}\n\n/**\n * Set background color to cyan.\n *\n * @example Usage\n * ```ts no-assert\n * import { bgCyan } from \"@std/fmt/colors\";\n *\n * console.log(bgCyan(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make its background cyan\n * @returns The text with cyan background\n */\nexport function bgCyan(str: string): string {\n return run(str, code([46], 49));\n}\n\n/**\n * Set background color to white.\n *\n * @example Usage\n * ```ts no-assert\n * import { bgWhite } from \"@std/fmt/colors\";\n *\n * console.log(bgWhite(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make its background white\n * @returns The text with white background\n */\nexport function bgWhite(str: string): string {\n return run(str, code([47], 49));\n}\n\n/**\n * Set background color to bright black.\n *\n * @example Usage\n * ```ts no-assert\n * import { bgBrightBlack } from \"@std/fmt/colors\";\n *\n * console.log(bgBrightBlack(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make its background bright black\n * @returns The text with bright black background\n */\nexport function bgBrightBlack(str: string): string {\n return run(str, code([100], 49));\n}\n\n/**\n * Set background color to bright red.\n *\n * @example Usage\n * ```ts no-assert\n * import { bgBrightRed } from \"@std/fmt/colors\";\n *\n * console.log(bgBrightRed(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make its background bright red\n * @returns The text with bright red background\n */\nexport function bgBrightRed(str: string): string {\n return run(str, code([101], 49));\n}\n\n/**\n * Set background color to bright green.\n *\n * @example Usage\n * ```ts no-assert\n * import { bgBrightGreen } from \"@std/fmt/colors\";\n *\n * console.log(bgBrightGreen(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make its background bright green\n * @returns The text with bright green background\n */\nexport function bgBrightGreen(str: string): string {\n return run(str, code([102], 49));\n}\n\n/**\n * Set background color to bright yellow.\n *\n * @example Usage\n * ```ts no-assert\n * import { bgBrightYellow } from \"@std/fmt/colors\";\n *\n * console.log(bgBrightYellow(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make its background bright yellow\n * @returns The text with bright yellow background\n */\nexport function bgBrightYellow(str: string): string {\n return run(str, code([103], 49));\n}\n\n/**\n * Set background color to bright blue.\n *\n * @example Usage\n * ```ts no-assert\n * import { bgBrightBlue } from \"@std/fmt/colors\";\n *\n * console.log(bgBrightBlue(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make its background bright blue\n * @returns The text with bright blue background\n */\nexport function bgBrightBlue(str: string): string {\n return run(str, code([104], 49));\n}\n\n/**\n * Set background color to bright magenta.\n *\n * @example Usage\n * ```ts no-assert\n * import { bgBrightMagenta } from \"@std/fmt/colors\";\n *\n * console.log(bgBrightMagenta(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make its background bright magenta\n * @returns The text with bright magenta background\n */\nexport function bgBrightMagenta(str: string): string {\n return run(str, code([105], 49));\n}\n\n/**\n * Set background color to bright cyan.\n *\n * @example Usage\n * ```ts no-assert\n * import { bgBrightCyan } from \"@std/fmt/colors\";\n *\n * console.log(bgBrightCyan(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make its background bright cyan\n * @returns The text with bright cyan background\n */\nexport function bgBrightCyan(str: string): string {\n return run(str, code([106], 49));\n}\n\n/**\n * Set background color to bright white.\n *\n * @example Usage\n * ```ts no-assert\n * import { bgBrightWhite } from \"@std/fmt/colors\";\n *\n * console.log(bgBrightWhite(\"Hello, world!\"));\n * ```\n *\n * @param str The text to make its background bright white\n * @returns The text with bright white background\n */\nexport function bgBrightWhite(str: string): string {\n return run(str, code([107], 49));\n}\n\n/* Special Color Sequences */\n\n/**\n * Clamp and truncate color codes\n * @param n The input number\n * @param max The number to truncate to\n * @param min The number to truncate from\n */\nfunction clampAndTruncate(n: number, max = 255, min = 0): number {\n return Math.trunc(Math.max(Math.min(n, max), min));\n}\n\n/**\n * Set text color using paletted 8bit colors.\n * https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit\n *\n * @example Usage\n * ```ts no-assert\n * import { rgb8 } from \"@std/fmt/colors\";\n *\n * console.log(rgb8(\"Hello, world!\", 42));\n * ```\n *\n * @param str The text to color\n * @param color The color code\n * @returns The text with paletted 8bit color\n */\nexport function rgb8(str: string, color: number): string {\n return run(str, code([38, 5, clampAndTruncate(color)], 39));\n}\n\n/**\n * Set background color using paletted 8bit colors.\n * https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit\n *\n * @example Usage\n * ```ts no-assert\n * import { bgRgb8 } from \"@std/fmt/colors\";\n *\n * console.log(bgRgb8(\"Hello, world!\", 42));\n * ```\n *\n * @param str The text to set the background color of\n * @param color The color code\n * @returns The text with paletted 8bit background color\n */\nexport function bgRgb8(str: string, color: number): string {\n return run(str, code([48, 5, clampAndTruncate(color)], 49));\n}\n\n/**\n * Set text color using 24bit rgb.\n * `color` can be a number in range `0x000000` to `0xffffff` or\n * an `Rgb`.\n *\n * @example Usage\n * ```ts no-assert\n * import { rgb24 } from \"@std/fmt/colors\";\n *\n * rgb24(\"foo\", 0xff00ff);\n * rgb24(\"foo\", {r: 255, g: 0, b: 255});\n * ```\n * @param str The text to color\n * @param color The color code\n * @returns The text with 24bit rgb color\n */\nexport function rgb24(str: string, color: number | Rgb): string {\n if (typeof color === \"number\") {\n return run(\n str,\n code(\n [38, 2, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff],\n 39,\n ),\n );\n }\n return run(\n str,\n code(\n [\n 38,\n 2,\n clampAndTruncate(color.r),\n clampAndTruncate(color.g),\n clampAndTruncate(color.b),\n ],\n 39,\n ),\n );\n}\n\n/**\n * Set background color using 24bit rgb.\n * `color` can be a number in range `0x000000` to `0xffffff` or\n * an `Rgb`.\n *\n * @example Usage\n * ```ts no-assert\n * import { bgRgb24 } from \"@std/fmt/colors\";\n *\n * bgRgb24(\"foo\", 0xff00ff);\n * bgRgb24(\"foo\", {r: 255, g: 0, b: 255});\n * ```\n * @param str The text to set the background color of\n * @param color The color code\n * @returns The text with 24bit rgb background color\n */\nexport function bgRgb24(str: string, color: number | Rgb): string {\n if (typeof color === \"number\") {\n return run(\n str,\n code(\n [48, 2, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff],\n 49,\n ),\n );\n }\n return run(\n str,\n code(\n [\n 48,\n 2,\n clampAndTruncate(color.r),\n clampAndTruncate(color.g),\n clampAndTruncate(color.b),\n ],\n 49,\n ),\n );\n}\n\n// https://github.com/chalk/ansi-regex/blob/02fa893d619d3da85411acc8fd4e2eea0e95a9d9/index.js\nconst ANSI_PATTERN = new RegExp(\n [\n \"[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)\",\n \"(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TXZcf-nq-uy=><~]))\",\n ].join(\"|\"),\n \"g\",\n);\n\n/**\n * Remove ANSI escape codes from the string.\n *\n * @example Usage\n * ```ts no-assert\n * import { stripAnsiCode, red } from \"@std/fmt/colors\";\n *\n * console.log(stripAnsiCode(red(\"Hello, world!\")));\n * ```\n *\n * @param string The text to remove ANSI escape codes from\n * @returns The text without ANSI escape codes\n */\nexport function stripAnsiCode(string: string): string {\n return string.replace(ANSI_PATTERN, \"\");\n}\n","import {\n UnexpectedArgumentAfterVariadicArgumentError,\n UnexpectedRequiredArgumentError,\n} from \"@jsr/cliffy__flags\";\nimport { closestString } from \"@jsr/std__text/closest-string\";\nimport type { ArgDefinition } from \"./command.ts\";\nimport type { Command } from \"./command.ts\";\nimport type { Argument } from \"./types.ts\";\n\nexport function getFlag(name: string) {\n if (name.startsWith(\"-\")) {\n return name;\n }\n if (name.length > 1) {\n return `--${name}`;\n }\n return `-${name}`;\n}\n\nexport function didYouMean(\n message: string,\n type: string,\n types: Array<string>,\n): string {\n const match: string | undefined = types.length\n ? closestString(type, types)\n : undefined;\n return match ? `${message} \"${match}\"?` : \"\";\n}\n\nexport function didYouMeanCommand(\n command: string,\n commands: Array<Command>,\n excludes: Array<string> = [],\n): string {\n const commandNames = commands\n .map((command) => command.getName())\n .filter((command) => !excludes.includes(command));\n\n return didYouMean(\" Did you mean command\", command, commandNames);\n}\n\nconst ARGUMENT_REGEX = /^[<\\[].+[\\]>]$/;\nconst ARGUMENT_DETAILS_REGEX = /[<\\[:>\\]]/;\n\ninterface SplitArgumentsResult {\n flags: string[];\n typeDefinition: string;\n equalsSign: boolean;\n}\n\n/**\n * Split options and arguments.\n * @param args Arguments definition: `--color, -c <color1:string> <color2:string>`\n *\n * For example: `-c, --color <color1:string> <color2:string>`\n *\n * Will result in:\n * ```json\n * {\n * flags: [ \"-c\", \"--color\" ],\n * typeDefinition: \"<color1:string> <color2:string>\",\n * }\n * ```\n */\nexport function splitArguments(\n args: string,\n): SplitArgumentsResult {\n const parts = args.trim().split(/[, =] */g);\n const typeParts = [];\n\n while (\n parts[parts.length - 1] &&\n ARGUMENT_REGEX.test(parts[parts.length - 1])\n ) {\n typeParts.unshift(parts.pop());\n }\n\n const typeDefinition: string = typeParts.join(\" \");\n\n return { flags: parts, typeDefinition, equalsSign: args.includes(\"=\") };\n}\n\n/**\n * Parse arguments string.\n * @param argsDefinition Arguments definition: `<color1:string> <color2:string>`\n */\nexport function parseArgumentsDefinition<T extends boolean>(\n argsDefinition: string | Array<string | ArgDefinition>,\n validate: boolean,\n all: true,\n): Array<Argument | string>;\nexport function parseArgumentsDefinition<T extends boolean>(\n argsDefinition: string | Array<string | ArgDefinition>,\n validate?: boolean,\n all?: false,\n): Array<Argument>;\nexport function parseArgumentsDefinition<T extends boolean>(\n argsDefinition: string | Array<string | ArgDefinition>,\n validate = true,\n all?: T,\n): T extends true ? Array<Argument | string> : Array<Argument> {\n const argumentDetails: Array<Argument | string> = [];\n\n let hasOptional = false;\n let hasVariadic = false;\n const parts: Array<string | ArgDefinition> = Array.isArray(argsDefinition)\n ? argsDefinition\n : argsDefinition.split(/ +/);\n\n for (let argDef of parts) {\n if (typeof argDef === \"string\") {\n argDef = { arg: argDef };\n }\n if (validate && hasVariadic) {\n throw new UnexpectedArgumentAfterVariadicArgumentError(argDef.arg);\n }\n const parts: string[] = argDef.arg.split(ARGUMENT_DETAILS_REGEX);\n\n if (!parts[1]) {\n if (all) {\n argumentDetails.push(parts[0]);\n }\n continue;\n }\n const type: string | undefined = parts[2] || \"string\";\n\n const details: Argument = {\n description: argDef.description,\n optional: argDef.arg[0] === \"[\",\n raw: argDef.arg,\n name: parts[1],\n action: parts[3] || type,\n variadic: false,\n list: type ? argDef.arg.indexOf(type + \"[]\") !== -1 : false,\n type,\n };\n\n if (validate && !details.optional && hasOptional) {\n throw new UnexpectedRequiredArgumentError(details.name);\n }\n\n if (argDef.arg[0] === \"[\") {\n hasOptional = true;\n }\n\n if (details.name.length > 3) {\n const istVariadicLeft = details.name.slice(0, 3) === \"...\";\n const istVariadicRight = details.name.slice(-3) === \"...\";\n\n hasVariadic = details.variadic = istVariadicLeft || istVariadicRight;\n\n if (istVariadicLeft) {\n details.name = details.name.slice(3);\n } else if (istVariadicRight) {\n details.name = details.name.slice(0, -3);\n }\n }\n\n argumentDetails.push(details);\n }\n\n return argumentDetails as (\n T extends true ? Array<Argument | string> : Array<Argument>\n );\n}\n\nexport function dedent(str: string): string {\n const lines = str.split(/\\r?\\n|\\r/g);\n let text = \"\";\n let indent = 0;\n\n for (const line of lines) {\n if (text || line.trim()) {\n if (!text) {\n text = line.trimStart();\n indent = line.length - text.length;\n } else {\n text += line.slice(indent);\n }\n text += \"\\n\";\n }\n }\n\n return text.trimEnd();\n}\n\nexport function getDescription(\n description: string,\n short?: boolean,\n): string {\n return short\n ? description.trim().split(\"\\n\", 1)[0].trim()\n : dedent(description);\n}\n\n/** Convert underscore case string to camel case. */\nexport function underscoreToCamelCase(str: string): string {\n return str\n .replace(/([a-z])([A-Z])/g, \"$1_$2\")\n .toLowerCase()\n .replace(\n /_([a-z])/g,\n (g) => g[1].toUpperCase(),\n );\n}\n","import { didYouMeanCommand } from \"./_utils.js\";\nimport type { Command } from \"./command.ts\";\nimport { getFlag } from \"./_utils.js\";\nimport { bold } from \"@jsr/std__fmt/colors\";\nimport type { EnvVar } from \"./types.ts\";\n\nexport class CommandError extends Error {\n constructor(message: string) {\n super(message);\n Object.setPrototypeOf(this, CommandError.prototype);\n }\n}\n\nexport interface ValidationErrorOptions {\n exitCode?: number;\n}\n\nexport class ValidationError extends CommandError {\n public readonly exitCode: number;\n public cmd?: Command;\n\n constructor(message: string, { exitCode }: ValidationErrorOptions = {}) {\n super(message);\n Object.setPrototypeOf(this, ValidationError.prototype);\n this.exitCode = exitCode ?? 2;\n }\n}\n\nexport class DuplicateOptionNameError extends CommandError {\n constructor(optionName: string, commandName: string) {\n super(\n `An option with name '${\n bold(getFlag(optionName))\n }' is already registered on command '${\n bold(commandName)\n }'. If it is intended to override the option, set the '${\n bold(\"override\")\n }' option of the '${bold(\"option\")}' method to true.`,\n );\n Object.setPrototypeOf(this, DuplicateOptionNameError.prototype);\n }\n}\n\nexport class MissingCommandNameCompletionsError extends CommandError {\n constructor(shell: string) {\n super(\n `Failed to generate shell completions. Missing main command name. Use '${\n bold('cmd.name(\"<comand-name>\")')\n }' to set the name of the main command or use the '${\n bold(\"--name\")\n }' option from the '${\n bold(\"completions\")\n }' command to set the cli name: '${\n bold(`<command> completions ${shell} --name <cli-name>`)\n }'.`,\n );\n Object.setPrototypeOf(\n this,\n MissingCommandNameCompletionsError.prototype,\n );\n }\n}\n\nexport class MissingCommandNameError extends CommandError {\n constructor() {\n super(\"Missing command name.\");\n Object.setPrototypeOf(this, MissingCommandNameError.prototype);\n }\n}\n\nexport class DuplicateCommandNameError extends CommandError {\n constructor(name: string) {\n super(`Duplicate command name \"${name}\".`);\n Object.setPrototypeOf(this, DuplicateCommandNameError.prototype);\n }\n}\n\nexport class DuplicateCommandAliasError extends CommandError {\n constructor(alias: string) {\n super(`Duplicate command alias \"${alias}\".`);\n Object.setPrototypeOf(this, DuplicateCommandAliasError.prototype);\n }\n}\n\nexport class CommandNotFoundError extends CommandError {\n constructor(\n name: string,\n commands: Array<Command>,\n excluded?: Array<string>,\n ) {\n super(\n `Unknown command \"${name}\".${\n didYouMeanCommand(name, commands, excluded)\n }`,\n );\n Object.setPrototypeOf(this, CommandNotFoundError.prototype);\n }\n}\n\nexport class DuplicateTypeError extends CommandError {\n constructor(name: string) {\n super(`Type with name \"${name}\" already exists.`);\n Object.setPrototypeOf(this, DuplicateTypeError.prototype);\n }\n}\n\nexport class DuplicateCompletionError extends CommandError {\n constructor(name: string) {\n super(`Completion with name \"${name}\" already exists.`);\n Object.setPrototypeOf(this, DuplicateCompletionError.prototype);\n }\n}\n\nexport class DuplicateExampleError extends CommandError {\n constructor(name: string) {\n super(`Example with name \"${name}\" already exists.`);\n Object.setPrototypeOf(this, DuplicateExampleError.prototype);\n }\n}\n\nexport class DuplicateEnvVarError extends CommandError {\n constructor(name: string) {\n super(`Environment variable with name \"${name}\" already exists.`);\n Object.setPrototypeOf(this, DuplicateEnvVarError.prototype);\n }\n}\n\nexport class MissingRequiredEnvVarError extends ValidationError {\n constructor(envVar: EnvVar) {\n super(`Missing required environment variable \"${envVar.names[0]}\".`);\n Object.setPrototypeOf(this, MissingRequiredEnvVarError.prototype);\n }\n}\n\nexport class TooManyEnvVarValuesError extends CommandError {\n constructor(name: string) {\n super(\n `An environment variable can only have one value, but \"${name}\" has more than one.`,\n );\n Object.setPrototypeOf(this, TooManyEnvVarValuesError.prototype);\n }\n}\n\nexport class UnexpectedOptionalEnvVarValueError extends CommandError {\n constructor(name: string) {\n super(\n `An environment variable cannot have an optional value, but \"${name}\" is defined as optional.`,\n );\n Object.setPrototypeOf(this, UnexpectedOptionalEnvVarValueError.prototype);\n }\n}\n\nexport class UnexpectedVariadicEnvVarValueError extends CommandError {\n constructor(name: string) {\n super(\n `An environment variable cannot have an variadic value, but \"${name}\" is defined as variadic.`,\n );\n Object.setPrototypeOf(this, UnexpectedVariadicEnvVarValueError.prototype);\n }\n}\n\nexport class DefaultCommandNotFoundError extends CommandError {\n constructor(name: string, commands: Array<Command>) {\n super(\n `Default command \"${name}\" not found.${\n didYouMeanCommand(name, commands)\n }`,\n );\n Object.setPrototypeOf(this, DefaultCommandNotFoundError.prototype);\n }\n}\n\nexport class UnknownCompletionCommandError extends CommandError {\n constructor(name: string, commands: Array<Command>) {\n super(\n `Auto-completion failed. Unknown command \"${name}\".${\n didYouMeanCommand(name, commands)\n }`,\n );\n Object.setPrototypeOf(this, UnknownCompletionCommandError.prototype);\n }\n}\n\n/* Validation errors. */\n\nexport class UnknownCommandError extends ValidationError {\n constructor(\n name: string,\n commands: Array<Command>,\n excluded?: Array<string>,\n ) {\n super(\n `Unknown command \"${name}\".${\n didYouMeanCommand(name, commands, excluded)\n }`,\n );\n Object.setPrototypeOf(this, UnknownCommandError.prototype);\n }\n}\n\nexport class NoArgumentsAllowedError extends ValidationError {\n constructor(name: string) {\n super(`No arguments allowed for command \"${name}\".`);\n Object.setPrototypeOf(this, NoArgumentsAllowedError.prototype);\n }\n}\n\nexport class MissingArgumentsError extends ValidationError {\n constructor(names: Array<string>) {\n super(`Missing argument(s): ${names.join(\", \")}`);\n Object.setPrototypeOf(this, MissingArgumentsError.prototype);\n }\n}\n\nexport class MissingArgumentError extends ValidationError {\n constructor(name: string) {\n super(`Missing argument: ${name}`);\n Object.setPrototypeOf(this, MissingArgumentError.prototype);\n }\n}\n\nexport class TooManyArgumentsError extends ValidationError {\n constructor(args: Array<string>) {\n super(`Too many arguments: ${args.join(\" \")}`);\n Object.setPrototypeOf(this, TooManyArgumentsError.prototype);\n }\n}\n","// deno-lint-ignore-file no-explicit-any\n\n/**\n * Exit the current process with optional exit code.\n *\n * @internal\n * @param code The exit code.\n */\nexport function exit(code: number): never {\n // dnt-shim-ignore\n const { Deno, process } = globalThis as any;\n const exit: (code: number) => never = Deno?.exit ?? process?.exit;\n\n if (exit) {\n exit(code);\n }\n\n throw new Error(\"unsupported runtime\");\n}\n","// deno-lint-ignore-file no-explicit-any\n\n/**\n * Get environment variable.\n *\n * @internal\n * @param name The name of the environment variable.\n */\nexport function getEnv(name: string): string | undefined {\n // dnt-shim-ignore\n const { Deno, process } = globalThis as any;\n\n if (Deno) {\n return Deno.env.get(name);\n } else if (process) {\n return process.env[name];\n }\n\n throw new Error(\"unsupported runtime\");\n}\n","/** Default border characters. */\nexport const border = {\n top: \"─\",\n topMid: \"┬\",\n topLeft: \"┌\",\n topRight: \"┐\",\n bottom: \"─\",\n bottomMid: \"┴\",\n bottomLeft: \"└\",\n bottomRight: \"┘\",\n left: \"│\",\n leftMid: \"├\",\n mid: \"─\",\n midMid: \"┼\",\n right: \"│\",\n rightMid: \"┤\",\n middle: \"│\",\n};\n\n/** Default border characters. */\nexport type Border = typeof border;\n","/** Allowed cell value type. */\nexport type CellValue = number | string;\n\n/** Allowed cell type. */\nexport type CellType = CellValue | Cell;\n\n/** Cell alignment direction. */\nexport type Direction = \"left\" | \"right\" | \"center\";\n\n/** Cell options. */\ninterface CellOptions {\n /** Enable/disable cell border. */\n border?: boolean;\n /** Set coll span. */\n colSpan?: number;\n /** Set row span. */\n rowSpan?: number;\n /** Cell cell alignment direction. */\n align?: Direction;\n /**\n * Any unterminated ANSI formatting overflowed from previous lines of a\n * multi-line cell.\n */\n unclosedAnsiRuns?: string;\n}\n\n/**\n * Cell representation.\n *\n * Can be used to customize a single cell.\n *\n * ```ts\n * import { Cell, Table } from \"./mod.ts\";\n *\n * new Table()\n * .body([\n * [\"Foo\", new Cell(\"Bar\").align(\"right\")],\n * [\"Beep\", \"Boop\"],\n * ])\n * .render();\n * ```\n */\nexport class Cell {\n protected options: CellOptions = {};\n\n /** Get cell length. */\n public get length(): number {\n return this.toString().length;\n }\n\n /**\n * Any unterminated ANSI formatting overflowed from previous lines of a\n * multi-line cell.\n */\n public get unclosedAnsiRuns(): string {\n return this.options.unclosedAnsiRuns ?? \"\";\n }\n public set unclosedAnsiRuns(val: string) {\n this.options.unclosedAnsiRuns = val;\n }\n\n /**\n * Create a new cell. If value is a cell, the value and all options of the cell\n * will be copied to the new cell.\n *\n * @param value Cell or cell value.\n */\n public static from(value: CellType): Cell {\n let cell: Cell;\n if (value instanceof Cell) {\n cell = new this(value.getValue());\n cell.options = { ...value.options };\n } else {\n cell = new this(value);\n }\n return cell;\n }\n\n /**\n * Cell constructor.\n *\n * @param value Cell value.\n */\n public constructor(private value: CellValue) {}\n\n /** Get cell string value. */\n public toString(): string {\n return this.value.toString();\n }\n\n /** Get cell value. */\n public getValue(): CellValue {\n return this.value;\n }\n\n /**\n * Set cell value.\n *\n * @param value Cell or cell value.\n */\n public setValue(value: CellValue): this {\n this.value = value;\n return this;\n }\n\n /**\n * Clone cell with all options.\n *\n * @param value Cell or cell value.\n */\n public clone(value?: CellValue): Cell {\n return Cell.from(value ?? this);\n }\n\n /**\n * Setter:\n */\n\n /**\n * Enable/disable cell border.\n *\n * @param enable Enable/disable cell border.\n * @param override Override existing value.\n */\n public border(enable = true, override = true): this {\n if (override || typeof this.options.border === \"undefined\") {\n this.options.border = enable;\n }\n return this;\n }\n\n /**\n * Set col span.\n *\n * ```ts\n * import { Cell, Table } from \"./mod.ts\";\n *\n * new Table()\n * .body([\n * [\n * new Cell(\"Row 1 & 2 Column 1\").rowSpan(2),\n * \"Row 1 Column 2\",\n * \"Row 1 Column 3\",\n * ],\n * [new Cell(\"Row 2 Column 2 & 3\").colSpan(2)],\n * ])\n * .border()\n * .render();\n * ```\n *\n * @param span Number of cols to span.\n * @param override Override existing value.\n */\n public colSpan(span: number, override = true): this {\n if (override || typeof this.options.colSpan === \"undefined\") {\n this.options.colSpan = span;\n }\n return this;\n }\n\n /**\n * Set row span.\n *\n * ```ts\n * import { Cell, Table } from \"./mod.ts\";\n *\n * new Table()\n * .body([\n * [\n * new Cell(\"Row 1 & 2 Column 1\").rowSpan(2),\n * \"Row 1 Column 2\",\n * \"Row 1 Column 3\",\n * ],\n * [new Cell(\"Row 2 Column 2 & 3\").colSpan(2)],\n * ])\n * .border()\n * .render();\n * ```\n *\n * @param span Number of rows to span.\n * @param override Override existing value.\n */\n public rowSpan(span: number, override = true): this {\n if (override || typeof this.options.rowSpan === \"undefined\") {\n this.options.rowSpan = span;\n }\n return this;\n }\n\n /**\n * Align cell content.\n *\n * @param direction Align direction.\n * @param override Override existing value.\n */\n public align(direction: Direction, override = true): this {\n if (override || typeof this.options.align === \"undefined\") {\n this.options.align = direction;\n }\n return this;\n }\n\n /**\n * Getter:\n */\n\n /** Check if cell has border. */\n public getBorder(): boolean {\n return this.options.border === true;\n }\n\n /** Get col span. */\n public getColSpan(): number {\n return typeof this.options.colSpan === \"number\" && this.options.colSpan > 0\n ? this.options.colSpan\n : 1;\n }\n\n /** Get row span. */\n public getRowSpan(): number {\n return typeof this.options.rowSpan === \"number\" && this.options.rowSpan > 0\n ? this.options.rowSpan\n : 1;\n }\n\n /** Get row span. */\n public getAlign(): Direction {\n return this.options.align ?? \"left\";\n }\n}\n","import type { Direction } from \"./cell.ts\";\n\n/** Column options. */\nexport interface ColumnOptions {\n /** Enable/disable cell border. */\n border?: boolean;\n /** Cell cell alignment direction. */\n align?: Direction;\n /** Set min column width. */\n minWidth?: number;\n /** Set max column width. */\n maxWidth?: number;\n /** Set cell padding. */\n padding?: number;\n}\n\n/**\n * Column representation.\n *\n * Can be used to customize a single column.\n *\n * ```ts\n * import { Column, Table } from \"./mod.ts\";\n *\n * new Table()\n * .body([\n * [\"Foo\", \"bar\"],\n * [\"Beep\", \"Boop\"],\n * ])\n * .column(0, new Column().border())\n * .render();\n * ```\n */\nexport class Column {\n /**\n * Create a new cell from column options or an existing column.\n * @param options\n */\n static from(options: ColumnOptions | Column): Column {\n const opts = options instanceof Column ? options.opts : options;\n return new Column().options(opts);\n }\n\n protected opts: ColumnOptions = {};\n\n /** Set column options. */\n options(options: ColumnOptions): this {\n Object.assign(this.opts, options);\n return this;\n }\n\n /** Set min column width. */\n minWidth(width: number): this {\n this.opts.minWidth = width;\n return this;\n }\n\n /** Set max column width. */\n maxWidth(width: number): this {\n this.opts.maxWidth = width;\n return this;\n }\n\n /** Set column border. */\n border(border = true): this {\n this.opts.border = border;\n return this;\n }\n\n /** Set column padding. */\n padding(padding: number): this {\n this.opts.padding = padding;\n return this;\n }\n\n /** Set column alignment. */\n align(direction: Direction): this {\n this.opts.align = direction;\n return this;\n }\n\n /** Get min column width. */\n getMinWidth(): number | undefined {\n return this.opts.minWidth;\n }\n\n /** Get max column width. */\n getMaxWidth(): number | undefined {\n return this.opts.maxWidth;\n }\n\n /** Get column border. */\n getBorder(): boolean | undefined {\n return this.opts.border;\n }\n\n /** Get column padding. */\n getPadding(): number | undefined {\n return this.opts.padding;\n }\n\n /** Get column alignment. */\n getAlign(): Direction | undefined {\n return this.opts.align;\n }\n}\n","let tables: Uint8Array[] | null = null;\n\nconst data = {\n \"UNICODE_VERSION\": \"15.0.0\",\n \"tables\": [\n {\n \"d\": \"AAECAwQFBgcICQoLDA0OAw8DDwkQCRESERIA\",\n \"r\": \"AQEBAgEBAQEBAQEBAQEBBwEHAVABBwcBBwF4\",\n },\n {\n \"d\":\n \"AAECAwQFBgcGCAYJCgsMDQ4PEAYREhMUBhUWFxgZGhscHR4fICEiIyIkJSYnKCkqJSssLS4vMDEyMzQ1Njc4OToGOzwKBj0GPj9AQUIGQwZEBkVGR0hJSktMTQZOBgoGT1BRUlNUVVZXWFkGWgZbBlxdXl1fYGFiY2RlZmdoBmlqBmsGAQZsBm1uO29wcXI7czt0dXZ3OwY7eHkGent8Bn0Gfn+AgYKDhIWGBoc7iAZdO4kGiosGAXGMBo0GjgaPBpAGkQaSBpMGlJUGlpcGmJmam5ydnp+gLgahLKIGo6SlpganqKmqqwasBq0Grq8GsLGyswa0BrUGtre4Brm6uwZHvAa9vga/wME7wjvDxAbFO8bHO8gGyQbKywbMzQbOBs/Q0QbSBr8GvgbT1AbUBtUG1gbXBtjZ2tsG3N0G3t/g4eLjO+Tl5ufoO+k76gbrBuztOwbu7/AGO+XxCgYKCwZd8g==\",\n \"r\":\n \"AQEBAQEBAQEBAQEBAQEBAQEBAQMBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECBQEOAQEBAQEBAQEBAwEBAQEBAQEBAQIBAwEIAQEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBDQEBBQEBAQEBAgEBAwEBAQEBAQEBAQEBbQHaAQEFAQEBBAECAQEBAQEBAQEBAwGuASFkCAELAQEBAQEBAQEHAQMBAQEaAQIBCAEFAQEBAQEBAQEBAQEBAQEBAQEBAQECAQEBAQIBAQEBAQEBAwEDAQEBAQEBAQUBAQEBAQEBBAEBAVIBAdkBARABAQFfARMBAYoBBAEBBQEmAUkBAQcBAQIBHgEBARUBAQEBAQUBAQcBDwEBARoBAgEBAQEBAQECAQEBAQEBAQEBAQEBAQEBAQMBBAEBAgEBAQEUfwEBAQIDAXj/AQ==\",\n },\n {\n \"d\":\n \"AFUVAF3Xd3X/93//VXVVV9VX9V91f1/31X93XVXdVdVV9dVV/VVX1X9X/131VfXVVXV3V1VdVV1V1/1dV1X/3VUAVf3/3/9fVf3/3/9fVV1V/11VFQBQVQEAEEEQVQBQVQBAVFUVAFVUVQUAEAAUBFBVFVFVAEBVBQBUVRUAVVFVBRAAAVBVAVVQVQBVBQBAVUVUAQBUUQEAVQVVUVVUAVRVUVUFVUVBVVRBFRRQUVVQUVUBEFRRVQVVBQBRVRQBVFVRVUFVBVVFVVRVUVVUVQRUBQRQVUFVBVVFVVBVBVVQVRVUAVRVUVUFVVFVRVUFRFVRAEBVFQBAVVEAVFUAQFVQVRFRVQEAQAAEVQEAAQBUVUVVAQQAQVVQBVRVAVRVRUFVUVVRVaoAVQFVBVRVBVUFVQVVEABQVUUBAFVRVRUAVUFVUVVAFVRVRVUBVRUUVUUAQEQBAFQVABRVAEBVAFUEQFRFVRUAVVBVBVAQUFVFUBFQVQAFVUAABABUUVVUUFUVANd/X3//BUD3XdV1VQAEAFVXVdX9V1VXVQBUVdVdVdV1VX111VXVV9V//1X/X1VdVf9fVV9VdVdV1VX31dfVXXX9193/d1X/VV9VV3VVX//1VfVVXVVdVdVVdVWlVWlVqVaWVf/f/1X/Vf/1X1Xf/19V9VVf9df1X1X1X1XVVWlVfV31VVpVd1V3VapV33/fVZVVlVX1WVWlVelV+v/v//7/31Xv/6/77/tVWaVVVlVdVWaVmlX1/1WpVVZVlVWVVlVW+V9VFVBVAKqaqlWqWlWqVaoKoKpqqapqgapVqaqpqmqqVapqqv+qVqpqVRVAAFBVBVVQVUUVVUFVVFVQVQBQVRVVBQBQVRUAUFWqVkBVFQVQVVFVAUBBVRVVVFVUVQQUVAVRVVBVRVVRVFFVqlVFVQCqWlUAqmqqaqpVqlZVqmpVAV1VUVVUVQVAVQFBVQBVQBVVQVUAVRVUVQFVBQBUVQVQVVFVAEBVFFRVFVBVFUBBUUVVUVVAVRUAAQBUVRVVUFUFAEBVARRVFVAEVUVVFQBAVVRVBQBUAFRVAAVEVUVVFQBEFQRVBVBVEFRVUFUVAEARVFUVUQAQVQEFEABVFQBBVRVEFVUABVVUVQEAQFUVABRAVRVVAUABVQUAQFBVAEAAEFUFAAUABEFVAUBFEAAQVVARVRVUVVBVBUBVRFVUFQBQVQBUVQBAVRVVFUBVqlRVWlWqVapaVapWVaqpqmmqalVlVWpZVapVqlVBAFUAUABAVRVQVRUAQAEAVQVQVQVUVQBAFQBUVVFVVFUVAAEAVQBAABQAEARAVUVVAFUAQFUAQFVWVZVV/39V/1//X1X/76uq6v9XVWpVqlWqVlVaVapaVapWVamqmqqmqlWqapWqVapWqmqmqpaqWlWVaqpVZVVpVVZVlapVqlpVVmqpVapVlVZVqlZVqlVWVapqqpqqVapWqlZVqpqqWlWlqlWqVlWqVlVRVQD/Xw==\",\n \"r\":\n \"CBcBCAEBAQEBAQEBAQECAQEBAQEBAQEBAQEBAQMBAQECAQEBAQEBAQEBAQEBBAEBGAEDAQwBAwEIAQEBAQEBAQgcCAEDAQEBAQEDAQEBDQEDEAELAQEBEQEKAQEBDgEBAgIBAQoBBQQBCAEBAQEBAQEHAQEHBgEWAQIBDQECAgEFAQECAgEKAQ0BAQIKAQ0BDQEBAQEBAQEBAgEHAQ4BAQEBAQQBBgEBDgEBAQEBAQcBAQIBAQEBBAEFAQEBDgEBAQEBAQECAQcBDwECAQwCDQEBAQEBAQECAQgBAQEEAQcBDQEBAQEBAQQBBwERAQEBARYBAQECAQEBGAECAQIBARIBBgEBDQECAQEBAQECAQgBAQEZAQEBAgYBAQEDAQECAQEBAQMBCBgIBwEMAQEGAQcBBwEQAQEBAQEBAgIBCgEBDQEIAQ0BAQEBAQEBBgEBDgEBAQEBAQEBAgEMBwEMAQwBAQEBCQECAwEHAQEBAQ0BAQEBDgIBBgEDAQEBAQEBAQMBAQEBAgEBAQEBAQEBCAEBAgEBAQEBAQkBCAgBAwECAQEBAgEBAQkBAQEBAwECAQMBAQIBBwEFAQEDAQYBAQEBAgEBAQEBAQEBAQECAgEDAQECBAIDAgIBBQEEAQEBAwEPAQEBCyIBCAEJAwQBAQIBAQEBAgECAQEBAQMBAQEBAwEBAQEBAQEBAQgBAQMDAgEBAwEEAQIBAQEBBAEBAQEBAQECAQEBAQEBAQEBAQEHAQQBAwEBAQcBAgUBBgECAQYBAQwBAQEUAQELCAYBFgMFAQYDAQoBAQMBARQBAQkBAQoBBgEVAwsBCgIPAQ0BGQEBAgEHARQBAwIBBgEBAQUBBgQBAgEJAQEBBQECAQMHAQELAQECCQEQAQECAgECAQsBDAEBAQEBCgEBAQsBAQEECQ4BCAQCAQEECAEEAQEFCAEPAQEEAQEPAQgBFAEBAQEBAQEKAQEJAQ8BEAEBEwEBAQIBCwEBDgENAwEKAQEBAQELAQEBAQECAQwBCAEBAQEBDgEDAQwBAQECAQEXAQEBAQEHAgEBBQEIAQEBAQEQAgEBBQEUAQEBAQEbAQEBAQEGARQBAQEBARkBAQEBCQEBAQEQAQIBDwEBARQBAQEBBwEBAQkBAQEBAQECAQEBCwECAQEVAQEBAQQBBQEBAQEOAQEBAQEBEgEBFgEBAgEMAQEBAQ8BAQMBFgEBDgEBBQEPAQETAQECAQMOAgUBCgIBGQEBAQEIAQMBBwEBAwECEwgBAQcLAQUBFwEBAQEDAQEBBwEBBAEBDg0BAQwBAQEDAQQBAQEDBAEBBAEBAQEBEAEPAQgBAQsBAQ4BEQEMAgEBBwEOAQEHAQEBAQQBBAEDCwECAQEBAwEBBggBAgEBAREBBQMKAQEBAwQCEQEBHgEPAQIBAQYEAQYBAwEUAQUMAQEBAQEBAQECAQEBAgEIAwEBBgsBAgEODAMBAgEBCwEBAQEBAwECAQECAQEBBwgPAQ==\",\n },\n ],\n} as const;\n\nfunction lookupWidth(cp: number) {\n if (!tables) tables = data.tables.map(runLengthDecode);\n const t1Offset = tables[0]![(cp >> 13) & 0xff]!;\n const t2Offset = tables[1]![128 * t1Offset + ((cp >> 6) & 0x7f)]!;\n const packedWidths = tables[2]![16 * t2Offset + ((cp >> 2) & 0xf)]!;\n\n const width = (packedWidths >> (2 * (cp & 0b11))) & 0b11;\n\n return width === 3 ? 1 : width;\n}\n\nconst cache = new Map<string, number | null>();\nfunction charWidth(char: string) {\n if (cache.has(char)) return cache.get(char)!;\n\n const codePoint = char.codePointAt(0)!;\n let width: number | null = null;\n\n if (codePoint < 0x7f) {\n width = codePoint >= 0x20 ? 1 : codePoint === 0 ? 0 : null;\n } else if (codePoint >= 0xa0) {\n width = lookupWidth(codePoint);\n } else {\n width = null;\n }\n\n cache.set(char, width);\n return width;\n}\n\n/**\n * Calculate the physical width of a string in a TTY-like environment. This is\n * useful for cases such as calculating where a line-wrap will occur and\n * underlining strings.\n *\n * The physical width is given by the number of columns required to display\n * the string. The number of columns a given unicode character occupies can\n * vary depending on the character itself.\n *\n * @param str The string to measure.\n * @returns The unicode width of the string.\n *\n * @example Calculating the unicode width of a string\n * ```ts\n * import { unicodeWidth } from \"@std/cli/unicode-width\";\n * import { assertEquals } from \"@std/assert\";\n *\n * assertEquals(unicodeWidth(\"hello world\"), 11);\n * assertEquals(unicodeWidth(\"天地玄黃宇宙洪荒\"), 16);\n * assertEquals(unicodeWidth(\"fullwidth\"), 18);\n * ```\n *\n * @example Calculating the unicode width of a color-encoded string\n * ```ts\n * import { unicodeWidth } from \"@std/cli/unicode-width\";\n * import { stripAnsiCode } from \"@std/fmt/colors\";\n * import { assertEquals } from \"@std/assert\";\n *\n * assertEquals(unicodeWidth(stripAnsiCode(\"\\x1b[36mголубой\\x1b[39m\")), 7);\n * assertEquals(unicodeWidth(stripAnsiCode(\"\\x1b[31m紅色\\x1b[39m\")), 4);\n * assertEquals(unicodeWidth(stripAnsiCode(\"\\x1B]8;;https://deno.land\\x07🦕\\x1B]8;;\\x07\")), 2);\n * ```\n *\n * Use\n * {@linkcode https://jsr.io/@std/fmt/doc/colors/~/stripAnsiCode | stripAnsiCode}\n * to remove ANSI escape codes from a string before passing it to\n * {@linkcode unicodeWidth}.\n */\nexport function unicodeWidth(str: string): number {\n return [...str].map((ch) => charWidth(ch) ?? 0).reduce((a, b) => a + b, 0);\n}\n\nfunction runLengthDecode({ d, r }: { d: string; r: string }) {\n const data = atob(d);\n const runLengths = atob(r);\n let out = \"\";\n\n for (const [i, ch] of [...runLengths].entries()) {\n out += data[i]!.repeat(ch.codePointAt(0)!);\n }\n\n return Uint8Array.from([...out].map((x) => x.codePointAt(0)!));\n}\n","/**\n * Get next words from the beginning of [content] until all words have a length lower or equal then [length].\n *\n * @param length Max length of all words.\n * @param content The text content.\n */\nimport { Cell, type CellType } from \"./cell.js\";\nimport { consumeWords } from \"./consume_words.js\";\nimport { stripAnsiCode } from \"@jsr/std__fmt/colors\";\nimport { unicodeWidth } from \"./unicode_width.js\";\n// import { unicodeWidth } from \"@std/cli/unicode-width\";\n\n/**\n * Get longest cell from given row index.\n */\nexport function longest(\n index: number,\n rows: Array<Array<CellType>>,\n maxWidth?: number,\n): number {\n const cellLengths = rows.map((row) => {\n const cell = row[index];\n const cellValue = cell instanceof Cell && cell.getColSpan() > 1\n ? \"\"\n : cell?.toString() || \"\";\n\n return cellValue\n .split(\"\\n\")\n .map((line: string) => {\n const str = typeof maxWidth === \"undefined\"\n ? line\n : consumeWords(maxWidth, line);\n\n return strLength(str) || 0;\n });\n }).flat();\n\n return Math.max(...cellLengths);\n}\n\nexport const strLength = (str: string): number => {\n return unicodeWidth(stripAnsiCode(str));\n};\n\n/** Regex `source` to match any relevant ANSI code. */\nexport const ansiRegexSource =\n // deno-lint-ignore no-control-regex\n /\\x1b\\[(?:(?<_0>0)|(?<_22>1|2|22)|(?<_23>3|23)|(?<_24>4|24)|(?<_27>7|27)|(?<_28>8|28)|(?<_29>9|29)|(?<_39>30|31|32|33|34|35|36|37|38;2;\\d+;\\d+;\\d+|38;5;\\d+|39|90|91|92|93|94|95|96|97)|(?<_49>40|41|42|43|44|45|46|47|48;2;\\d+;\\d+;\\d+|48;5;\\d+|49|100|101|102|103|104|105|106|107))m/\n .source;\n\n/**\n * Get unclosed ANSI runs in a string.\n *\n * @param text - A string segment possibly containing unclosed ANSI runs.\n */\nexport function getUnclosedAnsiRuns(text: string) {\n type Token = { kind: string; content: string };\n const tokens: Token[] = [];\n for (const { groups } of text.matchAll(new RegExp(ansiRegexSource, \"g\"))) {\n const [_kind, content] = Object.entries(groups!).find(([_, val]) => val)!;\n tokens.push({ kind: _kind.slice(1), content });\n }\n\n let unclosed: Token[] = [];\n for (const token of tokens) {\n // Subsequent ANSI codes of a given kind automatically \"close\" previous\n // codes of the same kind, so we remove the previous ones.\n // E.g. in the string `${bg_red} A ${bg_yellow} B ${close_bg} C`, \"B\" only\n // has a single background color (yellow), and \"C\" has no background color.\n unclosed = [...unclosed.filter((y) => y.kind !== token.kind), token];\n }\n\n unclosed = unclosed.filter(({ content, kind }) => content !== kind);\n\n const currentSuffix = unclosed\n .map(({ kind }) => `\\x1b[${kind}m`).reverse().join(\"\");\n const nextPrefix = unclosed.map(({ content }) => `\\x1b[${content}m`).join(\"\");\n\n return {\n /** The suffix to be appended to the text to close all unclosed runs. */\n currentSuffix,\n /**\n * The prefix to be appended to the next segment to continue unclosed\n * runs if the input text forms the first segment of a multi-line string.\n */\n nextPrefix,\n };\n}\n","import { ansiRegexSource, strLength } from \"./_utils.js\";\n\n/**\n * Consumes the maximum amount of words from a string which is not longer than\n * given length. This function returns at least one word.\n *\n * ```ts\n * import { consumeWords } from \"./mod.ts\";\n *\n * const str = consumeWords(9, \"This is an example.\"); // returns: \"This is\"\n * ```\n *\n * @param length The maximum length of the returned string.\n * @param content The content from which the string should be consumed.\n */\nexport function consumeWords(length: number, content: string): string {\n let consumed = \"\";\n const words: Array<string> = content.split(\"\\n\")[0]?.split(/ /g);\n\n for (let i = 0; i < words.length; i++) {\n const word: string = words[i];\n\n // consume minimum one word\n if (consumed) {\n const nextLength = strLength(word);\n const consumedLength = strLength(consumed);\n if (consumedLength + nextLength >= length) {\n break;\n }\n }\n\n consumed += (i > 0 ? \" \" : \"\") + word;\n }\n\n return consumed;\n}\n\n/**\n * Consumes the maximum amount of chars from a string which is not longer than\n * given length, ignoring ANSI codes when calculating the length.\n * This function returns at least one char.\n *\n * ```ts\n * import { consumeChars } from \"./consume_words.ts\";\n *\n * const str = consumeChars(9, \"\\x1b[31mThis is an example.\"); // returns: \"\\x1b[31mThis is a\"\n * ```\n *\n * @param length The maximum length of the returned string.\n * @param content The content from which the string should be consumed.\n */\nexport function consumeChars(length: number, content: string): string {\n let consumed = \"\";\n const chars = [\n ...content.split(\"\\n\")[0].matchAll(\n new RegExp(`(?:${ansiRegexSource})+|.`, \"gu\"),\n ),\n ]\n .map(([match]) => match);\n\n for (const char of chars) {\n // consume minimum one char\n if (consumed) {\n const nextLength = strLength(char);\n const consumedLength = strLength(consumed);\n if (consumedLength + nextLength > length) {\n break;\n }\n }\n\n consumed += char;\n }\n\n return consumed;\n}\n","import { Cell, type CellType, type Direction } from \"./cell.js\";\n\n/** Allowed row type. */\nexport type RowType<\n T extends CellType | undefined = CellType | undefined,\n> =\n | Array<T>\n | Row<T>;\n\n/** Json row. */\nexport type DataRow = Record<string, string | number>;\n\n/** Row options. */\ninterface RowOptions {\n indent?: number;\n border?: boolean;\n align?: Direction;\n}\n\n/**\n * Row representation.\n *\n * Can be used to customize a single row.\n *\n * ```ts\n * import { Row, Table } from \"./mod.ts\";\n *\n * new Table()\n * .body([\n * new Row(\"Foo\", \"Bar\").align(\"right\"),\n * [\"Beep\", \"Boop\"],\n * ])\n * .render();\n * ```\n */\nexport class Row<\n T extends CellType | undefined = CellType | undefined,\n> extends Array<T> {\n protected options: RowOptions = {};\n\n /**\n * Create a new row. If cells is a row, all cells and options of the row will\n * be copied to the new row.\n *\n * @param cells Cells or row.\n */\n public static override from<T extends CellType | undefined>(\n cells: RowType<T>,\n ): Row<T> {\n const row = new this(...cells);\n if (cells instanceof Row) {\n row.options = { ...(cells as Row).options };\n }\n return row;\n }\n\n /** Clone row recursively with all options. */\n public clone(): Row {\n const row = new Row(\n ...this.map((cell: T) => cell instanceof Cell ? cell.clone() : cell),\n );\n row.options = { ...this.options };\n return row;\n }\n\n /**\n * Setter:\n */\n\n /**\n * Enable/disable cell border.\n *\n * @param enable Enable/disable cell border.\n * @param override Override existing value.\n */\n public border(enable = true, override = true): this {\n if (override || typeof this.options.border === \"undefined\") {\n this.options.border = enable;\n }\n return this;\n }\n\n /**\n * Align row content.\n *\n * @param direction Align direction.\n * @param override Override existing value.\n */\n public align(direction: Direction, override = true): this {\n if (override || typeof this.options.align === \"undefined\") {\n this.options.align = direction;\n }\n return this;\n }\n\n /**\n * Getter:\n */\n\n /** Check if row has border. */\n public getBorder(): boolean {\n return this.options.border === true;\n }\n\n /** Check if row or any child cell has border. */\n public hasBorder(): boolean {\n return this.getBorder() ||\n this.some((cell) => cell instanceof Cell && cell.getBorder());\n }\n\n /** Get row alignment. */\n public getAlign(): Direction {\n return this.options.align ?? \"left\";\n }\n}\n","import type { Column } from \"./column.ts\";\nimport { Cell, type CellType, type Direction } from \"./cell.js\";\nimport { consumeChars, consumeWords } from \"./consume_words.js\";\nimport { Row, type RowType } from \"./row.js\";\nimport type { BorderOptions, Table, TableSettings } from \"./table.ts\";\nimport { getUnclosedAnsiRuns, longest, strLength } from \"./_utils.js\";\n\n/** Layout render settings. */\ninterface RenderSettings {\n padding: Array<number>;\n width: Array<number>;\n columns: number;\n hasBorder: boolean;\n hasHeaderBorder: boolean;\n hasBodyBorder: boolean;\n rows: Array<Row<Cell>>;\n}\n\n/** Table layout renderer. */\nexport class TableLayout {\n /**\n * Table layout constructor.\n * @param table Table instance.\n * @param options Render options.\n */\n public constructor(\n private table: Table,\n private options: TableSettings,\n ) {}\n\n /** Generate table string. */\n public toString(): string {\n const opts: RenderSettings = this.createLayout();\n return opts.rows.length ? this.renderRows(opts) : \"\";\n }\n\n /**\n * Generates table layout including row and col span, converts all none\n * Cell/Row values to Cells and Rows and returns the layout rendering\n * settings.\n */\n protected createLayout(): RenderSettings {\n Object.keys(this.options.chars).forEach((key: string) => {\n if (typeof this.options.chars[key as keyof BorderOptions] !== \"string\") {\n this.options.chars[key as keyof BorderOptions] = \"\";\n }\n });\n\n const hasBodyBorder: boolean = this.table.getBorder() ||\n this.table.hasBodyBorder();\n const hasHeaderBorder: boolean = this.table.hasHeaderBorder();\n const hasBorder: boolean = hasHeaderBorder || hasBodyBorder;\n\n const rows = this.#getRows();\n\n const columns: number = Math.max(...rows.map((row) => row.length));\n for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) {\n const row = rows[rowIndex];\n const length: number = row.length;\n if (length < columns) {\n const diff = columns - length;\n for (let i = 0; i < diff; i++) {\n row.push(this.createCell(null, row, rowIndex, length + i));\n }\n }\n }\n\n const padding: Array<number> = [];\n const width: Array<number> = [];\n for (let colIndex = 0; colIndex < columns; colIndex++) {\n const column = this.options.columns.at(colIndex);\n const minColWidth: number = column?.getMinWidth() ??\n (Array.isArray(this.options.minColWidth)\n ? this.options.minColWidth[colIndex]\n : this.options.minColWidth);\n\n const maxColWidth: number = column?.getMaxWidth() ??\n (Array.isArray(this.options.maxColWidth)\n ? this.options.maxColWidth[colIndex]\n : this.options.maxColWidth);\n\n const colWidth: number = longest(colIndex, rows, maxColWidth);\n width[colIndex] = Math.min(maxColWidth, Math.max(minColWidth, colWidth));\n\n padding[colIndex] = column?.getPadding() ??\n (Array.isArray(this.options.padding)\n ? this.options.padding[colIndex]\n : this.options.padding);\n }\n\n return {\n padding,\n width,\n rows,\n columns,\n hasBorder,\n hasBodyBorder,\n hasHeaderBorder,\n };\n }\n\n #getRows(): Array<Row<Cell>> {\n const header: Row | undefined = this.table.getHeader();\n const rows = header ? [header, ...this.table] : this.table.slice();\n const hasSpan = rows.some((row) =>\n row.some((cell) =>\n cell instanceof Cell && (cell.getColSpan() > 1 || cell.getRowSpan() > 1)\n )\n );\n\n if (hasSpan) {\n return this.spanRows(rows);\n }\n\n return rows.map((row, rowIndex) => {\n const newRow = this.createRow(row);\n for (let colIndex = 0; colIndex < row.length; colIndex++) {\n newRow[colIndex] = this.createCell(\n row[colIndex],\n newRow,\n rowIndex,\n colIndex,\n );\n }\n return newRow;\n });\n }\n\n /**\n * Fills rows and cols by specified row/col span with a reference of the\n * original cell.\n */\n protected spanRows(rows: Array<RowType>) {\n const rowSpan: Array<number> = [];\n let colSpan = 1;\n let rowIndex = -1;\n\n while (true) {\n rowIndex++;\n if (rowIndex === rows.length && rowSpan.every((span) => span === 1)) {\n break;\n }\n const row = rows[rowIndex] = this.createRow(rows[rowIndex] || []);\n let colIndex = -1;\n\n while (true) {\n colIndex++;\n if (\n colIndex === row.length &&\n colIndex === rowSpan.length && colSpan === 1\n ) {\n break;\n }\n\n if (colSpan > 1) {\n colSpan--;\n rowSpan[colIndex] = rowSpan[colIndex - 1];\n row.splice(\n colIndex,\n this.getDeleteCount(rows, rowIndex, colIndex),\n row[colIndex - 1],\n );\n\n continue;\n }\n\n if (rowSpan[colIndex] > 1) {\n rowSpan[colIndex]--;\n rows[rowIndex].splice(\n colIndex,\n this.getDeleteCount(rows, rowIndex, colIndex),\n rows[rowIndex - 1][colIndex],\n );\n\n continue;\n }\n\n const cell = row[colIndex] = this.createCell(\n row[colIndex] || null,\n row,\n rowIndex,\n colIndex,\n );\n\n colSpan = cell.getColSpan();\n rowSpan[colIndex] = cell.getRowSpan();\n }\n }\n\n return rows as Array<Row<Cell>>;\n }\n\n protected getDeleteCount(\n rows: Array<Array<unknown>>,\n rowIndex: number,\n colIndex: number,\n ) {\n return colIndex <= rows[rowIndex].length - 1 &&\n typeof rows[rowIndex][colIndex] === \"undefined\"\n ? 1\n : 0;\n }\n\n /**\n * Create a new row from existing row or cell array.\n * @param row Original row.\n */\n protected createRow(row: RowType): Row<Cell> {\n return Row.from(row)\n .border(this.table.getBorder(), false)\n .align(this.table.getAlign(), false) as Row<Cell>;\n }\n\n /**\n * Create a new cell from existing cell or cell value.\n *\n * @param cell Original cell.\n * @param row Parent row.\n * @param rowIndex The row index of the cell.\n * @param colIndex The column index of the cell.\n */\n protected createCell(\n cell: CellType | null | undefined,\n row: Row,\n rowIndex: number,\n colIndex: number,\n ): Cell {\n const column: Column | undefined = this.options.columns.at(colIndex);\n const isHeaderRow = this.isHeaderRow(rowIndex);\n return Cell.from(cell ?? \"\")\n .border(\n (isHeaderRow ? null : column?.getBorder()) ?? row.getBorder(),\n false,\n )\n .align(\n (isHeaderRow ? null : column?.getAlign()) ?? row.getAlign(),\n false,\n );\n }\n\n private isHeaderRow(rowIndex: number) {\n return rowIndex === 0 && this.table.getHeader() !== undefined;\n }\n\n /**\n * Render table layout.\n * @param opts Render options.\n */\n protected renderRows(opts: RenderSettings): string {\n let result = \"\";\n const rowSpan: Array<number> = new Array(opts.columns).fill(1);\n\n for (let rowIndex = 0; rowIndex < opts.rows.length; rowIndex++) {\n result += this.renderRow(rowSpan, rowIndex, opts);\n }\n\n return result.slice(0, -1);\n }\n\n /**\n * Render row.\n * @param rowSpan Current row span.\n * @param rowIndex Current row index.\n * @param opts Render options.\n * @param isMultiline Is multiline row.\n */\n protected renderRow(\n rowSpan: Array<number>,\n rowIndex: number,\n opts: RenderSettings,\n isMultiline?: boolean,\n ): string {\n const row: Row<Cell> = opts.rows[rowIndex];\n const prevRow: Row<Cell> | undefined = opts.rows[rowIndex - 1];\n const nextRow: Row<Cell> | undefined = opts.rows[rowIndex + 1];\n let result = \"\";\n\n let colSpan = 1;\n\n // border top row\n if (!isMultiline && rowIndex === 0 && row.hasBorder()) {\n result += this.renderBorderRow(undefined, row, rowSpan, opts);\n }\n\n let isMultilineRow = false;\n\n result += \" \".repeat(this.options.indent || 0);\n\n for (let colIndex = 0; colIndex < opts.columns; colIndex++) {\n if (colSpan > 1) {\n colSpan--;\n rowSpan[colIndex] = rowSpan[colIndex - 1];\n continue;\n }\n\n result += this.renderCell(colIndex, row, opts);\n\n if (rowSpan[colIndex] > 1) {\n if (!isMultiline) {\n rowSpan[colIndex]--;\n }\n } else if (!prevRow || prevRow[colIndex] !== row[colIndex]) {\n rowSpan[colIndex] = row[colIndex].getRowSpan();\n }\n\n colSpan = row[colIndex].getColSpan();\n\n if (rowSpan[colIndex] === 1 && row[colIndex].length) {\n isMultilineRow = true;\n }\n }\n\n if (opts.columns > 0) {\n if (row[opts.columns - 1].getBorder()) {\n result += this.options.chars.right;\n } else if (opts.hasBorder) {\n result += \" \";\n }\n }\n\n result += \"\\n\";\n\n if (isMultilineRow) { // skip border\n return result + this.renderRow(rowSpan, rowIndex, opts, isMultilineRow);\n }\n\n // border mid row\n if (\n (opts.rows.length > 1) &&\n ((rowIndex === 0 && opts.hasHeaderBorder) ||\n (rowIndex < opts.rows.length - 1 && opts.hasBodyBorder))\n ) {\n result += this.renderBorderRow(row, nextRow, rowSpan, opts);\n }\n\n // border bottom row\n if (rowIndex === opts.rows.length - 1 && row.hasBorder()) {\n result += this.renderBorderRow(row, undefined, rowSpan, opts);\n }\n\n return result;\n }\n\n /**\n * Render cell.\n * @param colIndex Current col index.\n * @param row Current row.\n * @param opts Render options.\n * @param noBorder Disable border.\n */\n protected renderCell(\n colIndex: number,\n row: Row<Cell>,\n opts: RenderSettings,\n noBorder?: boolean,\n ): string {\n let result = \"\";\n const prevCell: Cell | undefined = row[colIndex - 1];\n\n const cell: Cell = row[colIndex];\n\n if (!noBorder) {\n if (colIndex === 0) {\n if (cell.getBorder()) {\n result += this.options.chars.left;\n } else if (opts.hasBorder) {\n result += \" \";\n }\n } else {\n if (cell.getBorder() || prevCell?.getBorder()) {\n result += this.options.chars.middle;\n } else if (opts.hasBorder) {\n result += \" \";\n }\n }\n }\n\n let maxLength: number = opts.width[colIndex];\n\n const colSpan: number = cell.getColSpan();\n if (colSpan > 1) {\n for (let o = 1; o < colSpan; o++) {\n // add padding and with of next cell\n maxLength += opts.width[colIndex + o] + opts.padding[colIndex + o];\n if (opts.hasBorder) {\n // add padding again and border with\n maxLength += opts.padding[colIndex + o] + 1;\n }\n }\n }\n\n const { current, next } = this.renderCellValue(cell, maxLength);\n\n row[colIndex].setValue(next);\n\n if (opts.hasBorder) {\n result += \" \".repeat(opts.padding[colIndex]);\n }\n\n result += current;\n\n if (opts.hasBorder || colIndex < opts.columns - 1) {\n result += \" \".repeat(opts.padding[colIndex]);\n }\n\n return result;\n }\n\n /**\n * Render specified length of cell. Returns the rendered value and a new cell\n * with the rest value.\n * @param cell Cell to render.\n * @param maxLength Max length of content to render.\n */\n protected renderCellValue(\n cell: Cell,\n maxLength: number,\n ): { current: string; next: string } {\n const length: number = Math.min(\n maxLength,\n strLength(cell.toString()),\n );\n let words: string = consumeWords(length, cell.toString());\n\n // break word if word is longer than max length\n const breakWord = strLength(words) > length;\n if (breakWord) {\n words = consumeChars(length, words);\n }\n\n // get next content and remove leading space if breakWord is not true\n // calculate from words.length _before_ any handling of unclosed ANSI codes\n const next = cell.toString().slice(words.length + (breakWord ? 0 : 1));\n\n words = cell.unclosedAnsiRuns + words;\n\n const { currentSuffix, nextPrefix } = getUnclosedAnsiRuns(words);\n\n words += currentSuffix;\n cell.unclosedAnsiRuns = nextPrefix;\n\n const fillLength = maxLength - strLength(words);\n\n // Align content\n const align: Direction = cell.getAlign();\n let current: string;\n if (fillLength === 0) {\n current = words;\n } else if (align === \"left\") {\n current = words + \" \".repeat(fillLength);\n } else if (align === \"center\") {\n current = \" \".repeat(Math.floor(fillLength / 2)) + words +\n \" \".repeat(Math.ceil(fillLength / 2));\n } else if (align === \"right\") {\n current = \" \".repeat(fillLength) + words;\n } else {\n throw new Error(\"Unknown direction: \" + align);\n }\n\n return { current, next };\n }\n\n /**\n * Render border row.\n * @param prevRow Previous row.\n * @param nextRow Next row.\n * @param rowSpan Current row span.\n * @param opts Render options.\n */\n protected renderBorderRow(\n prevRow: Row<Cell> | undefined,\n nextRow: Row<Cell> | undefined,\n rowSpan: Array<number>,\n opts: RenderSettings,\n ): string {\n let result = \"\";\n\n let colSpan = 1;\n for (let colIndex = 0; colIndex < opts.columns; colIndex++) {\n if (rowSpan[colIndex] > 1) {\n if (!nextRow) {\n throw new Error(\"invalid layout\");\n }\n if (colSpan > 1) {\n colSpan--;\n continue;\n }\n }\n result += this.renderBorderCell(\n colIndex,\n prevRow,\n nextRow,\n rowSpan,\n opts,\n );\n colSpan = nextRow?.[colIndex].getColSpan() ?? 1;\n }\n\n return result.length ? \" \".repeat(this.options.indent) + result + \"\\n\" : \"\";\n }\n\n /**\n * Render border cell.\n * @param colIndex Current index.\n * @param prevRow Previous row.\n * @param nextRow Next row.\n * @param rowSpan Current row span.\n * @param opts Render options.\n */\n protected renderBorderCell(\n colIndex: number,\n prevRow: Row<Cell> | undefined,\n nextRow: Row<Cell> | undefined,\n rowSpan: Array<number>,\n opts: RenderSettings,\n ): string {\n // a1 | b1\n // -------\n // a2 | b2\n\n const a1: Cell | undefined = prevRow?.[colIndex - 1];\n const a2: Cell | undefined = nextRow?.[colIndex - 1];\n const b1: Cell | undefined = prevRow?.[colIndex];\n const b2: Cell | undefined = nextRow?.[colIndex];\n\n const a1Border = !!a1?.getBorder();\n const a2Border = !!a2?.getBorder();\n const b1Border = !!b1?.getBorder();\n const b2Border = !!b2?.getBorder();\n\n const hasColSpan = (cell: Cell | undefined): boolean =>\n (cell?.getColSpan() ?? 1) > 1;\n const hasRowSpan = (cell: Cell | undefined): boolean =>\n (cell?.getRowSpan() ?? 1) > 1;\n\n let result = \"\";\n\n if (colIndex === 0) {\n if (rowSpan[colIndex] > 1) {\n if (b1Border) {\n result += this.options.chars.left;\n } else {\n result += \" \";\n }\n } else if (b1Border && b2Border) {\n result += this.options.chars.leftMid;\n } else if (b1Border) {\n result += this.options.chars.bottomLeft;\n } else if (b2Border) {\n result += this.options.chars.topLeft;\n } else {\n result += \" \";\n }\n } else if (colIndex < opts.columns) {\n if ((a1Border && b2Border) || (b1Border && a2Border)) {\n const a1ColSpan: boolean = hasColSpan(a1);\n const a2ColSpan: boolean = hasColSpan(a2);\n const b1ColSpan: boolean = hasColSpan(b1);\n const b2ColSpan: boolean = hasColSpan(b2);\n\n const a1RowSpan: boolean = hasRowSpan(a1);\n const a2RowSpan: boolean = hasRowSpan(a2);\n const b1RowSpan: boolean = hasRowSpan(b1);\n const b2RowSpan: boolean = hasRowSpan(b2);\n\n const hasAllBorder = a1Border && b2Border && b1Border && a2Border;\n const hasAllRowSpan = a1RowSpan && b1RowSpan && a2RowSpan && b2RowSpan;\n const hasAllColSpan = a1ColSpan && b1ColSpan && a2ColSpan && b2ColSpan;\n\n if (hasAllRowSpan && hasAllBorder) {\n result += this.options.chars.middle;\n } else if (hasAllColSpan && hasAllBorder && a1 === b1 && a2 === b2) {\n result += this.options.chars.mid;\n } else if (a1ColSpan && b1ColSpan && a1 === b1) {\n result += this.options.chars.topMid;\n } else if (a2ColSpan && b2ColSpan && a2 === b2) {\n result += this.options.chars.bottomMid;\n } else if (a1RowSpan && a2RowSpan && a1 === a2) {\n result += this.options.chars.leftMid;\n } else if (b1RowSpan && b2RowSpan && b1 === b2) {\n result += this.options.chars.rightMid;\n } else {\n result += this.options.chars.midMid;\n }\n } else if (a1Border && b1Border) {\n if (hasColSpan(a1) && hasColSpan(b1) && a1 === b1) {\n result += this.options.chars.bottom;\n } else {\n result += this.options.chars.bottomMid;\n }\n } else if (b1Border && b2Border) {\n if (rowSpan[colIndex] > 1) {\n result += this.options.chars.left;\n } else {\n result += this.options.chars.leftMid;\n }\n } else if (b2Border && a2Border) {\n if (hasColSpan(a2) && hasColSpan(b2) && a2 === b2) {\n result += this.options.chars.top;\n } else {\n result += this.options.chars.topMid;\n }\n } else if (a1Border && a2Border) {\n if (hasRowSpan(a1) && a1 === a2) {\n result += this.options.chars.right;\n } else {\n result += this.options.chars.rightMid;\n }\n } else if (a1Border) {\n result += this.options.chars.bottomRight;\n } else if (b1Border) {\n result += this.options.chars.bottomLeft;\n } else if (a2Border) {\n result += this.options.chars.topRight;\n } else if (b2Border) {\n result += this.options.chars.topLeft;\n } else {\n result += \" \";\n }\n }\n\n const length = opts.padding[colIndex] + opts.width[colIndex] +\n opts.padding[colIndex];\n\n if (rowSpan[colIndex] > 1 && nextRow) {\n result += this.renderCell(\n colIndex,\n nextRow,\n opts,\n true,\n );\n if (nextRow[colIndex] === nextRow[nextRow.length - 1]) {\n if (b1Border) {\n result += this.options.chars.right;\n } else {\n result += \" \";\n }\n return result;\n }\n } else if (b1Border && b2Border) {\n result += this.options.chars.mid.repeat(length);\n } else if (b1Border) {\n result += this.options.chars.bottom.repeat(length);\n } else if (b2Border) {\n result += this.options.chars.top.repeat(length);\n } else {\n result += \" \".repeat(length);\n }\n\n if (colIndex === opts.columns - 1) {\n if (b1Border && b2Border) {\n result += this.options.chars.rightMid;\n } else if (b1Border) {\n result += this.options.chars.bottomRight;\n } else if (b2Border) {\n result += this.options.chars.topRight;\n } else {\n result += \" \";\n }\n }\n\n return result;\n }\n}\n","import { type Border, border } from \"./border.js\";\nimport { Cell, type Direction } from \"./cell.js\";\nimport { Column, type ColumnOptions } from \"./column.js\";\nimport { TableLayout } from \"./_layout.js\";\nimport { type DataRow, Row, type RowType } from \"./row.js\";\n\n/** Border characters settings. */\nexport type BorderOptions = Partial<Border>;\n\n/** Table settings. */\nexport interface TableSettings {\n /** Table indentation. */\n indent: number;\n /** Enable/disable border on all cells. */\n border: boolean;\n /** Set min column width. */\n minColWidth: number | Array<number>;\n /** Set max column width. */\n maxColWidth: number | Array<number>;\n /** Set cell padding. */\n padding: number | Array<number>;\n /** Set table characters. */\n chars: Border;\n /** Set cell content alignment. */\n align?: Direction;\n /** Set column options. */\n columns: Array<Column>;\n}\n\n/** Table type. */\nexport type TableType<TRow extends RowType = RowType> =\n | Array<TRow>\n | Table<TRow>;\n\n/**\n * Table representation.\n *\n * ```ts\n * import { Row, Table } from \"./mod.ts\";\n *\n * new Table()\n * .header(new Row(\"Name\", \"Date\", \"City\", \"Country\").border())\n * .body([\n * [\"Baxter Herman\", \"Oct 1, 2020\", \"Harderwijk\", \"Slovenia\"],\n * [\"Jescie Wolfe\", \"Dec 4, 2020\", \"Alto Hospicio\", \"Japan\"],\n * [\"Allegra Cleveland\", \"Apr 16, 2020\", \"Avernas-le-Bauduin\", \"Samoa\"],\n * [\"Aretha Gamble\", \"Feb 22, 2021\", \"Honolulu\", \"Georgia\"],\n * ])\n * .render();\n * ```\n */\nexport class Table<TRow extends RowType = RowType> extends Array<TRow> {\n protected static _chars: Border = { ...border };\n protected options: TableSettings = {\n indent: 0,\n border: false,\n maxColWidth: Infinity,\n minColWidth: 0,\n padding: 1,\n chars: { ...Table._chars },\n columns: [],\n };\n private headerRow?: Row;\n\n /**\n * Create a new table. If rows is a table, all rows and options of the table\n * will be copied to the new table.\n *\n * @param rows An array of rows or a table instance.\n */\n public static override from<TRow extends RowType>(\n rows: TableType<TRow>,\n ): Table<TRow> {\n const table = new this(...rows);\n if (rows instanceof Table) {\n table.options = { ...(rows as Table).options };\n table.headerRow = rows.headerRow ? Row.from(rows.headerRow) : undefined;\n }\n return table;\n }\n\n /**\n * Create a new table from an array of json objects. An object represents a\n * row and each property a column.\n *\n * @param rows Array of objects.\n */\n public static fromJson(rows: Array<DataRow>): Table {\n return new this().fromJson(rows);\n }\n\n /**\n * Set global default border characters.\n *\n * @param chars Border options.\n */\n public static chars(chars: BorderOptions): typeof Table {\n Object.assign(this._chars, chars);\n return this;\n }\n\n /**\n * Write table or rows to stdout.\n *\n * @param rows Table or rows.\n */\n public static render<TRow extends RowType>(rows: TableType<TRow>): void {\n Table.from(rows).render();\n }\n\n /**\n * Read data from an array of json objects. An object represents a\n * row and each property a column.\n *\n * @param rows Array of objects.\n */\n public fromJson(rows: Array<DataRow>): this {\n this.header(Object.keys(rows[0]));\n this.body(rows.map((row) => Object.values(row) as TRow));\n return this;\n }\n\n /**\n * Set column options.\n *\n * @param columns An array of columns or column options.\n */\n public columns(columns: Array<Column | ColumnOptions>): this {\n this.options.columns = columns.map((column) =>\n column instanceof Column ? column : Column.from(column)\n );\n return this;\n }\n\n /**\n * Set column options by index.\n *\n @param index The column index.\n @param column Column or column options.\n */\n public column(\n index: number,\n column: Column | ColumnOptions,\n ): this {\n if (column instanceof Column) {\n this.options.columns[index] = column;\n } else if (this.options.columns[index]) {\n this.options.columns[index].options(column);\n } else {\n this.options.columns[index] = Column.from(column);\n }\n return this;\n }\n\n /**\n * Set table header.\n *\n * @param header Header row or cells.\n */\n public header(header: RowType): this {\n this.headerRow = header instanceof Row ? header : Row.from(header);\n return this;\n }\n\n /**\n * Set table body.\n *\n * @param rows Array of rows.\n */\n public body(rows: Array<TRow>): this {\n this.length = 0;\n this.push(...rows);\n return this;\n }\n\n /** Clone table recursively with header and options. */\n public clone(): Table {\n const table = new Table(\n ...this.map((row: TRow) =>\n row instanceof Row ? row.clone() : Row.from(row).clone()\n ),\n );\n table.options = { ...this.options };\n table.headerRow = this.headerRow?.clone();\n return table;\n }\n\n /** Generate table string. */\n public override toString(): string {\n return new TableLayout(this, this.options).toString();\n }\n\n /** Write table to stdout. */\n public render(): this {\n console.log(this.toString());\n return this;\n }\n\n /**\n * Set max column width.\n *\n * @param width Max column width.\n * @param override Override existing value.\n */\n public maxColWidth(width: number | Array<number>, override = true): this {\n if (override || typeof this.options.maxColWidth === \"undefined\") {\n this.options.maxColWidth = width;\n }\n return this;\n }\n\n /**\n * Set min column width.\n *\n * @param width Min column width.\n * @param override Override existing value.\n */\n public minColWidth(width: number | Array<number>, override = true): this {\n if (override || typeof this.options.minColWidth === \"undefined\") {\n this.options.minColWidth = width;\n }\n return this;\n }\n\n /**\n * Set table indentation.\n *\n * @param width Indent width.\n * @param override Override existing value.\n */\n public indent(width: number, override = true): this {\n if (override || typeof this.options.indent === \"undefined\") {\n this.options.indent = width;\n }\n return this;\n }\n\n /**\n * Set cell padding.\n *\n * @param padding Cell padding.\n * @param override Override existing value.\n */\n public padding(padding: number | Array<number>, override = true): this {\n if (override || typeof this.options.padding === \"undefined\") {\n this.options.padding = padding;\n }\n return this;\n }\n\n /**\n * Enable/disable cell border.\n *\n * @param enable Enable/disable cell border.\n * @param override Override existing value.\n */\n public border(enable = true, override = true): this {\n if (override || typeof this.options.border === \"undefined\") {\n this.options.border = enable;\n }\n return this;\n }\n\n /**\n * Align table content.\n *\n * @param direction Align direction.\n * @param override Override existing value.\n */\n public align(direction: Direction, override = true): this {\n if (override || typeof this.options.align === \"undefined\") {\n this.options.align = direction;\n }\n return this;\n }\n\n /**\n * Set border characters.\n *\n * @param chars Border options.\n */\n public chars(chars: BorderOptions): this {\n Object.assign(this.options.chars, chars);\n return this;\n }\n\n /** Get table header. */\n public getHeader(): Row | undefined {\n return this.headerRow;\n }\n\n /** Get table body. */\n public getBody(): Array<TRow> {\n return [...this];\n }\n\n /** Get max column width. */\n public getMaxColWidth(): number | Array<number> {\n return this.options.maxColWidth;\n }\n\n /** Get min column width. */\n public getMinColWidth(): number | Array<number> {\n return this.options.minColWidth;\n }\n\n /** Get table indentation. */\n public getIndent(): number {\n return this.options.indent;\n }\n\n /** Get cell padding. */\n public getPadding(): number | Array<number> {\n return this.options.padding;\n }\n\n /** Check if table has border. */\n public getBorder(): boolean {\n return this.options.border === true;\n }\n\n /** Check if header row has border. */\n public hasHeaderBorder(): boolean {\n const hasBorder = this.headerRow?.hasBorder();\n return hasBorder === true || (this.getBorder() && hasBorder !== false);\n }\n\n /** Check if table bordy has border. */\n public hasBodyBorder(): boolean {\n return this.getBorder() ||\n this.options.columns.some((column) => column.getBorder()) ||\n this.some((row) =>\n row instanceof Row\n ? row.hasBorder()\n : row.some((cell) => cell instanceof Cell ? cell.getBorder() : false)\n );\n }\n\n /** Check if table header or body has border. */\n public hasBorder(): boolean {\n return this.hasHeaderBorder() || this.hasBodyBorder();\n }\n\n /** Get table alignment. */\n public getAlign(): Direction {\n return this.options.align ?? \"left\";\n }\n\n /** Get columns. */\n public getColumns(): Array<Column> {\n return this.options.columns;\n }\n\n /** Get column by column index. */\n public getColumn(index: number): Column {\n return this.options.columns[index] ??= new Column();\n }\n}\n","// deno-lint-ignore-file no-explicit-any\n\n/**\n * Inspect values.\n *\n * @internal\n */\nexport function inspect(value: unknown, colors: boolean): string {\n // dnt-shim-ignore\n const { Deno } = globalThis as any;\n\n return Deno?.inspect(\n value,\n { depth: 1, colors, trailingComma: false },\n ) ?? JSON.stringify(value, null, 2);\n}\n","import type { Command } from \"./command.ts\";\nimport type {\n ArgumentValue,\n CompleteHandlerResult,\n TypeOrTypeHandler,\n ValuesHandlerResult,\n} from \"./types.ts\";\n\n/**\n * Base class for custom types.\n *\n * **Custom type example:**\n *\n * ```ts\n * import { Type, ArgumentValue } from \"./mod.ts\";\n *\n * export class ColorType extends Type<string> {\n * public parse({ label, name, value, type }: ArgumentValue): string {\n * if ([\"red\", \"blue\"].includes(value)) {\n * throw new Error(\n * `${label} \"${name}\" must be of type \"${type}\", but got \"${value}\".` +\n * \"Valid colors are: red, blue\"\n * );\n * }\n * return value;\n * }\n *\n * public override complete(): string[] {\n * return [\"red\", \"blue\"];\n * }\n * }\n * ```\n */\nexport abstract class Type<TValue> {\n public abstract parse(type: ArgumentValue): TValue;\n\n /**\n * Returns the default display text value for the type. This text will be shown\n * unless a custom value is provided for option default text.\n */\n public defaultText?(): string;\n\n /**\n * Returns values displayed in help text. If no complete method is provided,\n * these values are also used for shell completions.\n */\n public values?(\n cmd: Command,\n parent?: Command,\n ): ValuesHandlerResult;\n\n /**\n * Returns shell completion values. If no complete method is provided,\n * values from the values method are used.\n */\n public complete?(\n cmd: Command,\n parent?: Command,\n ): CompleteHandlerResult;\n}\n\n// deno-lint-ignore no-namespace\nexport namespace Type {\n /** @deprecated Use `InferType` instead. */\n export type infer<TType, TDefault = TType> = InferType<TType, TDefault>;\n}\n\nexport type InferType<TType, TDefault = TType> = TType extends\n TypeOrTypeHandler<infer Value> ? Value : TDefault;\n","import { Table } from \"@jsr/cliffy__table\";\nimport {\n bold,\n brightBlue,\n brightMagenta,\n dim,\n getColorEnabled,\n green,\n italic,\n red,\n setColorEnabled,\n yellow,\n} from \"@jsr/std__fmt/colors\";\nimport { inspect } from \"@jsr/cliffy__internal/runtime/inspect\";\nimport {\n dedent,\n getDescription,\n getFlag,\n parseArgumentsDefinition,\n} from \"../_utils.js\";\nimport type { Command } from \"../command.ts\";\nimport { Type } from \"../type.js\";\nimport type {\n Argument,\n EnvVar,\n Example,\n Option,\n TypeHandler,\n} from \"../types.ts\";\n\nexport interface HelpOptions {\n types?: boolean;\n hints?: boolean;\n colors?: boolean;\n long?: boolean;\n}\n\ninterface OptionGroup {\n name?: string;\n options: Array<Option>;\n}\n\n/** Help text generator. */\nexport class HelpGenerator {\n private indent = 2;\n private options: Required<HelpOptions>;\n\n /** Generate help text for given command. */\n public static generate(cmd: Command, options?: HelpOptions): string {\n return new HelpGenerator(cmd, options).generate();\n }\n\n private constructor(\n private cmd: Command,\n options: HelpOptions = {},\n ) {\n this.options = {\n types: false,\n hints: true,\n colors: true,\n long: false,\n ...options,\n };\n }\n\n private generate(): string {\n const areColorsEnabled = getColorEnabled();\n setColorEnabled(this.options.colors);\n\n const result = this.generateHeader() +\n this.generateMeta() +\n this.generateDescription() +\n this.generateArguments() +\n this.generateOptions() +\n this.generateCommands() +\n this.generateEnvironmentVariables() +\n this.generateExamples();\n\n setColorEnabled(areColorsEnabled);\n\n return result;\n }\n\n private generateHeader(): string {\n const usage = this.cmd.getUsage();\n const rows = [\n [\n bold(\"Usage:\"),\n brightMagenta(\n this.cmd.getPath() +\n (usage ? \" \" + highlightArguments(usage, this.options.types) : \"\"),\n ),\n ],\n ];\n const version: string | undefined = this.cmd.getVersion();\n if (version) {\n rows.push([bold(\"Version:\"), yellow(`${this.cmd.getVersion()}`)]);\n }\n return \"\\n\" +\n Table.from(rows)\n .padding(1)\n .toString() +\n \"\\n\";\n }\n\n private generateMeta(): string {\n const meta = Object.entries(this.cmd.getMeta());\n if (!meta.length) {\n return \"\";\n }\n\n const rows = [];\n for (const [name, value] of meta) {\n rows.push([bold(`${name}: `) + value]);\n }\n\n return \"\\n\" +\n Table.from(rows)\n .padding(1)\n .toString() +\n \"\\n\";\n }\n\n private generateDescription(): string {\n if (!this.cmd.getDescription()) {\n return \"\";\n }\n return this.label(\"Description\") +\n Table.from([\n [dedent(this.cmd.getDescription())],\n ])\n .indent(this.indent)\n .maxColWidth(140)\n .padding(1)\n .toString() +\n \"\\n\";\n }\n\n private generateArguments(): string {\n const args = this.cmd.getArguments();\n if (!args.length || !args.find((arg) => arg.description)) {\n return \"\";\n }\n\n return this.label(\"Arguments\") +\n Table.from([\n ...args\n .filter((arg) => arg.description)\n .map((argument: Argument) => [\n highlightArguments(\n argument.raw || \"\",\n this.options.types,\n ),\n red(bold(\"-\")),\n getDescription(argument.description ?? \"\", !this.options.long),\n this.generateArgumentHints(argument),\n ]),\n ])\n .padding([2, 1, 2])\n .indent(this.indent)\n .maxColWidth([60, 1, 80, 60])\n .toString() +\n \"\\n\";\n }\n\n private generateOptions(): string {\n const options = this.cmd.getOptions(false);\n if (!options.length) {\n return \"\";\n }\n\n let groups: Array<OptionGroup> = [];\n const hasGroups = options.some((option) => option.groupName);\n if (hasGroups) {\n for (const option of options) {\n let group = groups.find((group) => group.name === option.groupName);\n if (!group) {\n group = {\n name: option.groupName,\n options: [],\n };\n groups.push(group);\n }\n group.options.push(option);\n }\n } else {\n groups = [{\n name: \"Options\",\n options,\n }];\n }\n\n let result = \"\";\n for (const group of groups) {\n result += this.generateOptionGroup(group);\n }\n\n return result;\n }\n\n private generateOptionGroup(group: OptionGroup): string {\n if (!group.options.length) {\n return \"\";\n }\n const hasTypeDefinitions = !!group.options.find((option) =>\n !!option.typeDefinition\n );\n\n if (hasTypeDefinitions) {\n return this.label(group.name ?? \"Options\") +\n Table.from([\n ...group.options.map((option: Option) => [\n option.flags.map((flag) => brightBlue(flag)).join(\", \"),\n highlightArguments(\n option.typeDefinition || \"\",\n this.options.types,\n ),\n red(bold(\"-\")),\n getDescription(option.description, !this.options.long),\n this.generateOptionHints(option),\n ]),\n ])\n .padding([2, 2, 1, 2])\n .indent(this.indent)\n .maxColWidth([60, 60, 1, 80, 60])\n .toString() +\n \"\\n\";\n }\n\n return this.label(group.name ?? \"Options\") +\n Table.from([\n ...group.options.map((option: Option) => [\n option.flags.map((flag) => brightBlue(flag)).join(\", \"),\n red(bold(\"-\")),\n getDescription(option.description, !this.options.long),\n this.generateOptionHints(option),\n ]),\n ])\n .indent(this.indent)\n .maxColWidth([60, 1, 80, 60])\n .padding([2, 1, 2])\n .toString() +\n \"\\n\";\n }\n\n private generateCommands(): string {\n const commands = this.cmd.getCommands(false);\n if (!commands.length) {\n return \"\";\n }\n\n const hasTypeDefinitions = !!commands.find((command) =>\n !!command.getArgsDefinition()\n );\n\n if (hasTypeDefinitions) {\n return this.label(\"Commands\") +\n Table.from([\n ...commands.map((command: Command) => [\n [command.getName(), ...command.getAliases()].map((name) =>\n brightBlue(name)\n ).join(\", \"),\n highlightArguments(\n command.getArgsDefinition() || \"\",\n this.options.types,\n ),\n red(bold(\"-\")),\n command.getShortDescription(),\n ]),\n ])\n .indent(this.indent)\n .maxColWidth([60, 60, 1, 80])\n .padding([2, 2, 1, 2])\n .toString() +\n \"\\n\";\n }\n\n return this.label(\"Commands\") +\n Table.from([\n ...commands.map((command: Command) => [\n [command.getName(), ...command.getAliases()].map((name) =>\n brightBlue(name)\n )\n .join(\", \"),\n red(bold(\"-\")),\n command.getShortDescription(),\n ]),\n ])\n .maxColWidth([60, 1, 80])\n .padding([2, 1, 2])\n .indent(this.indent)\n .toString() +\n \"\\n\";\n }\n\n private generateEnvironmentVariables(): string {\n const envVars = this.cmd.getEnvVars(false);\n if (!envVars.length) {\n return \"\";\n }\n return this.label(\"Environment variables\") +\n Table.from([\n ...envVars.map((envVar: EnvVar) => [\n envVar.names.map((name: string) => brightBlue(name)).join(\", \"),\n highlightArgumentDetails(\n envVar.details,\n this.options.types,\n ),\n red(bold(\"-\")),\n this.options.long\n ? dedent(envVar.description)\n : envVar.description.trim().split(\"\\n\", 1)[0],\n envVar.required ? `(${yellow(`required`)})` : \"\",\n ]),\n ])\n .padding([2, 2, 1, 2])\n .indent(this.indent)\n .maxColWidth([60, 60, 1, 80, 10])\n .toString() +\n \"\\n\";\n }\n\n private generateExamples(): string {\n const examples = this.cmd.getExamples();\n if (!examples.length) {\n return \"\";\n }\n return this.label(\"Examples\") +\n Table.from(examples.map((example: Example) => [\n dim(bold(example.name)),\n dedent(example.description),\n ]))\n .padding(1)\n .indent(this.indent)\n .maxColWidth(150)\n .toString() +\n \"\\n\";\n }\n\n private generateOptionHints(option: Option): string {\n if (!this.options.hints) {\n return \"\";\n }\n const hints: Array<string> = [];\n\n option.required && hints.push(yellow(`required`));\n\n const type = this.cmd.getType(option.args[0]?.type)?.handler;\n\n if (\n typeof option.default !== \"undefined\" ||\n typeof option.defaultText !== \"undefined\"\n ) {\n const defaultValue = typeof option.default === \"function\"\n ? option.default()\n : option.default;\n\n const defaultText = typeof option.defaultText === \"function\"\n ? option.defaultText(defaultValue)\n : (typeof option.defaultText !== \"undefined\"\n ? option.defaultText\n : ((type instanceof Type && type.defaultText)\n ? type.defaultText()\n : defaultValue));\n\n if (typeof defaultText !== \"undefined\") {\n hints.push(\n bold(`Default: `) + inspect(defaultText, this.options.colors),\n );\n }\n }\n\n option.depends?.length && hints.push(\n yellow(bold(`Depends: `)) +\n italic(option.depends.map(getFlag).join(\", \")),\n );\n\n option.conflicts?.length && hints.push(\n red(bold(`Conflicts: `)) +\n italic(option.conflicts.map(getFlag).join(\", \")),\n );\n\n return this.generateHints(type, hints);\n }\n\n private generateArgumentHints(option: Argument): string {\n if (!this.options.hints) {\n return \"\";\n }\n const hints: Array<string> = [];\n\n !option.optional && hints.push(yellow(`required`));\n\n const type = this.cmd.getType(option.type)?.handler;\n\n return this.generateHints(type, hints);\n }\n\n private generateHints(\n type: Type<unknown> | TypeHandler<unknown> | undefined,\n hints: Array<string>,\n ) {\n if (type instanceof Type) {\n const possibleValues = type.values?.(this.cmd, this.cmd.getParent());\n if (possibleValues?.length) {\n hints.push(\n bold(`Values: `) +\n possibleValues.map((value: unknown) =>\n inspect(value, this.options.colors)\n ).join(\", \"),\n );\n }\n }\n\n if (hints.length) {\n return `(${hints.join(\", \")})`;\n }\n\n return \"\";\n }\n\n private label(label: string) {\n return \"\\n\" + bold(`${label}:`) + \"\\n\\n\";\n }\n}\n\n/**\n * Colorize arguments string.\n * @param argsDefinition Arguments definition: `<color1:string> <color2:string>`\n * @param types Show types.\n */\nfunction highlightArguments(argsDefinition: string, types = true) {\n if (!argsDefinition) {\n return \"\";\n }\n\n return parseArgumentsDefinition(argsDefinition, false, true)\n .map((arg: Argument | string) =>\n typeof arg === \"string\" ? arg : highlightArgumentDetails(arg, types)\n )\n .join(\" \");\n}\n\n/**\n * Colorize argument string.\n * @param arg Argument details.\n * @param types Show types.\n */\nfunction highlightArgumentDetails(\n arg: Argument,\n types = true,\n): string {\n let str = \"\";\n\n str += yellow(arg.optional ? \"[\" : \"<\");\n\n let name = \"\";\n name += arg.name;\n if (arg.variadic) {\n name += \"...\";\n }\n name = brightMagenta(name);\n\n str += name;\n\n if (types) {\n str += yellow(\":\");\n str += red(arg.type);\n if (arg.list) {\n str += green(\"[]\");\n }\n }\n\n str += yellow(arg.optional ? \"]\" : \">\");\n\n return str;\n}\n","import { boolean } from \"@jsr/cliffy__flags\";\nimport type { ArgumentValue } from \"../types.ts\";\nimport { Type } from \"../type.js\";\n\n/** Boolean type with auto completion. Allows `true`, `false`, `0` and `1`. */\nexport class BooleanType extends Type<boolean> {\n /** Parse boolean type. */\n public parse(type: ArgumentValue): boolean {\n return boolean(type);\n }\n\n /** Complete boolean type. */\n public override complete(): string[] {\n return [\"true\", \"false\"];\n }\n}\n","import { string } from \"@jsr/cliffy__flags\";\nimport { Type } from \"../type.js\";\nimport type { ArgumentValue } from \"../types.ts\";\n\n/** String type. Allows any value. */\nexport class StringType extends Type<string> {\n /** Complete string type. */\n public parse(type: ArgumentValue): string {\n return string(type);\n }\n}\n","import { StringType } from \"./string.js\";\n\n// export interface FileTypeOptions {\n// dirsOnly?: boolean;\n// pattern?: string;\n// ignore?: Array<string>;\n// }\n\n/** Integer type. */\nexport class FileType extends StringType {\n constructor() {\n super();\n }\n\n // getOptions(): FileTypeOptions {\n // return this.opts;\n // }\n}\n","import { Type } from \"../type.js\";\nimport type { ArgumentValue } from \"../types.ts\";\nimport { integer } from \"@jsr/cliffy__flags\";\n\n/** Integer type. */\nexport class IntegerType extends Type<number> {\n /** Parse integer type. */\n public parse(type: ArgumentValue): number {\n return integer(type);\n }\n}\n","import { number } from \"@jsr/cliffy__flags\";\nimport { Type } from \"../type.js\";\nimport type { ArgumentValue } from \"../types.ts\";\n\n/** Number type. */\nexport class NumberType extends Type<number> {\n /** Parse number type. */\n public parse(type: ArgumentValue): number {\n return number(type);\n }\n}\n","import { StringType } from \"./string.js\";\n\n/** Secret type. Allows any value, and does not show values in help text. */\nexport class SecretType extends StringType {\n public override defaultText(): string {\n return \"******\";\n }\n}\n","import { bold, yellow } from \"@jsr/std__fmt/colors\";\nimport { Command } from \"../command.js\";\n\n/** Check if new version is available and add hint to version. */\n// deno-lint-ignore no-explicit-any\nexport async function checkVersion(cmd: Command<any>): Promise<void> {\n const mainCommand = cmd.getMainCommand();\n const upgradeCommand = mainCommand.getCommand(\"upgrade\");\n\n if (!isUpgradeCommand(upgradeCommand)) {\n return;\n }\n\n if (!await upgradeCommand.hasRequiredPermissions()) {\n // If not all required permissions were pre-granted, skip the version check to prevent prompting user\n return;\n }\n const latestVersion = await upgradeCommand.getLatestVersion();\n const currentVersion = mainCommand.getVersion();\n\n if (!currentVersion || currentVersion === latestVersion) {\n return;\n }\n const versionHelpText =\n `(New version available: ${latestVersion}. Run '${mainCommand.getName()} upgrade' to upgrade to the latest version!)`;\n\n mainCommand.version(`${currentVersion} ${bold(yellow(versionHelpText))}`);\n}\n\nfunction isUpgradeCommand(command: unknown): command is UpgradeCommandImpl {\n return command instanceof Command && \"getLatestVersion\" in command &&\n \"hasRequiredPermissions\" in command;\n}\n\ninterface UpgradeCommandImpl {\n hasRequiredPermissions(): Promise<boolean>;\n getLatestVersion(): Promise<string>;\n}\n","// deno-lint-ignore-file no-explicit-any\nimport {\n parseFlags,\n type ParseFlagsContext,\n UnknownTypeError,\n ValidationError as FlagsValidationError,\n} from \"@jsr/cliffy__flags\";\nimport { bold, brightBlue, red } from \"@jsr/std__fmt/colors\";\nimport type {\n IsRequired,\n MapTypes,\n MapValue,\n MergeOptions,\n TypedArgument,\n TypedArguments,\n TypedArgumentValue,\n TypedCommandArguments,\n TypedEnv,\n TypedOption,\n TypedType,\n} from \"./_argument_types.ts\";\nimport {\n CommandNotFoundError,\n DefaultCommandNotFoundError,\n DuplicateCommandAliasError,\n DuplicateCommandNameError,\n DuplicateCompletionError,\n DuplicateEnvVarError,\n DuplicateExampleError,\n DuplicateOptionNameError,\n DuplicateTypeError,\n MissingArgumentError,\n MissingArgumentsError,\n MissingCommandNameError,\n MissingRequiredEnvVarError,\n NoArgumentsAllowedError,\n TooManyArgumentsError,\n TooManyEnvVarValuesError,\n UnexpectedOptionalEnvVarValueError,\n UnexpectedVariadicEnvVarValueError,\n UnknownCommandError,\n ValidationError,\n} from \"./_errors.js\";\nimport { exit } from \"@jsr/cliffy__internal/runtime/exit\";\nimport { getArgs } from \"@jsr/cliffy__internal/runtime/get-args\";\nimport { getEnv } from \"@jsr/cliffy__internal/runtime/get-env\";\nimport type { Merge, Mutable, OneOf, ValueOf } from \"./_type_utils.ts\";\nimport {\n getDescription,\n parseArgumentsDefinition,\n splitArguments,\n underscoreToCamelCase,\n} from \"./_utils.js\";\nimport { HelpGenerator, type HelpOptions } from \"./help/_help_generator.js\";\nimport { Type } from \"./type.js\";\nimport type {\n ActionHandler,\n Argument,\n ArgumentValue,\n ArgumentValueHandler,\n CommandArgumentOptions,\n CommandResult,\n CompleteHandler,\n CompleteOptions,\n Completion,\n DefaultText,\n DefaultValue,\n Description,\n EnvVar,\n EnvVarOptions,\n EnvVarValueHandler,\n ErrorHandler,\n Example,\n GlobalEnvVarOptions,\n GlobalOptionOptions,\n HelpHandler,\n Option,\n OptionOptions,\n OptionValueHandler,\n TypeDef,\n TypeOptions,\n TypeOrTypeHandler,\n VersionHandler,\n} from \"./types.ts\";\nimport { BooleanType } from \"./types/boolean.js\";\nimport { FileType } from \"./types/file.js\";\nimport { IntegerType } from \"./types/integer.js\";\nimport { NumberType } from \"./types/number.js\";\nimport { SecretType } from \"./types/secret.js\";\nimport { StringType } from \"./types/string.js\";\nimport { checkVersion } from \"./upgrade/_check_version.js\";\n\nexport interface ArgDefinition extends CommandArgumentOptions<any, any, any> {\n arg: string;\n description?: string;\n}\n\ninterface CommandSettings {\n name: string;\n version?: VersionHandler;\n help?: HelpHandler;\n errorHandler?: ErrorHandler;\n actionHandler?: ActionHandler;\n globalActionHandler?: ActionHandler;\n description: Description;\n usage?: string;\n examples: Array<Example>;\n aliases: Array<string>;\n arguments?: Array<ArgDefinition>;\n throwOnError?: boolean;\n allowEmpty?: boolean;\n stopEarly?: boolean;\n defaultCommand?: string;\n useRawArgs?: boolean;\n isHidden?: boolean;\n isGlobal?: boolean;\n shouldExit?: boolean;\n noGlobals?: boolean;\n meta: Record<string, string>;\n commands: Map<string, Command<any>>;\n versionOptions?: DefaultOption | false;\n helpOptions?: DefaultOption | false;\n}\n\ninterface CommandProps {\n rawArgs: Array<string>;\n literalArgs: Array<string>;\n hasDefaults?: boolean;\n globalParent?: Command<any>;\n args: Array<Argument>;\n versionOption?: Option;\n helpOption?: Option;\n isRoot?: boolean;\n}\n\ninterface BuilderProps {\n groupName: string | null;\n types: Map<string, TypeDef>;\n options: Array<Option>;\n envVars: Array<EnvVar>;\n completions: Map<string, Completion>;\n}\n\nexport interface SubCommandOptions {\n override?: boolean;\n}\n\n/**\n * Chainable command factory class.\n *\n * The command class can be used to create main and sub commands. All methods\n * from the command class are chainable. Options, arguments, types, etc. that\n * belong to the main command, should be registered before the first sub-command\n * is registered. All options, arguments, etc. that are registered after calling\n * the `.command()` method will be registered to that child-command.\n *\n * When calling the `.reset()` method, options, arguments, etc. will be\n * registered again to the main command.\n *\n * @example Todo cli\n *\n * ```ts\n * import { Command } from \"./mod.ts\";\n *\n * export const cli = new Command()\n * .name(\"todo\")\n * .description(\"Todo cli.\")\n * .globalOption(\"--verbose\", \"Enable verbose output.\")\n * .globalEnv(\"VERBOSE=<value>\", \"Enable verbose output.\")\n * .command(\"add <todo>\", \"Add todo.\")\n * .action(({ verbose }, todo: string) => {\n * if (verbose) {\n * console.log(\"Add todo '%s'.\", todo);\n * }\n * })\n * .command(\"delete <id>\", \"Delete todo.\")\n * .action(({ verbose }, id: string) => {\n * if (verbose) {\n * console.log(\"Delete todo with id '%s'.\", id);\n * }\n * });\n *\n * if (import.meta.main) {\n * await cli.parse();\n * }\n * ```\n *\n * @example Use command instance as child command\n *\n * ```ts\n * import { Command } from \"./mod.ts\";\n *\n * export const addCommand = new Command<{ verbose?: boolean }>()\n * .description(\"Add todo.\")\n * .arguments(\"<todo>\")\n * .action(({ verbose }, todo: string) => {\n * if (verbose) {\n * console.log(\"Add todo '%s'.\", todo);\n * }\n * });\n *\n * export const deleteCommand = new Command<{ verbose?: boolean }>()\n * .description(\"Delete todo.\")\n * .arguments(\"<id>\")\n * .action(({ verbose }, id: string) => {\n * if (verbose) {\n * console.log(\"Delete todo with id '%s'.\", id);\n * }\n * });\n *\n * export const cli = new Command()\n * .name(\"todo\")\n * .description(\"Todo cli.\")\n * .globalOption(\"--verbose\", \"Enable verbose output.\")\n * .globalEnv(\"VERBOSE=<value:boolean>\", \"Enable verbose output.\")\n * .command(\"add\", addCommand)\n * .command(\"delete\", deleteCommand);\n *\n * if (import.meta.main) {\n * await cli.parse();\n * }\n * ```\n */\nexport class Command<\n TParentCommandGlobals extends Record<string, unknown> | void = void,\n TParentCommandTypes extends Record<string, unknown> | void =\n TParentCommandGlobals extends number ? any : void,\n TCommandOptions extends Record<string, unknown> | void =\n TParentCommandGlobals extends number ? any : void,\n TCommandArguments extends Array<unknown> = TParentCommandGlobals extends\n number ? any : [],\n TCommandGlobals extends Record<string, unknown> | void =\n TParentCommandGlobals extends number ? any : void,\n TCommandTypes extends Record<string, unknown> | void =\n TParentCommandGlobals extends number ? any : {\n number: number;\n integer: number;\n string: string;\n boolean: boolean;\n file: string;\n secret: string;\n },\n TCommandGlobalTypes extends Record<string, unknown> | void =\n TParentCommandGlobals extends number ? any : void,\n TParentCommand extends Command<any> | undefined =\n TParentCommandGlobals extends number ? any : undefined,\n> {\n cmd: Command<any> = this;\n parent?: TParentCommand;\n props: CommandProps = {\n rawArgs: [],\n literalArgs: [],\n args: [],\n };\n settings: CommandSettings = {\n name: \"COMMAND\",\n description: \"\",\n examples: [],\n aliases: [],\n meta: {},\n commands: new Map<string, Command<any>>(),\n };\n builder: BuilderProps = {\n groupName: null,\n types: new Map(),\n options: [],\n envVars: [],\n completions: new Map<string, Completion>(),\n };\n\n /** Disable version option. */\n public versionOption(enable: false): this;\n\n /**\n * Set global version option.\n *\n * @param flags The flags of the version option.\n * @param desc The description of the version option.\n * @param opts Version option options.\n */\n public versionOption(\n flags: string,\n desc?: string,\n opts?:\n & OptionOptions<\n Partial<TCommandOptions>,\n TCommandArguments,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand\n >\n & {\n global: true;\n },\n ): this;\n\n /**\n * Set version option.\n *\n * @param flags The flags of the version option.\n * @param desc The description of the version option.\n * @param opts Version option options.\n */\n public versionOption(\n flags: string,\n desc?: string,\n opts?: OptionOptions<\n TCommandOptions,\n TCommandArguments,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand\n >,\n ): this;\n\n /**\n * Set version option.\n *\n * @param flags The flags of the version option.\n * @param desc The description of the version option.\n * @param opts The action of the version option.\n */\n public versionOption(\n flags: string,\n desc?: string,\n opts?: ActionHandler<\n TCommandOptions,\n TCommandArguments,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand\n >,\n ): this;\n\n public versionOption(\n flags: string | false,\n desc?: string,\n opts?:\n | ActionHandler<\n TCommandOptions,\n TCommandArguments,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand\n >\n | OptionOptions<\n TCommandOptions,\n TCommandArguments,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand\n >\n | OptionOptions<\n Partial<TCommandOptions>,\n TCommandArguments,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand\n >\n & {\n global: true;\n },\n ): this {\n this.settings.versionOptions = flags === false ? flags : {\n flags,\n desc,\n opts: typeof opts === \"function\" ? { action: opts } : opts,\n };\n return this;\n }\n\n /** Disable help option. */\n public helpOption(enable: false): this;\n\n /**\n * Set global help option.\n *\n * @param flags The flags of the help option.\n * @param desc The description of the help option.\n * @param opts Help option options.\n */\n public helpOption(\n flags: string,\n desc?: string,\n opts?:\n & OptionOptions<\n Partial<TCommandOptions>,\n TCommandArguments,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand\n >\n & {\n global: true;\n },\n ): this;\n\n /**\n * Set help option.\n *\n * @param flags The flags of the help option.\n * @param desc The description of the help option.\n * @param opts Help option options.\n */\n public helpOption(\n flags: string,\n desc?: string,\n opts?: OptionOptions<\n TCommandOptions,\n TCommandArguments,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand\n >,\n ): this;\n\n /**\n * Set help option.\n *\n * @param flags The flags of the help option.\n * @param desc The description of the help option.\n * @param opts The action of the help option.\n */\n public helpOption(\n flags: string,\n desc?: string,\n opts?: ActionHandler<\n TCommandOptions,\n TCommandArguments,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand\n >,\n ): this;\n\n public helpOption(\n flags: string | false,\n desc?: string,\n opts?:\n | ActionHandler<\n TCommandOptions,\n TCommandArguments,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand\n >\n | OptionOptions<\n TCommandOptions,\n TCommandArguments,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand\n >\n | OptionOptions<\n Partial<TCommandOptions>,\n TCommandArguments,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand\n >\n & {\n global: true;\n },\n ): this {\n this.settings.helpOptions = flags === false ? flags : {\n flags,\n desc,\n opts: typeof opts === \"function\" ? { action: opts } : opts,\n };\n return this;\n }\n\n /**\n * Add new sub-command.\n *\n * @param name Command definition. E.g: `my-command <input-file:string> <output-file:string>`\n * @param cmd The new child command to register.\n * @param options Sub-command options.\n */\n public command<\n TCommand extends Command<\n (TGlobalOptions & Record<string, unknown>) | void | undefined,\n TGlobalTypes | void | undefined,\n Record<string, unknown> | void,\n Array<unknown>,\n Record<string, unknown> | void,\n Record<string, unknown> | void,\n Record<string, unknown> | void,\n Command<\n TGlobalOptions | void | undefined,\n TGlobalTypes | void | undefined,\n Record<string, unknown> | void,\n Array<unknown>,\n Record<string, unknown> | void,\n Record<string, unknown> | void,\n Record<string, unknown> | void,\n undefined\n >\n >,\n TGlobalOptions\n extends (TParentCommand extends Command<any> ? TParentCommandGlobals\n : Merge<TParentCommandGlobals, TCommandGlobals>),\n TGlobalTypes\n extends (TParentCommand extends Command<any> ? TParentCommandTypes\n : Merge<TParentCommandTypes, TCommandTypes>),\n >(\n name: string,\n cmd: TCommand,\n options?: SubCommandOptions,\n ): ReturnType<TCommand[\"reset\"]> extends Command<\n Record<string, unknown> | void,\n Record<string, unknown> | void,\n infer Options,\n infer Arguments,\n infer GlobalOptions,\n infer Types,\n infer GlobalTypes,\n undefined\n > ? Command<\n TGlobalOptions,\n TGlobalTypes,\n Options,\n Arguments,\n GlobalOptions,\n Types,\n GlobalTypes,\n OneOf<TParentCommand, this>\n >\n : never;\n\n /**\n * Add new sub-command.\n *\n * @param name Command definition. E.g: `my-command <input-file:string> <output-file:string>`\n * @param cmd The new child command to register.\n * @param options Sub-command options.\n */\n public command<\n TCommand extends Command<\n TGlobalOptions | void | undefined,\n TGlobalTypes | void | undefined,\n Record<string, unknown> | void,\n Array<unknown>,\n Record<string, unknown> | void,\n Record<string, unknown> | void,\n Record<string, unknown> | void,\n OneOf<TParentCommand, this> | undefined\n >,\n TGlobalOptions\n extends (TParentCommand extends Command<any> ? TParentCommandGlobals\n : Merge<TParentCommandGlobals, TCommandGlobals>),\n TGlobalTypes\n extends (TParentCommand extends Command<any> ? TParentCommandTypes\n : Merge<TParentCommandTypes, TCommandTypes>),\n >(\n name: string,\n cmd: TCommand,\n options?: SubCommandOptions,\n ): TCommand extends Command<\n Record<string, unknown> | void,\n Record<string, unknown> | void,\n infer Options,\n infer Arguments,\n infer GlobalOptions,\n infer Types,\n infer GlobalTypes,\n OneOf<TParentCommand, this> | undefined\n > ? Command<\n TGlobalOptions,\n TGlobalTypes,\n Options,\n Arguments,\n GlobalOptions,\n Types,\n GlobalTypes,\n OneOf<TParentCommand, this>\n >\n : never;\n\n /**\n * Add new sub-command.\n *\n * @param nameAndArguments Command definition. E.g: `my-command <input-file:string> <output-file:string>`\n * @param desc The description of the new child command.\n * @param options Sub-command options.\n */\n public command<\n TNameAndArguments extends string,\n TArguments extends TypedCommandArguments<\n TNameAndArguments,\n TParentCommand extends Command<any> ? TParentCommandTypes\n : Merge<TParentCommandTypes, TCommandGlobalTypes>\n >,\n >(\n nameAndArguments: TNameAndArguments,\n desc?: string,\n options?: SubCommandOptions,\n ): TParentCommandGlobals extends number ? Command<any> : Command<\n TParentCommand extends Command<any> ? TParentCommandGlobals\n : Merge<TParentCommandGlobals, TCommandGlobals>,\n TParentCommand extends Command<any> ? TParentCommandTypes\n : Merge<TParentCommandTypes, TCommandGlobalTypes>,\n void,\n TArguments,\n void,\n void,\n void,\n OneOf<TParentCommand, this>\n >;\n\n /**\n * Add new sub-command.\n * @param nameAndArguments Command definition. E.g: `my-command <input-file:string> <output-file:string>`\n * @param cmdOrDescription The description of the new child command.\n * @param options Sub-command options.\n */\n command(\n nameAndArguments: string,\n cmdOrDescription?: Command<any> | string,\n { override }: SubCommandOptions = {},\n ): Command<any> {\n this.reset();\n\n const result = splitArguments(nameAndArguments);\n\n const name: string | undefined = result.flags.shift();\n const aliases: string[] = result.flags;\n\n if (!name) {\n throw new MissingCommandNameError();\n }\n\n if (this.getBaseCommand(name, true)) {\n if (!override) {\n throw new DuplicateCommandNameError(name);\n }\n this.removeCommand(name);\n }\n\n let description: string | undefined;\n let cmd: Command<any>;\n\n if (typeof cmdOrDescription === \"string\") {\n description = cmdOrDescription;\n }\n\n if (cmdOrDescription instanceof Command) {\n cmd = cmdOrDescription.reset();\n } else {\n cmd = new Command();\n }\n\n cmd.settings.name = name;\n cmd.parent = this;\n\n if (description) {\n cmd.description(description);\n }\n\n if (result.typeDefinition) {\n cmd.arguments(result.typeDefinition);\n }\n\n aliases.forEach((alias: string) => cmd.alias(alias));\n\n this.settings.commands.set(name, cmd);\n\n this.select(name);\n\n return this;\n }\n\n /**\n * Add new command alias.\n *\n * @param alias Tha name of the alias.\n */\n public alias(alias: string): this {\n if (\n this.cmd.settings.name === alias ||\n this.cmd.settings.aliases.includes(alias)\n ) {\n throw new DuplicateCommandAliasError(alias);\n }\n\n this.cmd.settings.aliases.push(alias);\n\n return this;\n }\n\n /** Reset internal command reference to main command. */\n public reset(): OneOf<TParentCommand, this> {\n this.builder.groupName = null;\n this.cmd = this;\n return this as OneOf<TParentCommand, this>;\n }\n\n /**\n * Set internal command pointer to child command with given name.\n * @param name The name of the command to select.\n */\n public select<\n TOptions extends Record<string, unknown> | void = any,\n TArguments extends Array<unknown> = any,\n TGlobalOptions extends Record<string, unknown> | void = any,\n >(\n name: string,\n ): Command<\n TParentCommandGlobals,\n TParentCommandTypes,\n TOptions,\n TArguments,\n TGlobalOptions,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommand\n > {\n const cmd = this.getBaseCommand(name, true);\n\n if (!cmd) {\n throw new CommandNotFoundError(name, this.getBaseCommands(true));\n }\n\n this.cmd = cmd;\n\n return this as Command<any>;\n }\n\n /*****************************************************************************\n **** SUB HANDLER ************************************************************\n *****************************************************************************/\n\n /**\n * Set command name.\n *\n * This method is usually used to set the command name for the main command.\n * The name should match the name of your program. It is displayed in the auto\n * generated help and used for shell completions by default.\n *\n * When used on child command, the name will be overridden by the command name\n * passed to the parent command when the command is registered with the\n * {@linkcode Command.command}.\n *\n * @param name The name for the command.\n */\n public name(name: string): this {\n this.cmd.settings.name = name;\n return this;\n }\n\n /**\n * Set command version.\n *\n * Set the version of your cli. The version is displayed in the auto generated\n * help and the output from the [version](./help.md#version-option) option.\n *\n * @param version Semantic version string string or method that returns the version string.\n */\n public version(\n version:\n | string\n | VersionHandler<\n Partial<TCommandOptions>,\n Partial<TCommandArguments>,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand\n >,\n ): this {\n if (typeof version === \"string\") {\n this.cmd.settings.version = () => version;\n } else if (typeof version === \"function\") {\n this.cmd.settings.version = version;\n }\n return this;\n }\n\n /**\n * Add meta data. Will be displayed in the auto generated help and in the\n * output of the long version.\n *\n * @param name The name/label of the metadata.\n * @param value The value of the metadata.\n */\n public meta(name: string, value: string): this {\n this.cmd.settings.meta[name] = value;\n return this;\n }\n\n /** Returns an object of metadata. */\n public getMeta(): Record<string, string>;\n\n /** Get metadata value by name. */\n public getMeta(name: string): string;\n\n public getMeta(name?: string): Record<string, string> | string {\n return typeof name === \"undefined\"\n ? this.settings.meta\n : this.settings.meta[name];\n }\n\n /**\n * Set command help.\n *\n * @param help Help string, method, or config for generator that returns the help string.\n */\n public help(\n help:\n | string\n | HelpHandler<\n Partial<TCommandOptions>,\n Partial<TCommandArguments>,\n TCommandGlobals,\n TParentCommandGlobals\n >\n | HelpOptions,\n ): this {\n if (typeof help === \"string\") {\n this.cmd.settings.help = () => help;\n } else if (typeof help === \"function\") {\n this.cmd.settings.help = help;\n } else {\n this.cmd.settings.help = (cmd: Command, options: HelpOptions): string =>\n HelpGenerator.generate(cmd, { ...help, ...options });\n }\n return this;\n }\n\n /**\n * Set the command description.\n *\n * The description will be displayed in the auto generated help. If the help\n * option is called with the short flag `-h`, only the first line is\n * displayed. If called with the long name `--help`, the full description is\n * displayed.\n *\n * For better multiline formatting, unnecessary indentations and empty leading\n * and trailing lines will be automatically removed.\n *\n * @example Multiline formatting\n *\n * For example, following description:\n *\n * ```ts\n * import { Command } from \"https://deno.land/x/cliffy/command/mod.ts\";\n *\n * new Command()\n * .description(`\n * This is a multiline description.\n * The indentation of this line will be preserved.\n * `);\n * ```\n *\n * is formatted as follows:\n *\n * ```console\n * This is a multiline description.\n * The indentation of this line will be preserved.\n * ```\n *\n * @param description The command description.\n */\n public description(\n description: Description<\n TCommandOptions,\n TCommandArguments,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand\n >,\n ): this {\n this.cmd.settings.description = description;\n return this;\n }\n\n /**\n * Set the command usage. Defaults to arguments.\n *\n * With the `.usage()` method you can override the usage text that is\n * displayed at the top of the auto generated help. By default the command\n * arguments are used. The usage is always prefixed with the command name.\n *\n * @example Set custom usage\n *\n * ```ts\n * import { Command } from \"https://deno.land/x/cliffy/command/mod.ts\";\n *\n * await new Command()\n * .name(\"script-runner\")\n * .description(\"Simple script runner.\")\n * .usage(\"[options] [script] [script options]\")\n * // ...\n * .parse(Deno.args);\n * ```\n *\n * @param usage The command usage.\n */\n public usage(usage: string): this {\n this.cmd.settings.usage = usage;\n return this;\n }\n\n /** Hide command from help, completions, etc. */\n public hidden(): this {\n this.cmd.settings.isHidden = true;\n return this;\n }\n\n /** Make command globally available. */\n public global(): this {\n this.cmd.settings.isGlobal = true;\n return this;\n }\n\n /**\n * Set command arguments.\n *\n * You can use the {@linkcode Command.arguments} method to specify the\n * arguments for the command.\n *\n * This method will override any previously defined arguments.\n *\n * Angled brackets (e.g. `<required>`) indicate required input and\n * square brackets (e.g. `[optional]`) indicate optional input. A required\n * input cannot be defined after an optional input.\n *\n * Arguments can be also defined with the {@linkcode Command.command} method.\n *\n * Optionally you can define [types](./types.md) and\n * [completions](./shell_completions.md) for your arguments after the argument\n * name separated by colon. If no type is specified the type defaults to\n * `string`.\n *\n * @example Define arguments\n *\n * ```ts\n * import { Command } from \"@cliffy/command\";\n *\n * const cmd = new Command()\n * .name(\"example\")\n * .arguments(\"<input-file:string> [output-file:string] [...tags:string]\", [\n * \"The input file.\",\n * \"The output file.\",\n * \"Tags for the file.\"\n * ]);\n *\n * // Parsing arguments\n * const { args } = await cmd.parse([\"input.txt\", \"result.txt\", \"tag1\", \"tag2\"]);\n *\n * console.log(args); // Output: ['input.txt', 'result.txt', 'tag1', 'tag2']\n * ```\n *\n * @example Use custom types in arguments\n *\n * ```typescript\n * import { Command, EnumType } from \"@cliffy/command\";\n *\n * await new Command()\n * .type(\"color\", new EnumType([\"red\", \"blue\"]))\n * .arguments(\"<color:color>\")\n * .action((_, color: \"red\" | \"blue\") => {\n * console.log(\"color:\", color);\n * })\n * .parse(Deno.args);\n * ```\n *\n * @example Variadic arguments\n *\n * The last argument of a command can be variadic. To make an argument\n * variadic you can append or prepend `...` to the argument name (`<...NAME>`\n * or `<NAME...>`).\n *\n * Required rest arguments `<...args>` requires at least one argument, optional\n * rest args `[...args]` are completely optional.\n *\n * ```typescript\n * import { Command } from \"https://deno.land/x/cliffy/command/mod.ts\";\n *\n * await new Command()\n * .description(\"Remove directories.\")\n * .arguments(\"<dirs...>\")\n * .action((_, ...dirs: Array<string>) => {\n * for (const dir of dirs) {\n * console.log(\"rmdir %s\", dir);\n * }\n * })\n * .parse(Deno.args);\n * ```\n *\n * ```console\n * $ deno run example.ts dir1 dir2 dir3\n * rmdir dir1\n * rmdir dir2\n * rmdir dir3\n * ```\n *\n * @param args The arguments definition string.\n * @param descriptions The argument descriptions.\n * @returns The command instance.\n */\n public arguments<\n TArguments extends TypedArguments<\n TArgs,\n Merge<TParentCommandTypes, Merge<TCommandGlobalTypes, TCommandTypes>>\n >,\n TArgs extends string = string,\n >(\n args: TArgs,\n descriptions?: Array<string>,\n ): Command<\n TParentCommandGlobals,\n TParentCommandTypes,\n TCommandOptions,\n TArguments,\n TCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommand\n > {\n this.cmd.settings.arguments = args.split(\" \").map((arg, index) => ({\n arg,\n description: descriptions?.[index],\n }));\n return this as Command<any>;\n }\n\n /**\n * Add a new command argument.\n *\n * - When called multiple times, arguments are appended in the order of calls.\n * - When called after `arguments()`, the new argument is appended after the previously\n * defined arguments.\n * - When called before `arguments()`, the new argument is overwritten by the later\n * defined arguments.\n *\n * @example\n * ```ts\n * import { Command } from \"@cliffy/command\";\n *\n * const cmd = new Command()\n * .name(\"example\")\n * .argument(\"<input-file:string>\", \"The input file.\")\n * .argument(\"[output-file:string]\", \"The output file.\", { default: \"out.txt\" })\n * .argument(\"[...tags:string]\", \"Tags for the file.\");\n *\n * // Parsing arguments\n * const { args } = await cmd.parse([\"input.txt\", \"result.txt\", \"tag1\", \"tag2\"]);\n *\n * console.log(args); // Output: ['input.txt', 'result.txt', 'tag1', 'tag2']\n * ```\n *\n * @param arg The argument definition. E.g: `<input-file:string>`\n * @param description The argument description.\n * @param opts Argument options.\n * @returns The command instance.\n */\n public argument<\n TArguments extends TypedArgument<\n TArg,\n Merge<TParentCommandTypes, Merge<TCommandGlobalTypes, TCommandTypes>>,\n TDefaultValue\n >,\n const TArg extends string = string,\n const TDefaultValue\n extends (TArg extends `${string}...${string}`\n ? ReadonlyArray<unknown> | undefined\n : unknown) = undefined,\n const TMappedArguments = undefined,\n TValue = MapTypes<\n TypedArgumentValue<\n TArg,\n Merge<\n TParentCommandTypes,\n Merge<TCommandGlobalTypes, TCommandTypes>\n >,\n Mutable<TDefaultValue>\n >\n >,\n >(\n arg: TArg,\n description: string,\n opts?:\n | CommandArgumentOptions<TDefaultValue, TValue, TMappedArguments>\n | ArgumentValueHandler<TValue, TMappedArguments>,\n ): Command<\n TParentCommandGlobals,\n TParentCommandTypes,\n TCommandOptions,\n [\n ...TCommandArguments,\n ...TMappedArguments extends undefined ? TArguments\n : TArg extends `${string}...${string}`\n ? TMappedArguments extends ReadonlyArray<unknown> ? TMappedArguments\n : IsRequired<\n TArg extends `<${string}>` ? true : false,\n TDefaultValue\n > extends true ? [Awaited<TMappedArguments>]\n : [Awaited<TMappedArguments>?]\n : IsRequired<\n TArg extends `<${string}>` ? true : false,\n TDefaultValue\n > extends true ? [Awaited<TMappedArguments>]\n : [Awaited<TMappedArguments>?],\n ],\n TCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommand\n > {\n this.cmd.settings.arguments ??= [];\n this.cmd.settings.arguments.push({ arg, description, ...opts });\n return this as Command<any>;\n }\n\n /**\n * Set command callback method.\n *\n * @param fn Command action handler.\n */\n public action(\n fn: ActionHandler<\n TCommandOptions,\n TCommandArguments,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand\n >,\n ): this {\n this.cmd.settings.actionHandler = fn;\n return this;\n }\n\n /**\n * Set command callback method.\n *\n * @param fn Command action handler.\n */\n public globalAction(\n fn: ActionHandler<\n Partial<TCommandOptions>,\n Array<unknown>,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand\n >,\n ): this {\n this.cmd.settings.globalActionHandler = fn;\n return this;\n }\n\n /**\n * Don't throw an error if the command was called without arguments.\n *\n * @param allowEmpty Enable/disable allow empty.\n */\n public allowEmpty<TAllowEmpty extends boolean | undefined = undefined>(\n allowEmpty?: TAllowEmpty,\n ): false extends TAllowEmpty ? this\n : Command<\n Partial<TParentCommandGlobals>,\n TParentCommandTypes,\n Partial<TCommandOptions>,\n TCommandArguments,\n TCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommand\n > {\n this.cmd.settings.allowEmpty = allowEmpty !== false;\n return this as false extends TAllowEmpty ? this\n : Command<\n Partial<TParentCommandGlobals>,\n TParentCommandTypes,\n Partial<TCommandOptions>,\n TCommandArguments,\n TCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommand\n >;\n }\n\n /**\n * Enable stop early. If enabled, all arguments starting from the first non\n * option argument will be passed as arguments with type string to the command\n * action handler.\n *\n * For example:\n * `command --debug-level warning server --port 80`\n *\n * Will result in:\n * - options: `{ debugLevel: 'warning' }`\n * - args: `['server', '--port', '80']`\n *\n * @param stopEarly Enable/disable stop early.\n */\n public stopEarly(stopEarly = true): this {\n this.cmd.settings.stopEarly = stopEarly;\n return this;\n }\n\n /**\n * Disable parsing arguments. If enabled the raw arguments will be passed to\n * the action handler. This has no effect for parent or child commands. Only\n * for the command on which this method was called.\n *\n * @param useRawArgs Enable/disable raw arguments.\n */\n public useRawArgs(\n useRawArgs = true,\n ): Command<\n void,\n void,\n void,\n Array<string>,\n void,\n void,\n void,\n TParentCommand\n > {\n this.cmd.settings.useRawArgs = useRawArgs;\n return this as Command<any>;\n }\n\n /**\n * Set default command.\n *\n * The default command is executed when the program was called without any\n * arguments.\n *\n * @param name Name of the default command.\n */\n public default(name: string): this {\n this.cmd.settings.defaultCommand = name;\n return this;\n }\n\n public globalType<\n THandler extends TypeOrTypeHandler<unknown>,\n TName extends string = string,\n >(\n name: TName,\n handler: THandler,\n options?: Omit<TypeOptions, \"global\">,\n ): Command<\n TParentCommandGlobals,\n TParentCommandTypes,\n TCommandOptions,\n TCommandArguments,\n TCommandGlobals,\n TCommandTypes,\n Merge<TCommandGlobalTypes, TypedType<TName, THandler>>,\n TParentCommand\n > {\n return this.type(name, handler, { ...options, global: true }) as Command<\n TParentCommandGlobals,\n TParentCommandTypes,\n TCommandOptions,\n TCommandArguments,\n TCommandGlobals,\n TCommandTypes,\n Merge<TCommandGlobalTypes, TypedType<TName, THandler>>,\n TParentCommand\n >;\n }\n\n /**\n * Register custom type.\n *\n * @param name The name of the type.\n * @param handler The callback method to parse the type.\n * @param options Type options.\n */\n public type<\n THandler extends TypeOrTypeHandler<unknown>,\n TName extends string = string,\n >(\n name: TName,\n handler: THandler,\n options?: TypeOptions,\n ): Command<\n TParentCommandGlobals,\n TParentCommandTypes,\n TCommandOptions,\n TCommandArguments,\n TCommandGlobals,\n Merge<TCommandTypes, TypedType<TName, THandler>>,\n TCommandGlobalTypes,\n TParentCommand\n > {\n if (this.cmd.builder.types.get(name) && !options?.override) {\n throw new DuplicateTypeError(name);\n }\n\n this.cmd.builder.types.set(name, {\n ...options,\n name,\n handler: handler as TypeOrTypeHandler<unknown>,\n });\n\n if (\n handler instanceof Type &&\n (typeof handler.complete !== \"undefined\" ||\n typeof handler.values !== \"undefined\")\n ) {\n const completeHandler: CompleteHandler = (\n cmd: Command,\n parent?: Command,\n ) => handler.complete?.(cmd, parent) || [];\n this.complete(name, completeHandler, options);\n }\n\n return this as Command<any>;\n }\n\n /**\n * Register global complete handler.\n *\n * @param name The name of the completion.\n * @param complete The callback method to complete the type.\n * @param options Complete options.\n */\n public globalComplete(\n name: string,\n complete: CompleteHandler,\n options?: Omit<CompleteOptions, \"global\">,\n ): this {\n return this.complete(name, complete, { ...options, global: true });\n }\n\n /**\n * Register global complete handler.\n *\n * @param name The name of the completion.\n * @param complete The callback method to complete the type.\n * @param options Complete options.\n */\n public complete(\n name: string,\n complete: CompleteHandler<\n Partial<TCommandOptions>,\n Partial<TCommandArguments>,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n any\n >,\n options: CompleteOptions & { global: boolean },\n ): this;\n\n /**\n * Register complete handler.\n *\n * @param name The name of the completion.\n * @param complete The callback method to complete the type.\n * @param options Complete options.\n */\n public complete(\n name: string,\n complete: CompleteHandler<\n TCommandOptions,\n TCommandArguments,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand\n >,\n options?: CompleteOptions,\n ): this;\n\n public complete(\n name: string,\n complete:\n | CompleteHandler<\n TCommandOptions,\n TCommandArguments,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand\n >\n | CompleteHandler<\n Partial<TCommandOptions>,\n Partial<TCommandArguments>,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n any\n >,\n options?: CompleteOptions,\n ): this {\n if (this.cmd.builder.completions.has(name) && !options?.override) {\n throw new DuplicateCompletionError(name);\n }\n\n this.cmd.builder.completions.set(name, {\n name,\n complete,\n ...options,\n });\n\n return this;\n }\n\n /**\n * Throw validation errors instead of calling `exit()` to handle\n * validation errors manually.\n *\n * A validation error is thrown when the command is wrongly used by the user.\n * For example: If the user passes some invalid options or arguments to the\n * command.\n *\n * This has no effect for parent commands. Only for the command on which this\n * method was called and all child commands.\n *\n * **Example:**\n *\n * ```ts\n * import { Command, ValidationError } from \"./mod.ts\";\n *\n * const cmd = new Command();\n * // ...\n *\n * try {\n * cmd.parse();\n * } catch(error) {\n * if (error instanceof ValidationError) {\n * cmd.showHelp();\n * Deno.exit(1);\n * }\n * throw error;\n * }\n * ```\n *\n * @see ValidationError\n */\n public throwErrors(): this {\n this.cmd.settings.throwOnError = true;\n return this;\n }\n\n /**\n * Set custom error handler.\n *\n * @param handler Error handler callback function.\n */\n public error(handler: ErrorHandler): this {\n this.cmd.settings.errorHandler = handler;\n return this;\n }\n\n /** Get error handler callback function. */\n private getErrorHandler(): ErrorHandler | undefined {\n return this.settings.errorHandler ??\n (this.parent && this.parent.settings.errorHandler);\n }\n\n /**\n * Same as `.throwErrors()` but also prevents calling `exit()` after\n * printing help or version with the --help and --version option.\n */\n public noExit(): this {\n this.cmd.settings.shouldExit = false;\n this.throwErrors();\n return this;\n }\n\n /**\n * Disable inheriting global commands, options and environment variables from\n * parent commands.\n */\n public noGlobals(): this {\n this.cmd.settings.noGlobals = true;\n return this;\n }\n\n /** Check whether the command should throw errors or exit. */\n protected shouldThrowErrors(): boolean {\n return this.settings.throwOnError || !!this.parent?.shouldThrowErrors();\n }\n\n /** Check whether the command should exit after printing help or version. */\n protected shouldExit(): boolean {\n return this.settings.shouldExit ?? this.parent?.shouldExit() ?? true;\n }\n\n /**\n * Enable grouping of options and set the name of the group.\n * All option which are added after calling the `.group()` method will be\n * grouped in the help output. If the `.group()` method can be use multiple\n * times to create more groups.\n *\n * @param name The name of the option group.\n */\n public group(name: string | null): this {\n this.cmd.builder.groupName = name;\n return this;\n }\n\n /**\n * Register a global option.\n *\n * @param flags Flags string e.g: -h, --help, --manual <requiredArg:string> [optionalArg:number] [...restArgs:string]\n * @param desc Flag description.\n * @param opts Flag options or custom handler for processing flag value.\n */\n public globalOption<\n TFlags extends string,\n TGlobalOptions extends TypedOption<\n TFlags,\n TCommandOptions,\n Merge<TParentCommandTypes, Merge<TCommandGlobalTypes, TCommandTypes>>,\n undefined extends TConflicts ? TRequired : false,\n TDefaultValue\n >,\n TMappedGlobalOptions extends MapValue<\n TGlobalOptions,\n TMappedValue,\n TCollect\n >,\n TRequired extends OptionOptions[\"required\"] = undefined,\n TCollect extends OptionOptions[\"collect\"] = undefined,\n TConflicts extends OptionOptions[\"conflicts\"] = undefined,\n const TDefaultValue = undefined,\n TMappedValue = undefined,\n >(\n flags: TFlags,\n desc: string,\n opts?:\n | Omit<\n GlobalOptionOptions<\n Partial<TCommandOptions>,\n TCommandArguments,\n MergeOptions<TFlags, TCommandGlobals, TGlobalOptions>,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand,\n TDefaultValue\n >,\n \"value\"\n >\n & {\n default?: DefaultValue<TDefaultValue>;\n defaultText?: DefaultText<TDefaultValue>;\n required?: TRequired;\n collect?: TCollect;\n value?: OptionValueHandler<\n MapTypes<ValueOf<TGlobalOptions>>,\n TMappedValue\n >;\n }\n | OptionValueHandler<MapTypes<ValueOf<TGlobalOptions>>, TMappedValue>,\n ): Command<\n TParentCommandGlobals,\n TParentCommandTypes,\n TCommandOptions,\n TCommandArguments,\n MergeOptions<TFlags, TCommandGlobals, TMappedGlobalOptions>,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommand\n > {\n if (typeof opts === \"function\") {\n return this.option(\n flags,\n desc,\n { value: opts, global: true } as OptionOptions,\n ) as Command<any>;\n }\n return this.option(\n flags,\n desc,\n { ...opts, global: true } as OptionOptions,\n ) as Command<any>;\n }\n\n /**\n * Add a global option.\n *\n * @param flags Flags string e.g: -h, --help, --manual <requiredArg:string> [optionalArg:number] [...restArgs:string]\n * @param desc Flag description.\n * @param opts Flag options or custom handler for processing flag value.\n */\n public option<\n TFlags extends string,\n TGlobalOptions extends TypedOption<\n TFlags,\n TCommandOptions,\n Merge<TParentCommandTypes, Merge<TCommandGlobalTypes, TCommandTypes>>,\n undefined extends TConflicts ? TRequired : false,\n TDefaultValue\n >,\n TMappedGlobalOptions extends MapValue<\n TGlobalOptions,\n TMappedValue,\n TCollect\n >,\n TRequired extends OptionOptions[\"required\"] = undefined,\n TCollect extends OptionOptions[\"collect\"] = undefined,\n TConflicts extends OptionOptions[\"conflicts\"] = undefined,\n const TDefaultValue = undefined,\n TMappedValue = undefined,\n >(\n flags: TFlags,\n desc: string,\n opts:\n | Omit<\n OptionOptions<\n Partial<TCommandOptions>,\n TCommandArguments,\n MergeOptions<TFlags, TCommandGlobals, TGlobalOptions>,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand,\n TDefaultValue\n >,\n \"value\"\n >\n & {\n global: true;\n default?: DefaultValue<TDefaultValue>;\n defaultText?: DefaultText<TDefaultValue>;\n required?: TRequired;\n collect?: TCollect;\n value?: OptionValueHandler<\n MapTypes<ValueOf<TGlobalOptions>>,\n TMappedValue\n >;\n }\n | OptionValueHandler<MapTypes<ValueOf<TGlobalOptions>>, TMappedValue>,\n ): Command<\n TParentCommandGlobals,\n TParentCommandTypes,\n TCommandOptions,\n TCommandArguments,\n MergeOptions<TFlags, TCommandGlobals, TMappedGlobalOptions>,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommand\n >;\n\n /**\n * Register an option.\n *\n * @param flags Flags string e.g: -h, --help, --manual <requiredArg:string> [optionalArg:number] [...restArgs:string]\n * @param desc Flag description.\n * @param opts Flag options or custom handler for processing flag value.\n */\n public option<\n TFlags extends string,\n TOptions extends TypedOption<\n TFlags,\n TCommandOptions,\n Merge<TParentCommandTypes, Merge<TCommandGlobalTypes, TCommandTypes>>,\n undefined extends TConflicts ? TRequired : false,\n TDefaultValue\n >,\n TMappedOptions extends MapValue<TOptions, TMappedValue, TCollect>,\n TRequired extends OptionOptions[\"required\"] = undefined,\n TCollect extends OptionOptions[\"collect\"] = undefined,\n TConflicts extends OptionOptions[\"conflicts\"] = undefined,\n const TDefaultValue = undefined,\n TMappedValue = undefined,\n >(\n flags: TFlags,\n desc: string,\n opts?:\n | Omit<\n OptionOptions<\n MergeOptions<TFlags, TCommandOptions, TMappedOptions>,\n TCommandArguments,\n TCommandGlobals,\n TParentCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand,\n TDefaultValue\n >,\n \"value\"\n >\n & {\n default?: DefaultValue<TDefaultValue>;\n defaultText?: DefaultText<TDefaultValue>;\n required?: TRequired;\n collect?: TCollect;\n conflicts?: TConflicts;\n value?: OptionValueHandler<MapTypes<ValueOf<TOptions>>, TMappedValue>;\n }\n | OptionValueHandler<MapTypes<ValueOf<TOptions>>, TMappedValue>,\n ): Command<\n TParentCommandGlobals,\n TParentCommandTypes,\n MergeOptions<TFlags, TCommandOptions, TMappedOptions>,\n TCommandArguments,\n TCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommand\n >;\n\n public option(\n flags: string,\n desc: string,\n opts?: OptionOptions | OptionValueHandler,\n ): Command<any> {\n if (typeof opts === \"function\") {\n opts = { value: opts };\n }\n\n const result = splitArguments(flags);\n\n const args: Argument[] = result.typeDefinition\n ? parseArgumentsDefinition(result.typeDefinition)\n : [];\n\n const option: Option = {\n ...opts,\n name: \"\",\n description: desc,\n args,\n flags: result.flags,\n equalsSign: result.equalsSign,\n typeDefinition: result.typeDefinition,\n groupName: this.builder.groupName ?? undefined,\n };\n\n if (option.separator) {\n for (const arg of args) {\n if (arg.list) {\n arg.separator = option.separator;\n }\n }\n }\n\n for (const part of option.flags) {\n const arg = part.trim();\n const isLong = /^--/.test(arg);\n const name = isLong ? arg.slice(2) : arg.slice(1);\n\n if (this.cmd.getBaseOption(name, true)) {\n if (opts?.override) {\n this.removeOption(name);\n } else {\n throw new DuplicateOptionNameError(name, this.getPath());\n }\n }\n\n if (!option.name && isLong) {\n option.name = name;\n } else if (!option.aliases) {\n option.aliases = [name];\n } else {\n option.aliases.push(name);\n }\n }\n\n if (option.prepend) {\n this.cmd.builder.options.unshift(option);\n } else {\n this.cmd.builder.options.push(option);\n }\n\n return this;\n }\n\n /**\n * Register command example.\n *\n * @param name Name of the example.\n * @param description The content of the example.\n */\n public example(name: string, description: string): this {\n if (this.cmd.hasExample(name)) {\n throw new DuplicateExampleError(name);\n }\n\n this.cmd.settings.examples.push({ name, description });\n\n return this;\n }\n\n /**\n * @param flags Flags string e.g: -h, --help, --manual <requiredArg:string> [optionalArg:number] [...restArgs:string]\n * @param desc Flag description.\n * @param opts Flag options or custom handler for processing flag value.\n */\n\n /**\n * Register a global environment variable.\n *\n * @param name Name of the environment variable.\n * @param description The description of the environment variable.\n * @param options Environment variable options.\n */\n public globalEnv<\n TNameAndValue extends string,\n TGlobalEnvVars extends TypedEnv<\n TNameAndValue,\n TPrefix,\n TCommandOptions,\n Merge<TParentCommandTypes, Merge<TCommandGlobalTypes, TCommandTypes>>,\n TRequired\n >,\n TMappedGlobalEnvVars extends MapValue<TGlobalEnvVars, TMappedValue>,\n TRequired extends EnvVarOptions[\"required\"] = undefined,\n TPrefix extends EnvVarOptions[\"prefix\"] = undefined,\n TMappedValue = undefined,\n >(\n name: TNameAndValue,\n description: string,\n options?: Omit<GlobalEnvVarOptions, \"value\"> & {\n required?: TRequired;\n prefix?: TPrefix;\n value?: EnvVarValueHandler<\n MapTypes<ValueOf<TGlobalEnvVars>>,\n TMappedValue\n >;\n },\n ): Command<\n TParentCommandGlobals,\n TParentCommandTypes,\n TCommandOptions,\n TCommandArguments,\n Merge<TCommandGlobals, TMappedGlobalEnvVars>,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommand\n > {\n return this.env(\n name,\n description,\n { ...options, global: true } as EnvVarOptions,\n ) as Command<any>;\n }\n\n /**\n * Register a global environment variable.\n *\n * @param name Name of the environment variable.\n * @param description The description of the environment variable.\n * @param options Environment variable options.\n */\n public env<\n N extends string,\n G extends TypedEnv<\n N,\n P,\n TCommandOptions,\n Merge<TParentCommandTypes, Merge<TCommandGlobalTypes, TCommandTypes>>,\n R\n >,\n MG extends MapValue<G, V>,\n R extends EnvVarOptions[\"required\"] = undefined,\n P extends EnvVarOptions[\"prefix\"] = undefined,\n V = undefined,\n >(\n name: N,\n description: string,\n options: Omit<EnvVarOptions, \"value\"> & {\n global: true;\n required?: R;\n prefix?: P;\n value?: EnvVarValueHandler<MapTypes<ValueOf<G>>, V>;\n },\n ): Command<\n TParentCommandGlobals,\n TParentCommandTypes,\n TCommandOptions,\n TCommandArguments,\n Merge<TCommandGlobals, MG>,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommand\n >;\n\n /**\n * Register an environment variable.\n *\n * @param name Name of the environment variable.\n * @param description The description of the environment variable.\n * @param options Environment variable options.\n */\n public env<\n TNameAndValue extends string,\n TEnvVar extends TypedEnv<\n TNameAndValue,\n TPrefix,\n TCommandOptions,\n Merge<TParentCommandTypes, Merge<TCommandGlobalTypes, TCommandTypes>>,\n TRequired\n >,\n TMappedEnvVar extends MapValue<TEnvVar, TMappedValue>,\n TRequired extends EnvVarOptions[\"required\"] = undefined,\n TPrefix extends EnvVarOptions[\"prefix\"] = undefined,\n TMappedValue = undefined,\n >(\n name: TNameAndValue,\n description: string,\n options?: Omit<EnvVarOptions, \"value\"> & {\n required?: TRequired;\n prefix?: TPrefix;\n value?: EnvVarValueHandler<MapTypes<ValueOf<TEnvVar>>, TMappedValue>;\n },\n ): Command<\n TParentCommandGlobals,\n TParentCommandTypes,\n Merge<TCommandOptions, TMappedEnvVar>,\n TCommandArguments,\n TCommandGlobals,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommand\n >;\n\n public env(\n name: string,\n description: string,\n options?: EnvVarOptions,\n ): Command<any> {\n const result = splitArguments(name);\n\n if (!result.typeDefinition) {\n result.typeDefinition = \"<value:boolean>\";\n }\n\n if (\n result.flags.some((envName) => this.cmd.getBaseEnvVar(envName, true))\n ) {\n throw new DuplicateEnvVarError(name);\n }\n\n const details: Argument[] = parseArgumentsDefinition(\n result.typeDefinition,\n );\n\n if (details.length > 1) {\n throw new TooManyEnvVarValuesError(name);\n } else if (details.length && details[0].optional) {\n throw new UnexpectedOptionalEnvVarValueError(name);\n } else if (details.length && details[0].variadic) {\n throw new UnexpectedVariadicEnvVarValueError(name);\n }\n\n this.cmd.builder.envVars.push({\n name: result.flags[0],\n names: result.flags,\n description,\n type: details[0].type,\n details: details.shift() as Argument,\n ...options,\n });\n\n return this;\n }\n\n /*****************************************************************************\n **** MAIN HANDLER ***********************************************************\n *****************************************************************************/\n\n /**\n * Parse command line arguments and execute matched command.\n *\n * @param args Command line args to parse. Ex: `cmd.parse( Deno.args )`\n */\n public parse(\n args: string[] = getArgs(),\n ): Promise<\n TParentCommand extends Command<any> ? CommandResult<\n Record<string, unknown>,\n Array<unknown>,\n Record<string, unknown>,\n Record<string, unknown>,\n Record<string, unknown>,\n Record<string, unknown>,\n Record<string, unknown>,\n undefined\n >\n : CommandResult<\n MapTypes<TCommandOptions>,\n MapTypes<TCommandArguments>,\n MapTypes<TCommandGlobals>,\n MapTypes<TParentCommandGlobals>,\n TCommandTypes,\n TCommandGlobalTypes,\n TParentCommandTypes,\n TParentCommand\n >\n > {\n this.props.isRoot = true;\n const ctx: ParseContext = {\n unknown: args.slice(),\n flags: {},\n env: {},\n literal: [],\n stopEarly: false,\n stopOnUnknown: false,\n defaults: {},\n actions: [],\n };\n return this.parseCommand(ctx) as any;\n }\n\n private async parseCommand(ctx: ParseContext): Promise<CommandResult> {\n try {\n this.reset();\n this.registerDefaults();\n this.props.rawArgs = ctx.unknown.slice();\n\n if (this.settings.useRawArgs) {\n await this.parseEnvVars(ctx, this.builder.envVars);\n return await this.execute(ctx.env, ctx.unknown);\n }\n\n let preParseGlobals = false;\n let subCommand: Command<any> | undefined;\n\n // Pre parse globals to support: cmd --global-option sub-command --option\n if (ctx.unknown.length > 0) {\n // Detect sub command.\n subCommand = this.getSubCommand(ctx);\n\n if (!subCommand) {\n // Only pre parse globals if first arg ist a global option.\n const optionName = ctx.unknown[0].replace(/^-+/, \"\").split(\"=\")[0];\n const option = this.getOption(optionName, true);\n\n if (option?.global) {\n preParseGlobals = true;\n await this.parseGlobalOptionsAndEnvVars(ctx);\n }\n }\n }\n\n if (subCommand || ctx.unknown.length > 0) {\n subCommand ??= this.getSubCommand(ctx);\n\n if (subCommand) {\n subCommand.props.globalParent = this;\n return subCommand.parseCommand(ctx);\n }\n }\n\n // Parse rest options & env vars.\n await this.parseOptionsAndEnvVars(ctx, preParseGlobals);\n const options = { ...ctx.env, ...ctx.flags };\n const args = await this.parseArguments(ctx, options);\n this.props.literalArgs = ctx.literal;\n\n // Execute option action.\n if (ctx.actions.length) {\n await Promise.all(\n ctx.actions.map((action) => action.call(this, options, ...args)),\n );\n\n if (ctx.standalone) {\n return {\n options,\n args,\n cmd: this,\n literal: this.props.literalArgs,\n };\n }\n }\n\n return await this.execute(options, args);\n } catch (error: unknown) {\n this.handleError(error);\n }\n }\n\n private getSubCommand(ctx: ParseContext) {\n const subCommand = this.getCommand(ctx.unknown[0], true);\n\n if (subCommand) {\n ctx.unknown.shift();\n }\n\n return subCommand;\n }\n\n private async parseGlobalOptionsAndEnvVars(\n ctx: ParseContext,\n ): Promise<void> {\n const isHelpOption = this.getHelpOption()?.flags.includes(ctx.unknown[0]);\n\n // Parse global env vars.\n const envVars = [\n ...this.builder.envVars.filter((envVar) => envVar.global),\n ...this.getGlobalEnvVars(true),\n ];\n\n await this.parseEnvVars(ctx, envVars, !isHelpOption);\n\n // Parse global options.\n const options = [\n ...this.builder.options.filter((option) => option.global),\n ...this.getGlobalOptions(true),\n ];\n\n this.parseOptions(ctx, options, {\n stopEarly: true,\n stopOnUnknown: true,\n dotted: false,\n });\n }\n\n private async parseOptionsAndEnvVars(\n ctx: ParseContext,\n preParseGlobals: boolean,\n ): Promise<void> {\n const helpOption = this.getHelpOption();\n const isVersionOption = this.props.versionOption?.flags.includes(\n ctx.unknown[0],\n );\n const isHelpOption = helpOption && ctx.flags?.[helpOption.name] === true;\n\n // Parse env vars.\n const envVars = preParseGlobals\n ? this.builder.envVars.filter((envVar) => !envVar.global)\n : this.getEnvVars(true);\n\n await this.parseEnvVars(\n ctx,\n envVars,\n !isHelpOption && !isVersionOption,\n );\n\n // Parse options.\n const options = this.getOptions(true);\n\n this.parseOptions(ctx, options);\n }\n\n /** Register default options like `--version` and `--help`. */\n private registerDefaults(): this {\n if (this.props.hasDefaults) {\n return this;\n }\n if (this.parent) {\n if (this.props.isRoot) {\n this.getMainCommand().registerDefaults();\n }\n return this;\n }\n this.props.hasDefaults = true;\n\n this.reset();\n\n !this.builder.types.has(\"string\") &&\n this.type(\"string\", new StringType(), { global: true });\n !this.builder.types.has(\"number\") &&\n this.type(\"number\", new NumberType(), { global: true });\n !this.builder.types.has(\"integer\") &&\n this.type(\"integer\", new IntegerType(), { global: true });\n !this.builder.types.has(\"boolean\") &&\n this.type(\"boolean\", new BooleanType(), { global: true });\n !this.builder.types.has(\"file\") &&\n this.type(\"file\", new FileType(), { global: true });\n !this.builder.types.has(\"secret\") &&\n this.type(\"secret\", new SecretType(), { global: true });\n\n if (!this.settings.help) {\n this.help({});\n }\n\n if (\n this.settings.versionOptions !== false &&\n (this.settings.versionOptions || this.settings.version)\n ) {\n this.option(\n this.settings.versionOptions?.flags || \"-V, --version\",\n this.settings.versionOptions?.desc ||\n \"Show the version number for this program.\",\n {\n standalone: true,\n prepend: true,\n action: async function () {\n const long = this.getRawArgs().includes(\n `--${this.props.versionOption?.name}`,\n );\n if (long) {\n await checkVersion(this);\n this.showLongVersion();\n } else {\n this.showVersion();\n }\n this.exit();\n },\n ...(this.settings.versionOptions?.opts ?? {}),\n },\n );\n this.props.versionOption = this.builder.options[0];\n }\n\n if (this.settings.helpOptions !== false) {\n this.option(\n this.settings.helpOptions?.flags || \"-h, --help\",\n this.settings.helpOptions?.desc || \"Show this help.\",\n {\n standalone: true,\n global: true,\n prepend: true,\n action: async function () {\n const long = this.getRawArgs().includes(\n `--${this.getHelpOption()?.name}`,\n );\n await checkVersion(this);\n this.showHelp({ long });\n this.exit();\n },\n ...(this.settings.helpOptions?.opts ?? {}),\n },\n );\n this.props.helpOption = this.builder.options[0];\n }\n\n return this;\n }\n\n /**\n * Execute command.\n * @param options A map of options.\n * @param args Command arguments.\n */\n private async execute(\n options: Record<string, unknown>,\n args: Array<unknown>,\n ): Promise<CommandResult> {\n if (\n this.settings.defaultCommand && !args.length &&\n !Object.keys(options).length\n ) {\n const cmd = this.getCommand(this.settings.defaultCommand, true);\n\n if (!cmd) {\n throw new DefaultCommandNotFoundError(\n this.settings.defaultCommand,\n this.getCommands(),\n );\n }\n cmd.props.globalParent = this;\n\n return cmd.execute(options, args);\n }\n\n await this.executeGlobalAction(options, args);\n\n if (this.settings.actionHandler) {\n await this.settings.actionHandler.call(this, options, ...args);\n }\n\n return {\n options,\n args,\n cmd: this,\n literal: this.props.literalArgs,\n };\n }\n\n private async executeGlobalAction(\n options: Record<string, unknown>,\n args: Array<unknown>,\n ) {\n if (!this.settings.noGlobals) {\n await this.parent?.executeGlobalAction(options, args);\n }\n await this.settings.globalActionHandler?.call(this, options, ...args);\n }\n\n /** Parse raw command line arguments. */\n protected parseOptions(\n ctx: ParseContext,\n options: Option[],\n {\n stopEarly = this.settings.stopEarly,\n stopOnUnknown = false,\n dotted = true,\n }: ParseOptionsOptions = {},\n ): void {\n parseFlags(ctx, {\n stopEarly,\n stopOnUnknown,\n dotted,\n allowEmpty: this.settings.allowEmpty,\n flags: options,\n ignoreDefaults: ctx.env,\n parse: (type: ArgumentValue) => this.parseType(type),\n option: (option: Option) => {\n if (option.action) {\n ctx.actions.push(option.action);\n }\n },\n });\n }\n\n /** Parse argument type. */\n protected parseType(type: ArgumentValue): unknown {\n const typeSettings: TypeDef | undefined = this.getType(type.type);\n\n if (!typeSettings) {\n throw new UnknownTypeError(\n type.type,\n this.getTypes().map((type) => type.name),\n );\n }\n\n return typeSettings.handler instanceof Type\n ? typeSettings.handler.parse(type)\n : typeSettings.handler(type);\n }\n\n /**\n * Read and validate environment variables.\n * @param ctx Parse context.\n * @param envVars env vars defined by the command.\n * @param validate when true, throws an error if a required env var is missing.\n */\n protected async parseEnvVars(\n ctx: ParseContext,\n envVars: Array<EnvVar>,\n validate = true,\n ): Promise<void> {\n for (const envVar of envVars) {\n const env = await this.findEnvVar(envVar.names);\n\n if (env) {\n const parseType = (value: string) => {\n return this.parseType({\n label: \"Environment variable\",\n type: envVar.type,\n name: env.name,\n value,\n });\n };\n\n const propertyName = underscoreToCamelCase(\n envVar.prefix\n ? envVar.names[0].replace(new RegExp(`^${envVar.prefix}`), \"\")\n : envVar.names[0],\n );\n\n if (envVar.details.list) {\n ctx.env[propertyName] = env.value\n .split(envVar.details.separator ?? \",\")\n .map(parseType);\n } else {\n ctx.env[propertyName] = parseType(env.value);\n }\n\n if (envVar.value && typeof ctx.env[propertyName] !== \"undefined\") {\n ctx.env[propertyName] = envVar.value(ctx.env[propertyName]);\n }\n } else if (envVar.required && validate) {\n throw new MissingRequiredEnvVarError(envVar);\n }\n }\n }\n\n protected async findEnvVar(\n names: readonly string[],\n ): Promise<{ name: string; value: string } | undefined> {\n for (const name of names) {\n // dnt-shim-ignore\n const status = await (globalThis as any).Deno?.permissions.query({\n name: \"env\",\n variable: name,\n });\n\n if (!status || status.state === \"granted\") {\n const value = getEnv(name);\n\n if (value) {\n return { name, value };\n }\n }\n }\n\n return undefined;\n }\n\n /**\n * Parse command-line arguments.\n * @param ctx Parse context.\n * @param options Parsed command line options.\n */\n protected async parseArguments(\n ctx: ParseContext,\n options: Record<string, unknown>,\n ): Promise<TCommandArguments> {\n const params: Array<unknown> = [];\n const args = ctx.unknown.slice();\n\n if (!this.hasArguments()) {\n if (args.length) {\n if (this.hasCommands(true)) {\n if (this.hasCommand(args[0], true)) {\n // e.g: command --global-foo --foo sub-command\n throw new TooManyArgumentsError(args);\n } else {\n throw new UnknownCommandError(args[0], this.getCommands());\n }\n } else {\n throw new NoArgumentsAllowedError(this.getPath());\n }\n }\n } else {\n const hasDefaults = this.settings.arguments?.some((arg) => arg.default);\n\n if (!args.length && !hasDefaults) {\n const required = this.getArguments()\n .filter((expectedArg) => !expectedArg.optional)\n .map((expectedArg) => expectedArg.name);\n\n if (required.length) {\n const optionNames: string[] = Object.keys(options);\n const hasStandaloneOption = !!optionNames.find((name) =>\n this.getOption(name, true)?.standalone\n );\n\n if (!hasStandaloneOption) {\n throw new MissingArgumentsError(required);\n }\n }\n } else {\n for (const [index, expectedArg] of this.getArguments().entries()) {\n const mapArgValue = (parsed: unknown) => {\n return this.settings.arguments?.[index].value\n ? this.settings.arguments[index].value(parsed)\n : parsed;\n };\n\n if (!args.length) {\n if (this.settings.arguments?.[index].default !== undefined) {\n const defaultValue =\n typeof this.settings.arguments[index].default === \"function\"\n ? this.settings.arguments[index].default.call(this)\n : this.settings.arguments[index].default;\n\n const mappedValue = mapArgValue(defaultValue);\n\n if (expectedArg.variadic && Array.isArray(mappedValue)) {\n params.push(...mappedValue);\n continue;\n }\n params.push(mappedValue);\n continue;\n }\n\n if (expectedArg.optional) {\n if (hasDefaults) {\n params.push(undefined);\n }\n continue;\n }\n throw new MissingArgumentError(expectedArg.name);\n }\n\n let arg: unknown;\n\n const parseArgValue = (value: string) => {\n return expectedArg.list\n ? value.split(\",\").map((value) => parseArgType(value))\n : parseArgType(value);\n };\n\n const parseArgType = (value: string) => {\n return this.parseType({\n label: \"Argument\",\n type: expectedArg.type,\n name: expectedArg.name,\n value,\n });\n };\n\n if (expectedArg.variadic) {\n arg = args.splice(0, args.length).map((value) =>\n parseArgValue(value)\n );\n } else {\n arg = parseArgValue(args.shift() as string);\n }\n\n arg = mapArgValue(arg);\n\n if (expectedArg.variadic && Array.isArray(arg)) {\n params.push(...arg);\n } else if (typeof arg !== \"undefined\") {\n params.push(arg);\n }\n }\n\n if (args.length) {\n throw new TooManyArgumentsError(args);\n }\n }\n }\n const values = await Promise.all(params);\n\n while (values.length && values.at(-1) === undefined) {\n values.pop();\n }\n\n return values as TCommandArguments;\n }\n\n private handleError(error: unknown): never {\n this.throw(\n error instanceof FlagsValidationError\n ? new ValidationError(error.message)\n : error instanceof Error\n ? error\n : new Error(`[non-error-thrown] ${error}`),\n );\n }\n\n /**\n * Handle error. If `throwErrors` is enabled the error will be thrown,\n * otherwise a formatted error message will be printed and `exit(1)`\n * will be called. This will also trigger registered error handlers.\n *\n * @param error The error to handle.\n */\n public throw(error: Error): never {\n if (error instanceof ValidationError) {\n error.cmd = this as unknown as Command;\n }\n this.getErrorHandler()?.(error, this as unknown as Command);\n\n if (this.shouldThrowErrors() || !(error instanceof ValidationError)) {\n throw error;\n }\n this.showHelp();\n\n console.error(red(` ${bold(\"error\")}: ${error.message}\\n`));\n\n exit(error instanceof ValidationError ? error.exitCode : 1);\n }\n\n /*****************************************************************************\n **** GETTER *****************************************************************\n *****************************************************************************/\n\n /** Get command name. */\n public getName(): string {\n return this.settings.name;\n }\n\n /** Get parent command. */\n public getParent(): TParentCommand {\n return this.parent as TParentCommand;\n }\n\n /**\n * Get parent command from global executed command.\n * Be sure, to call this method only inside an action handler. Unless this or any child command was executed,\n * this method returns always undefined.\n */\n public getGlobalParent(): Command<any> | undefined {\n return this.props.globalParent;\n }\n\n /** Get main command. */\n public getMainCommand(): Command<any> {\n return this.parent?.getMainCommand() ?? this;\n }\n\n /** Get command name aliases. */\n public getAliases(): string[] {\n return this.settings.aliases;\n }\n\n /**\n * Get full command path.\n *\n * @param name Override the main command name.\n */\n public getPath(name?: string): string {\n return this.parent && !this.props.isRoot\n ? this.parent.getPath(name) + \" \" + this.settings.name\n : name || this.settings.name;\n }\n\n /** Get arguments definition. E.g: <input-file:string> <output-file:string> */\n public getArgsDefinition(): string | undefined {\n return this.settings.arguments?.map(({ arg }) => arg).join(\" \");\n }\n\n /**\n * Get argument by name.\n *\n * @param name Name of the argument.\n */\n public getArgument(name: string): Argument | undefined {\n return this.getArguments().find((arg) => arg.name === name);\n }\n\n /** Get arguments. */\n public getArguments(): Argument[] {\n if (!this.props.args.length && this.settings.arguments) {\n this.props.args = parseArgumentsDefinition(this.settings.arguments);\n }\n\n return this.props.args;\n }\n\n /** Check if command has arguments. */\n public hasArguments(): boolean {\n return !!this.settings.arguments?.length;\n }\n\n /** Get command version. */\n public getVersion(): string | undefined {\n return this.getVersionHandler()?.call(this, this);\n }\n\n /** Get help handler method. */\n private getVersionHandler(): VersionHandler | undefined {\n return this.settings.version ?? this.parent?.getVersionHandler();\n }\n\n /** Get command description. */\n public getDescription(): string {\n // call description method only once\n return typeof this.settings.description === \"function\"\n ? this.settings.description = this.settings.description.call(this)\n : this.settings.description;\n }\n\n /** Get auto generated command usage. */\n public getUsage(): string {\n return this.settings.usage ??\n [this.getArgsDefinition(), this.getRequiredOptionsDefinition()]\n .join(\" \")\n .trim();\n }\n\n private getRequiredOptionsDefinition() {\n return this.getOptions()\n .filter((option) => option.required)\n .map((option) =>\n [findFlag(option.flags), option.typeDefinition].filter((v) => v)\n .join(\" \")\n .trim()\n )\n .join(\" \");\n }\n\n /** Get short command description. This is the first line of the description. */\n public getShortDescription(): string {\n return getDescription(this.getDescription(), true);\n }\n\n /** Get original command-line arguments. */\n public getRawArgs(): string[] {\n return this.props.rawArgs;\n }\n\n /** Get all arguments defined after the double dash. */\n public getLiteralArgs(): string[] {\n return this.props.literalArgs;\n }\n\n /** Output generated help without exiting. */\n public showVersion(): void {\n console.log(this.getVersion());\n }\n\n /** Returns command name, version and meta data. */\n public getLongVersion(): string {\n return `${bold(this.getMainCommand().getName())} ${\n brightBlue(this.getVersion() ?? \"\")\n }` +\n Object.entries(this.getMeta()).map(\n ([k, v]) => `\\n${bold(k)} ${brightBlue(v)}`,\n ).join(\"\");\n }\n\n /** Outputs command name, version and meta data. */\n public showLongVersion(): void {\n console.log(this.getLongVersion());\n }\n\n /** Output generated help without exiting. */\n public showHelp(options?: HelpOptions): void {\n console.log(this.getHelp(options));\n }\n\n /** Get generated help. */\n public getHelp(options?: HelpOptions): string {\n this.registerDefaults();\n return this.getHelpHandler().call(this, this, options ?? {});\n }\n\n /** Get help handler method. */\n private getHelpHandler(): HelpHandler {\n return this.settings.help ?? this.parent?.getHelpHandler() as HelpHandler;\n }\n\n private exit(code = 0) {\n if (this.shouldExit()) {\n exit(code);\n }\n }\n\n /*****************************************************************************\n **** Options GETTER *********************************************************\n *****************************************************************************/\n\n /**\n * Checks whether the command has options or not.\n *\n * @param hidden Include hidden options.\n */\n public hasOptions(hidden?: boolean): boolean {\n return this.getOptions(hidden).length > 0;\n }\n\n /**\n * Get options.\n *\n * @param hidden Include hidden options.\n */\n public getOptions(hidden?: boolean): Option[] {\n return this.getGlobalOptions(hidden).concat(this.getBaseOptions(hidden));\n }\n\n /**\n * Get base options.\n *\n * @param hidden Include hidden options.\n */\n public getBaseOptions(hidden?: boolean): Option[] {\n if (!this.builder.options.length) {\n return [];\n }\n\n return hidden\n ? this.builder.options.slice(0)\n : this.builder.options.filter((opt) => !opt.hidden);\n }\n\n /**\n * Get global options.\n *\n * @param hidden Include hidden options.\n */\n public getGlobalOptions(hidden?: boolean): Option[] {\n const helpOption = this.getHelpOption();\n const getGlobals = (\n cmd: Command<any>,\n noGlobals: boolean | undefined,\n options: Option[] = [],\n names: string[] = [],\n ): Option[] => {\n if (cmd.builder.options.length) {\n for (const option of cmd.builder.options) {\n if (\n option.global &&\n !this.builder.options.find((opt) => opt.name === option.name) &&\n names.indexOf(option.name) === -1 &&\n (hidden || !option.hidden)\n ) {\n if (noGlobals && option !== helpOption) {\n continue;\n }\n\n names.push(option.name);\n options.push(option);\n }\n }\n }\n\n return cmd.parent\n ? getGlobals(\n cmd.parent,\n noGlobals || cmd.settings.noGlobals,\n options,\n names,\n )\n : options;\n };\n\n return this.parent ? getGlobals(this.parent, this.settings.noGlobals) : [];\n }\n\n /**\n * Checks whether the command has an option with given name or not.\n *\n * @param name Name of the option. Must be in param-case.\n * @param hidden Include hidden options.\n */\n public hasOption(name: string, hidden?: boolean): boolean {\n return !!this.getOption(name, hidden);\n }\n\n /**\n * Get option by name.\n *\n * @param name Name of the option. Must be in param-case.\n * @param hidden Include hidden options.\n */\n public getOption(name: string, hidden?: boolean): Option | undefined {\n return this.getBaseOption(name, hidden) ??\n this.getGlobalOption(name, hidden);\n }\n\n /**\n * Get base option by name.\n *\n * @param name Name of the option. Must be in param-case.\n * @param hidden Include hidden options.\n */\n public getBaseOption(name: string, hidden?: boolean): Option | undefined {\n const option = this.builder.options.find((option) =>\n option.name === name || option.aliases?.includes(name)\n );\n\n return option && (hidden || !option.hidden) ? option : undefined;\n }\n\n /**\n * Get global option from parent commands by name.\n *\n * @param name Name of the option. Must be in param-case.\n * @param hidden Include hidden options.\n */\n public getGlobalOption(name: string, hidden?: boolean): Option | undefined {\n const helpOption = this.getHelpOption();\n const getGlobalOption = (\n parent: Command,\n noGlobals: boolean | undefined,\n ): Option | undefined => {\n const option: Option | undefined = parent.getBaseOption(\n name,\n hidden,\n );\n\n if (!option?.global) {\n return parent.parent && getGlobalOption(\n parent.parent,\n noGlobals || parent.settings.noGlobals,\n );\n }\n if (noGlobals && option !== helpOption) {\n return;\n }\n\n return option;\n };\n\n return this.parent && getGlobalOption(\n this.parent,\n this.settings.noGlobals,\n );\n }\n\n /**\n * Remove option by name.\n *\n * @param name Name of the option. Must be in param-case.\n */\n public removeOption(name: string): Option | undefined {\n const index = this.builder.options.findIndex((option) =>\n option.name === name\n );\n\n if (index === -1) {\n return;\n }\n\n return this.builder.options.splice(index, 1)[0];\n }\n\n /**\n * Checks whether the command has sub-commands or not.\n *\n * @param hidden Include hidden commands.\n */\n public hasCommands(hidden?: boolean): boolean {\n return this.getCommands(hidden).length > 0;\n }\n\n /**\n * Get commands.\n *\n * @param hidden Include hidden commands.\n */\n public getCommands(hidden?: boolean): Array<Command<any>> {\n return this.getGlobalCommands(hidden).concat(this.getBaseCommands(hidden));\n }\n\n /**\n * Get base commands.\n *\n * @param hidden Include hidden commands.\n */\n public getBaseCommands(hidden?: boolean): Array<Command<any>> {\n const commands = Array.from(this.settings.commands.values());\n return hidden ? commands : commands.filter((cmd) => !cmd.settings.isHidden);\n }\n\n /**\n * Get global commands.\n *\n * @param hidden Include hidden commands.\n */\n public getGlobalCommands(hidden?: boolean): Array<Command<any>> {\n const getCommands = (\n command: Command<any>,\n noGlobals: boolean | undefined,\n commands: Array<Command<any>> = [],\n names: string[] = [],\n ): Array<Command<any>> => {\n if (command.settings.commands.size) {\n for (const [_, cmd] of command.settings.commands) {\n if (\n cmd.settings.isGlobal &&\n this !== cmd &&\n !this.settings.commands.has(cmd.settings.name) &&\n names.indexOf(cmd.settings.name) === -1 &&\n (hidden || !cmd.settings.isHidden)\n ) {\n if (noGlobals && cmd?.getName() !== \"help\") {\n continue;\n }\n\n names.push(cmd.settings.name);\n commands.push(cmd);\n }\n }\n }\n\n return command.parent\n ? getCommands(\n command.parent,\n noGlobals || command.settings.noGlobals,\n commands,\n names,\n )\n : commands;\n };\n\n return this.parent ? getCommands(this.parent, this.settings.noGlobals) : [];\n }\n\n /**\n * Checks whether a child command exists by given name or alias.\n *\n * @param name Name or alias of the command.\n * @param hidden Include hidden commands.\n */\n public hasCommand(name: string, hidden?: boolean): boolean {\n return !!this.getCommand(name, hidden);\n }\n\n /**\n * Get command by name or alias.\n *\n * @param name Name or alias of the command.\n * @param hidden Include hidden commands.\n */\n public getCommand<TCommand extends Command<any>>(\n name: string,\n hidden?: boolean,\n ): TCommand | undefined {\n return this.getBaseCommand(name, hidden) ??\n this.getGlobalCommand(name, hidden);\n }\n\n /**\n * Get base command by name or alias.\n *\n * @param name Name or alias of the command.\n * @param hidden Include hidden commands.\n */\n public getBaseCommand<TCommand extends Command<any>>(\n name: string,\n hidden?: boolean,\n ): TCommand | undefined {\n for (const cmd of this.settings.commands.values()) {\n if (cmd.settings.name === name || cmd.settings.aliases.includes(name)) {\n return (cmd && (hidden || !cmd.settings.isHidden) ? cmd : undefined) as\n | TCommand\n | undefined;\n }\n }\n }\n\n /**\n * Get global command by name or alias.\n *\n * @param name Name or alias of the command.\n * @param hidden Include hidden commands.\n */\n public getGlobalCommand<TCommand extends Command<any>>(\n name: string,\n hidden?: boolean,\n ): TCommand | undefined {\n const getGlobalCommand = (\n parent: Command,\n noGlobals: boolean | undefined,\n ): Command | undefined => {\n const cmd: Command | undefined = parent.getBaseCommand(name, hidden);\n\n if (!cmd || !cmd.settings.isGlobal) {\n return parent.parent &&\n getGlobalCommand(\n parent.parent,\n noGlobals || parent.settings.noGlobals,\n );\n }\n if (noGlobals && cmd.getName() !== \"help\") {\n return;\n }\n\n return cmd;\n };\n\n return this.parent &&\n getGlobalCommand(this.parent, this.settings.noGlobals) as TCommand;\n }\n\n /**\n * Remove sub-command by name or alias.\n *\n * @param name Name or alias of the command.\n */\n public removeCommand(name: string): Command<any> | undefined {\n const command = this.getBaseCommand(name, true);\n\n if (command) {\n this.settings.commands.delete(command.settings.name);\n }\n\n return command;\n }\n\n /** Get types. */\n public getTypes(): Array<TypeDef> {\n return this.getGlobalTypes().concat(this.getBaseTypes());\n }\n\n /** Get base types. */\n public getBaseTypes(): Array<TypeDef> {\n return Array.from(this.builder.types.values());\n }\n\n /** Get global types. */\n public getGlobalTypes(): Array<TypeDef> {\n const getTypes = (\n cmd: Command<any> | undefined,\n types: Array<TypeDef> = [],\n names: Array<string> = [],\n ): Array<TypeDef> => {\n if (cmd) {\n if (cmd.builder.types.size) {\n cmd.builder.types.forEach((type: TypeDef) => {\n if (\n type.global &&\n !this.builder.types.has(type.name) &&\n names.indexOf(type.name) === -1\n ) {\n names.push(type.name);\n types.push(type);\n }\n });\n }\n\n return getTypes(cmd.parent, types, names);\n }\n\n return types;\n };\n\n return getTypes(this.parent);\n }\n\n /**\n * Get type by name.\n *\n * @param name Name of the type.\n */\n public getType(name: string): TypeDef | undefined {\n return this.getBaseType(name) ?? this.getGlobalType(name);\n }\n\n /**\n * Get base type by name.\n *\n * @param name Name of the type.\n */\n public getBaseType(name: string): TypeDef | undefined {\n return this.builder.types.get(name);\n }\n\n /**\n * Get global type by name.\n *\n * @param name Name of the type.\n */\n public getGlobalType(name: string): TypeDef | undefined {\n if (!this.parent) {\n return;\n }\n\n const cmd: TypeDef | undefined = this.parent.getBaseType(name);\n\n if (!cmd?.global) {\n return this.parent.getGlobalType(name);\n }\n\n return cmd;\n }\n\n /** Get completions. */\n public getCompletions(): Completion<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >[] {\n return this.getGlobalCompletions().concat(this.getBaseCompletions());\n }\n\n /** Get base completions. */\n public getBaseCompletions(): Completion[] {\n return Array.from(this.builder.completions.values());\n }\n\n /** Get global completions. */\n public getGlobalCompletions(): Completion[] {\n const getCompletions = (\n cmd: Command<any> | undefined,\n completions: Completion[] = [],\n names: string[] = [],\n ): Completion[] => {\n if (cmd) {\n if (cmd.builder.completions.size) {\n cmd.builder.completions.forEach((completion: Completion) => {\n if (\n completion.global &&\n !this.builder.completions.has(completion.name) &&\n names.indexOf(completion.name) === -1\n ) {\n names.push(completion.name);\n completions.push(completion);\n }\n });\n }\n\n return getCompletions(cmd.parent, completions, names);\n }\n\n return completions;\n };\n\n return getCompletions(this.parent);\n }\n\n /**\n * Get completion by name.\n *\n * @param name Name of the completion.\n */\n public getCompletion(name: string): Completion | undefined {\n return this.getBaseCompletion(name) ?? this.getGlobalCompletion(name);\n }\n\n /**\n * Get base completion by name.\n *\n * @param name Name of the completion.\n */\n public getBaseCompletion(name: string): Completion | undefined {\n return this.builder.completions.get(name);\n }\n\n /**\n * Get global completions by name.\n *\n * @param name Name of the completion.\n */\n public getGlobalCompletion(name: string): Completion | undefined {\n if (!this.parent) {\n return;\n }\n\n const completion: Completion | undefined = this.parent.getBaseCompletion(\n name,\n );\n\n if (!completion?.global) {\n return this.parent.getGlobalCompletion(name);\n }\n\n return completion;\n }\n\n /**\n * Checks whether the command has environment variables or not.\n *\n * @param hidden Include hidden environment variable.\n */\n public hasEnvVars(hidden?: boolean): boolean {\n return this.getEnvVars(hidden).length > 0;\n }\n\n /**\n * Get environment variables.\n *\n * @param hidden Include hidden environment variable.\n */\n public getEnvVars(hidden?: boolean): EnvVar[] {\n return this.getGlobalEnvVars(hidden).concat(this.getBaseEnvVars(hidden));\n }\n\n /**\n * Get base environment variables.\n *\n * @param hidden Include hidden environment variable.\n */\n public getBaseEnvVars(hidden?: boolean): EnvVar[] {\n if (!this.builder.envVars.length) {\n return [];\n }\n\n return hidden\n ? this.builder.envVars.slice(0)\n : this.builder.envVars.filter((env) => !env.hidden);\n }\n\n /**\n * Get global environment variables.\n *\n * @param hidden Include hidden environment variable.\n */\n public getGlobalEnvVars(hidden?: boolean): EnvVar[] {\n if (this.settings.noGlobals) {\n return [];\n }\n\n const getEnvVars = (\n cmd: Command<any> | undefined,\n envVars: EnvVar[] = [],\n names: string[] = [],\n ): EnvVar[] => {\n if (cmd) {\n if (cmd.builder.envVars.length) {\n cmd.builder.envVars.forEach((envVar: EnvVar) => {\n if (\n envVar.global &&\n !this.builder.envVars.find((env) =>\n env.names[0] === envVar.names[0]\n ) &&\n names.indexOf(envVar.names[0]) === -1 &&\n (hidden || !envVar.hidden)\n ) {\n names.push(envVar.names[0]);\n envVars.push(envVar);\n }\n });\n }\n\n return getEnvVars(cmd.parent, envVars, names);\n }\n\n return envVars;\n };\n\n return getEnvVars(this.parent);\n }\n\n /**\n * Checks whether the command has an environment variable with given name or not.\n *\n * @param name Name of the environment variable.\n * @param hidden Include hidden environment variable.\n */\n public hasEnvVar(name: string, hidden?: boolean): boolean {\n return !!this.getEnvVar(name, hidden);\n }\n\n /**\n * Get environment variable by name.\n *\n * @param name Name of the environment variable.\n * @param hidden Include hidden environment variable.\n */\n public getEnvVar(name: string, hidden?: boolean): EnvVar | undefined {\n return this.getBaseEnvVar(name, hidden) ??\n this.getGlobalEnvVar(name, hidden);\n }\n\n /**\n * Get base environment variable by name.\n *\n * @param name Name of the environment variable.\n * @param hidden Include hidden environment variable.\n */\n public getBaseEnvVar(name: string, hidden?: boolean): EnvVar | undefined {\n const envVar: EnvVar | undefined = this.builder.envVars.find((env) =>\n env.names.indexOf(name) !== -1\n );\n\n return envVar && (hidden || !envVar.hidden) ? envVar : undefined;\n }\n\n /**\n * Get global environment variable by name.\n *\n * @param name Name of the environment variable.\n * @param hidden Include hidden environment variable.\n */\n public getGlobalEnvVar(name: string, hidden?: boolean): EnvVar | undefined {\n if (!this.parent || this.settings.noGlobals) {\n return;\n }\n\n const envVar: EnvVar | undefined = this.parent.getBaseEnvVar(\n name,\n hidden,\n );\n\n if (!envVar?.global) {\n return this.parent.getGlobalEnvVar(name, hidden);\n }\n\n return envVar;\n }\n\n /** Checks whether the command has examples or not. */\n public hasExamples(): boolean {\n return this.settings.examples.length > 0;\n }\n\n /** Get all examples. */\n public getExamples(): Example[] {\n return this.settings.examples;\n }\n\n /** Checks whether the command has an example with given name or not. */\n public hasExample(name: string): boolean {\n return !!this.getExample(name);\n }\n\n /** Get example with given name. */\n public getExample(name: string): Example | undefined {\n return this.settings.examples.find((example) => example.name === name);\n }\n\n private getHelpOption(): Option | undefined {\n return this.props.helpOption ?? this.parent?.getHelpOption();\n }\n}\n\nfunction findFlag(flags: Array<string>): string {\n for (const flag of flags) {\n if (flag.startsWith(\"--\")) {\n return flag;\n }\n }\n return flags[0];\n}\n\ninterface DefaultOption {\n flags: string;\n desc?: string;\n opts?: OptionOptions;\n}\n\ninterface ParseContext extends ParseFlagsContext<Record<string, unknown>> {\n actions: Array<ActionHandler>;\n env: Record<string, unknown>;\n}\n\ninterface ParseOptionsOptions {\n stopEarly?: boolean;\n stopOnUnknown?: boolean;\n dotted?: boolean;\n}\n","/** Default border characters. */\nexport const border = {\n top: \"─\",\n topMid: \"┬\",\n topLeft: \"┌\",\n topRight: \"┐\",\n bottom: \"─\",\n bottomMid: \"┴\",\n bottomLeft: \"└\",\n bottomRight: \"┘\",\n left: \"│\",\n leftMid: \"├\",\n mid: \"─\",\n midMid: \"┼\",\n right: \"│\",\n rightMid: \"┤\",\n middle: \"│\",\n};\n\n/** Default border characters. */\nexport type Border = typeof border;\n","/** Allowed cell value type. */\nexport type CellValue = number | string;\n\n/** Allowed cell type. */\nexport type CellType = CellValue | Cell;\n\n/** Cell alignment direction. */\nexport type Direction = \"left\" | \"right\" | \"center\";\n\n/** Cell options. */\ninterface CellOptions {\n /** Enable/disable cell border. */\n border?: boolean;\n /** Set coll span. */\n colSpan?: number;\n /** Set row span. */\n rowSpan?: number;\n /** Cell cell alignment direction. */\n align?: Direction;\n /**\n * Any unterminated ANSI formatting overflowed from previous lines of a\n * multi-line cell.\n */\n unclosedAnsiRuns?: string;\n}\n\n/**\n * Cell representation.\n *\n * Can be used to customize a single cell.\n *\n * ```ts\n * import { Cell, Table } from \"./mod.ts\";\n *\n * new Table()\n * .body([\n * [\"Foo\", new Cell(\"Bar\").align(\"right\")],\n * [\"Beep\", \"Boop\"],\n * ])\n * .render();\n * ```\n */\nexport class Cell {\n protected options: CellOptions = {};\n\n /** Get cell length. */\n public get length(): number {\n return this.toString().length;\n }\n\n /**\n * Any unterminated ANSI formatting overflowed from previous lines of a\n * multi-line cell.\n */\n public get unclosedAnsiRuns(): string {\n return this.options.unclosedAnsiRuns ?? \"\";\n }\n public set unclosedAnsiRuns(val: string) {\n this.options.unclosedAnsiRuns = val;\n }\n\n /**\n * Create a new cell. If value is a cell, the value and all options of the cell\n * will be copied to the new cell.\n *\n * @param value Cell or cell value.\n */\n public static from(value: CellType): Cell {\n let cell: Cell;\n if (value instanceof Cell) {\n cell = new this(value.getValue());\n cell.options = { ...value.options };\n } else {\n cell = new this(value);\n }\n return cell;\n }\n\n /**\n * Cell constructor.\n *\n * @param value Cell value.\n */\n public constructor(private value: CellValue) {}\n\n /** Get cell string value. */\n public toString(): string {\n return this.value.toString();\n }\n\n /** Get cell value. */\n public getValue(): CellValue {\n return this.value;\n }\n\n /**\n * Set cell value.\n *\n * @param value Cell or cell value.\n */\n public setValue(value: CellValue): this {\n this.value = value;\n return this;\n }\n\n /**\n * Clone cell with all options.\n *\n * @param value Cell or cell value.\n */\n public clone(value?: CellValue): Cell {\n return Cell.from(value ?? this);\n }\n\n /**\n * Setter:\n */\n\n /**\n * Enable/disable cell border.\n *\n * @param enable Enable/disable cell border.\n * @param override Override existing value.\n */\n public border(enable = true, override = true): this {\n if (override || typeof this.options.border === \"undefined\") {\n this.options.border = enable;\n }\n return this;\n }\n\n /**\n * Set col span.\n *\n * ```ts\n * import { Cell, Table } from \"./mod.ts\";\n *\n * new Table()\n * .body([\n * [\n * new Cell(\"Row 1 & 2 Column 1\").rowSpan(2),\n * \"Row 1 Column 2\",\n * \"Row 1 Column 3\",\n * ],\n * [new Cell(\"Row 2 Column 2 & 3\").colSpan(2)],\n * ])\n * .border()\n * .render();\n * ```\n *\n * @param span Number of cols to span.\n * @param override Override existing value.\n */\n public colSpan(span: number, override = true): this {\n if (override || typeof this.options.colSpan === \"undefined\") {\n this.options.colSpan = span;\n }\n return this;\n }\n\n /**\n * Set row span.\n *\n * ```ts\n * import { Cell, Table } from \"./mod.ts\";\n *\n * new Table()\n * .body([\n * [\n * new Cell(\"Row 1 & 2 Column 1\").rowSpan(2),\n * \"Row 1 Column 2\",\n * \"Row 1 Column 3\",\n * ],\n * [new Cell(\"Row 2 Column 2 & 3\").colSpan(2)],\n * ])\n * .border()\n * .render();\n * ```\n *\n * @param span Number of rows to span.\n * @param override Override existing value.\n */\n public rowSpan(span: number, override = true): this {\n if (override || typeof this.options.rowSpan === \"undefined\") {\n this.options.rowSpan = span;\n }\n return this;\n }\n\n /**\n * Align cell content.\n *\n * @param direction Align direction.\n * @param override Override existing value.\n */\n public align(direction: Direction, override = true): this {\n if (override || typeof this.options.align === \"undefined\") {\n this.options.align = direction;\n }\n return this;\n }\n\n /**\n * Getter:\n */\n\n /** Check if cell has border. */\n public getBorder(): boolean {\n return this.options.border === true;\n }\n\n /** Get col span. */\n public getColSpan(): number {\n return typeof this.options.colSpan === \"number\" && this.options.colSpan > 0\n ? this.options.colSpan\n : 1;\n }\n\n /** Get row span. */\n public getRowSpan(): number {\n return typeof this.options.rowSpan === \"number\" && this.options.rowSpan > 0\n ? this.options.rowSpan\n : 1;\n }\n\n /** Get row span. */\n public getAlign(): Direction {\n return this.options.align ?? \"left\";\n }\n}\n","import type { Direction } from \"./cell.ts\";\n\n/** Column options. */\nexport interface ColumnOptions {\n /** Enable/disable cell border. */\n border?: boolean;\n /** Cell cell alignment direction. */\n align?: Direction;\n /** Set min column width. */\n minWidth?: number;\n /** Set max column width. */\n maxWidth?: number;\n /** Set cell padding. */\n padding?: number;\n}\n\n/**\n * Column representation.\n *\n * Can be used to customize a single column.\n *\n * ```ts\n * import { Column, Table } from \"./mod.ts\";\n *\n * new Table()\n * .body([\n * [\"Foo\", \"bar\"],\n * [\"Beep\", \"Boop\"],\n * ])\n * .column(0, new Column().border())\n * .render();\n * ```\n */\nexport class Column {\n /**\n * Create a new cell from column options or an existing column.\n * @param options\n */\n static from(options: ColumnOptions | Column): Column {\n const opts = options instanceof Column ? options.opts : options;\n return new Column().options(opts);\n }\n\n protected opts: ColumnOptions = {};\n\n /** Set column options. */\n options(options: ColumnOptions): this {\n Object.assign(this.opts, options);\n return this;\n }\n\n /** Set min column width. */\n minWidth(width: number): this {\n this.opts.minWidth = width;\n return this;\n }\n\n /** Set max column width. */\n maxWidth(width: number): this {\n this.opts.maxWidth = width;\n return this;\n }\n\n /** Set column border. */\n border(border = true): this {\n this.opts.border = border;\n return this;\n }\n\n /** Set column padding. */\n padding(padding: number): this {\n this.opts.padding = padding;\n return this;\n }\n\n /** Set column alignment. */\n align(direction: Direction): this {\n this.opts.align = direction;\n return this;\n }\n\n /** Get min column width. */\n getMinWidth(): number | undefined {\n return this.opts.minWidth;\n }\n\n /** Get max column width. */\n getMaxWidth(): number | undefined {\n return this.opts.maxWidth;\n }\n\n /** Get column border. */\n getBorder(): boolean | undefined {\n return this.opts.border;\n }\n\n /** Get column padding. */\n getPadding(): number | undefined {\n return this.opts.padding;\n }\n\n /** Get column alignment. */\n getAlign(): Direction | undefined {\n return this.opts.align;\n }\n}\n","let tables: Uint8Array[] | null = null;\n\nconst data = {\n \"UNICODE_VERSION\": \"15.0.0\",\n \"tables\": [\n {\n \"d\": \"AAECAwQFBgcICQoLDA0OAw8DDwkQCRESERIA\",\n \"r\": \"AQEBAgEBAQEBAQEBAQEBBwEHAVABBwcBBwF4\",\n },\n {\n \"d\":\n \"AAECAwQFBgcGCAYJCgsMDQ4PEAYREhMUBhUWFxgZGhscHR4fICEiIyIkJSYnKCkqJSssLS4vMDEyMzQ1Njc4OToGOzwKBj0GPj9AQUIGQwZEBkVGR0hJSktMTQZOBgoGT1BRUlNUVVZXWFkGWgZbBlxdXl1fYGFiY2RlZmdoBmlqBmsGAQZsBm1uO29wcXI7czt0dXZ3OwY7eHkGent8Bn0Gfn+AgYKDhIWGBoc7iAZdO4kGiosGAXGMBo0GjgaPBpAGkQaSBpMGlJUGlpcGmJmam5ydnp+gLgahLKIGo6SlpganqKmqqwasBq0Grq8GsLGyswa0BrUGtre4Brm6uwZHvAa9vga/wME7wjvDxAbFO8bHO8gGyQbKywbMzQbOBs/Q0QbSBr8GvgbT1AbUBtUG1gbXBtjZ2tsG3N0G3t/g4eLjO+Tl5ufoO+k76gbrBuztOwbu7/AGO+XxCgYKCwZd8g==\",\n \"r\":\n \"AQEBAQEBAQEBAQEBAQEBAQEBAQMBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECBQEOAQEBAQEBAQEBAwEBAQEBAQEBAQIBAwEIAQEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBDQEBBQEBAQEBAgEBAwEBAQEBAQEBAQEBbQHaAQEFAQEBBAECAQEBAQEBAQEBAwGuASFkCAELAQEBAQEBAQEHAQMBAQEaAQIBCAEFAQEBAQEBAQEBAQEBAQEBAQEBAQECAQEBAQIBAQEBAQEBAwEDAQEBAQEBAQUBAQEBAQEBBAEBAVIBAdkBARABAQFfARMBAYoBBAEBBQEmAUkBAQcBAQIBHgEBARUBAQEBAQUBAQcBDwEBARoBAgEBAQEBAQECAQEBAQEBAQEBAQEBAQEBAQMBBAEBAgEBAQEUfwEBAQIDAXj/AQ==\",\n },\n {\n \"d\":\n \"AFUVAF3Xd3X/93//VXVVV9VX9V91f1/31X93XVXdVdVV9dVV/VVX1X9X/131VfXVVXV3V1VdVV1V1/1dV1X/3VUAVf3/3/9fVf3/3/9fVV1V/11VFQBQVQEAEEEQVQBQVQBAVFUVAFVUVQUAEAAUBFBVFVFVAEBVBQBUVRUAVVFVBRAAAVBVAVVQVQBVBQBAVUVUAQBUUQEAVQVVUVVUAVRVUVUFVUVBVVRBFRRQUVVQUVUBEFRRVQVVBQBRVRQBVFVRVUFVBVVFVVRVUVVUVQRUBQRQVUFVBVVFVVBVBVVQVRVUAVRVUVUFVVFVRVUFRFVRAEBVFQBAVVEAVFUAQFVQVRFRVQEAQAAEVQEAAQBUVUVVAQQAQVVQBVRVAVRVRUFVUVVRVaoAVQFVBVRVBVUFVQVVEABQVUUBAFVRVRUAVUFVUVVAFVRVRVUBVRUUVUUAQEQBAFQVABRVAEBVAFUEQFRFVRUAVVBVBVAQUFVFUBFQVQAFVUAABABUUVVUUFUVANd/X3//BUD3XdV1VQAEAFVXVdX9V1VXVQBUVdVdVdV1VX111VXVV9V//1X/X1VdVf9fVV9VdVdV1VX31dfVXXX9193/d1X/VV9VV3VVX//1VfVVXVVdVdVVdVWlVWlVqVaWVf/f/1X/Vf/1X1Xf/19V9VVf9df1X1X1X1XVVWlVfV31VVpVd1V3VapV33/fVZVVlVX1WVWlVelV+v/v//7/31Xv/6/77/tVWaVVVlVdVWaVmlX1/1WpVVZVlVWVVlVW+V9VFVBVAKqaqlWqWlWqVaoKoKpqqapqgapVqaqpqmqqVapqqv+qVqpqVRVAAFBVBVVQVUUVVUFVVFVQVQBQVRVVBQBQVRUAUFWqVkBVFQVQVVFVAUBBVRVVVFVUVQQUVAVRVVBVRVVRVFFVqlVFVQCqWlUAqmqqaqpVqlZVqmpVAV1VUVVUVQVAVQFBVQBVQBVVQVUAVRVUVQFVBQBUVQVQVVFVAEBVFFRVFVBVFUBBUUVVUVVAVRUAAQBUVRVVUFUFAEBVARRVFVAEVUVVFQBAVVRVBQBUAFRVAAVEVUVVFQBEFQRVBVBVEFRVUFUVAEARVFUVUQAQVQEFEABVFQBBVRVEFVUABVVUVQEAQFUVABRAVRVVAUABVQUAQFBVAEAAEFUFAAUABEFVAUBFEAAQVVARVRVUVVBVBUBVRFVUFQBQVQBUVQBAVRVVFUBVqlRVWlWqVapaVapWVaqpqmmqalVlVWpZVapVqlVBAFUAUABAVRVQVRUAQAEAVQVQVQVUVQBAFQBUVVFVVFUVAAEAVQBAABQAEARAVUVVAFUAQFUAQFVWVZVV/39V/1//X1X/76uq6v9XVWpVqlWqVlVaVapaVapWVamqmqqmqlWqapWqVapWqmqmqpaqWlWVaqpVZVVpVVZVlapVqlpVVmqpVapVlVZVqlZVqlVWVapqqpqqVapWqlZVqpqqWlWlqlWqVlWqVlVRVQD/Xw==\",\n \"r\":\n \"CBcBCAEBAQEBAQEBAQECAQEBAQEBAQEBAQEBAQMBAQECAQEBAQEBAQEBAQEBBAEBGAEDAQwBAwEIAQEBAQEBAQgcCAEDAQEBAQEDAQEBDQEDEAELAQEBEQEKAQEBDgEBAgIBAQoBBQQBCAEBAQEBAQEHAQEHBgEWAQIBDQECAgEFAQECAgEKAQ0BAQIKAQ0BDQEBAQEBAQEBAgEHAQ4BAQEBAQQBBgEBDgEBAQEBAQcBAQIBAQEBBAEFAQEBDgEBAQEBAQECAQcBDwECAQwCDQEBAQEBAQECAQgBAQEEAQcBDQEBAQEBAQQBBwERAQEBARYBAQECAQEBGAECAQIBARIBBgEBDQECAQEBAQECAQgBAQEZAQEBAgYBAQEDAQECAQEBAQMBCBgIBwEMAQEGAQcBBwEQAQEBAQEBAgIBCgEBDQEIAQ0BAQEBAQEBBgEBDgEBAQEBAQEBAgEMBwEMAQwBAQEBCQECAwEHAQEBAQ0BAQEBDgIBBgEDAQEBAQEBAQMBAQEBAgEBAQEBAQEBCAEBAgEBAQEBAQkBCAgBAwECAQEBAgEBAQkBAQEBAwECAQMBAQIBBwEFAQEDAQYBAQEBAgEBAQEBAQEBAQECAgEDAQECBAIDAgIBBQEEAQEBAwEPAQEBCyIBCAEJAwQBAQIBAQEBAgECAQEBAQMBAQEBAwEBAQEBAQEBAQgBAQMDAgEBAwEEAQIBAQEBBAEBAQEBAQECAQEBAQEBAQEBAQEHAQQBAwEBAQcBAgUBBgECAQYBAQwBAQEUAQELCAYBFgMFAQYDAQoBAQMBARQBAQkBAQoBBgEVAwsBCgIPAQ0BGQEBAgEHARQBAwIBBgEBAQUBBgQBAgEJAQEBBQECAQMHAQELAQECCQEQAQECAgECAQsBDAEBAQEBCgEBAQsBAQEECQ4BCAQCAQEECAEEAQEFCAEPAQEEAQEPAQgBFAEBAQEBAQEKAQEJAQ8BEAEBEwEBAQIBCwEBDgENAwEKAQEBAQELAQEBAQECAQwBCAEBAQEBDgEDAQwBAQECAQEXAQEBAQEHAgEBBQEIAQEBAQEQAgEBBQEUAQEBAQEbAQEBAQEGARQBAQEBARkBAQEBCQEBAQEQAQIBDwEBARQBAQEBBwEBAQkBAQEBAQECAQEBCwECAQEVAQEBAQQBBQEBAQEOAQEBAQEBEgEBFgEBAgEMAQEBAQ8BAQMBFgEBDgEBBQEPAQETAQECAQMOAgUBCgIBGQEBAQEIAQMBBwEBAwECEwgBAQcLAQUBFwEBAQEDAQEBBwEBBAEBDg0BAQwBAQEDAQQBAQEDBAEBBAEBAQEBEAEPAQgBAQsBAQ4BEQEMAgEBBwEOAQEHAQEBAQQBBAEDCwECAQEBAwEBBggBAgEBAREBBQMKAQEBAwQCEQEBHgEPAQIBAQYEAQYBAwEUAQUMAQEBAQEBAQECAQEBAgEIAwEBBgsBAgEODAMBAgEBCwEBAQEBAwECAQECAQEBBwgPAQ==\",\n },\n ],\n} as const;\n\nfunction lookupWidth(cp: number) {\n if (!tables) tables = data.tables.map(runLengthDecode);\n const t1Offset = tables[0]![(cp >> 13) & 0xff]!;\n const t2Offset = tables[1]![128 * t1Offset + ((cp >> 6) & 0x7f)]!;\n const packedWidths = tables[2]![16 * t2Offset + ((cp >> 2) & 0xf)]!;\n\n const width = (packedWidths >> (2 * (cp & 0b11))) & 0b11;\n\n return width === 3 ? 1 : width;\n}\n\nconst cache = new Map<string, number | null>();\nfunction charWidth(char: string) {\n if (cache.has(char)) return cache.get(char)!;\n\n const codePoint = char.codePointAt(0)!;\n let width: number | null = null;\n\n if (codePoint < 0x7f) {\n width = codePoint >= 0x20 ? 1 : codePoint === 0 ? 0 : null;\n } else if (codePoint >= 0xa0) {\n width = lookupWidth(codePoint);\n } else {\n width = null;\n }\n\n cache.set(char, width);\n return width;\n}\n\n/**\n * Calculate the physical width of a string in a TTY-like environment. This is\n * useful for cases such as calculating where a line-wrap will occur and\n * underlining strings.\n *\n * The physical width is given by the number of columns required to display\n * the string. The number of columns a given unicode character occupies can\n * vary depending on the character itself.\n *\n * @param str The string to measure.\n * @returns The unicode width of the string.\n *\n * @example Calculating the unicode width of a string\n * ```ts\n * import { unicodeWidth } from \"@std/cli/unicode-width\";\n * import { assertEquals } from \"@std/assert\";\n *\n * assertEquals(unicodeWidth(\"hello world\"), 11);\n * assertEquals(unicodeWidth(\"天地玄黃宇宙洪荒\"), 16);\n * assertEquals(unicodeWidth(\"fullwidth\"), 18);\n * ```\n *\n * @example Calculating the unicode width of a color-encoded string\n * ```ts\n * import { unicodeWidth } from \"@std/cli/unicode-width\";\n * import { stripAnsiCode } from \"@std/fmt/colors\";\n * import { assertEquals } from \"@std/assert\";\n *\n * assertEquals(unicodeWidth(stripAnsiCode(\"\\x1b[36mголубой\\x1b[39m\")), 7);\n * assertEquals(unicodeWidth(stripAnsiCode(\"\\x1b[31m紅色\\x1b[39m\")), 4);\n * assertEquals(unicodeWidth(stripAnsiCode(\"\\x1B]8;;https://deno.land\\x07🦕\\x1B]8;;\\x07\")), 2);\n * ```\n *\n * Use\n * {@linkcode https://jsr.io/@std/fmt/doc/colors/~/stripAnsiCode | stripAnsiCode}\n * to remove ANSI escape codes from a string before passing it to\n * {@linkcode unicodeWidth}.\n */\nexport function unicodeWidth(str: string): number {\n return [...str].map((ch) => charWidth(ch) ?? 0).reduce((a, b) => a + b, 0);\n}\n\nfunction runLengthDecode({ d, r }: { d: string; r: string }) {\n const data = atob(d);\n const runLengths = atob(r);\n let out = \"\";\n\n for (const [i, ch] of [...runLengths].entries()) {\n out += data[i]!.repeat(ch.codePointAt(0)!);\n }\n\n return Uint8Array.from([...out].map((x) => x.codePointAt(0)!));\n}\n","/**\n * Get next words from the beginning of [content] until all words have a length lower or equal then [length].\n *\n * @param length Max length of all words.\n * @param content The text content.\n */\nimport { Cell, type CellType } from \"./cell.js\";\nimport { consumeWords } from \"./consume_words.js\";\nimport { stripAnsiCode } from \"@jsr/std__fmt/colors\";\nimport { unicodeWidth } from \"./unicode_width.js\";\n// import { unicodeWidth } from \"@std/cli/unicode-width\";\n\n/**\n * Get longest cell from given row index.\n */\nexport function longest(\n index: number,\n rows: Array<Array<CellType>>,\n maxWidth?: number,\n): number {\n const cellLengths = rows.map((row) => {\n const cell = row[index];\n const cellValue = cell instanceof Cell && cell.getColSpan() > 1\n ? \"\"\n : cell?.toString() || \"\";\n\n return cellValue\n .split(\"\\n\")\n .map((line: string) => {\n const str = typeof maxWidth === \"undefined\"\n ? line\n : consumeWords(maxWidth, line);\n\n return strLength(str) || 0;\n });\n }).flat();\n\n return Math.max(...cellLengths);\n}\n\nexport const strLength = (str: string): number => {\n return unicodeWidth(stripAnsiCode(str));\n};\n\n/** Regex `source` to match any relevant ANSI code. */\nexport const ansiRegexSource =\n // deno-lint-ignore no-control-regex\n /\\x1b\\[(?:(?<_0>0)|(?<_22>1|2|22)|(?<_23>3|23)|(?<_24>4|24)|(?<_27>7|27)|(?<_28>8|28)|(?<_29>9|29)|(?<_39>30|31|32|33|34|35|36|37|38;2;\\d+;\\d+;\\d+|38;5;\\d+|39|90|91|92|93|94|95|96|97)|(?<_49>40|41|42|43|44|45|46|47|48;2;\\d+;\\d+;\\d+|48;5;\\d+|49|100|101|102|103|104|105|106|107))m/\n .source;\n\n/**\n * Get unclosed ANSI runs in a string.\n *\n * @param text - A string segment possibly containing unclosed ANSI runs.\n */\nexport function getUnclosedAnsiRuns(text: string) {\n type Token = { kind: string; content: string };\n const tokens: Token[] = [];\n for (const { groups } of text.matchAll(new RegExp(ansiRegexSource, \"g\"))) {\n const [_kind, content] = Object.entries(groups!).find(([_, val]) => val)!;\n tokens.push({ kind: _kind.slice(1), content });\n }\n\n let unclosed: Token[] = [];\n for (const token of tokens) {\n // Subsequent ANSI codes of a given kind automatically \"close\" previous\n // codes of the same kind, so we remove the previous ones.\n // E.g. in the string `${bg_red} A ${bg_yellow} B ${close_bg} C`, \"B\" only\n // has a single background color (yellow), and \"C\" has no background color.\n unclosed = [...unclosed.filter((y) => y.kind !== token.kind), token];\n }\n\n unclosed = unclosed.filter(({ content, kind }) => content !== kind);\n\n const currentSuffix = unclosed\n .map(({ kind }) => `\\x1b[${kind}m`).reverse().join(\"\");\n const nextPrefix = unclosed.map(({ content }) => `\\x1b[${content}m`).join(\"\");\n\n return {\n /** The suffix to be appended to the text to close all unclosed runs. */\n currentSuffix,\n /**\n * The prefix to be appended to the next segment to continue unclosed\n * runs if the input text forms the first segment of a multi-line string.\n */\n nextPrefix,\n };\n}\n","import { ansiRegexSource, strLength } from \"./_utils.js\";\n\n/**\n * Consumes the maximum amount of words from a string which is not longer than\n * given length. This function returns at least one word.\n *\n * ```ts\n * import { consumeWords } from \"./mod.ts\";\n *\n * const str = consumeWords(9, \"This is an example.\"); // returns: \"This is\"\n * ```\n *\n * @param length The maximum length of the returned string.\n * @param content The content from which the string should be consumed.\n */\nexport function consumeWords(length: number, content: string): string {\n let consumed = \"\";\n const words: Array<string> = content.split(\"\\n\")[0]?.split(/ /g);\n\n for (let i = 0; i < words.length; i++) {\n const word: string = words[i];\n\n // consume minimum one word\n if (consumed) {\n const nextLength = strLength(word);\n const consumedLength = strLength(consumed);\n if (consumedLength + nextLength >= length) {\n break;\n }\n }\n\n consumed += (i > 0 ? \" \" : \"\") + word;\n }\n\n return consumed;\n}\n\n/**\n * Consumes the maximum amount of chars from a string which is not longer than\n * given length, ignoring ANSI codes when calculating the length.\n * This function returns at least one char.\n *\n * ```ts\n * import { consumeChars } from \"./consume_words.ts\";\n *\n * const str = consumeChars(9, \"\\x1b[31mThis is an example.\"); // returns: \"\\x1b[31mThis is a\"\n * ```\n *\n * @param length The maximum length of the returned string.\n * @param content The content from which the string should be consumed.\n */\nexport function consumeChars(length: number, content: string): string {\n let consumed = \"\";\n const chars = [\n ...content.split(\"\\n\")[0].matchAll(\n new RegExp(`(?:${ansiRegexSource})+|.`, \"gu\"),\n ),\n ]\n .map(([match]) => match);\n\n for (const char of chars) {\n // consume minimum one char\n if (consumed) {\n const nextLength = strLength(char);\n const consumedLength = strLength(consumed);\n if (consumedLength + nextLength > length) {\n break;\n }\n }\n\n consumed += char;\n }\n\n return consumed;\n}\n","import { Cell, type CellType, type Direction } from \"./cell.js\";\n\n/** Allowed row type. */\nexport type RowType<\n T extends CellType | undefined = CellType | undefined,\n> =\n | Array<T>\n | Row<T>;\n\n/** Json row. */\nexport type DataRow = Record<string, string | number>;\n\n/** Row options. */\ninterface RowOptions {\n indent?: number;\n border?: boolean;\n align?: Direction;\n}\n\n/**\n * Row representation.\n *\n * Can be used to customize a single row.\n *\n * ```ts\n * import { Row, Table } from \"./mod.ts\";\n *\n * new Table()\n * .body([\n * new Row(\"Foo\", \"Bar\").align(\"right\"),\n * [\"Beep\", \"Boop\"],\n * ])\n * .render();\n * ```\n */\nexport class Row<\n T extends CellType | undefined = CellType | undefined,\n> extends Array<T> {\n protected options: RowOptions = {};\n\n /**\n * Create a new row. If cells is a row, all cells and options of the row will\n * be copied to the new row.\n *\n * @param cells Cells or row.\n */\n public static override from<T extends CellType | undefined>(\n cells: RowType<T>,\n ): Row<T> {\n const row = new this(...cells);\n if (cells instanceof Row) {\n row.options = { ...(cells as Row).options };\n }\n return row;\n }\n\n /** Clone row recursively with all options. */\n public clone(): Row {\n const row = new Row(\n ...this.map((cell: T) => cell instanceof Cell ? cell.clone() : cell),\n );\n row.options = { ...this.options };\n return row;\n }\n\n /**\n * Setter:\n */\n\n /**\n * Enable/disable cell border.\n *\n * @param enable Enable/disable cell border.\n * @param override Override existing value.\n */\n public border(enable = true, override = true): this {\n if (override || typeof this.options.border === \"undefined\") {\n this.options.border = enable;\n }\n return this;\n }\n\n /**\n * Align row content.\n *\n * @param direction Align direction.\n * @param override Override existing value.\n */\n public align(direction: Direction, override = true): this {\n if (override || typeof this.options.align === \"undefined\") {\n this.options.align = direction;\n }\n return this;\n }\n\n /**\n * Getter:\n */\n\n /** Check if row has border. */\n public getBorder(): boolean {\n return this.options.border === true;\n }\n\n /** Check if row or any child cell has border. */\n public hasBorder(): boolean {\n return this.getBorder() ||\n this.some((cell) => cell instanceof Cell && cell.getBorder());\n }\n\n /** Get row alignment. */\n public getAlign(): Direction {\n return this.options.align ?? \"left\";\n }\n}\n","import type { Column } from \"./column.ts\";\nimport { Cell, type CellType, type Direction } from \"./cell.js\";\nimport { consumeChars, consumeWords } from \"./consume_words.js\";\nimport { Row, type RowType } from \"./row.js\";\nimport type { BorderOptions, Table, TableSettings } from \"./table.ts\";\nimport { getUnclosedAnsiRuns, longest, strLength } from \"./_utils.js\";\n\n/** Layout render settings. */\ninterface RenderSettings {\n padding: Array<number>;\n width: Array<number>;\n columns: number;\n hasBorder: boolean;\n hasHeaderBorder: boolean;\n hasBodyBorder: boolean;\n rows: Array<Row<Cell>>;\n}\n\n/** Table layout renderer. */\nexport class TableLayout {\n /**\n * Table layout constructor.\n * @param table Table instance.\n * @param options Render options.\n */\n public constructor(\n private table: Table,\n private options: TableSettings,\n ) {}\n\n /** Generate table string. */\n public toString(): string {\n const opts: RenderSettings = this.createLayout();\n return opts.rows.length ? this.renderRows(opts) : \"\";\n }\n\n /**\n * Generates table layout including row and col span, converts all none\n * Cell/Row values to Cells and Rows and returns the layout rendering\n * settings.\n */\n protected createLayout(): RenderSettings {\n Object.keys(this.options.chars).forEach((key: string) => {\n if (typeof this.options.chars[key as keyof BorderOptions] !== \"string\") {\n this.options.chars[key as keyof BorderOptions] = \"\";\n }\n });\n\n const hasBodyBorder: boolean = this.table.getBorder() ||\n this.table.hasBodyBorder();\n const hasHeaderBorder: boolean = this.table.hasHeaderBorder();\n const hasBorder: boolean = hasHeaderBorder || hasBodyBorder;\n\n const rows = this.#getRows();\n\n const columns: number = Math.max(...rows.map((row) => row.length));\n for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) {\n const row = rows[rowIndex];\n const length: number = row.length;\n if (length < columns) {\n const diff = columns - length;\n for (let i = 0; i < diff; i++) {\n row.push(this.createCell(null, row, rowIndex, length + i));\n }\n }\n }\n\n const padding: Array<number> = [];\n const width: Array<number> = [];\n for (let colIndex = 0; colIndex < columns; colIndex++) {\n const column = this.options.columns.at(colIndex);\n const minColWidth: number = column?.getMinWidth() ??\n (Array.isArray(this.options.minColWidth)\n ? this.options.minColWidth[colIndex]\n : this.options.minColWidth);\n\n const maxColWidth: number = column?.getMaxWidth() ??\n (Array.isArray(this.options.maxColWidth)\n ? this.options.maxColWidth[colIndex]\n : this.options.maxColWidth);\n\n const colWidth: number = longest(colIndex, rows, maxColWidth);\n width[colIndex] = Math.min(maxColWidth, Math.max(minColWidth, colWidth));\n\n padding[colIndex] = column?.getPadding() ??\n (Array.isArray(this.options.padding)\n ? this.options.padding[colIndex]\n : this.options.padding);\n }\n\n return {\n padding,\n width,\n rows,\n columns,\n hasBorder,\n hasBodyBorder,\n hasHeaderBorder,\n };\n }\n\n #getRows(): Array<Row<Cell>> {\n const header: Row | undefined = this.table.getHeader();\n const rows = header ? [header, ...this.table] : this.table.slice();\n const hasSpan = rows.some((row) =>\n row.some((cell) =>\n cell instanceof Cell && (cell.getColSpan() > 1 || cell.getRowSpan() > 1)\n )\n );\n\n if (hasSpan) {\n return this.spanRows(rows);\n }\n\n return rows.map((row, rowIndex) => {\n const newRow = this.createRow(row);\n for (let colIndex = 0; colIndex < row.length; colIndex++) {\n newRow[colIndex] = this.createCell(\n row[colIndex],\n newRow,\n rowIndex,\n colIndex,\n );\n }\n return newRow;\n });\n }\n\n /**\n * Fills rows and cols by specified row/col span with a reference of the\n * original cell.\n */\n protected spanRows(rows: Array<RowType>) {\n const rowSpan: Array<number> = [];\n let colSpan = 1;\n let rowIndex = -1;\n\n while (true) {\n rowIndex++;\n if (rowIndex === rows.length && rowSpan.every((span) => span === 1)) {\n break;\n }\n const row = rows[rowIndex] = this.createRow(rows[rowIndex] || []);\n let colIndex = -1;\n\n while (true) {\n colIndex++;\n if (\n colIndex === row.length &&\n colIndex === rowSpan.length && colSpan === 1\n ) {\n break;\n }\n\n if (colSpan > 1) {\n colSpan--;\n rowSpan[colIndex] = rowSpan[colIndex - 1];\n row.splice(\n colIndex,\n this.getDeleteCount(rows, rowIndex, colIndex),\n row[colIndex - 1],\n );\n\n continue;\n }\n\n if (rowSpan[colIndex] > 1) {\n rowSpan[colIndex]--;\n rows[rowIndex].splice(\n colIndex,\n this.getDeleteCount(rows, rowIndex, colIndex),\n rows[rowIndex - 1][colIndex],\n );\n\n continue;\n }\n\n const cell = row[colIndex] = this.createCell(\n row[colIndex] || null,\n row,\n rowIndex,\n colIndex,\n );\n\n colSpan = cell.getColSpan();\n rowSpan[colIndex] = cell.getRowSpan();\n }\n }\n\n return rows as Array<Row<Cell>>;\n }\n\n protected getDeleteCount(\n rows: Array<Array<unknown>>,\n rowIndex: number,\n colIndex: number,\n ) {\n return colIndex <= rows[rowIndex].length - 1 &&\n typeof rows[rowIndex][colIndex] === \"undefined\"\n ? 1\n : 0;\n }\n\n /**\n * Create a new row from existing row or cell array.\n * @param row Original row.\n */\n protected createRow(row: RowType): Row<Cell> {\n return Row.from(row)\n .border(this.table.getBorder(), false)\n .align(this.table.getAlign(), false) as Row<Cell>;\n }\n\n /**\n * Create a new cell from existing cell or cell value.\n *\n * @param cell Original cell.\n * @param row Parent row.\n * @param rowIndex The row index of the cell.\n * @param colIndex The column index of the cell.\n */\n protected createCell(\n cell: CellType | null | undefined,\n row: Row,\n rowIndex: number,\n colIndex: number,\n ): Cell {\n const column: Column | undefined = this.options.columns.at(colIndex);\n const isHeaderRow = this.isHeaderRow(rowIndex);\n return Cell.from(cell ?? \"\")\n .border(\n (isHeaderRow ? null : column?.getBorder()) ?? row.getBorder(),\n false,\n )\n .align(\n (isHeaderRow ? null : column?.getAlign()) ?? row.getAlign(),\n false,\n );\n }\n\n private isHeaderRow(rowIndex: number) {\n return rowIndex === 0 && this.table.getHeader() !== undefined;\n }\n\n /**\n * Render table layout.\n * @param opts Render options.\n */\n protected renderRows(opts: RenderSettings): string {\n let result = \"\";\n const rowSpan: Array<number> = new Array(opts.columns).fill(1);\n\n for (let rowIndex = 0; rowIndex < opts.rows.length; rowIndex++) {\n result += this.renderRow(rowSpan, rowIndex, opts);\n }\n\n return result.slice(0, -1);\n }\n\n /**\n * Render row.\n * @param rowSpan Current row span.\n * @param rowIndex Current row index.\n * @param opts Render options.\n * @param isMultiline Is multiline row.\n */\n protected renderRow(\n rowSpan: Array<number>,\n rowIndex: number,\n opts: RenderSettings,\n isMultiline?: boolean,\n ): string {\n const row: Row<Cell> = opts.rows[rowIndex];\n const prevRow: Row<Cell> | undefined = opts.rows[rowIndex - 1];\n const nextRow: Row<Cell> | undefined = opts.rows[rowIndex + 1];\n let result = \"\";\n\n let colSpan = 1;\n\n // border top row\n if (!isMultiline && rowIndex === 0 && row.hasBorder()) {\n result += this.renderBorderRow(undefined, row, rowSpan, opts);\n }\n\n let isMultilineRow = false;\n\n result += \" \".repeat(this.options.indent || 0);\n\n for (let colIndex = 0; colIndex < opts.columns; colIndex++) {\n if (colSpan > 1) {\n colSpan--;\n rowSpan[colIndex] = rowSpan[colIndex - 1];\n continue;\n }\n\n result += this.renderCell(colIndex, row, opts);\n\n if (rowSpan[colIndex] > 1) {\n if (!isMultiline) {\n rowSpan[colIndex]--;\n }\n } else if (!prevRow || prevRow[colIndex] !== row[colIndex]) {\n rowSpan[colIndex] = row[colIndex].getRowSpan();\n }\n\n colSpan = row[colIndex].getColSpan();\n\n if (rowSpan[colIndex] === 1 && row[colIndex].length) {\n isMultilineRow = true;\n }\n }\n\n if (opts.columns > 0) {\n if (row[opts.columns - 1].getBorder()) {\n result += this.options.chars.right;\n } else if (opts.hasBorder) {\n result += \" \";\n }\n }\n\n result += \"\\n\";\n\n if (isMultilineRow) { // skip border\n return result + this.renderRow(rowSpan, rowIndex, opts, isMultilineRow);\n }\n\n // border mid row\n if (\n (opts.rows.length > 1) &&\n ((rowIndex === 0 && opts.hasHeaderBorder) ||\n (rowIndex < opts.rows.length - 1 && opts.hasBodyBorder))\n ) {\n result += this.renderBorderRow(row, nextRow, rowSpan, opts);\n }\n\n // border bottom row\n if (rowIndex === opts.rows.length - 1 && row.hasBorder()) {\n result += this.renderBorderRow(row, undefined, rowSpan, opts);\n }\n\n return result;\n }\n\n /**\n * Render cell.\n * @param colIndex Current col index.\n * @param row Current row.\n * @param opts Render options.\n * @param noBorder Disable border.\n */\n protected renderCell(\n colIndex: number,\n row: Row<Cell>,\n opts: RenderSettings,\n noBorder?: boolean,\n ): string {\n let result = \"\";\n const prevCell: Cell | undefined = row[colIndex - 1];\n\n const cell: Cell = row[colIndex];\n\n if (!noBorder) {\n if (colIndex === 0) {\n if (cell.getBorder()) {\n result += this.options.chars.left;\n } else if (opts.hasBorder) {\n result += \" \";\n }\n } else {\n if (cell.getBorder() || prevCell?.getBorder()) {\n result += this.options.chars.middle;\n } else if (opts.hasBorder) {\n result += \" \";\n }\n }\n }\n\n let maxLength: number = opts.width[colIndex];\n\n const colSpan: number = cell.getColSpan();\n if (colSpan > 1) {\n for (let o = 1; o < colSpan; o++) {\n // add padding and with of next cell\n maxLength += opts.width[colIndex + o] + opts.padding[colIndex + o];\n if (opts.hasBorder) {\n // add padding again and border with\n maxLength += opts.padding[colIndex + o] + 1;\n }\n }\n }\n\n const { current, next } = this.renderCellValue(cell, maxLength);\n\n row[colIndex].setValue(next);\n\n if (opts.hasBorder) {\n result += \" \".repeat(opts.padding[colIndex]);\n }\n\n result += current;\n\n if (opts.hasBorder || colIndex < opts.columns - 1) {\n result += \" \".repeat(opts.padding[colIndex]);\n }\n\n return result;\n }\n\n /**\n * Render specified length of cell. Returns the rendered value and a new cell\n * with the rest value.\n * @param cell Cell to render.\n * @param maxLength Max length of content to render.\n */\n protected renderCellValue(\n cell: Cell,\n maxLength: number,\n ): { current: string; next: string } {\n const length: number = Math.min(\n maxLength,\n strLength(cell.toString()),\n );\n let words: string = consumeWords(length, cell.toString());\n\n // break word if word is longer than max length\n const breakWord = strLength(words) > length;\n if (breakWord) {\n words = consumeChars(length, words);\n }\n\n // get next content and remove leading space if breakWord is not true\n // calculate from words.length _before_ any handling of unclosed ANSI codes\n const next = cell.toString().slice(words.length + (breakWord ? 0 : 1));\n\n words = cell.unclosedAnsiRuns + words;\n\n const { currentSuffix, nextPrefix } = getUnclosedAnsiRuns(words);\n\n words += currentSuffix;\n cell.unclosedAnsiRuns = nextPrefix;\n\n const fillLength = maxLength - strLength(words);\n\n // Align content\n const align: Direction = cell.getAlign();\n let current: string;\n if (fillLength === 0) {\n current = words;\n } else if (align === \"left\") {\n current = words + \" \".repeat(fillLength);\n } else if (align === \"center\") {\n current = \" \".repeat(Math.floor(fillLength / 2)) + words +\n \" \".repeat(Math.ceil(fillLength / 2));\n } else if (align === \"right\") {\n current = \" \".repeat(fillLength) + words;\n } else {\n throw new Error(\"Unknown direction: \" + align);\n }\n\n return { current, next };\n }\n\n /**\n * Render border row.\n * @param prevRow Previous row.\n * @param nextRow Next row.\n * @param rowSpan Current row span.\n * @param opts Render options.\n */\n protected renderBorderRow(\n prevRow: Row<Cell> | undefined,\n nextRow: Row<Cell> | undefined,\n rowSpan: Array<number>,\n opts: RenderSettings,\n ): string {\n let result = \"\";\n\n let colSpan = 1;\n for (let colIndex = 0; colIndex < opts.columns; colIndex++) {\n if (rowSpan[colIndex] > 1) {\n if (!nextRow) {\n throw new Error(\"invalid layout\");\n }\n if (colSpan > 1) {\n colSpan--;\n continue;\n }\n }\n result += this.renderBorderCell(\n colIndex,\n prevRow,\n nextRow,\n rowSpan,\n opts,\n );\n colSpan = nextRow?.[colIndex].getColSpan() ?? 1;\n }\n\n return result.length ? \" \".repeat(this.options.indent) + result + \"\\n\" : \"\";\n }\n\n /**\n * Render border cell.\n * @param colIndex Current index.\n * @param prevRow Previous row.\n * @param nextRow Next row.\n * @param rowSpan Current row span.\n * @param opts Render options.\n */\n protected renderBorderCell(\n colIndex: number,\n prevRow: Row<Cell> | undefined,\n nextRow: Row<Cell> | undefined,\n rowSpan: Array<number>,\n opts: RenderSettings,\n ): string {\n // a1 | b1\n // -------\n // a2 | b2\n\n const a1: Cell | undefined = prevRow?.[colIndex - 1];\n const a2: Cell | undefined = nextRow?.[colIndex - 1];\n const b1: Cell | undefined = prevRow?.[colIndex];\n const b2: Cell | undefined = nextRow?.[colIndex];\n\n const a1Border = !!a1?.getBorder();\n const a2Border = !!a2?.getBorder();\n const b1Border = !!b1?.getBorder();\n const b2Border = !!b2?.getBorder();\n\n const hasColSpan = (cell: Cell | undefined): boolean =>\n (cell?.getColSpan() ?? 1) > 1;\n const hasRowSpan = (cell: Cell | undefined): boolean =>\n (cell?.getRowSpan() ?? 1) > 1;\n\n let result = \"\";\n\n if (colIndex === 0) {\n if (rowSpan[colIndex] > 1) {\n if (b1Border) {\n result += this.options.chars.left;\n } else {\n result += \" \";\n }\n } else if (b1Border && b2Border) {\n result += this.options.chars.leftMid;\n } else if (b1Border) {\n result += this.options.chars.bottomLeft;\n } else if (b2Border) {\n result += this.options.chars.topLeft;\n } else {\n result += \" \";\n }\n } else if (colIndex < opts.columns) {\n if ((a1Border && b2Border) || (b1Border && a2Border)) {\n const a1ColSpan: boolean = hasColSpan(a1);\n const a2ColSpan: boolean = hasColSpan(a2);\n const b1ColSpan: boolean = hasColSpan(b1);\n const b2ColSpan: boolean = hasColSpan(b2);\n\n const a1RowSpan: boolean = hasRowSpan(a1);\n const a2RowSpan: boolean = hasRowSpan(a2);\n const b1RowSpan: boolean = hasRowSpan(b1);\n const b2RowSpan: boolean = hasRowSpan(b2);\n\n const hasAllBorder = a1Border && b2Border && b1Border && a2Border;\n const hasAllRowSpan = a1RowSpan && b1RowSpan && a2RowSpan && b2RowSpan;\n const hasAllColSpan = a1ColSpan && b1ColSpan && a2ColSpan && b2ColSpan;\n\n if (hasAllRowSpan && hasAllBorder) {\n result += this.options.chars.middle;\n } else if (hasAllColSpan && hasAllBorder && a1 === b1 && a2 === b2) {\n result += this.options.chars.mid;\n } else if (a1ColSpan && b1ColSpan && a1 === b1) {\n result += this.options.chars.topMid;\n } else if (a2ColSpan && b2ColSpan && a2 === b2) {\n result += this.options.chars.bottomMid;\n } else if (a1RowSpan && a2RowSpan && a1 === a2) {\n result += this.options.chars.leftMid;\n } else if (b1RowSpan && b2RowSpan && b1 === b2) {\n result += this.options.chars.rightMid;\n } else {\n result += this.options.chars.midMid;\n }\n } else if (a1Border && b1Border) {\n if (hasColSpan(a1) && hasColSpan(b1) && a1 === b1) {\n result += this.options.chars.bottom;\n } else {\n result += this.options.chars.bottomMid;\n }\n } else if (b1Border && b2Border) {\n if (rowSpan[colIndex] > 1) {\n result += this.options.chars.left;\n } else {\n result += this.options.chars.leftMid;\n }\n } else if (b2Border && a2Border) {\n if (hasColSpan(a2) && hasColSpan(b2) && a2 === b2) {\n result += this.options.chars.top;\n } else {\n result += this.options.chars.topMid;\n }\n } else if (a1Border && a2Border) {\n if (hasRowSpan(a1) && a1 === a2) {\n result += this.options.chars.right;\n } else {\n result += this.options.chars.rightMid;\n }\n } else if (a1Border) {\n result += this.options.chars.bottomRight;\n } else if (b1Border) {\n result += this.options.chars.bottomLeft;\n } else if (a2Border) {\n result += this.options.chars.topRight;\n } else if (b2Border) {\n result += this.options.chars.topLeft;\n } else {\n result += \" \";\n }\n }\n\n const length = opts.padding[colIndex] + opts.width[colIndex] +\n opts.padding[colIndex];\n\n if (rowSpan[colIndex] > 1 && nextRow) {\n result += this.renderCell(\n colIndex,\n nextRow,\n opts,\n true,\n );\n if (nextRow[colIndex] === nextRow[nextRow.length - 1]) {\n if (b1Border) {\n result += this.options.chars.right;\n } else {\n result += \" \";\n }\n return result;\n }\n } else if (b1Border && b2Border) {\n result += this.options.chars.mid.repeat(length);\n } else if (b1Border) {\n result += this.options.chars.bottom.repeat(length);\n } else if (b2Border) {\n result += this.options.chars.top.repeat(length);\n } else {\n result += \" \".repeat(length);\n }\n\n if (colIndex === opts.columns - 1) {\n if (b1Border && b2Border) {\n result += this.options.chars.rightMid;\n } else if (b1Border) {\n result += this.options.chars.bottomRight;\n } else if (b2Border) {\n result += this.options.chars.topRight;\n } else {\n result += \" \";\n }\n }\n\n return result;\n }\n}\n","import { type Border, border } from \"./border.js\";\nimport { Cell, type Direction } from \"./cell.js\";\nimport { Column, type ColumnOptions } from \"./column.js\";\nimport { TableLayout } from \"./_layout.js\";\nimport { type DataRow, Row, type RowType } from \"./row.js\";\n\n/** Border characters settings. */\nexport type BorderOptions = Partial<Border>;\n\n/** Table settings. */\nexport interface TableSettings {\n /** Table indentation. */\n indent: number;\n /** Enable/disable border on all cells. */\n border: boolean;\n /** Set min column width. */\n minColWidth: number | Array<number>;\n /** Set max column width. */\n maxColWidth: number | Array<number>;\n /** Set cell padding. */\n padding: number | Array<number>;\n /** Set table characters. */\n chars: Border;\n /** Set cell content alignment. */\n align?: Direction;\n /** Set column options. */\n columns: Array<Column>;\n}\n\n/** Table type. */\nexport type TableType<TRow extends RowType = RowType> =\n | Array<TRow>\n | Table<TRow>;\n\n/**\n * Table representation.\n *\n * ```ts\n * import { Row, Table } from \"./mod.ts\";\n *\n * new Table()\n * .header(new Row(\"Name\", \"Date\", \"City\", \"Country\").border())\n * .body([\n * [\"Baxter Herman\", \"Oct 1, 2020\", \"Harderwijk\", \"Slovenia\"],\n * [\"Jescie Wolfe\", \"Dec 4, 2020\", \"Alto Hospicio\", \"Japan\"],\n * [\"Allegra Cleveland\", \"Apr 16, 2020\", \"Avernas-le-Bauduin\", \"Samoa\"],\n * [\"Aretha Gamble\", \"Feb 22, 2021\", \"Honolulu\", \"Georgia\"],\n * ])\n * .render();\n * ```\n */\nexport class Table<TRow extends RowType = RowType> extends Array<TRow> {\n protected static _chars: Border = { ...border };\n protected options: TableSettings = {\n indent: 0,\n border: false,\n maxColWidth: Infinity,\n minColWidth: 0,\n padding: 1,\n chars: { ...Table._chars },\n columns: [],\n };\n private headerRow?: Row;\n\n /**\n * Create a new table. If rows is a table, all rows and options of the table\n * will be copied to the new table.\n *\n * @param rows An array of rows or a table instance.\n */\n public static override from<TRow extends RowType>(\n rows: TableType<TRow>,\n ): Table<TRow> {\n const table = new this(...rows);\n if (rows instanceof Table) {\n table.options = { ...(rows as Table).options };\n table.headerRow = rows.headerRow ? Row.from(rows.headerRow) : undefined;\n }\n return table;\n }\n\n /**\n * Create a new table from an array of json objects. An object represents a\n * row and each property a column.\n *\n * @param rows Array of objects.\n */\n public static fromJson(rows: Array<DataRow>): Table {\n return new this().fromJson(rows);\n }\n\n /**\n * Set global default border characters.\n *\n * @param chars Border options.\n */\n public static chars(chars: BorderOptions): typeof Table {\n Object.assign(this._chars, chars);\n return this;\n }\n\n /**\n * Write table or rows to stdout.\n *\n * @param rows Table or rows.\n */\n public static render<TRow extends RowType>(rows: TableType<TRow>): void {\n Table.from(rows).render();\n }\n\n /**\n * Read data from an array of json objects. An object represents a\n * row and each property a column.\n *\n * @param rows Array of objects.\n */\n public fromJson(rows: Array<DataRow>): this {\n this.header(Object.keys(rows[0]));\n this.body(rows.map((row) => Object.values(row) as TRow));\n return this;\n }\n\n /**\n * Set column options.\n *\n * @param columns An array of columns or column options.\n */\n public columns(columns: Array<Column | ColumnOptions>): this {\n this.options.columns = columns.map((column) =>\n column instanceof Column ? column : Column.from(column)\n );\n return this;\n }\n\n /**\n * Set column options by index.\n *\n @param index The column index.\n @param column Column or column options.\n */\n public column(\n index: number,\n column: Column | ColumnOptions,\n ): this {\n if (column instanceof Column) {\n this.options.columns[index] = column;\n } else if (this.options.columns[index]) {\n this.options.columns[index].options(column);\n } else {\n this.options.columns[index] = Column.from(column);\n }\n return this;\n }\n\n /**\n * Set table header.\n *\n * @param header Header row or cells.\n */\n public header(header: RowType): this {\n this.headerRow = header instanceof Row ? header : Row.from(header);\n return this;\n }\n\n /**\n * Set table body.\n *\n * @param rows Array of rows.\n */\n public body(rows: Array<TRow>): this {\n this.length = 0;\n this.push(...rows);\n return this;\n }\n\n /** Clone table recursively with header and options. */\n public clone(): Table {\n const table = new Table(\n ...this.map((row: TRow) =>\n row instanceof Row ? row.clone() : Row.from(row).clone()\n ),\n );\n table.options = { ...this.options };\n table.headerRow = this.headerRow?.clone();\n return table;\n }\n\n /** Generate table string. */\n public override toString(): string {\n return new TableLayout(this, this.options).toString();\n }\n\n /** Write table to stdout. */\n public render(): this {\n console.log(this.toString());\n return this;\n }\n\n /**\n * Set max column width.\n *\n * @param width Max column width.\n * @param override Override existing value.\n */\n public maxColWidth(width: number | Array<number>, override = true): this {\n if (override || typeof this.options.maxColWidth === \"undefined\") {\n this.options.maxColWidth = width;\n }\n return this;\n }\n\n /**\n * Set min column width.\n *\n * @param width Min column width.\n * @param override Override existing value.\n */\n public minColWidth(width: number | Array<number>, override = true): this {\n if (override || typeof this.options.minColWidth === \"undefined\") {\n this.options.minColWidth = width;\n }\n return this;\n }\n\n /**\n * Set table indentation.\n *\n * @param width Indent width.\n * @param override Override existing value.\n */\n public indent(width: number, override = true): this {\n if (override || typeof this.options.indent === \"undefined\") {\n this.options.indent = width;\n }\n return this;\n }\n\n /**\n * Set cell padding.\n *\n * @param padding Cell padding.\n * @param override Override existing value.\n */\n public padding(padding: number | Array<number>, override = true): this {\n if (override || typeof this.options.padding === \"undefined\") {\n this.options.padding = padding;\n }\n return this;\n }\n\n /**\n * Enable/disable cell border.\n *\n * @param enable Enable/disable cell border.\n * @param override Override existing value.\n */\n public border(enable = true, override = true): this {\n if (override || typeof this.options.border === \"undefined\") {\n this.options.border = enable;\n }\n return this;\n }\n\n /**\n * Align table content.\n *\n * @param direction Align direction.\n * @param override Override existing value.\n */\n public align(direction: Direction, override = true): this {\n if (override || typeof this.options.align === \"undefined\") {\n this.options.align = direction;\n }\n return this;\n }\n\n /**\n * Set border characters.\n *\n * @param chars Border options.\n */\n public chars(chars: BorderOptions): this {\n Object.assign(this.options.chars, chars);\n return this;\n }\n\n /** Get table header. */\n public getHeader(): Row | undefined {\n return this.headerRow;\n }\n\n /** Get table body. */\n public getBody(): Array<TRow> {\n return [...this];\n }\n\n /** Get max column width. */\n public getMaxColWidth(): number | Array<number> {\n return this.options.maxColWidth;\n }\n\n /** Get min column width. */\n public getMinColWidth(): number | Array<number> {\n return this.options.minColWidth;\n }\n\n /** Get table indentation. */\n public getIndent(): number {\n return this.options.indent;\n }\n\n /** Get cell padding. */\n public getPadding(): number | Array<number> {\n return this.options.padding;\n }\n\n /** Check if table has border. */\n public getBorder(): boolean {\n return this.options.border === true;\n }\n\n /** Check if header row has border. */\n public hasHeaderBorder(): boolean {\n const hasBorder = this.headerRow?.hasBorder();\n return hasBorder === true || (this.getBorder() && hasBorder !== false);\n }\n\n /** Check if table bordy has border. */\n public hasBodyBorder(): boolean {\n return this.getBorder() ||\n this.options.columns.some((column) => column.getBorder()) ||\n this.some((row) =>\n row instanceof Row\n ? row.hasBorder()\n : row.some((cell) => cell instanceof Cell ? cell.getBorder() : false)\n );\n }\n\n /** Check if table header or body has border. */\n public hasBorder(): boolean {\n return this.hasHeaderBorder() || this.hasBodyBorder();\n }\n\n /** Get table alignment. */\n public getAlign(): Direction {\n return this.options.align ?? \"left\";\n }\n\n /** Get columns. */\n public getColumns(): Array<Column> {\n return this.options.columns;\n }\n\n /** Get column by column index. */\n public getColumn(index: number): Column {\n return this.options.columns[index] ??= new Column();\n }\n}\n","import * as stdColors from \"@jsr/std__fmt/colors\";\n\ntype ExcludedColorMethods = \"setColorEnabled\" | \"getColorEnabled\";\ntype PropertyNames = keyof typeof stdColors;\ntype ColorMethod = (str: string, ...args: Array<unknown>) => string;\ntype ColorMethods = Exclude<PropertyNames, ExcludedColorMethods>;\ntype Chainable<T, E extends keyof T | null = null> = {\n [P in keyof T]: P extends E ? T[P] : Chainable<T, E> & T[P];\n};\n\n/** Chainable colors instance returned by all ansi escape properties. */\nexport type ColorsChain =\n & Chainable<typeof stdColors, ExcludedColorMethods>\n & { _stack: Array<ColorMethods> };\n\n/** Create new `Colors` instance. */\nexport type ColorsFactory = () => Colors;\n\n/**\n * Chainable colors module. If invoked as method, a new `Colors` instance will\n * be returned.\n */\nexport type Colors = ColorsFactory & ColorsChain;\n\nconst proto = Object.create(null);\nconst methodNames = Object.keys(stdColors) as Array<PropertyNames>;\nfor (const name of methodNames) {\n if (name === \"setColorEnabled\" || name === \"getColorEnabled\") {\n proto[name] = stdColors[name];\n continue;\n }\n Object.defineProperty(proto, name, {\n get(this: ColorsChain) {\n return factory([...this._stack, name]);\n },\n });\n}\n\n/**\n * Chainable colors module.\n *\n * ```ts\n * import { colors } from \"@cliffy/ansi/colors\";\n *\n * console.log(colors.blue.bgRed.bold('Welcome to Deno.Land!'));\n * ```\n *\n * If invoked as method, a new Ansi instance will be returned.\n *\n * ```ts\n * import { Colors, colors } from \"@cliffy/ansi/colors\";\n *\n * const myColors: Colors = colors();\n * console.log(myColors.blue.bgRed.bold('Welcome to Deno.Land!'));\n * ```\n */\nexport const colors: Colors = factory();\n\nfunction factory(stack: Array<ColorMethods> = []): Colors {\n const colors: Colors = function (\n this: ColorsChain | undefined,\n str?: string,\n ...args: Array<unknown>\n ): string | ColorsChain {\n if (typeof str !== \"undefined\") {\n const lastIndex = stack.length - 1;\n return stack.reduce(\n (str: string, name: PropertyNames, index: number) =>\n index === lastIndex\n ? (stdColors[name] as ColorMethod)(str, ...args)\n : (stdColors[name] as ColorMethod)(str),\n str,\n );\n }\n const tmp = stack.slice();\n stack = [];\n return factory(tmp);\n } as Colors;\n\n Object.setPrototypeOf(colors, proto);\n colors._stack = stack;\n return colors;\n}\n",null,"import { Command } from \"@cliffy/command\";\nimport { TaskManager } from \"dyson-swarm\";\n\nexport async function createAction(options: any) {\n const taskManager = new TaskManager();\n\n try {\n const task = await taskManager.createTask({\n title: options.title,\n description: options.description,\n assignee: options.assignee,\n parentTaskId: options.parent,\n });\n\n console.log(`Created task: ${task.id}`);\n console.log(`Title: ${task.frontmatter.title}`);\n console.log(`Status: ${task.status}`);\n if (task.frontmatter.assignee) {\n console.log(`Assignee: ${task.frontmatter.assignee}`);\n }\n if (options.parent) {\n console.log(`Parent: ${options.parent}`);\n }\n } catch (error) {\n console.error(\"Failed to create task:\", error instanceof Error ? error.message : error);\n process.exit(1);\n }\n}\n\nexport const createCommand: any = new Command()\n .description(\"Create a new task.\")\n .option(\"-t, --title <title>\", \"Task title.\", { required: true })\n .option(\"-d, --description <description>\", \"Task description.\", { required: true })\n .option(\"-a, --assignee <assignee>\", \"Assignee username.\")\n .option(\"-p, --parent <parentTaskId>\", \"Parent task ID to create a subtask.\")\n .action(createAction);\n","import { Command } from \"@cliffy/command\";\nimport { TaskManager } from \"dyson-swarm\";\n\nexport async function listAction(options: any) {\n const taskManager = new TaskManager();\n\n try {\n const filter: any = {};\n\n if (options.status) {\n if (![\"open\", \"in-progress\", \"closed\"].includes(options.status)) {\n console.error(\"Invalid status. Must be one of: open, in-progress, closed\");\n process.exit(1);\n }\n filter.status = options.status;\n }\n\n if (options.assignee) {\n filter.assignee = options.assignee;\n }\n\n if (options.task) {\n filter.taskId = options.task;\n }\n\n const tasks = await taskManager.listTasks(filter);\n\n if (tasks.length === 0) {\n console.log(\"No tasks found.\");\n return;\n }\n\n console.log(`Found ${tasks.length} task(s):\\n`);\n\n for (const task of tasks) {\n console.log(`ID: ${task.id}`);\n console.log(`Title: ${task.frontmatter.title}`);\n console.log(`Status: ${task.status}`);\n if (task.frontmatter.assignee) {\n console.log(`Assignee: ${task.frontmatter.assignee}`);\n }\n console.log(\"---\");\n }\n } catch (error) {\n console.error(\"Failed to list tasks:\", error instanceof Error ? error.message : error);\n process.exit(1);\n }\n}\n\nexport const listCommand: any = new Command()\n .description(\"List tasks with optional filters.\")\n .option(\"-s, --status <status>\", \"Filter by status (open, in-progress, closed).\")\n .option(\"-a, --assignee <assignee>\", \"Filter by assignee.\")\n .option(\"-t, --task <taskId>\", \"Filter by task ID and include all subtasks (nested).\")\n .action(listAction);\n","import { Command } from \"@cliffy/command\";\nimport { TaskManager } from \"dyson-swarm\";\n\nexport async function getAction(taskId: string) {\n const taskManager = new TaskManager();\n\n try {\n const task = await taskManager.getTask(taskId);\n\n if (!task) {\n console.error(`Task not found: ${taskId}`);\n process.exit(1);\n }\n\n console.log(`ID: ${task.id}`);\n console.log(`Title: ${task.frontmatter.title}`);\n console.log(`Status: ${task.status}`);\n if (task.frontmatter.assignee) {\n console.log(`Assignee: ${task.frontmatter.assignee}`);\n }\n console.log(`\\nDescription:`);\n console.log(task.description);\n } catch (error) {\n console.error(\"Failed to get task:\", error instanceof Error ? error.message : error);\n process.exit(1);\n }\n}\n\nexport const getCommand: any = new Command()\n .name(\"get\")\n .description(\"Get a specific task by ID.\")\n .argument(\"<taskId>\", \"The id of the task to get.\")\n .action(async (_options: any, taskId: string) => getAction(taskId));\n","import { Command } from \"@cliffy/command\";\nimport { TaskManager } from \"dyson-swarm\";\n\nexport async function updateAction(taskId: string, options: any) {\n const taskManager = new TaskManager();\n\n try {\n const updateOptions: any = {};\n\n if (options.title) updateOptions.title = options.title;\n if (options.description) updateOptions.description = options.description;\n if (options.assignee) updateOptions.assignee = options.assignee;\n\n if (Object.keys(updateOptions).length === 0) {\n console.error(\"No updates specified. Use --title, --description, or --assignee.\");\n process.exit(1);\n }\n\n const task = await taskManager.updateTask(taskId, updateOptions);\n\n if (!task) {\n console.error(`Task not found: ${taskId}`);\n process.exit(1);\n }\n\n console.log(`Updated task: ${task.id}`);\n console.log(`Title: ${task.frontmatter.title}`);\n console.log(`Status: ${task.status}`);\n if (task.frontmatter.assignee) {\n console.log(`Assignee: ${task.frontmatter.assignee}`);\n }\n } catch (error) {\n console.error(\"Failed to update task:\", error instanceof Error ? error.message : error);\n process.exit(1);\n }\n}\n\nexport const updateCommand: any = new Command()\n .name(\"update\")\n .description(\"Update a task.\")\n .argument(\"<taskId>\", \"The id of the task to update.\")\n .option(\"-t, --title <title>\", \"New title.\")\n .option(\"-d, --description <description>\", \"New description.\")\n .option(\"-a, --assignee <assignee>\", \"New assignee.\")\n .action(async (options: any, taskId: string) => updateAction(taskId, options));\n","import { Command } from \"@cliffy/command\";\nimport { TaskManager } from \"dyson-swarm\";\n\nexport async function statusAction(taskId: string, status: string) {\n const taskManager = new TaskManager();\n\n if (![\"open\", \"in-progress\", \"closed\"].includes(status)) {\n console.error(\"Invalid status. Must be one of: open, in-progress, closed\");\n process.exit(1);\n }\n\n try {\n const task = await taskManager.changeTaskStatus(taskId, status as \"open\" | \"in-progress\" | \"closed\");\n\n if (!task) {\n console.error(`Task not found: ${taskId}`);\n process.exit(1);\n }\n\n console.log(`Changed status of task ${task.id} to: ${task.status}`);\n console.log(`Title: ${task.frontmatter.title}`);\n } catch (error) {\n console.error(\"Failed to change task status:\", error instanceof Error ? error.message : error);\n process.exit(1);\n }\n}\n\nexport const statusCommand: any = new Command()\n .name(\"status\")\n .description(\"Change the status of a task.\")\n .argument(\"<taskId>\", \"The id of the task to update.\")\n .argument(\"<status>\", \"The new status (open, in-progress, or closed).\")\n .action(async (_options: any, taskId: string, status: string) => statusAction(taskId, status));\n","import { Command } from \"@cliffy/command\";\nimport { TaskManager } from \"dyson-swarm\";\n\nexport async function assignAction(taskId: string, assignee: string) {\n const taskManager = new TaskManager();\n\n try {\n const task = await taskManager.assignTask(taskId, assignee);\n\n if (!task) {\n console.error(`Task not found: ${taskId}`);\n process.exit(1);\n }\n\n console.log(`Assigned task ${task.id} to: ${task.frontmatter.assignee}`);\n console.log(`Title: ${task.frontmatter.title}`);\n console.log(`Status: ${task.status}`);\n } catch (error) {\n console.error(\"Failed to assign task:\", error instanceof Error ? error.message : error);\n process.exit(1);\n }\n}\n\nexport const assignCommand: any = new Command()\n .name(\"assign\")\n .description(\"Assign a task to someone.\")\n .argument(\"<taskId>\", \"The id of the task to add an assignee to.\")\n .argument(\"<assignee>\", \"The assignee to assign the task to.\")\n .action(async (_options: any, taskId: string, assignee: string) => assignAction(taskId, assignee));\n","import { Command } from \"@cliffy/command\";\nimport { TaskManager } from \"dyson-swarm\";\n\nexport async function unassignAction(taskId: string) {\n const taskManager = new TaskManager();\n\n try {\n const task = await taskManager.unassignTask(taskId);\n\n if (!task) {\n console.error(`Task not found: ${taskId}`);\n process.exit(1);\n }\n\n console.log(`Unassigned task: ${task.id}`);\n console.log(`Title: ${task.frontmatter.title}`);\n console.log(`Status: ${task.status}`);\n } catch (error) {\n console.error(\"Failed to unassign task:\", error instanceof Error ? error.message : error);\n process.exit(1);\n }\n}\n\nexport const unassignCommand: any = new Command()\n .name(\"unassign\")\n .description(\"Unassign a task.\")\n .argument(\"<taskId>\", \"The id of the task to unassign.\")\n .action(async (_options: any, taskId: string) => unassignAction(taskId));\n","import { Command } from \"@cliffy/command\";\nimport { TaskManager } from \"dyson-swarm\";\n\nexport async function deleteAction(taskId: string, options: any) {\n const taskManager = new TaskManager();\n\n if (!options.force) {\n console.log(`Are you sure you want to delete task ${taskId}?`);\n console.log(\"Use --force to skip this confirmation.\");\n process.exit(1);\n }\n\n try {\n const deleted = await taskManager.deleteTask(taskId);\n\n if (!deleted) {\n console.error(`Task not found: ${taskId}`);\n process.exit(1);\n }\n\n console.log(`Deleted task: ${taskId}`);\n } catch (error) {\n console.error(\"Failed to delete task:\", error instanceof Error ? error.message : error);\n process.exit(1);\n }\n}\n\nexport const deleteCommand: any = new Command()\n .name(\"delete\")\n .description(\"Delete a task.\")\n .argument(\"<taskId>\", \"The id of the task to delete.\")\n .option(\"-f, --force\", \"Force deletion without confirmation.\")\n .action(async (options: any, taskId: string) => deleteAction(taskId, options));\n","#!/usr/bin/env node\n\nimport { Command } from \"@cliffy/command\";\nimport { flatHelp } from \"cliffy-flat-help\";\n\nimport { createCommand } from \"./commands/create.js\";\nimport { listCommand } from \"./commands/list.js\";\nimport { getCommand } from \"./commands/get.js\";\nimport { updateCommand } from \"./commands/update.js\";\nimport { statusCommand } from \"./commands/status.js\";\nimport { assignCommand } from \"./commands/assign.js\";\nimport { unassignCommand } from \"./commands/unassign.js\";\nimport { deleteCommand } from \"./commands/delete.js\";\n\nawait new Command()\n .help(flatHelp())\n .name(\"swarm\")\n .description(\"A markdown-based issue tracking system CLI\")\n .version(\"1.0.0\")\n .action(function () {\n this.showHelp();\n })\n .command(\"create\", createCommand)\n .command(\"list\", listCommand)\n .command(\"get\", getCommand)\n .command(\"update\", updateCommand)\n .command(\"status\", statusCommand)\n .command(\"assign\", assignCommand)\n .command(\"unassign\", unassignCommand)\n .command(\"delete\", deleteCommand)\n .parse();\n"],"mappings":"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","names":["getArgs","Deno","process","Bun","ceil","peq","myers32","t","p","n","m","i","last","pv","mv","score","j","eq","xv","xh","ph","mh","myersX","h","bmax","b","start","end","hin","levenshteinDistance","str1","str2","closestString","givenWord","possibleWords","options","caseSensitive","compareFn","levenshteinDistance","nearestWord","closestStringDistance","each","distance","paramCaseToCamelCase","str","g","getOption","flags","name","flag","isOption","didYouMeanOption","option","options","optionNames","getFlag","didYouMean","didYouMeanType","type","types","message","match","closestString","matchWildCardOptions","matched","matchWildCardOption","parts","parts2","count","i","getDefaultValue","FlagsError","_FlagsError","message","UnknownRequiredOptionError","_UnknownRequiredOptionError","option","options","getFlag","didYouMeanOption","UnknownConflictingOptionError","_UnknownConflictingOptionError","UnknownTypeError","_UnknownTypeError","type","types","didYouMeanType","ValidationError","_ValidationError","DuplicateOptionError","_DuplicateOptionError","name","InvalidOptionError","_InvalidOptionError","UnknownOptionError","_UnknownOptionError","MissingOptionValueError","_MissingOptionValueError","InvalidOptionValueError","_InvalidOptionValueError","expected","value","UnexpectedOptionValueError","OptionNotCombinableError","_OptionNotCombinableError","ConflictingOptionError","_ConflictingOptionError","conflictingOption","DependingOptionError","_DependingOptionError","dependingOption","MissingRequiredOptionError","_MissingRequiredOptionError","UnexpectedRequiredArgumentError","_UnexpectedRequiredArgumentError","arg","UnexpectedArgumentAfterVariadicArgumentError","_UnexpectedArgumentAfterVariadicArgumentError","InvalidTypeError","label","boolean","type","InvalidTypeError","number","type","value","InvalidTypeError","string","value","validateFlags","ctx","opts","options","setDefaultValues","optionNames","validateStandaloneOption","name","option","validateUnknownOption","validateConflictingOptions","validateDependingOptions","validateRequiredValues","validateRequiredOptions","getOption","UnknownOptionError","defaultValue","propName","paramCaseToCamelCase","getDefaultValue","_","opt","OptionNotCombinableError","flag","isset","ConflictingOptionError","DependingOptionError","isArray","i","MissingOptionValueError","optionsValues","MissingRequiredOptionError","flagName","flags","integer","type","value","InvalidTypeError","DefaultTypes","string","number","integer","boolean","parseFlags","argsOrCtx","getArgs","opts","args","ctx","validateOptions","options","parseArgs","validateFlags","parseDottedOptions","opt","flag","getOption","UnknownRequiredOptionError","UnknownConflictingOptionError","optionsMap","inLiteral","argsIndex","parseNext","option","negate","setFlagValue","arg","optionArgsIndex","next","UnknownOptionError","inOptionalArg","UnexpectedRequiredArgumentError","result","increase","hasNext","parsed","nextValue","value","parseValue","InvalidOptionValueError","currentValue","UnexpectedArgumentAfterVariadicArgumentError","propName","parseDefaultType","current","isShort","isLong","InvalidOptionError","splitFlags","equalSignIndex","name","matchWildCardOptions","positiveName","paramCaseToCamelCase","DuplicateOptionError","UnexpectedOptionValueError","previous","MissingOptionValueError","getDefaultValue","key","subKey","index","parts","normalized","flags","val","type","parseType","UnknownTypeError","colors_exports","__export","bgBlack","bgBlue","bgBrightBlack","bgBrightBlue","bgBrightCyan","bgBrightGreen","bgBrightMagenta","bgBrightRed","bgBrightWhite","bgBrightYellow","bgCyan","bgGreen","bgMagenta","bgRed","bgRgb24","bgRgb8","bgWhite","bgYellow","black","blue","bold","brightBlack","brightBlue","brightCyan","brightGreen","brightMagenta","brightRed","brightWhite","brightYellow","cyan","dim","getColorEnabled","gray","green","hidden","inverse","italic","magenta","red","reset","rgb24","rgb8","setColorEnabled","strikethrough","stripAnsiCode","underline","white","yellow","Deno","noColor","enabled","value","code","open","close","run","str","clampAndTruncate","max","min","color","ANSI_PATTERN","string","getFlag","name","didYouMean","message","type","types","match","closestString","didYouMeanCommand","command","commands","excludes","commandNames","ARGUMENT_REGEX","ARGUMENT_DETAILS_REGEX","splitArguments","args","parts","typeParts","typeDefinition","parseArgumentsDefinition","argsDefinition","validate","all","argumentDetails","hasOptional","hasVariadic","argDef","UnexpectedArgumentAfterVariadicArgumentError","details","UnexpectedRequiredArgumentError","istVariadicLeft","istVariadicRight","dedent","str","lines","text","indent","line","getDescription","description","short","underscoreToCamelCase","g","CommandError","_CommandError","message","ValidationError","_ValidationError","exitCode","DuplicateOptionNameError","_DuplicateOptionNameError","optionName","commandName","bold","getFlag","MissingCommandNameError","_MissingCommandNameError","CommandError","DuplicateCommandNameError","_DuplicateCommandNameError","name","DuplicateCommandAliasError","_DuplicateCommandAliasError","alias","CommandNotFoundError","_CommandNotFoundError","commands","excluded","didYouMeanCommand","DuplicateTypeError","_DuplicateTypeError","DuplicateCompletionError","_DuplicateCompletionError","DuplicateExampleError","_DuplicateExampleError","DuplicateEnvVarError","_DuplicateEnvVarError","MissingRequiredEnvVarError","_MissingRequiredEnvVarError","ValidationError","envVar","TooManyEnvVarValuesError","_TooManyEnvVarValuesError","UnexpectedOptionalEnvVarValueError","_UnexpectedOptionalEnvVarValueError","UnexpectedVariadicEnvVarValueError","_UnexpectedVariadicEnvVarValueError","DefaultCommandNotFoundError","_DefaultCommandNotFoundError","UnknownCommandError","_UnknownCommandError","ValidationError","name","commands","excluded","didYouMeanCommand","NoArgumentsAllowedError","_NoArgumentsAllowedError","MissingArgumentsError","_MissingArgumentsError","names","MissingArgumentError","_MissingArgumentError","TooManyArgumentsError","_TooManyArgumentsError","args","exit","code","Deno","process","getEnv","name","Deno","process","border","Cell","_Cell","val","value","cell","enable","override","span","direction","Column","_Column","options","opts","width","border","padding","direction","tables","data","lookupWidth","cp","runLengthDecode","t1Offset","t2Offset","width","cache","charWidth","char","codePoint","unicodeWidth","str","ch","a","b","d","r","runLengths","out","i","x","longest","index","rows","maxWidth","cellLengths","row","cell","Cell","line","str","consumeWords","strLength","unicodeWidth","stripAnsiCode","ansiRegexSource","getUnclosedAnsiRuns","text","tokens","groups","_kind","content","_","val","unclosed","token","y","kind","currentSuffix","nextPrefix","consumeWords","length","content","consumed","words","i","word","nextLength","strLength","consumeChars","chars","ansiRegexSource","match","char","Row","_Row","cells","row","cell","Cell","enable","override","direction","TableLayout","table","options","opts","key","hasBodyBorder","hasHeaderBorder","hasBorder","rows","#getRows","columns","row","rowIndex","length","diff","i","padding","width","colIndex","column","minColWidth","maxColWidth","colWidth","longest","header","cell","Cell","newRow","rowSpan","colSpan","span","Row","isHeaderRow","result","isMultiline","prevRow","nextRow","isMultilineRow","noBorder","prevCell","maxLength","o","current","next","strLength","words","consumeWords","breakWord","consumeChars","currentSuffix","nextPrefix","getUnclosedAnsiRuns","fillLength","align","a1","a2","b1","b2","a1Border","a2Border","b1Border","b2Border","hasColSpan","hasRowSpan","a1ColSpan","a2ColSpan","b1ColSpan","b2ColSpan","a1RowSpan","a2RowSpan","b1RowSpan","b2RowSpan","hasAllBorder","Table","_Table","border","rows","table","Row","chars","row","columns","column","Column","index","header","TableLayout","width","override","padding","enable","direction","hasBorder","cell","Cell","inspect","value","colors","Deno","Type","HelpGenerator","_HelpGenerator","cmd","options","areColorsEnabled","getColorEnabled","setColorEnabled","result","usage","rows","bold","brightMagenta","highlightArguments","yellow","Table","meta","name","value","dedent","args","arg","argument","red","getDescription","groups","option","group","flag","brightBlue","commands","command","envVars","envVar","highlightArgumentDetails","examples","example","dim","hints","type","defaultValue","defaultText","Type","inspect","italic","getFlag","possibleValues","label","argsDefinition","types","parseArgumentsDefinition","str","green","BooleanType","Type","type","boolean","StringType","Type","type","string","FileType","StringType","IntegerType","Type","type","integer","NumberType","Type","type","number","SecretType","StringType","checkVersion","cmd","mainCommand","upgradeCommand","isUpgradeCommand","latestVersion","currentVersion","versionHelpText","bold","yellow","command","Command","Command","_Command","flags","desc","opts","nameAndArguments","cmdOrDescription","override","result","splitArguments","name","aliases","MissingCommandNameError","DuplicateCommandNameError","description","cmd","alias","DuplicateCommandAliasError","CommandNotFoundError","version","value","help","options","HelpGenerator","usage","args","descriptions","arg","index","fn","allowEmpty","stopEarly","useRawArgs","handler","DuplicateTypeError","Type","completeHandler","parent","complete","DuplicateCompletionError","parseArgumentsDefinition","option","part","isLong","DuplicateOptionNameError","DuplicateExampleError","envName","DuplicateEnvVarError","details","TooManyEnvVarValuesError","UnexpectedOptionalEnvVarValueError","UnexpectedVariadicEnvVarValueError","getArgs","ctx","preParseGlobals","subCommand","optionName","action","error","isHelpOption","envVars","envVar","helpOption","isVersionOption","StringType","NumberType","IntegerType","BooleanType","FileType","SecretType","checkVersion","long","DefaultCommandNotFoundError","stopOnUnknown","dotted","parseFlags","type","typeSettings","UnknownTypeError","validate","env","parseType","propertyName","underscoreToCamelCase","MissingRequiredEnvVarError","names","status","getEnv","params","hasDefaults","required","expectedArg","MissingArgumentsError","mapArgValue","parsed","defaultValue","mappedValue","MissingArgumentError","parseArgValue","parseArgType","TooManyArgumentsError","UnknownCommandError","NoArgumentsAllowedError","values","ValidationError","red","bold","exit","findFlag","v","getDescription","brightBlue","k","code","hidden","opt","getGlobals","noGlobals","getGlobalOption","commands","getCommands","command","_","getGlobalCommand","getTypes","types","getCompletions","completions","completion","getEnvVars","example","flag","border","Cell","_Cell","val","value","cell","enable","override","span","direction","Column","_Column","options","opts","width","border","padding","direction","tables","data","lookupWidth","cp","runLengthDecode","t1Offset","t2Offset","width","cache","charWidth","char","codePoint","unicodeWidth","str","ch","a","b","d","r","runLengths","out","i","x","longest","index","rows","maxWidth","cellLengths","row","cell","Cell","line","str","consumeWords","strLength","unicodeWidth","stripAnsiCode","ansiRegexSource","getUnclosedAnsiRuns","text","tokens","groups","_kind","content","_","val","unclosed","token","y","kind","currentSuffix","nextPrefix","consumeWords","length","content","consumed","words","i","word","nextLength","strLength","consumeChars","chars","ansiRegexSource","match","char","Row","_Row","cells","row","cell","Cell","enable","override","direction","TableLayout","table","options","opts","key","hasBodyBorder","hasHeaderBorder","hasBorder","rows","#getRows","columns","row","rowIndex","length","diff","i","padding","width","colIndex","column","minColWidth","maxColWidth","colWidth","longest","header","cell","Cell","newRow","rowSpan","colSpan","span","Row","isHeaderRow","result","isMultiline","prevRow","nextRow","isMultilineRow","noBorder","prevCell","maxLength","o","current","next","strLength","words","consumeWords","breakWord","consumeChars","currentSuffix","nextPrefix","getUnclosedAnsiRuns","fillLength","align","a1","a2","b1","b2","a1Border","a2Border","b1Border","b2Border","hasColSpan","hasRowSpan","a1ColSpan","a2ColSpan","b1ColSpan","b2ColSpan","a1RowSpan","a2RowSpan","b1RowSpan","b2RowSpan","hasAllBorder","Table","_Table","border","rows","table","Row","chars","row","columns","column","Column","index","header","TableLayout","width","override","padding","enable","direction","hasBorder","cell","Cell","proto","methodNames","colors_exports","name","factory","colors","stack","str","args","lastIndex","index","tmp","collectAllCommands","command","depth","result","commands","cmd","withColors","enabled","colors","identity","str","generateHelp","config","useColors","c","lines","allCommands","cmdRows","name","args","arg","indent","cmdNameColored","arguments_","argOptional","argStr","description","requiredText","opts","opt","optWithFlags","flags","desc","Table","flatHelp","TaskManager","createAction","options","taskManager","task","error","createCommand","Command","TaskManager","listAction","options","taskManager","filter","tasks","task","error","listCommand","Command","TaskManager","getAction","taskId","taskManager","task","error","getCommand","Command","_options","TaskManager","updateAction","taskId","options","taskManager","updateOptions","task","error","updateCommand","Command","TaskManager","statusAction","taskId","status","taskManager","task","error","statusCommand","Command","_options","TaskManager","assignAction","taskId","assignee","taskManager","task","error","assignCommand","Command","_options","TaskManager","unassignAction","taskId","taskManager","task","error","unassignCommand","Command","_options","TaskManager","deleteAction","taskId","options","taskManager","error","deleteCommand","Command","Command","flatHelp","createCommand","listCommand","getCommand","updateCommand","statusCommand","assignCommand","unassignCommand","deleteCommand"]}
|