dyson-swarm-cli 1.3.0 → 1.3.2

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.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","../../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/commands/init.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 { Input } from \"@cliffy/prompt\";\nimport { TaskManager, NotInitializedError } from \"dyson-swarm\";\n\nexport async function createAction(options: any) {\n const taskManager = new TaskManager();\n\n try {\n const title = options.title ?? await Input.prompt({\n message: \"Enter task title:\",\n minLength: 1,\n });\n\n const description = options.description ?? await Input.prompt({\n message: \"Enter task description:\",\n minLength: 1,\n });\n\n const assignee = options.assignee ?? await Input.prompt({\n message: \"Enter assignee (optional):\",\n });\n\n const parent = options.parent ?? await Input.prompt({\n message: \"Enter parent task ID (optional):\",\n });\n\n const task = await taskManager.createTask({\n title,\n description,\n assignee: assignee || undefined,\n parentTaskId: parent || undefined,\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 (parent) {\n console.log(`Parent: ${parent}`);\n }\n } catch (error) {\n if (error instanceof NotInitializedError) {\n console.error(\"Error:\", error.message);\n process.exit(1);\n }\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 .allowEmpty()\n .option(\"-d, --description <description>\", \"Task description.\", { required: true })\n .allowEmpty()\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, NotInitializedError } 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 if (error instanceof NotInitializedError) {\n console.error(\"Error:\", error.message);\n process.exit(1);\n }\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, NotInitializedError } 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 if (error instanceof NotInitializedError) {\n console.error(\"Error:\", error.message);\n process.exit(1);\n }\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 { Input } from \"@cliffy/prompt\";\nimport { TaskManager, NotInitializedError } from \"dyson-swarm\";\n\nexport async function updateAction(taskId: string, options: any) {\n const taskManager = new TaskManager();\n\n const updateOptions: any = {};\n\n if (options.title !== undefined) {\n updateOptions.title = options.title;\n } else {\n const title = await Input.prompt({\n message: \"New title (optional, press Enter to skip):\",\n });\n if (title) {\n updateOptions.title = title;\n }\n }\n\n if (options.description !== undefined) {\n updateOptions.description = options.description;\n } else {\n const description = await Input.prompt({\n message: \"New description (optional, press Enter to skip):\",\n });\n if (description) {\n updateOptions.description = description;\n }\n }\n\n if (options.assignee !== undefined) {\n updateOptions.assignee = options.assignee;\n } else {\n const assignee = await Input.prompt({\n message: \"New assignee (optional, press Enter to skip):\",\n });\n if (assignee) {\n updateOptions.assignee = assignee;\n }\n }\n\n if (Object.keys(updateOptions).length === 0) {\n console.log(\"No updates specified. Task was not modified.\");\n return;\n }\n\n try {\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 if (error instanceof NotInitializedError) {\n console.error(\"Error:\", error.message);\n process.exit(1);\n }\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 { Select } from \"@cliffy/prompt\";\nimport { TaskManager, NotInitializedError } from \"dyson-swarm\";\n\nexport async function statusAction(taskId: string, status: string | undefined) {\n const taskManager = new TaskManager();\n\n const resolvedStatus = status ?? await Select.prompt({\n message: \"Select new status:\",\n options: [\n { value: \"open\", name: \"Open\" },\n { value: \"in-progress\", name: \"In Progress\" },\n { value: \"closed\", name: \"Closed\" },\n ],\n });\n\n if (![\"open\", \"in-progress\", \"closed\"].includes(resolvedStatus)) {\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, resolvedStatus 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 if (error instanceof NotInitializedError) {\n console.error(\"Error:\", error.message);\n process.exit(1);\n }\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 | undefined) => statusAction(taskId, status));\n","import { Command } from \"@cliffy/command\";\nimport { Input } from \"@cliffy/prompt\";\nimport { TaskManager, NotInitializedError } from \"dyson-swarm\";\n\nexport async function assignAction(taskId: string, assignee: string | undefined) {\n const taskManager = new TaskManager();\n\n const resolvedAssignee = assignee ?? await Input.prompt({\n message: \"Enter assignee username:\",\n minLength: 1,\n });\n\n try {\n const task = await taskManager.assignTask(taskId, resolvedAssignee);\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 if (error instanceof NotInitializedError) {\n console.error(\"Error:\", error.message);\n process.exit(1);\n }\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 | undefined) => assignAction(taskId, assignee));\n","import { Command } from \"@cliffy/command\";\nimport { TaskManager, NotInitializedError } 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 if (error instanceof NotInitializedError) {\n console.error(\"Error:\", error.message);\n process.exit(1);\n }\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 { Confirm } from \"@cliffy/prompt\";\nimport { TaskManager, NotInitializedError } from \"dyson-swarm\";\n\nexport async function deleteAction(taskId: string, options: any) {\n const taskManager = new TaskManager();\n\n const force = options.force ?? await Confirm.prompt({\n message: `Are you sure you want to delete task ${taskId}?`,\n default: false,\n });\n\n if (!force) {\n console.log(\"Deletion cancelled.\");\n return;\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 if (error instanceof NotInitializedError) {\n console.error(\"Error:\", error.message);\n process.exit(1);\n }\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","import { Command } from \"@cliffy/command\";\nimport { initialize, checkInitialization } from \"dyson-swarm\";\n\nexport async function initAction() {\n const { isInitialized, missingComponents } = await checkInitialization();\n\n if (isInitialized) {\n console.warn(\"Warning: This directory is already initialized for dyson-swarm.\");\n console.warn(\"If you want to reinitialize, remove the .swarm directory first.\");\n process.exit(1);\n }\n\n try {\n await initialize();\n console.log(\"✓ Initialized dyson-swarm in the current directory\");\n console.log(\" Created .swarm/ directory with:\");\n console.log(\" - version file (schema version 2)\");\n console.log(\" - tasks/ directory\");\n console.log(\" - statuses/ directory with status files (draft, open, in-progress, closed)\");\n console.log(\" - lockfile for concurrent access\");\n console.log(\"\\nYou can now create and manage tasks with commands like:\");\n console.log(\" swarm create -t \\\"My task\\\" -d \\\"Task description\\\"\");\n } catch (error) {\n console.error(\"Failed to initialize:\", error instanceof Error ? error.message : error);\n process.exit(1);\n }\n}\n\nexport const initCommand: any = new Command()\n .description(\"Initialize dyson-swarm in the current directory.\")\n .action(initAction);\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\";\nimport { initCommand } from \"./commands/init.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(\"init\", initCommand)\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","Input","TaskManager","NotInitializedError","createAction","options","taskManager","title","description","assignee","parent","task","error","createCommand","Command","TaskManager","NotInitializedError","listAction","options","taskManager","filter","tasks","task","error","listCommand","Command","TaskManager","NotInitializedError","getAction","taskId","taskManager","task","error","getCommand","Command","_options","Input","TaskManager","NotInitializedError","updateAction","taskId","options","taskManager","updateOptions","title","description","assignee","task","error","updateCommand","Command","Select","TaskManager","NotInitializedError","statusAction","taskId","status","taskManager","resolvedStatus","task","error","statusCommand","Command","_options","Input","TaskManager","NotInitializedError","assignAction","taskId","assignee","taskManager","resolvedAssignee","task","error","assignCommand","Command","_options","TaskManager","NotInitializedError","unassignAction","taskId","taskManager","task","error","unassignCommand","Command","_options","Confirm","TaskManager","NotInitializedError","deleteAction","taskId","options","taskManager","error","deleteCommand","Command","initialize","checkInitialization","initAction","isInitialized","missingComponents","error","initCommand","Command","Command","flatHelp","initCommand","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/index.ts","../../node_modules/@jsr/std__assert/equal.ts","../../node_modules/@jsr/cliffy__internal/runtime/get_os.ts","../../node_modules/@cliffy/prompt/_figures.ts","../../node_modules/@jsr/cliffy__internal/runtime/read_sync.ts","../../node_modules/@jsr/cliffy__internal/runtime/set_raw.ts","../../node_modules/@jsr/cliffy__internal/runtime/write_sync.ts","../../node_modules/@jsr/cliffy__ansi/ansi_escapes.ts","../../node_modules/@jsr/std__encoding/_common64.ts","../../node_modules/@jsr/std__encoding/_common_detach.ts","../../node_modules/@jsr/std__encoding/base64.ts","../../node_modules/@jsr/cliffy__ansi/cursor_position.ts","../../node_modules/@jsr/cliffy__ansi/tty.ts","../../node_modules/@jsr/cliffy__internal/runtime/runtime_name.ts","../../node_modules/@jsr/cliffy__keycode/_key_codes.ts","../../node_modules/@jsr/cliffy__keycode/key_code.ts","../../node_modules/@jsr/cliffy__internal/runtime/get_columns.ts","../../node_modules/@jsr/cliffy__internal/runtime/is_terminal.ts","../../node_modules/@jsr/cliffy__internal/runtime/read.ts","../../node_modules/@cliffy/prompt/_generic_prompt.ts","../../node_modules/@cliffy/prompt/_generic_input.ts","../../node_modules/@cliffy/prompt/_generic_list.ts","../../node_modules/@jsr/std__internal/_os.ts","../../node_modules/@jsr/std__internal/os.ts","../../node_modules/@jsr/std__path/_common/assert_path.ts","../../node_modules/@jsr/std__path/_common/from_file_url.ts","../../node_modules/@jsr/std__path/posix/from_file_url.ts","../../node_modules/@jsr/std__path/_common/strip_trailing_separators.ts","../../node_modules/@jsr/std__path/posix/_util.ts","../../node_modules/@jsr/std__path/windows/_util.ts","../../node_modules/@jsr/std__path/windows/from_file_url.ts","../../node_modules/@jsr/std__path/_common/dirname.ts","../../node_modules/@jsr/std__path/posix/dirname.ts","../../node_modules/@jsr/std__path/windows/dirname.ts","../../node_modules/@jsr/std__path/dirname.ts","../../node_modules/@jsr/std__path/_common/normalize.ts","../../node_modules/@jsr/std__path/_common/normalize_string.ts","../../node_modules/@jsr/std__path/posix/normalize.ts","../../node_modules/@jsr/std__path/posix/join.ts","../../node_modules/@jsr/std__path/windows/normalize.ts","../../node_modules/@jsr/std__path/windows/join.ts","../../node_modules/@jsr/std__path/join.ts","../../node_modules/@jsr/std__path/normalize.ts","../../node_modules/@jsr/cliffy__internal/runtime/stat.ts","../../node_modules/@jsr/cliffy__internal/runtime/is_directory.ts","../../node_modules/@jsr/cliffy__internal/runtime/read_dir.ts","../../node_modules/@cliffy/prompt/_generic_suggestions.ts","../../node_modules/@cliffy/prompt/confirm.ts","../../node_modules/@cliffy/prompt/input.ts","../../node_modules/@cliffy/prompt/select.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/commands/init.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,"#!/usr/bin/env node\n\nimport { Command } from \"@cliffy/command\";\nimport { flatHelp } from \"cliffy-flat-help\";\nimport { createRequire } from \"node:module\";\n\nconst require = createRequire(import.meta.url);\nconst { version } = require(\"../package.json\");\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\";\nimport { initCommand } from \"./commands/init.js\";\n\nawait new Command()\n .help(flatHelp())\n .name(\"swarm\")\n .description(\"A markdown-based issue tracking system CLI\")\n .version(version)\n .action(function () {\n this.showHelp();\n })\n .command(\"init\", initCommand)\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","// Copyright 2018-2026 the Deno authors. MIT license.\n// This module is browser compatible.\n\ntype KeyedCollection = Set<unknown> | Map<unknown, unknown>;\nfunction isKeyedCollection(x: unknown): x is KeyedCollection {\n return x instanceof Set || x instanceof Map;\n}\n\nfunction prototypesEqual(a: object, b: object) {\n const pa = Object.getPrototypeOf(a);\n const pb = Object.getPrototypeOf(b);\n return pa === pb ||\n pa === Object.prototype && pb === null ||\n pa === null && pb === Object.prototype;\n}\n\nfunction isBasicObjectOrArray(obj: object) {\n const proto = Object.getPrototypeOf(obj);\n return proto === null || proto === Object.prototype ||\n proto === Array.prototype;\n}\n\n// Slightly faster than Reflect.ownKeys in V8 as of 12.9.202.13-rusty (2024-10-28)\nfunction ownKeys(obj: object) {\n return [\n ...Object.getOwnPropertyNames(obj),\n ...Object.getOwnPropertySymbols(obj),\n ];\n}\n\nfunction getKeysDeep(obj: object) {\n const keys = new Set<string | symbol>();\n\n while (obj !== Object.prototype && obj !== Array.prototype && obj != null) {\n for (const key of ownKeys(obj)) {\n keys.add(key);\n }\n obj = Object.getPrototypeOf(obj);\n }\n\n return keys;\n}\n\n// deno-lint-ignore no-explicit-any\nconst Temporal = (globalThis as any).Temporal ?? Object.create(null);\n\n/** A non-exhaustive list of prototypes that can be accurately fast-path compared with `String(instance)` */\nconst stringComparablePrototypes = new Set<unknown>(\n [\n Intl.Locale,\n RegExp,\n Temporal.Duration,\n Temporal.Instant,\n Temporal.PlainDate,\n Temporal.PlainDateTime,\n Temporal.PlainTime,\n Temporal.PlainYearMonth,\n Temporal.PlainMonthDay,\n Temporal.ZonedDateTime,\n URL,\n URLSearchParams,\n ].filter((x) => x != null).map((x) => x.prototype),\n);\n\nfunction isPrimitive(x: unknown) {\n return typeof x === \"string\" ||\n typeof x === \"number\" ||\n typeof x === \"boolean\" ||\n typeof x === \"bigint\" ||\n typeof x === \"symbol\" ||\n x == null;\n}\n\ntype TypedArray = Pick<Uint8Array | BigUint64Array, \"length\" | number>;\nconst TypedArray = Object.getPrototypeOf(Uint8Array);\nfunction compareTypedArrays(a: TypedArray, b: TypedArray) {\n if (a.length !== b.length) return false;\n for (let i = 0; i < b.length; i++) {\n if (!sameValueZero(a[i], b[i])) return false;\n }\n return true;\n}\n\n/** Check both strict equality (`0 == -0`) and `Object.is` (`NaN == NaN`) */\nfunction sameValueZero(a: unknown, b: unknown) {\n return a === b || Object.is(a, b);\n}\n\n/**\n * Deep equality comparison used in assertions.\n *\n * @param a The actual value\n * @param b The expected value\n * @returns `true` if the values are deeply equal, `false` otherwise\n *\n * @example Usage\n * ```ts\n * import { equal } from \"@std/assert/equal\";\n *\n * equal({ foo: \"bar\" }, { foo: \"bar\" }); // Returns `true`\n * equal({ foo: \"bar\" }, { foo: \"baz\" }); // Returns `false`\n * ```\n */\nexport function equal(a: unknown, b: unknown): boolean {\n const seen = new Map<unknown, unknown>();\n return (function compare(a: unknown, b: unknown): boolean {\n if (sameValueZero(a, b)) return true;\n if (isPrimitive(a) || isPrimitive(b)) return false;\n\n if (a instanceof Date && b instanceof Date) {\n return Object.is(a.getTime(), b.getTime());\n }\n if (a && typeof a === \"object\" && b && typeof b === \"object\") {\n if (!prototypesEqual(a, b)) {\n return false;\n }\n if (a instanceof TypedArray) {\n return compareTypedArrays(a as TypedArray, b as TypedArray);\n }\n if (\n a instanceof ArrayBuffer ||\n (globalThis.SharedArrayBuffer && a instanceof SharedArrayBuffer)\n ) {\n return compareTypedArrays(\n new Uint8Array(a),\n new Uint8Array(b as ArrayBuffer | SharedArrayBuffer),\n );\n }\n if (a instanceof WeakMap) {\n throw new TypeError(\"Cannot compare WeakMap instances\");\n }\n if (a instanceof WeakSet) {\n throw new TypeError(\"Cannot compare WeakSet instances\");\n }\n if (a instanceof WeakRef) {\n return compare(a.deref(), (b as WeakRef<WeakKey>).deref());\n }\n if (seen.get(a) === b) {\n return true;\n }\n if (Object.keys(a).length !== Object.keys(b).length) {\n return false;\n }\n seen.set(a, b);\n if (isKeyedCollection(a) && isKeyedCollection(b)) {\n if (a.size !== b.size) {\n return false;\n }\n\n const aKeys = [...a.keys()];\n const primitiveKeysFastPath = aKeys.every(isPrimitive);\n if (primitiveKeysFastPath) {\n if (a instanceof Set) {\n return a.symmetricDifference(b).size === 0;\n }\n\n for (const key of aKeys) {\n if (\n !b.has(key) ||\n !compare(a.get(key), (b as Map<unknown, unknown>).get(key))\n ) {\n return false;\n }\n }\n return true;\n }\n\n let unmatchedEntries = a.size;\n\n for (const [aKey, aValue] of a.entries()) {\n for (const [bKey, bValue] of b.entries()) {\n /* Given that Map keys can be references, we need\n * to ensure that they are also deeply equal */\n\n if (!compare(aKey, bKey)) continue;\n\n if (\n (aKey === aValue && bKey === bValue) ||\n (compare(aValue, bValue))\n ) {\n unmatchedEntries--;\n break;\n }\n }\n }\n\n return unmatchedEntries === 0;\n }\n\n let keys: Iterable<string | symbol>;\n\n if (isBasicObjectOrArray(a)) {\n // fast path\n keys = ownKeys({ ...a, ...b });\n } else if (stringComparablePrototypes.has(Object.getPrototypeOf(a))) {\n // medium path\n return String(a) === String(b);\n } else {\n // slow path\n keys = getKeysDeep(a).union(getKeysDeep(b));\n }\n\n for (const key of keys) {\n type Key = keyof typeof a;\n if (!compare(a[key as Key], b[key as Key])) {\n return false;\n }\n if (((key in a) && (!(key in b))) || ((key in b) && (!(key in a)))) {\n return false;\n }\n }\n return true;\n }\n return false;\n })(a, b);\n}\n","// deno-lint-ignore-file no-explicit-any\n\n/**\n * Get operating system name.\n *\n * @internal\n */\nexport function getOs():\n | \"darwin\"\n | \"linux\"\n | \"android\"\n | \"windows\"\n | \"freebsd\"\n | \"netbsd\"\n | \"aix\"\n | \"solaris\"\n | \"illumos\"\n | \"openbsd\"\n | \"sunos\"\n | \"win32\" {\n // dnt-shim-ignore\n const { Deno, process } = globalThis as any;\n\n if (Deno) {\n return Deno.build.os;\n } else if (process) {\n return process.platform;\n } else {\n throw new Error(\"unsupported runtime\");\n }\n}\n","import { getOs } from \"@jsr/cliffy__internal/runtime/get-os\";\n\nconst main = {\n ARROW_UP: \"↑\",\n ARROW_DOWN: \"↓\",\n ARROW_LEFT: \"←\",\n ARROW_RIGHT: \"→\",\n ARROW_UP_LEFT: \"↖\",\n ARROW_UP_RIGHT: \"↗\",\n ARROW_DOWN_RIGHT: \"↘\",\n ARROW_DOWN_LEFT: \"↙\",\n RADIO_ON: \"◉\",\n RADIO_OFF: \"◯\",\n TICK: \"✔\",\n CROSS: \"✘\",\n ELLIPSIS: \"…\",\n POINTER_SMALL: \"›\",\n POINTER_SMALL_LEFT: \"‹\",\n LINE: \"─\",\n POINTER: \"❯\",\n POINTER_LEFT: \"❮\",\n INFO: \"ℹ\",\n TAB_LEFT: \"⇤\",\n TAB_RIGHT: \"⇥\",\n ESCAPE: \"⎋\",\n BACKSPACE: \"⌫\",\n PAGE_UP: \"⇞\",\n PAGE_DOWN: \"⇟\",\n ENTER: \"↵\",\n SEARCH: \"🔎\",\n FOLDER: \"📁\",\n FOLDER_OPEN: \"📂\",\n};\n\nconst win = {\n ...main,\n RADIO_ON: \"(*)\",\n RADIO_OFF: \"( )\",\n TICK: \"√\",\n CROSS: \"×\",\n POINTER_SMALL: \"»\",\n};\n\n/** Prompt icons. */\nexport const Figures = getOs() === \"windows\" ? win : main;\n\nconst keyMap: Record<string, keyof typeof Figures> = {\n up: \"ARROW_UP\",\n down: \"ARROW_DOWN\",\n left: \"ARROW_LEFT\",\n right: \"ARROW_RIGHT\",\n pageup: \"PAGE_UP\",\n pagedown: \"PAGE_DOWN\",\n tab: \"TAB_RIGHT\",\n enter: \"ENTER\",\n return: \"ENTER\",\n};\n\nexport function getFiguresByKeys(keys: Array<string>): Array<string> {\n const figures: Array<string> = [];\n for (const key of keys) {\n const figure = Figures[keyMap[key]] ?? key;\n if (!figures.includes(figure)) {\n figures.push(figure);\n }\n }\n return figures;\n}\n","// deno-lint-ignore-file no-explicit-any\n\n// dnt-shim-ignore\nconst { Deno, process, Buffer } = globalThis as any;\nconst { readSync: readSyncNode } = process\n ? await import(\"node:fs\")\n : { readSync: null };\n/**\n * Read from stdin.\n *\n * @internal\n * @param data Uint8Array to store the data.\n */\nexport function readSync(data: Uint8Array): number {\n if (Deno) {\n return Deno.stdin.readSync(data);\n } else if (readSyncNode) {\n const buffer = Buffer.alloc(data.byteLength);\n const bytesRead = readSyncNode(\n process.stdout.fd,\n buffer,\n 0,\n buffer.length,\n null,\n );\n\n for (let i = 0; i < bytesRead; i++) {\n data[i] = buffer[i];\n }\n\n return bytesRead;\n } else {\n throw new Error(\"unsupported runtime\");\n }\n}\n","// deno-lint-ignore-file no-explicit-any\n\n/**\n * Set raw mode on stdin.\n *\n * @internal\n * @param mode Enable/disable raw mode.\n * @param cbreak Enable/disable cbreak mode.\n */\nexport function setRaw(\n mode: boolean,\n { cbreak }: { cbreak?: boolean } = {},\n): void {\n // dnt-shim-ignore\n const { Deno, process } = globalThis as any;\n\n if (Deno) {\n Deno.stdin.setRaw(mode, { cbreak });\n } else if (process) {\n process.stdin.setRawMode(mode);\n } else {\n throw new Error(\"unsupported runtime\");\n }\n}\n","// deno-lint-ignore-file no-explicit-any\n\n/**\n * Write data to stdout.\n *\n * @internal\n * @param data Data to write to stdout.\n */\nexport function writeSync(data: Uint8Array): number {\n // dnt-shim-ignore\n const { Deno, process } = globalThis as any;\n\n if (Deno) {\n return Deno.stdout.writeSync(data);\n } else if (process) {\n process.stdout.write(data);\n return data.byteLength;\n } else {\n throw new Error(\"unsupported runtime\");\n }\n}\n","import { encodeBase64 } from \"@jsr/std__encoding/base64\";\nimport { getOs } from \"@jsr/cliffy__internal/runtime/get-os\";\n\n/** Escape sequence: `\\x1B` */\nconst ESC = \"\\x1B\";\n/** Control sequence intro: `\\x1B[` */\nconst CSI: string = `${ESC}[`;\n/** Operating system command: `\\x1B]` */\nconst OSC = `${ESC}]`;\n/** Link separator */\nconst SEP = \";\";\n\n/**\n * Ring audio bell: `\\u0007`\n *\n * @example Ring audio bell\n *\n * ```ts\n * import { bel } from \"@cliffy/ansi/ansi-escapes\";\n *\n * Deno.stdout.writeSync(new TextEncoder().encode(bel));\n * ```\n */\nexport const bel = \"\\u0007\";\n\n/**\n * Get cursor position.\n *\n * @example Get cursor position\n *\n * ```ts\n * import { cursorPosition } from \"@cliffy/ansi/ansi-escapes\";\n *\n * Deno.stdout.writeSync(new TextEncoder().encode(cursorPosition));\n * ```\n */\nexport const cursorPosition: string = `${CSI}6n`;\n\n/**\n * Move cursor to x, y, counting from the top left corner.\n *\n * @example Move cursor to top left corner\n *\n * ```ts\n * import { cursorTo } from \"@cliffy/ansi/ansi-escapes\";\n *\n * Deno.stdout.writeSync(new TextEncoder().encode(cursorTo(0, 0)));\n * ```\n *\n * @param x Position left.\n * @param y Position top.\n */\nexport function cursorTo(x: number, y?: number): string {\n if (typeof y !== \"number\") {\n return `${CSI}${x}G`;\n }\n return `${CSI}${y};${x}H`;\n}\n\n/**\n * Move cursor by offset.\n *\n * @example Move cursor one line up and one column left\n *\n * ```ts\n * import { cursorMove } from \"@cliffy/ansi/ansi-escapes\";\n *\n * Deno.stdout.writeSync(new TextEncoder().encode(cursorMove(-1, -1)));\n * ```\n *\n * @param x Offset left.\n * @param y Offset top.\n */\nexport function cursorMove(x: number, y: number): string {\n let ret = \"\";\n\n if (x < 0) {\n ret += `${CSI}${-x}D`;\n } else if (x > 0) {\n ret += `${CSI}${x}C`;\n }\n\n if (y < 0) {\n ret += `${CSI}${-y}A`;\n } else if (y > 0) {\n ret += `${CSI}${y}B`;\n }\n\n return ret;\n}\n\n/**\n * Move cursor up by n lines.\n *\n * @example Move cursor up by 3 lines\n *\n * ```ts\n * import { cursorUp } from \"@cliffy/ansi/ansi-escapes\";\n *\n * Deno.stdout.writeSync(new TextEncoder().encode(cursorUp(3)));\n * ```\n *\n * @param count Number of lines.\n */\nexport function cursorUp(count = 1): string {\n return `${CSI}${count}A`;\n}\n\n/**\n * Move cursor down by n lines.\n *\n * @example Move cursor down by 3 lines\n *\n * ```ts\n * import { cursorDown } from \"@cliffy/ansi/ansi-escapes\";\n *\n * Deno.stdout.writeSync(new TextEncoder().encode(cursorDown(3)));\n * ```\n *\n * @param count Number of lines.\n */\nexport function cursorDown(count = 1): string {\n return `${CSI}${count}B`;\n}\n\n/**\n * Move cursor forward by n lines.\n *\n * @example Move cursor forward by 3 characters\n *\n * ```ts\n * import { cursorForward } from \"@cliffy/ansi/ansi-escapes\";\n *\n * Deno.stdout.writeSync(new TextEncoder().encode(cursorForward(3)));\n * ```\n *\n * @param count Number of lines.\n */\nexport function cursorForward(count = 1): string {\n return `${CSI}${count}C`;\n}\n\n/**\n * Move cursor backward by n lines.\n *\n * @example Move cursor backward by 3 characters\n *\n * ```ts\n * import { cursorBackward } from \"@cliffy/ansi/ansi-escapes\";\n *\n * Deno.stdout.writeSync(new TextEncoder().encode(cursorBackward(3)));\n * ```\n *\n * @param count Number of lines.\n */\nexport function cursorBackward(count = 1): string {\n return `${CSI}${count}D`;\n}\n\n/**\n * Move cursor to the beginning of the line n lines down.\n *\n * @example Move cursor down by 2 lines and move cursor to line start\n *\n * ```ts\n * import { cursorNextLine } from \"@cliffy/ansi/ansi-escapes\";\n *\n * Deno.stdout.writeSync(new TextEncoder().encode(cursorNextLine(2)));\n * ```\n * @param count Number of lines.\n */\nexport function cursorNextLine(count = 1): string {\n return `${CSI}E`.repeat(count);\n}\n\n/**\n * Move cursor to the beginning of the line n lines up.\n *\n * @example Move cursor up by 2 lines and move cursor to line start\n *\n * ```ts\n * import { cursorPrevLine } from \"@cliffy/ansi/ansi-escapes\";\n *\n * Deno.stdout.writeSync(new TextEncoder().encode(cursorPrevLine(2)));\n * ```\n * @param count Number of lines.\n */\nexport function cursorPrevLine(count = 1): string {\n return `${CSI}F`.repeat(count);\n}\n\n/**\n * Move cursor to first column of current row.\n *\n * @example Move cursor to first column of current row\n *\n * ```ts\n * import { cursorLeft } from \"@cliffy/ansi/ansi-escapes\";\n *\n * Deno.stdout.writeSync(new TextEncoder().encode(cursorLeft));\n * ```\n */\nexport const cursorLeft: string = `${CSI}G`;\n\n/**\n * Hide cursor.\n *\n * @example Hide cursor\n *\n * ```ts\n * import { cursorHide } from \"@cliffy/ansi/ansi-escapes\";\n *\n * Deno.stdout.writeSync(new TextEncoder().encode(cursorHide));\n * ```\n */\nexport const cursorHide: string = `${CSI}?25l`;\n\n/**\n * Show cursor.\n *\n * @example Show cursor\n *\n * ```ts\n * import { cursorShow } from \"@cliffy/ansi/ansi-escapes\";\n *\n * Deno.stdout.writeSync(new TextEncoder().encode(cursorShow));\n * ```\n */\nexport const cursorShow: string = `${CSI}?25h`;\n\n/**\n * Save cursor.\n *\n * @example Save cursor\n *\n * ```ts\n * import { cursorSave } from \"@cliffy/ansi/ansi-escapes\";\n *\n * Deno.stdout.writeSync(new TextEncoder().encode(cursorSave));\n * ```\n */\nexport const cursorSave: string = `${ESC}7`;\n\n/**\n * Restore cursor.\n *\n * @example Restore cursor\n *\n * ```ts\n * import { cursorRestore } from \"@cliffy/ansi/ansi-escapes\";\n *\n * Deno.stdout.writeSync(new TextEncoder().encode(cursorRestore));\n * ```\n */\nexport const cursorRestore: string = `${ESC}8`;\n\n/**\n * Scroll window up by n lines.\n *\n * @example Scroll up by 2 lines\n *\n * ```ts\n * import { scrollUp } from \"@cliffy/ansi/ansi-escapes\";\n *\n * Deno.stdout.writeSync(new TextEncoder().encode(scrollUp(2)));\n * ```\n * @param count Number of lines.\n */\nexport function scrollUp(count = 1): string {\n return `${CSI}S`.repeat(count);\n}\n\n/**\n * Scroll window down by n lines.\n *\n * @example Scroll down by 2 lines\n *\n * ```ts\n * import { scrollDown } from \"@cliffy/ansi/ansi-escapes\";\n *\n * Deno.stdout.writeSync(new TextEncoder().encode(scrollDown(2)));\n * ```\n * @param count Number of lines.\n */\nexport function scrollDown(count = 1): string {\n return `${CSI}T`.repeat(count);\n}\n\n/**\n * Clear screen.\n *\n * @example Clear screen\n *\n * ```ts\n * import { eraseScreen } from \"@cliffy/ansi/ansi-escapes\";\n *\n * Deno.stdout.writeSync(new TextEncoder().encode(eraseScreen));\n * ```\n */\nexport const eraseScreen: string = `${CSI}2J`;\n\n/**\n * Clear screen up by n lines.\n *\n * @example Clear screen up by 2 lines\n *\n * ```ts\n * import { eraseUp } from \"@cliffy/ansi/ansi-escapes\";\n *\n * Deno.stdout.writeSync(new TextEncoder().encode(eraseUp(2)));\n * ```\n *\n * @param count Number of lines.\n */\nexport function eraseUp(count = 1): string {\n return `${CSI}1J`.repeat(count);\n}\n\n/**\n * Clear screen down by n lines.\n *\n * @example Clear screen down by 2 lines\n *\n * ```ts\n * import { eraseDown } from \"@cliffy/ansi/ansi-escapes\";\n *\n * Deno.stdout.writeSync(new TextEncoder().encode(eraseDown(2)));\n * ```\n * @param count Number of lines.\n */\nexport function eraseDown(count = 1): string {\n return `${CSI}0J`.repeat(count);\n}\n\n/**\n * Clear current line.\n *\n * @example Clear current line\n *\n * ```ts\n * import { eraseLine } from \"@cliffy/ansi/ansi-escapes\";\n *\n * Deno.stdout.writeSync(new TextEncoder().encode(eraseLine));\n * ```\n */\nexport const eraseLine: string = `${CSI}2K`;\n\n/**\n * Clear to line end.\n *\n * @example Clear to line end\n *\n * ```ts\n * import { eraseLineEnd } from \"@cliffy/ansi/ansi-escapes\";\n *\n * Deno.stdout.writeSync(new TextEncoder().encode(eraseLineEnd));\n * ```\n */\nexport const eraseLineEnd: string = `${CSI}0K`;\n\n/**\n * Clear to line start.\n *\n * @example Clear to line start\n *\n * ```ts\n * import { eraseLineStart } from \"@cliffy/ansi/ansi-escapes\";\n *\n * Deno.stdout.writeSync(new TextEncoder().encode(eraseLineStart));\n * ```\n */\nexport const eraseLineStart: string = `${CSI}1K`;\n\n/**\n * Clear screen and move cursor by n lines up and move cursor to first column.\n *\n * @param count Number of lines.\n */\nexport function eraseLines(count: number): string {\n let clear = \"\";\n for (let i = 0; i < count; i++) {\n clear += eraseLine + (i < count - 1 ? cursorUp() : \"\");\n }\n clear += cursorLeft;\n return clear;\n}\n\n/**\n * Clear the terminal screen. (Viewport)\n *\n * @example Clear the terminal screen\n *\n * ```ts\n * import { clearScreen } from \"@cliffy/ansi/ansi-escapes\";\n *\n * Deno.stdout.writeSync(new TextEncoder().encode(clearScreen));\n * ```\n */\nexport const clearScreen = \"\\u001Bc\";\n\n/**\n * Clear the whole terminal, including scrollback buffer.\n * (Not just the visible part of it).\n *\n * @example Clear the whole terminal\n *\n * ```ts\n * import { clearTerminal } from \"@cliffy/ansi/ansi-escapes\";\n *\n * Deno.stdout.writeSync(new TextEncoder().encode(clearTerminal));\n * ```\n */\nexport const clearTerminal: string = getOs() === \"windows\"\n ? `${eraseScreen}${CSI}0f`\n // 1. Erases the screen (Only done in case `2` is not supported)\n // 2. Erases the whole screen including scrollback buffer\n // 3. Moves cursor to the top-left position\n // More info: https://www.real-world-systems.com/docs/ANSIcode.html\n : `${eraseScreen}${CSI}3J${CSI}H`;\n\n/**\n * Create link.\n *\n * @example Create link\n *\n * ```ts\n * import { link } from \"@cliffy/ansi/ansi-escapes\";\n *\n * console.log(\n * link(\"Click me.\", \"https://deno.land\"),\n * );\n * ```\n * @param text Link text.\n * @param url Link url.\n */\nexport function link(text: string, url: string): string {\n return [\n OSC,\n \"8\",\n SEP,\n SEP,\n url,\n bel,\n text,\n OSC,\n \"8\",\n SEP,\n SEP,\n bel,\n ].join(\"\");\n}\n\n/** Image options. */\nexport interface ImageOptions {\n /** Image width. */\n width?: number;\n /** Image height. */\n height?: number;\n /** Preserve aspect ratio. */\n preserveAspectRatio?: boolean;\n}\n\n/**\n * Create image.\n *\n * @example Create image\n *\n * ```ts\n * import { image } from \"@cliffy/ansi/ansi-escapes\";\n *\n * const response = await fetch(\"https://deno.land/images/hashrock_simple.png\");\n * const imageBuffer: ArrayBuffer = await response.arrayBuffer();\n * console.log(\n * image(imageBuffer),\n * );\n * ```\n * @param buffer Image buffer.\n * @param options Image options.\n */\nexport function image(\n buffer: string | ArrayBuffer,\n options?: ImageOptions,\n): string {\n let ret = `${OSC}1337;File=inline=1`;\n\n if (options?.width) {\n ret += `;width=${options.width}`;\n }\n\n if (options?.height) {\n ret += `;height=${options.height}`;\n }\n\n if (options?.preserveAspectRatio === false) {\n ret += \";preserveAspectRatio=0\";\n }\n\n return ret + \":\" + encodeBase64(buffer) + bel;\n}\n","// Copyright 2018-2025 the Deno authors. MIT license.\n\nimport type { Uint8Array_ } from \"./_types.ts\";\nexport type { Uint8Array_ };\n\nexport const padding = \"=\".charCodeAt(0);\nexport const alphabet: Record<Base64Alphabet, Uint8Array> = {\n base64: new TextEncoder()\n .encode(\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\"),\n base64url: new TextEncoder()\n .encode(\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\"),\n};\nexport const rAlphabet: Record<Base64Alphabet, Uint8Array> = {\n base64: new Uint8Array(128).fill(64), // alphabet.base64.length\n base64url: new Uint8Array(128).fill(64),\n};\nalphabet.base64\n .forEach((byte, i) => rAlphabet.base64[byte] = i);\nalphabet.base64url\n .forEach((byte, i) => rAlphabet.base64url[byte] = i);\n\n/**\n * Options for encoding and decoding base64 strings.\n */\nexport interface Base64Options {\n /** The base64 alphabet. Defaults to \"base64\" */\n alphabet?: Base64Alphabet;\n}\n\n/**\n * The base64 alphabets.\n */\nexport type Base64Alphabet = \"base64\" | \"base64url\";\n\n/**\n * Calculate the output size needed to encode a given input size for\n * {@linkcode encodeIntoBase64}.\n *\n * @param originalSize The size of the input buffer.\n * @returns The size of the output buffer.\n *\n * @example Basic Usage\n * ```ts\n * import { assertEquals } from \"@std/assert\";\n * import { calcSizeBase64 } from \"@std/encoding/unstable-base64\";\n *\n * assertEquals(calcSizeBase64(1), 4);\n * ```\n */\nexport function calcSizeBase64(originalSize: number): number {\n return ((originalSize + 2) / 3 | 0) * 4;\n}\n\nexport function encode(\n buffer: Uint8Array_,\n i: number,\n o: number,\n alphabet: Uint8Array,\n padding: number,\n): number {\n i += 2;\n for (; i < buffer.length; i += 3) {\n const x = (buffer[i - 2]! << 16) | (buffer[i - 1]! << 8) | buffer[i]!;\n buffer[o++] = alphabet[x >> 18]!;\n buffer[o++] = alphabet[x >> 12 & 0x3F]!;\n buffer[o++] = alphabet[x >> 6 & 0x3F]!;\n buffer[o++] = alphabet[x & 0x3F]!;\n }\n switch (i) {\n case buffer.length + 1: {\n const x = buffer[i - 2]! << 16;\n buffer[o++] = alphabet[x >> 18]!;\n buffer[o++] = alphabet[x >> 12 & 0x3F]!;\n buffer[o++] = padding;\n buffer[o++] = padding;\n break;\n }\n case buffer.length: {\n const x = (buffer[i - 2]! << 16) | (buffer[i - 1]! << 8);\n buffer[o++] = alphabet[x >> 18]!;\n buffer[o++] = alphabet[x >> 12 & 0x3F]!;\n buffer[o++] = alphabet[x >> 6 & 0x3F]!;\n buffer[o++] = padding;\n break;\n }\n }\n return o;\n}\n\nexport function decode(\n buffer: Uint8Array_,\n i: number,\n o: number,\n alphabet: Uint8Array,\n padding: number,\n): number {\n for (let x = buffer.length - 2; x < buffer.length; ++x) {\n if (buffer[x] === padding) {\n for (let y = x + 1; y < buffer.length; ++y) {\n if (buffer[y] !== padding) {\n throw new TypeError(\n `Cannot decode input as base64: Invalid character (${\n String.fromCharCode(buffer[y]!)\n })`,\n );\n }\n }\n buffer = buffer.subarray(0, x);\n break;\n }\n }\n if ((buffer.length - o) % 4 === 1) {\n throw new RangeError(\n `Cannot decode input as base64: Length (${\n buffer.length - o\n }), excluding padding, must not have a remainder of 1 when divided by 4`,\n );\n }\n\n i += 3;\n for (; i < buffer.length; i += 4) {\n const x = (getByte(buffer[i - 3]!, alphabet) << 18) |\n (getByte(buffer[i - 2]!, alphabet) << 12) |\n (getByte(buffer[i - 1]!, alphabet) << 6) |\n getByte(buffer[i]!, alphabet);\n buffer[o++] = x >> 16;\n buffer[o++] = x >> 8 & 0xFF;\n buffer[o++] = x & 0xFF;\n }\n switch (i) {\n case buffer.length + 1: {\n const x = (getByte(buffer[i - 3]!, alphabet) << 18) |\n (getByte(buffer[i - 2]!, alphabet) << 12);\n buffer[o++] = x >> 16;\n break;\n }\n case buffer.length: {\n const x = (getByte(buffer[i - 3]!, alphabet) << 18) |\n (getByte(buffer[i - 2]!, alphabet) << 12) |\n (getByte(buffer[i - 1]!, alphabet) << 6);\n buffer[o++] = x >> 16;\n buffer[o++] = x >> 8 & 0xFF;\n break;\n }\n }\n return o;\n}\n\nfunction getByte(char: number, alphabet: Uint8Array): number {\n const byte = alphabet[char] ?? 64;\n if (byte === 64) { // alphabet.Base64.length\n throw new TypeError(\n `Cannot decode input as base64: Invalid character (${\n String.fromCharCode(char)\n })`,\n );\n }\n return byte;\n}\n","// Copyright 2018-2025 the Deno authors. MIT license.\n\nimport type { Uint8Array_ } from \"./_types.ts\";\nexport type { Uint8Array_ };\n\nexport function detach(\n buffer: Uint8Array_,\n maxSize: number,\n): [Uint8Array_, number] {\n const originalSize = buffer.length;\n if (buffer.byteOffset) {\n const b = new Uint8Array(buffer.buffer);\n b.set(buffer);\n buffer = b.subarray(0, originalSize);\n }\n // deno-lint-ignore no-explicit-any\n buffer = new Uint8Array((buffer.buffer as any).transfer(maxSize));\n buffer.set(buffer.subarray(0, originalSize), maxSize - originalSize);\n return [buffer, maxSize - originalSize];\n}\n","// Copyright 2018-2025 the Deno authors. MIT license.\n// This module is browser compatible.\n\n/**\n * Utilities for\n * {@link https://www.rfc-editor.org/rfc/rfc4648.html#section-4 | base64}\n * encoding and decoding.\n *\n * ```ts\n * import {\n * encodeBase64,\n * decodeBase64,\n * } from \"@std/encoding/base64\";\n * import { assertEquals } from \"@std/assert\";\n *\n * const foobar = new TextEncoder().encode(\"foobar\");\n *\n * assertEquals(encodeBase64(foobar), \"Zm9vYmFy\");\n * assertEquals(decodeBase64(\"Zm9vYmFy\"), foobar);\n * ```\n *\n * @module\n */\n\nimport { calcSizeBase64, decode, encode } from \"./_common64.js\";\nimport { detach } from \"./_common_detach.js\";\nimport type { Uint8Array_ } from \"./_types.ts\";\nexport type { Uint8Array_ };\n\nconst padding = \"=\".charCodeAt(0);\nconst alphabet = new TextEncoder()\n .encode(\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\");\nconst rAlphabet = new Uint8Array(128).fill(64); // alphabet.length\nalphabet.forEach((byte, i) => rAlphabet[byte] = i);\n\n/**\n * Converts data into a base64-encoded string.\n *\n * @see {@link https://www.rfc-editor.org/rfc/rfc4648.html#section-4}\n *\n * @param data The data to encode.\n * @returns The base64-encoded string.\n *\n * @example Usage\n * ```ts\n * import { encodeBase64 } from \"@std/encoding/base64\";\n * import { assertEquals } from \"@std/assert\";\n *\n * assertEquals(encodeBase64(\"foobar\"), \"Zm9vYmFy\");\n * ```\n */\nexport function encodeBase64(data: ArrayBuffer | Uint8Array | string): string {\n if (typeof data === \"string\") {\n data = new TextEncoder().encode(data) as Uint8Array_;\n } else if (data instanceof ArrayBuffer) data = new Uint8Array(data).slice();\n else data = data.slice();\n const [output, i] = detach(\n data as Uint8Array_,\n calcSizeBase64((data as Uint8Array_).length),\n );\n encode(output, i, 0, alphabet, padding);\n return new TextDecoder().decode(output);\n}\n\n/**\n * Decodes a base64-encoded string.\n *\n * @see {@link https://www.rfc-editor.org/rfc/rfc4648.html#section-4}\n *\n * @param b64 The base64-encoded string to decode.\n * @returns The decoded data.\n *\n * @example Usage\n * ```ts\n * import { decodeBase64 } from \"@std/encoding/base64\";\n * import { assertEquals } from \"@std/assert\";\n *\n * assertEquals(\n * decodeBase64(\"Zm9vYmFy\"),\n * new TextEncoder().encode(\"foobar\")\n * );\n * ```\n */\nexport function decodeBase64(b64: string): Uint8Array_ {\n const output = new TextEncoder().encode(b64) as Uint8Array_;\n // deno-lint-ignore no-explicit-any\n return new Uint8Array((output.buffer as any)\n .transfer(decode(output, 0, 0, rAlphabet, padding)));\n}\n","import { readSync } from \"@jsr/cliffy__internal/runtime/read-sync\";\nimport { setRaw } from \"@jsr/cliffy__internal/runtime/set-raw\";\nimport { writeSync } from \"@jsr/cliffy__internal/runtime/write-sync\";\nimport { cursorPosition } from \"./ansi_escapes.js\";\nimport type { ReaderSync, WriterSync } from \"jsr:/@std/io@~0.225.3/types\";\n\n/** Cursor position. */\nexport interface Cursor {\n x: number;\n y: number;\n}\n\n/** Cursor position options. */\nexport interface CursorPositionOptions {\n writer?: WriterSync;\n reader?: ReaderSync & {\n setRaw(mode: boolean, options?: Deno.SetRawOptions): void;\n };\n}\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\n\n/**\n * Get cursor position.\n *\n * @param options Options.\n *\n * ```ts\n * import { Cursor, getCursorPosition } from \"@cliffy/ansi/cursor-position\";\n *\n * const cursor: Cursor = getCursorPosition();\n * console.log(cursor); // { x: 0, y: 14}\n * ```\n */\nexport function getCursorPosition(\n {\n reader = { readSync, setRaw },\n writer = { writeSync },\n }: CursorPositionOptions = {},\n): Cursor {\n const data = new Uint8Array(8);\n\n reader.setRaw(true);\n writer.writeSync(encoder.encode(cursorPosition));\n reader.readSync(data);\n reader.setRaw(false);\n\n const [y, x] = decoder\n .decode(data)\n .match(/\\[(\\d+);(\\d+)R/)\n ?.slice(1, 3)\n .map(Number) ?? [0, 0];\n\n return { x, y };\n}\n","import { readSync } from \"@jsr/cliffy__internal/runtime/read-sync\";\nimport { setRaw } from \"@jsr/cliffy__internal/runtime/set-raw\";\nimport { writeSync } from \"@jsr/cliffy__internal/runtime/write-sync\";\nimport * as ansiEscapes from \"./ansi_escapes.js\";\nimport type { Chain } from \"./chain.ts\";\nimport { type Cursor, getCursorPosition } from \"./cursor_position.js\";\nimport type { ReaderSync, WriterSync } from \"jsr:/@std/io@~0.225.3/types\";\n\n/** Create new `Ansi` instance. */\nexport interface TtyOptions {\n writer?: WriterSync;\n reader?: ReaderSync & {\n setRaw(mode: boolean, options?: Deno.SetRawOptions): void;\n };\n}\n\ntype Executor = (this: TtyChain, ...args: Args) => string;\ntype Args = Array<unknown>;\ntype Property = string | Executor;\ntype PropertyNames = keyof Chain<TtyChain>;\n\n/** Ansi instance returned by all ansi escape properties. */\nexport interface TtyChain extends Exclude<Chain<TtyChain>, \"cursorPosition\"> {\n /** Write ansi escape sequence. */\n (): void;\n /** Get current cursor position. */\n getCursorPosition(): Cursor;\n}\n\n/** Create new `Tty` instance. */\nexport type TtyFactory = (options?: TtyOptions) => Tty;\n\n/**\n * Chainable ansi escape sequences.\n * If invoked as method, a new Tty instance will be returned.\n */\nexport type Tty = TtyFactory & TtyChain;\n\n/**\n * Chainable ansi escape sequences.\n *\n * The tty module exports a `tty` object which works almost the same way as the\n * `ansi` module. The only difference is, the `tty` module writes the ansi escape\n * sequences directly to stdout.\n *\n * @example Default instance\n *\n * ```typescript\n * import { tty } from \"https://deno.land/x/cliffy/ansi/tty.ts\";\n *\n * tty.cursorUp.cursorLeft.eraseDown();\n * ```\n *\n * @example Create a new instance\n *\n * ```typescript\n * import { tty } from \"https://deno.land/x/cliffy/ansi/tty.ts\";\n *\n * const myTty = tty({\n * writer: Deno.stdout,\n * reader: Deno.stdin,\n * });\n *\n * myTty.cursorUp.cursorLeft.eraseDown();\n * ```\n */\nexport const tty: Tty = factory();\n\nconst encoder = new TextEncoder();\n\nfunction factory(options?: TtyOptions): Tty {\n let result = \"\";\n let stack: Array<[Property, Args]> = [];\n const writer = options?.writer ?? { writeSync };\n const reader = options?.reader ?? { readSync, setRaw };\n\n const tty: Tty = function (\n this: TtyChain | undefined,\n ...args: Args | [TtyOptions]\n ): TtyChain {\n if (this) {\n update(args);\n writer.writeSync(encoder.encode(result));\n return this;\n }\n return factory(args[0] as TtyOptions ?? options);\n } as Tty;\n\n tty.text = function (text: string): TtyChain {\n stack.push([text, []]);\n update();\n writer.writeSync(encoder.encode(result));\n return this;\n };\n\n tty.getCursorPosition = (): Cursor => getCursorPosition({ writer, reader });\n\n const methodList: Array<[PropertyNames, Property]> = Object.entries(\n ansiEscapes,\n ) as Array<[PropertyNames, Property]>;\n\n for (const [name, method] of methodList) {\n if (name === \"cursorPosition\") {\n continue;\n }\n Object.defineProperty(tty, name, {\n get(this: TtyChain) {\n stack.push([method, []]);\n return this;\n },\n });\n }\n\n return tty;\n\n function update(args?: Args) {\n if (!stack.length) {\n return;\n }\n if (args) {\n stack[stack.length - 1][1] = args;\n }\n result = stack.reduce(\n (prev: string, [cur, args]: [Property, Args]) =>\n prev + (typeof cur === \"string\" ? cur : cur.call(tty, ...args)),\n \"\",\n );\n stack = [];\n }\n}\n","/** Names of supported runtimes. */\nexport type RuntimeName = \"deno\" | \"node\" | \"bun\";\n\nexport function getRuntimeName(): RuntimeName {\n switch (true) {\n case \"Deno\" in globalThis:\n return \"deno\";\n case \"Bun\" in globalThis:\n return \"bun\";\n case \"process\" in globalThis:\n return \"node\";\n default:\n throw new Error(\"unsupported runtime\");\n }\n}\n","/** Base key mapping. */\nexport const KeyMap: Record<string, string> = {\n /* xterm/gnome ESC [ letter (with modifier) */\n \"[P\": \"f1\",\n \"[Q\": \"f2\",\n \"[R\": \"f3\",\n \"[S\": \"f4\",\n\n /* xterm/gnome ESC O letter (without modifier) */\n \"OP\": \"f1\",\n \"OQ\": \"f2\",\n \"OR\": \"f3\",\n \"OS\": \"f4\",\n\n /* xterm/rxvt ESC [ number ~ */\n \"[11~\": \"f1\",\n \"[12~\": \"f2\",\n \"[13~\": \"f3\",\n \"[14~\": \"f4\",\n\n /* from Cygwin and used in libuv */\n \"[[A\": \"f1\",\n \"[[B\": \"f2\",\n \"[[C\": \"f3\",\n \"[[D\": \"f4\",\n \"[[E\": \"f5\",\n\n /* common */\n \"[15~\": \"f5\",\n \"[17~\": \"f6\",\n \"[18~\": \"f7\",\n \"[19~\": \"f8\",\n \"[20~\": \"f9\",\n \"[21~\": \"f10\",\n \"[23~\": \"f11\",\n \"[24~\": \"f12\",\n\n /* xterm ESC [ letter */\n \"[A\": \"up\",\n \"[B\": \"down\",\n \"[C\": \"right\",\n \"[D\": \"left\",\n \"[E\": \"clear\",\n \"[F\": \"end\",\n \"[H\": \"home\",\n\n /* xterm/gnome ESC O letter */\n \"OA\": \"up\",\n \"OB\": \"down\",\n \"OC\": \"right\",\n \"OD\": \"left\",\n \"OE\": \"clear\",\n \"OF\": \"end\",\n \"OH\": \"home\",\n\n /* xterm/rxvt ESC [ number ~ */\n \"[1~\": \"home\",\n \"[2~\": \"insert\",\n \"[3~\": \"delete\",\n \"[4~\": \"end\",\n \"[5~\": \"pageup\",\n \"[6~\": \"pagedown\",\n\n /* putty */\n \"[[5~\": \"pageup\",\n \"[[6~\": \"pagedown\",\n\n /* rxvt */\n \"[7~\": \"home\",\n \"[8~\": \"end\",\n};\n\n/** Shift key mapping. */\nexport const KeyMapShift: Record<string, string> = {\n /* rxvt keys with modifiers */\n \"[a\": \"up\",\n \"[b\": \"down\",\n \"[c\": \"right\",\n \"[d\": \"left\",\n \"[e\": \"clear\",\n\n \"[2$\": \"insert\",\n \"[3$\": \"delete\",\n \"[5$\": \"pageup\",\n \"[6$\": \"pagedown\",\n \"[7$\": \"home\",\n \"[8$\": \"end\",\n\n \"[Z\": \"tab\",\n};\n\n/** Ctrl key mapping. */\nexport const KeyMapCtrl: Record<string, string> = {\n /* rxvt keys with modifiers */\n \"Oa\": \"up\",\n \"Ob\": \"down\",\n \"Oc\": \"right\",\n \"Od\": \"left\",\n \"Oe\": \"clear\",\n\n \"[2^\": \"insert\",\n \"[3^\": \"delete\",\n \"[5^\": \"pageup\",\n \"[6^\": \"pagedown\",\n \"[7^\": \"home\",\n \"[8^\": \"end\",\n};\n\n/** Special key mapping. */\nexport const SpecialKeyMap: Record<string, string> = {\n \"\\r\": \"return\",\n \"\\n\": \"enter\",\n \"\\t\": \"tab\",\n \"\\b\": \"backspace\",\n \"\\x7f\": \"backspace\",\n \"\\x1b\": \"escape\",\n \" \": \"space\",\n};\n","import {\n KeyMap,\n KeyMapCtrl,\n KeyMapShift,\n SpecialKeyMap,\n} from \"./_key_codes.js\";\n\n// https://en.wikipedia.org/wiki/ANSI_escape_code\n// https://github.com/nodejs/node/blob/v13.13.0/lib/internal/readline/utils.js\n\nconst kUTF16SurrogateThreshold = 0x10000; // 2 ** 16\nconst kEscape = \"\\x1b\";\n\n/** KeyCode object. */\nexport interface KeyCode {\n /** Key name. */\n name?: string;\n /** Key sequence. */\n sequence?: string;\n /** Key code. */\n code?: string;\n /** Indicates if the ctrl key is pressed. */\n ctrl?: boolean;\n /** Indicates if the meta key is pressed. */\n meta?: boolean;\n /** Indicates if the shift key is pressed. */\n shift?: boolean;\n /** Key string value. */\n char?: string;\n}\n\n/**\n * Parse ansi escape sequence.\n *\n * @param data Ansi escape sequence.\n *\n * ```ts\n * import { parse } from \"./mod.ts\";\n *\n * parse(\"\\x04\\x18\");\n * ```\n *\n * ```json\n * [\n * KeyCode { name: \"d\", sequence: \"\\x04\", ctrl: true, meta: false, shift: false },\n * KeyCode { name: \"x\", sequence: \"\\x18\", ctrl: true, meta: false, shift: false },\n * ]\n * ```\n */\nexport function parse(data: Uint8Array | string): KeyCode[] {\n /*\n * Some patterns seen in terminal key escape codes, derived from combos seen\n * at http://www.midnight-commander.org/browser/lib/tty/key.c\n *\n * ESC letter\n * ESC [ letter\n * ESC [ modifier letter\n * ESC [ 1 ; modifier letter\n * ESC [ num char\n * ESC [ num ; modifier char\n * ESC O letter\n * ESC O modifier letter\n * ESC O 1 ; modifier letter\n * ESC N letter\n * ESC [ [ num ; modifier char\n * ESC [ [ 1 ; modifier letter\n * ESC ESC [ num char\n * ESC ESC O letter\n *\n * - char is usually ~ but $ and ^ also happen with rxvt\n * - modifier is 1 +\n * (shift * 1) +\n * (left_alt * 2) +\n * (ctrl * 4) +\n * (right_alt * 8)\n * - two leading ESCs apparently mean the same as one leading ESC\n */\n let index = -1;\n const keys: KeyCode[] = [];\n const input: string = data instanceof Uint8Array\n ? new TextDecoder().decode(data)\n : data;\n\n const hasNext = () => input.length - 1 >= index + 1;\n const next = () => input[++index];\n\n parseNext();\n\n return keys;\n\n function parseNext() {\n let ch: string = next();\n let s: string = ch;\n let escaped = false;\n\n const key: KeyCode = {\n name: undefined,\n char: undefined,\n sequence: undefined,\n code: undefined,\n ctrl: false,\n meta: false,\n shift: false,\n };\n\n if (ch === kEscape && hasNext()) {\n escaped = true;\n s += ch = next();\n\n if (ch === kEscape) {\n s += ch = next();\n }\n }\n\n if (escaped && (ch === \"O\" || ch === \"[\")) {\n // ANSI escape sequence\n let code: string = ch;\n let modifier = 0;\n\n if (ch === \"O\") {\n // ESC O letter\n // ESC O modifier letter\n s += ch = next();\n\n if (ch >= \"0\" && ch <= \"9\") {\n modifier = (Number(ch) >> 0) - 1;\n s += ch = next();\n }\n\n code += ch;\n } else if (ch === \"[\") {\n // ESC [ letter\n // ESC [ modifier letter\n // ESC [ [ modifier letter\n // ESC [ [ num char\n s += ch = next();\n\n if (ch === \"[\") {\n // \\x1b[[A\n // ^--- escape codes might have a second bracket\n code += ch;\n s += ch = next();\n }\n\n /*\n * Here and later we try to buffer just enough data to get\n * a complete ascii sequence.\n *\n * We have basically two classes of ascii characters to process:\n *\n * 1. `\\x1b[24;5~` should be parsed as { code: '[24~', modifier: 5 }\n *\n * This particular example is featuring Ctrl+F12 in xterm.\n *\n * - `;5` part is optional, e.g. it could be `\\x1b[24~`\n * - first part can contain one or two digits\n *\n * So the generic regexp is like /^\\d\\d?(;\\d)?[~^$]$/\n *\n * 2. `\\x1b[1;5H` should be parsed as { code: '[H', modifier: 5 }\n *\n * This particular example is featuring Ctrl+Home in xterm.\n *\n * - `1;5` part is optional, e.g. it could be `\\x1b[H`\n * - `1;` part is optional, e.g. it could be `\\x1b[5H`\n *\n * So the generic regexp is like /^((\\d;)?\\d)?[A-Za-z]$/\n */\n const cmdStart: number = s.length - 1;\n\n // Skip one or two leading digits\n if (ch >= \"0\" && ch <= \"9\") {\n s += ch = next();\n\n if (ch >= \"0\" && ch <= \"9\") {\n s += ch = next();\n }\n }\n\n // skip modifier\n if (ch === \";\") {\n s += ch = next();\n\n if (ch >= \"0\" && ch <= \"9\") {\n s += next();\n }\n }\n\n /*\n * We buffered enough data, now trying to extract code\n * and modifier from it\n */\n const cmd: string = s.slice(cmdStart);\n let match: RegExpMatchArray | null;\n\n if ((match = cmd.match(/^(\\d\\d?)(;(\\d))?([~^$])$/))) {\n code += match[1] + match[4];\n modifier = (Number(match[3]) || 1) - 1;\n } else if ((match = cmd.match(/^((\\d;)?(\\d))?([A-Za-z])$/))) {\n code += match[4];\n modifier = (Number(match[3]) || 1) - 1;\n } else {\n code += cmd;\n }\n }\n\n // Parse the key modifier\n key.ctrl = !!(modifier & 4);\n key.meta = !!(modifier & 10);\n key.shift = !!(modifier & 1);\n key.code = code;\n\n // Parse the key itself\n if (code in KeyMap) {\n key.name = KeyMap[code];\n } else if (code in KeyMapShift) {\n key.name = KeyMapShift[code];\n key.shift = true;\n } else if (code in KeyMapCtrl) {\n key.name = KeyMapCtrl[code];\n key.ctrl = true;\n } else {\n key.name = \"undefined\";\n }\n } else if (ch in SpecialKeyMap) {\n key.name = SpecialKeyMap[ch];\n key.meta = escaped;\n\n if (key.name === \"space\") {\n key.char = ch;\n }\n } else if (!escaped && ch <= \"\\x1a\") {\n // ctrl+letter\n key.name = String.fromCharCode(\n ch.charCodeAt(0) + \"a\".charCodeAt(0) - 1,\n );\n key.ctrl = true;\n\n key.char = key.name;\n } else if (/^[0-9A-Za-z]$/.test(ch)) {\n // Letter, number, shift+letter\n key.name = ch.toLowerCase();\n key.shift = /^[A-Z]$/.test(ch);\n key.meta = escaped;\n key.char = ch;\n } else if (escaped) {\n // Escape sequence timeout\n key.name = ch.length ? undefined : \"escape\";\n key.meta = true;\n } else {\n key.name = ch;\n key.char = ch;\n }\n\n key.sequence = s;\n\n if (\n (s.length !== 0 && (key.name !== undefined || escaped)) ||\n charLengthAt(s, 0) === s.length\n ) {\n keys.push(key);\n } else {\n throw new Error(\"Unrecognized or broken escape sequence\");\n }\n\n if (hasNext()) {\n parseNext();\n }\n }\n}\n\nfunction charLengthAt(str: string, i: number): number {\n const pos: number | undefined = str.codePointAt(i);\n if (typeof pos === \"undefined\") {\n // Pretend to move to the right. This is necessary to autocomplete while\n // moving to the right.\n return 1;\n }\n return pos >= kUTF16SurrogateThreshold ? 2 : 1;\n}\n","// deno-lint-ignore-file no-explicit-any\n\n/**\n * Returns the width of the console window.\n *\n * @internal\n */\nexport function getColumns(): number | null {\n try {\n // dnt-shim-ignore\n const { Deno, process } = globalThis as any;\n\n // Catch error in none tty mode: Inappropriate ioctl for device (os error 25)\n if (Deno) {\n return Deno.consoleSize().columns ?? null;\n } else if (process) {\n return process.stdout.columns ?? null;\n }\n } catch (_error) {\n return null;\n }\n\n throw new Error(\"unsupported runtime\");\n}\n","// deno-lint-ignore-file no-explicit-any\n\n/**\n * Checks if current process is a tty.\n *\n * @internal\n */\nexport function isTerminal(): boolean {\n // dnt-shim-ignore\n const { Deno, process } = globalThis as any;\n\n if (Deno) {\n return Deno.stdin.isTerminal();\n } else if (process) {\n return process.stdin.isTTY;\n } else {\n throw new Error(\"unsupported runtime\");\n }\n}\n","// deno-lint-ignore-file no-explicit-any\n\n/**\n * Read from stdin.\n *\n * @internal\n * @param data Uint8Array to store the data.\n */\nexport function read(data: Uint8Array): Promise<number | null> {\n // dnt-shim-ignore\n const { Deno, process } = globalThis as any;\n\n if (Deno) {\n return Deno.stdin.read(data);\n } else if (process) {\n return new Promise((resolve, reject) => {\n process.stdin.once(\"readable\", () => {\n try {\n const buffer = process.stdin.read();\n\n if (buffer === null) {\n return resolve(null);\n }\n\n for (let i = 0; i < buffer.length; i++) {\n data[i] = buffer[i];\n }\n\n resolve(buffer.length);\n } catch (error) {\n reject(error);\n }\n });\n });\n } else {\n throw new Error(\"unsupported runtime\");\n }\n}\n","import type { Cursor } from \"jsr:@cliffy/ansi@1.0.0/cursor-position\";\nimport { type Tty, tty } from \"@jsr/cliffy__ansi/tty\";\nimport { getRuntimeName } from \"@jsr/cliffy__internal/runtime/runtime-name\";\nimport { type KeyCode, parse } from \"@jsr/cliffy__keycode\";\nimport {\n bold,\n brightBlue,\n dim,\n green,\n italic,\n red,\n stripAnsiCode,\n yellow,\n} from \"@jsr/std__fmt/colors\";\nimport type { Reader, WriterSync } from \"jsr:/@std/io@~0.225.3/types\";\nimport { readSync } from \"@jsr/cliffy__internal/runtime/read-sync\";\nimport { writeSync } from \"@jsr/cliffy__internal/runtime/write-sync\";\nimport { Figures } from \"./_figures.js\";\nimport { exit } from \"@jsr/cliffy__internal/runtime/exit\";\nimport { getColumns } from \"@jsr/cliffy__internal/runtime/get-columns\";\nimport { isTerminal } from \"@jsr/cliffy__internal/runtime/is-terminal\";\nimport { read } from \"@jsr/cliffy__internal/runtime/read\";\nimport { setRaw } from \"@jsr/cliffy__internal/runtime/set-raw\";\n\n/** Static generic prompt interface. */\nexport interface StaticGenericPrompt<TValue, TOptions> {\n /**\n * Inject prompt value. If called, the prompt doesn't prompt for an input and\n * returns immediately the injected value. Can be used for unit tests or pre\n * selections.\n *\n * @param value The injected value.\n */\n inject?(value: TValue): void;\n\n /**\n * Execute the prompt with the given options.\n *\n * @param options Prompt options.\n */\n prompt(options: TOptions): Promise<TValue>;\n}\n\n// deno-lint-ignore no-explicit-any\nexport type InferPromptOptions<TPrompt extends GenericPrompt<any, any>> =\n Parameters<\n TPrompt[\"getDefaultSettings\"]\n >[0];\n\n// deno-lint-ignore no-explicit-any\nexport type InferPromptValue<TPrompt extends GenericPrompt<any, any>> = Awaited<\n ReturnType<\n TPrompt[\"prompt\"]\n >\n>;\n\n/** Generic prompt options. */\nexport interface GenericPromptOptions<TValue, TRawValue> {\n /** The prompt message. */\n message: string;\n /** The default value of the prompt. */\n default?: TValue;\n /** Don't show the default value after the prompt message. */\n hideDefault?: boolean;\n /** Validate prompt value. */\n validate?: (value: TRawValue) => ValidateResult;\n /** Transform input value to output value. */\n transform?: (value: TRawValue) => TValue | undefined;\n /** Show a hint below the prompt. */\n hint?: string;\n /** Change the prompt pointer. Default is `brightBlue(\"›\")`. */\n pointer?: string;\n /** Indent the prompt. */\n indent?: string;\n /** Keymap to assign key names to prompt actions. */\n keys?: GenericPromptKeys;\n /** Enable cbreak mode. For more information see [Deno.SetRawOptions](https://deno.land/api@v1.42.1?s=Deno.SetRawOptions). */\n cbreak?: boolean;\n /** Change the prompt prefix. Default is: `yellow(\"? \")`. */\n prefix?: string;\n /** Change the prompt input stream. */\n reader?: Reader & {\n setRaw(mode: boolean, options?: Deno.SetRawOptions): void;\n isTerminal(): boolean;\n };\n /** Change the prompt output stream. */\n writer?: WriterSync;\n}\n\n/** Generic prompt settings. */\nexport interface GenericPromptSettings<TValue, TRawValue>\n extends GenericPromptOptions<TValue, TRawValue> {\n pointer: string;\n indent: string;\n prefix: string;\n cbreak: boolean;\n tty: Tty;\n reader: Reader & {\n setRaw(mode: boolean, options?: Deno.SetRawOptions): void;\n isTerminal(): boolean;\n };\n writer: WriterSync;\n}\n\n/** Prompt validation return tape. */\nexport type ValidateResult = string | boolean | Promise<string | boolean>;\n\n/** Generic prompt keymap. */\nexport interface GenericPromptKeys {\n /** Submit keymap. Default is `[\"enter\", \"return\"]`. */\n submit?: Array<string>;\n}\n\n/** Generic prompt representation. */\nexport abstract class GenericPrompt<\n TValue,\n TRawValue,\n> {\n protected static injectedValue: unknown | undefined;\n protected abstract readonly settings: GenericPromptSettings<\n TValue,\n TRawValue\n >;\n protected readonly cursor: Cursor = {\n x: 0,\n y: 0,\n };\n #value: TValue | undefined;\n #lastError: string | undefined;\n #isFirstRun = true;\n #encoder = new TextEncoder();\n\n /**\n * Inject prompt value. If called, the prompt doesn't prompt for an input and\n * returns immediately the injected value. Can be used for unit tests or pre\n * selections.\n *\n * @param value Input value.\n */\n public static inject(value: unknown): void {\n GenericPrompt.injectedValue = value;\n }\n\n public getDefaultSettings(\n options: GenericPromptOptions<TValue, TRawValue>,\n ): GenericPromptSettings<TValue, TRawValue> {\n return {\n ...options,\n tty: tty({\n // Stdin is only used by getCursorPosition which we don't need.\n reader: { readSync, setRaw },\n writer: options.writer ?? { writeSync },\n }),\n cbreak: options.cbreak ?? false,\n reader: options.reader ?? { read, setRaw, isTerminal },\n writer: options.writer ?? { writeSync },\n pointer: options.pointer ?? brightBlue(Figures.POINTER_SMALL),\n prefix: options.prefix ?? yellow(\"? \"),\n indent: options.indent ?? \"\",\n keys: {\n submit: [\"enter\", \"return\"],\n ...(options.keys ?? {}),\n },\n };\n }\n\n /** Execute the prompt. */\n public async prompt(): Promise<TValue> {\n try {\n return await this.#execute();\n } finally {\n this.settings.tty.cursorShow();\n }\n }\n\n /** Clear prompt output. */\n protected clear(): void {\n this.settings.tty.cursorLeft.eraseDown();\n }\n\n /** Execute the prompt. */\n #execute = async (): Promise<TValue> => {\n // Throw errors on unit tests.\n if (typeof GenericPrompt.injectedValue !== \"undefined\" && this.#lastError) {\n throw new Error(this.error());\n }\n\n await this.render();\n this.#lastError = undefined;\n\n if (!await this.read()) {\n return this.#execute();\n }\n\n if (typeof this.#value === \"undefined\") {\n throw new Error(\"internal error: failed to read value\");\n }\n\n this.clear();\n const successMessage: string | undefined = this.success(this.#value);\n\n if (successMessage) {\n this.settings.writer.writeSync(\n this.#encoder.encode(successMessage + \"\\n\"),\n );\n }\n\n GenericPrompt.injectedValue = undefined;\n this.settings.tty.cursorShow();\n\n return this.#value;\n };\n\n /** Render prompt. */\n protected async render(): Promise<void> {\n const result: [string, string | undefined, string | undefined] =\n await Promise.all([\n this.message(),\n this.body?.(),\n this.footer(),\n ]);\n\n const content: string = result.filter(Boolean).join(\"\\n\");\n const lines = content.split(\"\\n\");\n\n const columns = getColumns();\n const linesCount: number = columns\n ? lines.reduce((prev, next) => {\n const length = stripAnsiCode(next).length;\n return prev + (length > columns ? Math.ceil(length / columns) : 1);\n }, 0)\n : content.split(\"\\n\").length;\n\n const y: number = linesCount - this.cursor.y - 1;\n\n if (!this.#isFirstRun || this.#lastError) {\n this.clear();\n }\n this.#isFirstRun = false;\n this.settings.writer.writeSync(this.#encoder.encode(content));\n\n if (y) {\n this.settings.tty.cursorUp(y);\n }\n this.settings.tty.cursorTo(this.cursor.x);\n }\n\n /** Read user input from stdin, handle events and validate user input. */\n protected async read(): Promise<boolean> {\n if (typeof GenericPrompt.injectedValue !== \"undefined\") {\n const value: TRawValue = GenericPrompt.injectedValue as TRawValue;\n await this.#validateValue(value);\n } else {\n const events: Array<KeyCode> = await this.#readKey();\n\n if (!events.length) {\n return false;\n }\n\n for (const event of events) {\n await this.handleEvent(event);\n }\n }\n\n return typeof this.#value !== \"undefined\";\n }\n\n protected submit(): Promise<void> {\n return this.#validateValue(this.getValue());\n }\n\n protected message(): string {\n return `${this.settings.indent}${this.settings.prefix}` +\n bold(this.settings.message) + this.defaults();\n }\n\n protected defaults(): string {\n let defaultMessage = \"\";\n if (\n typeof this.settings.default !== \"undefined\" && !this.settings.hideDefault\n ) {\n defaultMessage += dim(` (${this.format(this.settings.default)})`);\n }\n return defaultMessage;\n }\n\n /** Get prompt success message. */\n protected success(value: TValue): string | undefined {\n return `${this.settings.indent}${this.settings.prefix}` +\n bold(this.settings.message) + this.defaults() +\n \" \" + this.settings.pointer +\n \" \" + green(this.format(value));\n }\n\n protected body?(): string | undefined | Promise<string | undefined>;\n\n protected footer(): string | undefined {\n return this.error() ?? this.hint();\n }\n\n protected error(): string | undefined {\n return this.#lastError\n ? this.settings.indent + red(bold(`${Figures.CROSS} `) + this.#lastError)\n : undefined;\n }\n\n protected hint(): string | undefined {\n return this.settings.hint\n ? this.settings.indent +\n italic(brightBlue(dim(`${Figures.POINTER} `) + this.settings.hint))\n : undefined;\n }\n\n protected setErrorMessage(message: string) {\n this.#lastError = message;\n }\n\n /**\n * Handle user input event.\n * @param event Key event.\n */\n protected async handleEvent(event: KeyCode): Promise<void> {\n switch (true) {\n case event.name === \"c\" && event.ctrl:\n this.clear();\n this.settings.tty.cursorShow();\n exit(130);\n return;\n case this.isKey(this.settings.keys, \"submit\", event):\n await this.submit();\n break;\n }\n }\n\n /**\n * Map input value to output value.\n * @param value Input value.\n * @return Output value.\n */\n protected abstract transform(value: TRawValue): TValue | undefined;\n\n /**\n * Validate input value.\n * @param value User input value.\n * @return True on success, false or error message on error.\n */\n protected abstract validate(value: TRawValue): ValidateResult;\n\n /**\n * Format output value.\n * @param value Output value.\n */\n protected abstract format(value: TValue): string;\n\n /** Get input value. */\n protected abstract getValue(): TRawValue;\n\n /** Read user input from stdin and pars ansi codes. */\n #readKey = async (): Promise<Array<KeyCode>> => {\n const data: Uint8Array = await this.#readChar();\n\n return data.length ? parse(data) : [];\n };\n\n /** Read user input from stdin. */\n #readChar = async (): Promise<Uint8Array> => {\n const buffer = new Uint8Array(getRuntimeName() === \"deno\" ? 8 : 4096);\n const isTty = this.settings.reader.isTerminal();\n\n if (isTty) {\n this.settings.reader.setRaw(\n true,\n { cbreak: this.settings.cbreak },\n );\n }\n const nread: number | null = await this.settings.reader.read(buffer);\n\n if (isTty) {\n this.settings.reader.setRaw(false);\n }\n\n if (nread === null) {\n return buffer;\n }\n\n return buffer.subarray(0, nread);\n };\n\n /**\n * Map input value to output value. If a custom transform handler ist set, the\n * custom handler will be executed, otherwise the default transform handler\n * from the prompt will be executed.\n * @param value The value to transform.\n */\n #transformValue = (value: TRawValue): TValue | undefined => {\n return this.settings.transform\n ? this.settings.transform(value)\n : this.transform(value);\n };\n\n /**\n * Validate input value. Set error message if validation fails and transform\n * output value on success.\n * If a default value is set, the default will be used as value without any\n * validation.\n * If a custom validation handler ist set, the custom handler will\n * be executed, otherwise a prompt specific default validation handler will be\n * executed.\n * @param value The value to validate.\n */\n #validateValue = async (value: TRawValue): Promise<void> => {\n if (!value && typeof this.settings.default !== \"undefined\") {\n this.#value = this.settings.default;\n return;\n }\n\n this.#value = undefined;\n this.#lastError = undefined;\n\n const validation =\n await (this.settings.validate\n ? this.settings.validate(value)\n : this.validate(value));\n\n if (validation === false) {\n this.#lastError = `Invalid answer.`;\n } else if (typeof validation === \"string\") {\n this.#lastError = validation;\n } else {\n this.#value = this.#transformValue(value);\n }\n };\n\n /**\n * Check if key event has given name or sequence.\n * @param keys Key map.\n * @param name Key name.\n * @param event Key event.\n */\n protected isKey<TKey extends unknown, TName extends keyof TKey>(\n keys: TKey | undefined,\n name: TName,\n event: KeyCode,\n ): boolean {\n // deno-lint-ignore no-explicit-any\n const keyNames: Array<unknown> | undefined = keys?.[name] as any;\n return typeof keyNames !== \"undefined\" && (\n (typeof event.name !== \"undefined\" &&\n keyNames.indexOf(event.name) !== -1) ||\n (typeof event.sequence !== \"undefined\" &&\n keyNames.indexOf(event.sequence) !== -1)\n );\n }\n}\n","import type { KeyCode } from \"jsr:@cliffy/keycode@1.0.0\";\nimport {\n GenericPrompt,\n type GenericPromptKeys,\n type GenericPromptOptions,\n type GenericPromptSettings,\n} from \"./_generic_prompt.js\";\nimport { brightBlue, dim, stripAnsiCode, underline } from \"@jsr/std__fmt/colors\";\n\n/** Generic input prompt options. */\nexport interface GenericInputPromptOptions<TValue, TRawValue>\n extends GenericPromptOptions<TValue, TRawValue> {\n /** Keymap to assign key names to prompt actions. */\n keys?: GenericInputKeys;\n}\n\n/** Generic input prompt settings. */\nexport interface GenericInputPromptSettings<TValue, TRawValue>\n extends GenericPromptSettings<TValue, TRawValue> {\n keys?: GenericInputKeys;\n}\n\n/** Input keys options. */\nexport interface GenericInputKeys extends GenericPromptKeys {\n /** Cursor left keymap. Default is `[\"left\"]`. */\n moveCursorLeft?: string[];\n /** Cursor right keymap. Default is `[\"right\"]`. */\n moveCursorRight?: string[];\n /** Delete cursor left keymap. Default is `[\"backspace\"]`. */\n deleteCharLeft?: string[];\n /** Delete cursor right keymap. Default is `[\"delete\"]`. */\n deleteCharRight?: string[];\n}\n\n/** Generic input prompt representation. */\nexport abstract class GenericInput<\n TValue,\n TRawValue,\n> extends GenericPrompt<TValue, TRawValue> {\n // @ts-ignore ignore jsr publish error\n protected abstract override readonly settings: GenericInputPromptSettings<\n TValue,\n TRawValue\n >;\n protected inputValue = \"\";\n protected inputIndex = 0;\n\n public override getDefaultSettings(\n options: GenericInputPromptOptions<TValue, TRawValue>,\n ): GenericInputPromptSettings<TValue, TRawValue> {\n const settings = super.getDefaultSettings(options);\n return {\n ...settings,\n keys: {\n moveCursorLeft: [\"left\"],\n moveCursorRight: [\"right\"],\n deleteCharLeft: [\"backspace\"],\n deleteCharRight: [\"delete\"],\n ...(settings.keys ?? {}),\n },\n };\n }\n\n protected getCurrentInputValue(): string {\n return this.inputValue;\n }\n\n protected override message(): string {\n const message: string = super.message() + \" \" + this.settings.pointer + \" \";\n this.cursor.x = stripAnsiCode(message).length + this.inputIndex + 1;\n return message + this.input();\n }\n\n protected input(): string {\n return underline(this.inputValue);\n }\n\n protected highlight(\n value: string | number,\n color1: (val: string) => string = dim,\n color2: (val: string) => string = brightBlue,\n ): string {\n value = value.toString();\n const inputLowerCase = this.getCurrentInputValue().toLowerCase();\n const valueLowerCase = value.toLowerCase();\n const index = valueLowerCase.indexOf(inputLowerCase);\n const matched: string = value.slice(index, index + inputLowerCase.length);\n return index >= 0\n ? color1(value.slice(0, index)) + color2(matched) +\n color1(value.slice(index + inputLowerCase.length))\n : value;\n }\n\n /**\n * Handle user input event.\n * @param event Key event.\n */\n protected override async handleEvent(event: KeyCode): Promise<void> {\n switch (true) {\n case this.isKey(this.settings.keys, \"moveCursorLeft\", event):\n this.moveCursorLeft();\n break;\n case this.isKey(this.settings.keys, \"moveCursorRight\", event):\n this.moveCursorRight();\n break;\n case this.isKey(this.settings.keys, \"deleteCharRight\", event):\n this.deleteCharRight();\n break;\n case this.isKey(this.settings.keys, \"deleteCharLeft\", event):\n this.deleteChar();\n break;\n case event.char && !event.meta && !event.ctrl:\n this.addChar(event.char!);\n break;\n default:\n await super.handleEvent(event);\n }\n }\n\n /** Add character to current input. */\n protected addChar(char: string): void {\n this.inputValue = this.inputValue.slice(0, this.inputIndex) + char +\n this.inputValue.slice(this.inputIndex);\n this.inputIndex++;\n }\n\n /** Move prompt cursor left. */\n protected moveCursorLeft(): void {\n if (this.inputIndex > 0) {\n this.inputIndex--;\n }\n }\n\n /** Move prompt cursor right. */\n protected moveCursorRight(): void {\n if (this.inputIndex < this.inputValue.length) {\n this.inputIndex++;\n }\n }\n\n /** Delete char left. */\n protected deleteChar(): void {\n if (this.inputIndex > 0) {\n this.inputIndex--;\n this.deleteCharRight();\n }\n }\n\n /** Delete char right. */\n protected deleteCharRight(): void {\n if (this.inputIndex < this.inputValue.length) {\n this.inputValue = this.inputValue.slice(0, this.inputIndex) +\n this.inputValue.slice(this.inputIndex + 1);\n }\n }\n}\n","import type { KeyCode } from \"jsr:@cliffy/keycode@1.0.0\";\nimport {\n GenericInput,\n type GenericInputKeys,\n type GenericInputPromptOptions,\n type GenericInputPromptSettings,\n} from \"./_generic_input.js\";\nimport type { WidenType } from \"./_utils.ts\";\nimport { bold, brightBlue, dim, stripAnsiCode, yellow } from \"@jsr/std__fmt/colors\";\nimport { levenshteinDistance } from \"@jsr/std__text/levenshtein-distance\";\nimport { Figures, getFiguresByKeys } from \"./_figures.js\";\n\ntype UnsupportedInputOptions = \"suggestions\" | \"list\";\n\n/** Generic list prompt options. */\nexport interface GenericListOptions<TValue, TReturnValue, TRawValue>\n extends\n Omit<\n GenericInputPromptOptions<TReturnValue, TRawValue>,\n UnsupportedInputOptions\n > {\n options: Array<\n | Extract<TValue, string | number>\n | Extract<WidenType<TValue>, string | number>\n | GenericListOption<TValue>\n | GenericListOptionGroup<TValue, GenericListOption<TValue>>\n | GenericListSeparatorOption\n >;\n /** Keymap to assign key names to prompt actions. */\n keys?: GenericListKeys;\n /** Change list pointer. Default is `brightBlue(\"❯\")`. */\n listPointer?: string;\n /** Limit max displayed rows per page. */\n maxRows?: number;\n /** Change search label. Default is `brightBlue(\"🔎\")`. */\n searchLabel?: string;\n /** Enable search. */\n search?: boolean;\n /** Display prompt info. */\n info?: boolean;\n /** Limit maximum amount of breadcrumb items. */\n maxBreadcrumbItems?: number;\n /** Change breadcrumb separator. Default is ` › `. */\n breadcrumbSeparator?: string;\n /** Change back pointer. Default is `❮`. */\n backPointer?: string;\n /** Change group pointer. Default is `❯`. */\n groupPointer?: string;\n /** Change group icon. Default is `📁`. */\n groupIcon?: string | boolean;\n /** Change opened group icon. Default is `📂`. */\n groupOpenIcon?: string | boolean;\n /** Format option value. */\n format?: (value: TValue) => string;\n}\n\n/** Generic list prompt settings. */\nexport interface GenericListSettings<\n TValue,\n TReturnValue,\n TRawValue,\n TOption extends GenericListOptionSettings<TValue>,\n TGroup extends GenericListOptionGroupSettings<TValue, TOption>,\n> extends GenericInputPromptSettings<TReturnValue, TRawValue> {\n options: Array<TOption | TGroup>;\n keys: GenericListKeys;\n listPointer: string;\n maxRows: number;\n searchLabel: string;\n search?: boolean;\n info?: boolean;\n maxBreadcrumbItems: number;\n breadcrumbSeparator: string;\n backPointer: string;\n groupPointer: string;\n groupIcon: string | false;\n groupOpenIcon: string | false;\n format?: (value: TValue) => string;\n}\n\n/** Generic list separator option options. */\nexport interface GenericListSeparatorOption {\n /** The separator label. */\n name: string;\n}\n\n/** Generic list option options. */\nexport interface GenericListOption<TValue> {\n /** The option value. */\n value: TValue;\n /** The option label. */\n name?: string;\n /** Disable option. Disabled options are displayed but cannot be selected. */\n disabled?: boolean;\n}\n\n/** Generic list option group options. */\nexport interface GenericListOptionGroup<\n TValue,\n TOption extends GenericListOption<TValue>,\n> {\n /** The option label. */\n name: string;\n /** An array of child options. */\n options: Array<\n | Extract<TValue, string | number>\n | Extract<WidenType<TValue>, string | number>\n | TOption\n | this\n | GenericListSeparatorOption\n >;\n /** Disable option. Disabled options are displayed but cannot be selected. */\n disabled?: boolean;\n}\n\n/** Generic list option settings. */\nexport interface GenericListOptionSettings<TValue>\n extends GenericListOption<TValue> {\n name: string;\n disabled: boolean;\n indentLevel: number;\n}\n\n/** Generic list option group settings. */\nexport interface GenericListOptionGroupSettings<\n TValue,\n TOption extends GenericListOptionSettings<TValue>,\n> extends GenericListOptionGroup<TValue, TOption> {\n disabled: boolean;\n indentLevel: number;\n options: Array<TOption | this>;\n}\n\n/** GenericList key options. */\nexport interface GenericListKeys extends GenericInputKeys {\n /** Select next option keymap. Default is `[\"down\", \"j\", \"d\", \"n\", \"2\"]`. */\n next?: string[];\n /** Select previous option keymap. Default is `[\"up\", \"k\", \"u\", \"p\", \"8\"]`. */\n previous?: string[];\n /** Select next page keymap. Default is `[\"pagedown\", \"right\", \"l\"]`. */\n nextPage?: string[];\n /** Select previous page keymap. Default is `[\"pageup\", \"left\", \"h\"]`. */\n previousPage?: string[];\n /** Select next option keymap. Default is `[\"right\", \"enter\", \"return\"]`. */\n open?: string[];\n /** Select next option keymap. Default is `[\"left\", \"escape\", \"enter\", \"return\"]`. */\n back?: string[];\n}\n\ninterface MatchedOption<\n TValue,\n TOption extends GenericListOptionSettings<TValue>,\n TGroup extends GenericListOptionGroupSettings<TValue, TOption>,\n> {\n option: TOption | TGroup;\n distance: number;\n children: Array<MatchedOption<TValue, TOption, TGroup>>;\n}\n\n/** Generic list prompt representation. */\nexport abstract class GenericList<\n TValue,\n TReturnValue,\n TRawValue,\n TOption extends GenericListOptionSettings<TValue>,\n TGroup extends GenericListOptionGroupSettings<TValue, TOption>,\n> extends GenericInput<TReturnValue, TRawValue> {\n // @ts-ignore ignore jsr publish error\n protected abstract override readonly settings: GenericListSettings<\n TValue,\n TReturnValue,\n TRawValue,\n TOption,\n TGroup\n >;\n protected abstract options: Array<TOption | TGroup>;\n protected abstract listIndex: number;\n protected abstract listOffset: number;\n protected parentOptions: Array<TGroup> = [];\n\n protected get selectedOption(): TOption | TGroup | undefined {\n return this.options.at(this.listIndex);\n }\n\n /**\n * Create list separator.\n *\n * @param label Separator label.\n */\n public static separator(label = \"------------\"): GenericListSeparatorOption {\n return { name: label };\n }\n\n public override getDefaultSettings(\n {\n groupIcon = true,\n groupOpenIcon = groupIcon,\n ...options\n }: GenericListOptions<TValue, TReturnValue, TRawValue>,\n ): GenericListSettings<TValue, TReturnValue, TRawValue, TOption, TGroup> {\n const settings = super.getDefaultSettings(options);\n return {\n ...settings,\n listPointer: options.listPointer ?? brightBlue(Figures.POINTER),\n searchLabel: options.searchLabel ?? brightBlue(Figures.SEARCH),\n backPointer: options.backPointer ?? brightBlue(Figures.POINTER_LEFT),\n groupPointer: options.groupPointer ?? options.listPointer ??\n brightBlue(Figures.POINTER),\n groupIcon: !groupIcon\n ? false\n : typeof groupIcon === \"string\"\n ? groupIcon\n : Figures.FOLDER,\n groupOpenIcon: !groupOpenIcon\n ? false\n : typeof groupOpenIcon === \"string\"\n ? groupOpenIcon\n : Figures.FOLDER_OPEN,\n maxBreadcrumbItems: options.maxBreadcrumbItems ?? 5,\n breadcrumbSeparator: options.breadcrumbSeparator ??\n ` ${Figures.POINTER_SMALL} `,\n maxRows: options.maxRows ?? 10,\n options: this.mapOptions(options, options.options),\n keys: {\n next: options.search ? [\"down\"] : [\"down\", \"j\", \"d\", \"n\", \"2\"],\n previous: options.search ? [\"up\"] : [\"up\", \"k\", \"u\", \"p\", \"8\"],\n nextPage: [\"pagedown\", \"right\", \"l\"],\n previousPage: [\"pageup\", \"left\", \"h\"],\n open: [\"right\", \"enter\", \"return\"],\n back: [\"left\", \"escape\", \"enter\", \"return\"],\n ...(settings.keys ?? {}),\n },\n };\n }\n\n protected abstract mapOptions(\n promptOptions: GenericListOptions<TValue, TReturnValue, TRawValue>,\n options: Array<\n | Extract<TValue, string | number>\n | Extract<WidenType<TValue>, string | number>\n | GenericListOption<TValue>\n | GenericListOptionGroup<TValue, GenericListOption<TValue>>\n | GenericListSeparatorOption\n >,\n ): Array<TOption | TGroup>;\n\n protected mapOption(\n options: GenericListOptions<TValue, TReturnValue, TRawValue>,\n option: GenericListOption<TValue> | GenericListSeparatorOption,\n ): GenericListOptionSettings<TValue> {\n if (isOption(option)) {\n return {\n value: option.value,\n name: typeof option.name === \"undefined\"\n ? options.format?.(option.value) ?? String(option.value)\n : option.name,\n disabled: \"disabled\" in option && option.disabled === true,\n indentLevel: 0,\n };\n } else {\n return {\n value: null as TValue,\n name: option.name,\n disabled: true,\n indentLevel: 0,\n };\n }\n }\n\n protected mapOptionGroup(\n options: GenericListOptions<TValue, TReturnValue, TRawValue>,\n option: GenericListOptionGroup<TValue, GenericListOption<TValue>>,\n recursive = true,\n ): GenericListOptionGroupSettings<TValue, GenericListOptionSettings<TValue>> {\n return {\n name: option.name,\n disabled: !!option.disabled,\n indentLevel: 0,\n options: recursive ? this.mapOptions(options, option.options) : [],\n };\n }\n\n protected match(): void {\n const input: string = this.getCurrentInputValue().toLowerCase();\n let options: Array<TOption | TGroup> = this.getCurrentOptions().slice();\n\n if (input.length) {\n const matches = matchOptions<TValue, TOption, TGroup>(\n input,\n this.getCurrentOptions(),\n );\n options = flatMatchedOptions(matches);\n }\n\n this.setOptions(options);\n }\n\n protected setOptions(options: Array<TOption | TGroup>) {\n this.options = [...options];\n\n const parent = this.getParentOption();\n if (parent && this.options[0] !== parent) {\n this.options.unshift(parent);\n }\n\n this.listIndex = Math.max(\n 0,\n Math.min(this.options.length - 1, this.listIndex),\n );\n this.listOffset = Math.max(\n 0,\n Math.min(\n this.options.length - this.getListHeight(),\n this.listOffset,\n ),\n );\n }\n\n protected getCurrentOptions(): Array<TOption | TGroup> {\n return this.getParentOption()?.options ?? this.settings.options;\n }\n\n protected getParentOption(index = -1): TGroup | undefined {\n return this.parentOptions.at(index);\n }\n\n protected submitBackButton() {\n const parentOption = this.parentOptions.pop();\n if (!parentOption) {\n return;\n }\n this.match();\n this.listIndex = this.options.indexOf(parentOption);\n }\n\n protected submitGroupOption(selectedOption: TGroup) {\n this.parentOptions.push(selectedOption);\n this.match();\n this.listIndex = 0;\n }\n\n protected isBackButton(option: TOption | TGroup | undefined): boolean {\n return option === this.getParentOption();\n }\n\n protected hasParent(): boolean {\n return this.parentOptions.length > 0;\n }\n\n protected isSearching(): boolean {\n return this.getCurrentInputValue() !== \"\";\n }\n\n protected override message(): string {\n let message = `${this.settings.indent}${this.settings.prefix}` +\n bold(this.settings.message) +\n this.defaults();\n\n if (this.settings.search) {\n const input = this.isSearchSelected() ? this.input() : dim(this.input());\n message += \" \" + this.settings.searchLabel + \" \";\n this.cursor.x = stripAnsiCode(message).length + this.inputIndex + 1;\n message += input;\n }\n\n return message;\n }\n\n /** Render options. */\n protected override body(): string | Promise<string> {\n return this.getList() + this.getInfo();\n }\n\n protected getInfo(): string {\n if (!this.settings.info) {\n return \"\";\n }\n const selected: number = this.listIndex + 1;\n const hasGroups = this.options.some((option) => isOptionGroup(option));\n\n const groupActions: Array<[string, Array<string>]> = hasGroups\n ? [\n [\"Open\", getFiguresByKeys(this.settings.keys.open ?? [])],\n [\"Back\", getFiguresByKeys(this.settings.keys.back ?? [])],\n ]\n : [];\n\n const actions: Array<[string, Array<string>]> = [\n [\"Next\", getFiguresByKeys(this.settings.keys.next ?? [])],\n [\"Previous\", getFiguresByKeys(this.settings.keys.previous ?? [])],\n ...groupActions,\n [\"Next Page\", getFiguresByKeys(this.settings.keys.nextPage ?? [])],\n [\n \"Previous Page\",\n getFiguresByKeys(this.settings.keys.previousPage ?? []),\n ],\n [\"Submit\", getFiguresByKeys(this.settings.keys.submit ?? [])],\n ];\n\n return \"\\n\" + this.settings.indent + brightBlue(Figures.INFO) +\n bold(` ${selected}/${this.options.length} `) +\n actions\n .map((cur) => `${cur[0]}: ${bold(cur[1].join(\", \"))}`)\n .join(\", \");\n }\n\n /** Render options list. */\n protected getList(): string {\n const list: Array<string> = [];\n const height: number = this.getListHeight();\n for (let i = this.listOffset; i < this.listOffset + height; i++) {\n list.push(\n this.getListItem(\n this.options[i],\n this.listIndex === i,\n ),\n );\n }\n if (!list.length) {\n list.push(\n this.settings.indent + dim(\" No matches...\"),\n );\n }\n return list.join(\"\\n\");\n }\n\n /**\n * Render option.\n * @param option Option.\n * @param isSelected Set to true if option is selected.\n */\n protected getListItem(\n option: TOption | TGroup,\n isSelected?: boolean,\n ): string {\n let line = this.getListItemIndent(option);\n line += this.getListItemPointer(option, isSelected);\n line += this.getListItemIcon(option);\n line += this.getListItemLabel(option, isSelected);\n\n return line;\n }\n\n protected getListItemIndent(option: TOption | TGroup): string {\n const indentLevel = this.isSearching()\n ? option.indentLevel\n : this.hasParent() && !this.isBackButton(option)\n ? 1\n : 0;\n\n return this.settings.indent + \" \".repeat(indentLevel);\n }\n\n protected getListItemPointer(\n option: TOption | TGroup,\n isSelected?: boolean,\n ): string {\n if (!isSelected) {\n return \" \";\n }\n\n if (this.isBackButton(option)) {\n return this.settings.backPointer + \" \";\n } else if (isOptionGroup(option)) {\n return this.settings.groupPointer + \" \";\n }\n\n return this.settings.listPointer + \" \";\n }\n\n protected getListItemIcon(option: TOption | TGroup): string {\n if (this.isBackButton(option)) {\n return this.settings.groupOpenIcon\n ? this.settings.groupOpenIcon + \" \"\n : \"\";\n } else if (isOptionGroup(option)) {\n return this.settings.groupIcon ? this.settings.groupIcon + \" \" : \"\";\n }\n\n return \"\";\n }\n\n protected getListItemLabel(\n option: TOption | TGroup,\n isSelected?: boolean,\n ): string {\n let label = option.name;\n\n if (this.isBackButton(option)) {\n label = this.getBreadCrumb();\n label = isSelected && !option.disabled ? label : yellow(label);\n } else {\n label = isSelected && !option.disabled\n ? this.highlight(label, (val) => val)\n : this.highlight(label);\n }\n\n if (this.isBackButton(option) || isOptionGroup(option)) {\n label = bold(label);\n }\n\n return label;\n }\n\n protected getBreadCrumb(): string {\n if (!this.parentOptions.length || !this.settings.maxBreadcrumbItems) {\n return \"\";\n }\n const names = this.parentOptions.map((option) => option.name);\n const breadCrumb = names.length > this.settings.maxBreadcrumbItems\n ? [names[0], \"..\", ...names.slice(-this.settings.maxBreadcrumbItems + 1)]\n : names;\n\n return breadCrumb.join(this.settings.breadcrumbSeparator);\n }\n\n /** Get options row height. */\n protected getListHeight(): number {\n return Math.min(\n this.options.length,\n this.settings.maxRows || this.options.length,\n );\n }\n\n protected getListIndex(value?: TValue): number {\n return Math.max(\n 0,\n typeof value === \"undefined\"\n ? this.options.findIndex((option: TOption | TGroup) =>\n !option.disabled\n ) || 0\n : this.options.findIndex((option: TOption | TGroup) =>\n isOption(option) && option.value === value\n ) ||\n 0,\n );\n }\n\n protected getPageOffset(index: number): number {\n if (index === 0) {\n return 0;\n }\n const height: number = this.getListHeight();\n return Math.min(\n Math.floor(index / height) * height,\n this.options.length - height,\n );\n }\n\n /**\n * Find option by value.\n * @param value Value of the option.\n */\n protected getOptionByValue(\n value: TValue,\n ): TOption | undefined {\n const option = this.options.find((option) =>\n isOption(option) && option.value === value\n );\n\n return option && isOptionGroup(option) ? undefined : option;\n }\n\n /** Read user input. */\n protected override read(): Promise<boolean> {\n if (!this.settings.search) {\n this.settings.tty.cursorHide();\n }\n return super.read();\n }\n\n protected selectSearch() {\n this.listIndex = -1;\n }\n\n protected isSearchSelected(): boolean {\n return this.listIndex === -1;\n }\n\n /**\n * Handle user input event.\n * @param event Key event.\n */\n protected override async handleEvent(event: KeyCode): Promise<void> {\n if (this.options.every((option) => option.disabled)) {\n this.setErrorMessage(\n \"No selectable options available. All options are disabled.\",\n );\n await super.handleEvent(event);\n return;\n }\n\n if (\n this.isKey(this.settings.keys, \"open\", event) &&\n isOptionGroup(this.selectedOption) &&\n !this.isSearchSelected()\n ) {\n if (this.isBackButton(this.selectedOption)) {\n this.selectNext();\n } else {\n this.submitGroupOption(this.selectedOption);\n }\n } else if (\n this.isKey(this.settings.keys, \"back\", event) &&\n (this.isBackButton(this.selectedOption) || event.name === \"escape\") &&\n !this.isSearchSelected()\n ) {\n this.submitBackButton();\n } else if (this.isKey(this.settings.keys, \"next\", event)) {\n this.selectNext();\n } else if (this.isKey(this.settings.keys, \"previous\", event)) {\n this.selectPrevious();\n } else if (\n this.isKey(this.settings.keys, \"nextPage\", event) &&\n !this.isSearchSelected()\n ) {\n this.selectNextPage();\n } else if (\n this.isKey(this.settings.keys, \"previousPage\", event) &&\n !this.isSearchSelected()\n ) {\n this.selectPreviousPage();\n } else {\n await super.handleEvent(event);\n }\n }\n\n protected override async submit(): Promise<void> {\n if (this.isSearchSelected()) {\n this.selectNext();\n return;\n }\n await super.submit();\n }\n\n protected override moveCursorLeft(): void {\n if (this.settings.search) {\n super.moveCursorLeft();\n }\n }\n\n protected override moveCursorRight(): void {\n if (this.settings.search) {\n super.moveCursorRight();\n }\n }\n\n protected override deleteChar(): void {\n if (this.settings.search) {\n super.deleteChar();\n }\n }\n\n protected override deleteCharRight(): void {\n if (this.settings.search) {\n super.deleteCharRight();\n this.match();\n }\n }\n\n protected override addChar(char: string): void {\n if (this.settings.search) {\n super.addChar(char);\n this.match();\n }\n }\n\n /** Select previous option. */\n protected selectPrevious(loop = true): void {\n if (this.options.length < 2 && !this.isSearchSelected()) {\n return;\n }\n if (this.listIndex > 0) {\n this.listIndex--;\n if (this.listIndex < this.listOffset) {\n this.listOffset--;\n }\n if (this.selectedOption?.disabled) {\n this.selectPrevious();\n }\n } else if (\n this.settings.search && this.listIndex === 0 &&\n this.getCurrentInputValue().length\n ) {\n this.listIndex = -1;\n } else if (loop) {\n this.listIndex = this.options.length - 1;\n this.listOffset = this.options.length - this.getListHeight();\n if (this.selectedOption?.disabled) {\n this.selectPrevious();\n }\n }\n }\n\n /** Select next option. */\n protected selectNext(loop = true): void {\n if (this.options.length < 2 && !this.isSearchSelected()) {\n return;\n }\n if (this.listIndex < this.options.length - 1) {\n this.listIndex++;\n if (this.listIndex >= this.listOffset + this.getListHeight()) {\n this.listOffset++;\n }\n if (this.selectedOption?.disabled) {\n this.selectNext();\n }\n } else if (\n this.settings.search && this.listIndex === this.options.length - 1 &&\n this.getCurrentInputValue().length\n ) {\n this.listIndex = -1;\n } else if (loop) {\n this.listIndex = this.listOffset = 0;\n if (this.selectedOption?.disabled) {\n this.selectNext();\n }\n }\n }\n\n /** Select previous page. */\n protected selectPreviousPage(): void {\n if (this.options?.length) {\n const height: number = this.getListHeight();\n if (this.listOffset >= height) {\n this.listIndex -= height;\n this.listOffset -= height;\n } else if (this.listOffset > 0) {\n this.listIndex -= this.listOffset;\n this.listOffset = 0;\n } else {\n this.listIndex = 0;\n }\n if (this.selectedOption?.disabled) {\n this.selectPrevious(false);\n }\n if (this.selectedOption?.disabled) {\n this.selectNext(false);\n }\n }\n }\n\n /** Select next page. */\n protected selectNextPage(): void {\n if (this.options?.length) {\n const height: number = this.getListHeight();\n if (this.listOffset + height + height < this.options.length) {\n this.listIndex += height;\n this.listOffset += height;\n } else if (this.listOffset + height < this.options.length) {\n const offset = this.options.length - height;\n this.listIndex += offset - this.listOffset;\n this.listOffset = offset;\n } else {\n this.listIndex = this.options.length - 1;\n }\n if (this.selectedOption?.disabled) {\n this.selectNext(false);\n }\n if (this.selectedOption?.disabled) {\n this.selectPrevious(false);\n }\n }\n }\n}\n\nexport function isOption<\n TValue,\n TOption extends GenericListOption<TValue>,\n>(\n option:\n | TOption\n | GenericListOptionGroup<TValue, GenericListOption<TValue>>\n | GenericListSeparatorOption\n | undefined,\n): option is TOption {\n return !!option && typeof option === \"object\" && \"value\" in option;\n}\n\nexport function isOptionGroup<\n TValue,\n TGroup extends GenericListOptionGroup<TValue, GenericListOption<TValue>>,\n>(\n option:\n | TGroup\n | TValue\n | GenericListOption<TValue>\n | GenericListSeparatorOption\n | undefined,\n): option is TGroup {\n return option !== null && typeof option === \"object\" && \"options\" in option &&\n Array.isArray(option.options);\n}\n\nfunction matchOptions<\n TValue,\n TOption extends GenericListOptionSettings<TValue>,\n TGroup extends GenericListOptionGroupSettings<TValue, TOption>,\n>(\n searchInput: string,\n options: Array<TOption | TGroup>,\n): Array<MatchedOption<TValue, TOption, TGroup>> {\n const matched: Array<MatchedOption<TValue, TOption, TGroup>> = [];\n\n for (const option of options) {\n if (isOptionGroup(option)) {\n const children = matchOptions<TValue, TOption, TGroup>(\n searchInput,\n option.options,\n )\n .sort(sortByDistance);\n\n if (children.length) {\n matched.push({\n option,\n distance: Math.min(...children.map((item) => item.distance)),\n children,\n });\n continue;\n }\n }\n\n if (matchOption(searchInput, option)) {\n matched.push({\n option,\n distance: levenshteinDistance(option.name, searchInput),\n children: [],\n });\n }\n }\n\n return matched.sort(sortByDistance);\n\n function sortByDistance(\n a: MatchedOption<TValue, TOption, TGroup>,\n b: MatchedOption<TValue, TOption, TGroup>,\n ): number {\n return a.distance - b.distance;\n }\n}\n\nfunction matchOption<\n TValue,\n TOption extends GenericListOptionSettings<TValue>,\n TGroup extends GenericListOptionGroupSettings<TValue, TOption>,\n>(\n inputString: string,\n option: TOption | TGroup,\n): boolean {\n return matchInput(inputString, option.name) || (\n isOption(option) &&\n option.name !== option.value &&\n matchInput(inputString, String(option.value))\n );\n}\n\nfunction matchInput(inputString: string, value: string): boolean {\n return stripAnsiCode(value)\n .toLowerCase()\n .includes(inputString);\n}\n\nfunction flatMatchedOptions<\n TValue,\n TOption extends GenericListOptionSettings<TValue>,\n TGroup extends GenericListOptionGroupSettings<TValue, TOption>,\n>(\n matches: Array<MatchedOption<TValue, TOption, TGroup>>,\n indentLevel = 0,\n result: Array<TOption | TGroup> = [],\n): Array<TOption | TGroup> {\n for (const { option, children } of matches) {\n option.indentLevel = indentLevel;\n result.push(option);\n flatMatchedOptions(children, indentLevel + 1, result);\n }\n\n return result;\n}\n","// Copyright 2018-2025 the Deno authors. MIT license.\n\nexport function checkWindows(): boolean {\n // deno-lint-ignore no-explicit-any\n const global = globalThis as any;\n const os = global.Deno?.build?.os;\n\n // Check Deno, then the remaining runtimes (e.g. Node, Bun and the browser)\n return typeof os === \"string\"\n ? os === \"windows\"\n : global.navigator?.platform?.startsWith(\"Win\") ??\n global.process?.platform?.startsWith(\"win\") ?? false;\n}\n","// Copyright 2018-2025 the Deno authors. MIT license.\n// This module is browser compatible.\n\nimport { checkWindows } from \"./_os.js\";\n\n/** Whether the current platform is Windows */\nexport const isWindows: boolean = checkWindows();\n","// Copyright 2018-2025 the Deno authors. MIT license.\n// Copyright the Browserify authors. MIT License.\n\nexport function assertPath(path?: string) {\n if (typeof path !== \"string\") {\n throw new TypeError(\n `Path must be a string, received \"${JSON.stringify(path)}\"`,\n );\n }\n}\n","// Copyright 2018-2025 the Deno authors. MIT license.\n// This module is browser compatible.\n\nexport function assertArg(url: URL | string) {\n url = url instanceof URL ? url : new URL(url);\n if (url.protocol !== \"file:\") {\n throw new TypeError(\n `URL must be a file URL: received \"${url.protocol}\"`,\n );\n }\n return url;\n}\n","// Copyright 2018-2025 the Deno authors. MIT license.\n// This module is browser compatible.\n\nimport { assertArg } from \"../_common/from_file_url.js\";\n\n/**\n * Converts a file URL to a path string.\n *\n * @example Usage\n * ```ts\n * import { fromFileUrl } from \"@std/path/posix/from-file-url\";\n * import { assertEquals } from \"@std/assert\";\n *\n * assertEquals(fromFileUrl(new URL(\"file:///home/foo\")), \"/home/foo\");\n * ```\n *\n * @param url The file URL to convert.\n * @returns The path string.\n */\nexport function fromFileUrl(url: URL | string): string {\n url = assertArg(url);\n return decodeURIComponent(\n url.pathname.replace(/%(?![0-9A-Fa-f]{2})/g, \"%25\"),\n );\n}\n","// Copyright 2018-2025 the Deno authors. MIT license.\n// Copyright the Browserify authors. MIT License.\n// Ported from https://github.com/browserify/path-browserify/\n// This module is browser compatible.\n\nexport function stripTrailingSeparators(\n segment: string,\n isSep: (char: number) => boolean,\n): string {\n if (segment.length <= 1) {\n return segment;\n }\n\n let end = segment.length;\n\n for (let i = segment.length - 1; i > 0; i--) {\n if (isSep(segment.charCodeAt(i))) {\n end = i;\n } else {\n break;\n }\n }\n\n return segment.slice(0, end);\n}\n","// Copyright 2018-2025 the Deno authors. MIT license.\n// Copyright the Browserify authors. MIT License.\n// Ported from https://github.com/browserify/path-browserify/\n// This module is browser compatible.\n\nimport { CHAR_FORWARD_SLASH } from \"../_common/constants.js\";\n\nexport function isPosixPathSeparator(code: number): boolean {\n return code === CHAR_FORWARD_SLASH;\n}\n","// Copyright 2018-2025 the Deno authors. MIT license.\n// Copyright the Browserify authors. MIT License.\n// Ported from https://github.com/browserify/path-browserify/\n// This module is browser compatible.\n\nimport {\n CHAR_BACKWARD_SLASH,\n CHAR_FORWARD_SLASH,\n CHAR_LOWERCASE_A,\n CHAR_LOWERCASE_Z,\n CHAR_UPPERCASE_A,\n CHAR_UPPERCASE_Z,\n} from \"../_common/constants.js\";\n\nexport function isPosixPathSeparator(code: number): boolean {\n return code === CHAR_FORWARD_SLASH;\n}\n\nexport function isPathSeparator(code: number): boolean {\n return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;\n}\n\nexport function isWindowsDeviceRoot(code: number): boolean {\n return (\n (code >= CHAR_LOWERCASE_A && code <= CHAR_LOWERCASE_Z) ||\n (code >= CHAR_UPPERCASE_A && code <= CHAR_UPPERCASE_Z)\n );\n}\n","// Copyright 2018-2025 the Deno authors. MIT license.\n// This module is browser compatible.\n\nimport { assertArg } from \"../_common/from_file_url.js\";\n\n/**\n * Converts a file URL to a path string.\n *\n * @example Usage\n * ```ts\n * import { fromFileUrl } from \"@std/path/windows/from-file-url\";\n * import { assertEquals } from \"@std/assert\";\n *\n * assertEquals(fromFileUrl(\"file:///home/foo\"), \"\\\\home\\\\foo\");\n * assertEquals(fromFileUrl(\"file:///C:/Users/foo\"), \"C:\\\\Users\\\\foo\");\n * assertEquals(fromFileUrl(\"file://localhost/home/foo\"), \"\\\\home\\\\foo\");\n * ```\n *\n * @param url The file URL to convert.\n * @returns The path string.\n */\nexport function fromFileUrl(url: URL | string): string {\n url = assertArg(url);\n let path = decodeURIComponent(\n url.pathname.replace(/\\//g, \"\\\\\").replace(/%(?![0-9A-Fa-f]{2})/g, \"%25\"),\n ).replace(/^\\\\*([A-Za-z]:)(\\\\|$)/, \"$1\\\\\");\n if (url.hostname !== \"\") {\n // Note: The `URL` implementation guarantees that the drive letter and\n // hostname are mutually exclusive. Otherwise it would not have been valid\n // to append the hostname and path like this.\n path = `\\\\\\\\${url.hostname}${path}`;\n }\n return path;\n}\n","// Copyright 2018-2025 the Deno authors. MIT license.\n// This module is browser compatible.\n\nimport { assertPath } from \"./assert_path.js\";\n\nexport function assertArg(path: string) {\n assertPath(path);\n if (path.length === 0) return \".\";\n}\n","// Copyright 2018-2025 the Deno authors. MIT license.\n// This module is browser compatible.\n\nimport { assertArg } from \"../_common/dirname.js\";\nimport { stripTrailingSeparators } from \"../_common/strip_trailing_separators.js\";\nimport { isPosixPathSeparator } from \"./_util.js\";\nimport { fromFileUrl } from \"./from_file_url.js\";\n\n/**\n * Return the directory path of a `path`.\n *\n * @example Usage\n * ```ts\n * import { dirname } from \"@std/path/posix/dirname\";\n * import { assertEquals } from \"@std/assert\";\n *\n * assertEquals(dirname(\"/home/user/Documents/\"), \"/home/user\");\n * assertEquals(dirname(\"/home/user/Documents/image.png\"), \"/home/user/Documents\");\n * assertEquals(dirname(\"https://deno.land/std/path/mod.ts\"), \"https://deno.land/std/path\");\n * assertEquals(dirname(new URL(\"file:///home/user/Documents/image.png\")), \"/home/user/Documents\");\n * ```\n *\n * @example Working with URLs\n *\n * ```ts\n * import { dirname } from \"@std/path/posix/dirname\";\n * import { assertEquals } from \"@std/assert\";\n *\n * assertEquals(dirname(\"https://deno.land/std/path/mod.ts\"), \"https://deno.land/std/path\");\n * assertEquals(dirname(\"https://deno.land/std/path/mod.ts?a=b\"), \"https://deno.land/std/path\");\n * assertEquals(dirname(\"https://deno.land/std/path/mod.ts#header\"), \"https://deno.land/std/path\");\n * ```\n *\n * @param path The path to get the directory from.\n * @returns The directory path.\n */\nexport function dirname(path: string | URL): string {\n if (path instanceof URL) {\n path = fromFileUrl(path);\n }\n assertArg(path);\n\n let end = -1;\n let matchedNonSeparator = false;\n\n for (let i = path.length - 1; i >= 1; --i) {\n if (isPosixPathSeparator(path.charCodeAt(i))) {\n if (matchedNonSeparator) {\n end = i;\n break;\n }\n } else {\n matchedNonSeparator = true;\n }\n }\n\n // No matches. Fallback based on provided path:\n //\n // - leading slashes paths\n // \"/foo\" => \"/\"\n // \"///foo\" => \"/\"\n // - no slash path\n // \"foo\" => \".\"\n if (end === -1) {\n return isPosixPathSeparator(path.charCodeAt(0)) ? \"/\" : \".\";\n }\n\n return stripTrailingSeparators(\n path.slice(0, end),\n isPosixPathSeparator,\n );\n}\n","// Copyright 2018-2025 the Deno authors. MIT license.\n// This module is browser compatible.\n\nimport { assertArg } from \"../_common/dirname.js\";\nimport { CHAR_COLON } from \"../_common/constants.js\";\nimport { stripTrailingSeparators } from \"../_common/strip_trailing_separators.js\";\nimport {\n isPathSeparator,\n isPosixPathSeparator,\n isWindowsDeviceRoot,\n} from \"./_util.js\";\nimport { fromFileUrl } from \"./from_file_url.js\";\n\n/**\n * Return the directory path of a `path`.\n *\n * @example Usage\n * ```ts\n * import { dirname } from \"@std/path/windows/dirname\";\n * import { assertEquals } from \"@std/assert\";\n *\n * assertEquals(dirname(\"C:\\\\foo\\\\bar\\\\baz.ext\"), \"C:\\\\foo\\\\bar\");\n * assertEquals(dirname(new URL(\"file:///C:/foo/bar/baz.ext\")), \"C:\\\\foo\\\\bar\");\n * ```\n *\n * @param path The path to get the directory from.\n * @returns The directory path.\n */\nexport function dirname(path: string | URL): string {\n if (path instanceof URL) {\n path = fromFileUrl(path);\n }\n assertArg(path);\n\n const len = path.length;\n let rootEnd = -1;\n let end = -1;\n let matchedSlash = true;\n let offset = 0;\n const code = path.charCodeAt(0);\n\n // Try to match a root\n if (len > 1) {\n if (isPathSeparator(code)) {\n // Possible UNC root\n\n rootEnd = offset = 1;\n\n if (isPathSeparator(path.charCodeAt(1))) {\n // Matched double path separator at beginning\n let j = 2;\n let last = j;\n // Match 1 or more non-path separators\n for (; j < len; ++j) {\n if (isPathSeparator(path.charCodeAt(j))) break;\n }\n if (j < len && j !== last) {\n // Matched!\n last = j;\n // Match 1 or more path separators\n for (; j < len; ++j) {\n if (!isPathSeparator(path.charCodeAt(j))) break;\n }\n if (j < len && j !== last) {\n // Matched!\n last = j;\n // Match 1 or more non-path separators\n for (; j < len; ++j) {\n if (isPathSeparator(path.charCodeAt(j))) break;\n }\n if (j === len) {\n // We matched a UNC root only\n return path;\n }\n if (j !== last) {\n // We matched a UNC root with leftovers\n\n // Offset by 1 to include the separator after the UNC root to\n // treat it as a \"normal root\" on top of a (UNC) root\n rootEnd = offset = j + 1;\n }\n }\n }\n }\n } else if (isWindowsDeviceRoot(code)) {\n // Possible device root\n\n if (path.charCodeAt(1) === CHAR_COLON) {\n rootEnd = offset = 2;\n if (len > 2) {\n if (isPathSeparator(path.charCodeAt(2))) rootEnd = offset = 3;\n }\n }\n }\n } else if (isPathSeparator(code)) {\n // `path` contains just a path separator, exit early to avoid\n // unnecessary work\n return path;\n }\n\n for (let i = len - 1; i >= offset; --i) {\n if (isPathSeparator(path.charCodeAt(i))) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n\n if (end === -1) {\n if (rootEnd === -1) return \".\";\n else end = rootEnd;\n }\n return stripTrailingSeparators(path.slice(0, end), isPosixPathSeparator);\n}\n","// Copyright 2018-2025 the Deno authors. MIT license.\n// This module is browser compatible.\n\nimport { isWindows } from \"@jsr/std__internal/os\";\nimport { dirname as posixDirname } from \"./posix/dirname.js\";\nimport { dirname as windowsDirname } from \"./windows/dirname.js\";\n\n/**\n * Return the directory path of a path.\n *\n * @example Usage\n * ```ts\n * import { dirname } from \"@std/path/dirname\";\n * import { assertEquals } from \"@std/assert\";\n *\n * if (Deno.build.os === \"windows\") {\n * assertEquals(dirname(\"C:\\\\home\\\\user\\\\Documents\\\\image.png\"), \"C:\\\\home\\\\user\\\\Documents\");\n * assertEquals(dirname(new URL(\"file:///C:/home/user/Documents/image.png\")), \"C:\\\\home\\\\user\\\\Documents\");\n * } else {\n * assertEquals(dirname(\"/home/user/Documents/image.png\"), \"/home/user/Documents\");\n * assertEquals(dirname(new URL(\"file:///home/user/Documents/image.png\")), \"/home/user/Documents\");\n * }\n * ```\n *\n * @param path Path to extract the directory from.\n * @returns The directory path.\n */\nexport function dirname(path: string | URL): string {\n return isWindows ? windowsDirname(path) : posixDirname(path);\n}\n","// Copyright 2018-2025 the Deno authors. MIT license.\n// This module is browser compatible.\n\nimport { assertPath } from \"./assert_path.js\";\n\nexport function assertArg(path: string) {\n assertPath(path);\n if (path.length === 0) return \".\";\n}\n","// Copyright 2018-2025 the Deno authors. MIT license.\n// Copyright the Browserify authors. MIT License.\n// Ported from https://github.com/browserify/path-browserify/\n// This module is browser compatible.\n\nimport { CHAR_DOT, CHAR_FORWARD_SLASH } from \"./constants.js\";\n\n// Resolves . and .. elements in a path with directory names\nexport function normalizeString(\n path: string,\n allowAboveRoot: boolean,\n separator: string,\n isPathSeparator: (code: number) => boolean,\n): string {\n let res = \"\";\n let lastSegmentLength = 0;\n let lastSlash = -1;\n let dots = 0;\n let code: number | undefined;\n for (let i = 0; i <= path.length; ++i) {\n if (i < path.length) code = path.charCodeAt(i);\n else if (isPathSeparator(code!)) break;\n else code = CHAR_FORWARD_SLASH;\n\n if (isPathSeparator(code!)) {\n if (lastSlash === i - 1 || dots === 1) {\n // NOOP\n } else if (lastSlash !== i - 1 && dots === 2) {\n if (\n res.length < 2 ||\n lastSegmentLength !== 2 ||\n res.charCodeAt(res.length - 1) !== CHAR_DOT ||\n res.charCodeAt(res.length - 2) !== CHAR_DOT\n ) {\n if (res.length > 2) {\n const lastSlashIndex = res.lastIndexOf(separator);\n if (lastSlashIndex === -1) {\n res = \"\";\n lastSegmentLength = 0;\n } else {\n res = res.slice(0, lastSlashIndex);\n lastSegmentLength = res.length - 1 - res.lastIndexOf(separator);\n }\n lastSlash = i;\n dots = 0;\n continue;\n } else if (res.length === 2 || res.length === 1) {\n res = \"\";\n lastSegmentLength = 0;\n lastSlash = i;\n dots = 0;\n continue;\n }\n }\n if (allowAboveRoot) {\n if (res.length > 0) res += `${separator}..`;\n else res = \"..\";\n lastSegmentLength = 2;\n }\n } else {\n if (res.length > 0) res += separator + path.slice(lastSlash + 1, i);\n else res = path.slice(lastSlash + 1, i);\n lastSegmentLength = i - lastSlash - 1;\n }\n lastSlash = i;\n dots = 0;\n } else if (code === CHAR_DOT && dots !== -1) {\n ++dots;\n } else {\n dots = -1;\n }\n }\n return res;\n}\n","// Copyright 2018-2025 the Deno authors. MIT license.\n// This module is browser compatible.\n\nimport { assertArg } from \"../_common/normalize.js\";\nimport { normalizeString } from \"../_common/normalize_string.js\";\nimport { isPosixPathSeparator } from \"./_util.js\";\nimport { fromFileUrl } from \"./from_file_url.js\";\n\n/**\n * Normalize the `path`, resolving `'..'` and `'.'` segments.\n * Note that resolving these segments does not necessarily mean that all will be eliminated.\n * A `'..'` at the top-level will be preserved, and an empty path is canonically `'.'`.\n *\n * @example Usage\n * ```ts\n * import { normalize } from \"@std/path/posix/normalize\";\n * import { assertEquals } from \"@std/assert\";\n *\n * assertEquals(normalize(\"/foo/bar//baz/asdf/quux/..\"), \"/foo/bar/baz/asdf\");\n * assertEquals(normalize(new URL(\"file:///foo/bar//baz/asdf/quux/..\")), \"/foo/bar/baz/asdf/\");\n * ```\n *\n * @example Working with URLs\n *\n * Note: This function will remove the double slashes from a URL's scheme.\n * Hence, do not pass a full URL to this function. Instead, pass the pathname of\n * the URL.\n *\n * ```ts\n * import { normalize } from \"@std/path/posix/normalize\";\n * import { assertEquals } from \"@std/assert\";\n *\n * const url = new URL(\"https://deno.land\");\n * url.pathname = normalize(\"//std//assert//.//mod.ts\");\n * assertEquals(url.href, \"https://deno.land/std/assert/mod.ts\");\n *\n * url.pathname = normalize(\"std/assert/../async/retry.ts\");\n * assertEquals(url.href, \"https://deno.land/std/async/retry.ts\");\n * ```\n *\n * @param path The path to normalize.\n * @returns The normalized path.\n */\nexport function normalize(path: string | URL): string {\n if (path instanceof URL) {\n path = fromFileUrl(path);\n }\n assertArg(path);\n\n const isAbsolute = isPosixPathSeparator(path.charCodeAt(0));\n const trailingSeparator = isPosixPathSeparator(\n path.charCodeAt(path.length - 1),\n );\n\n // Normalize the path\n path = normalizeString(path, !isAbsolute, \"/\", isPosixPathSeparator);\n\n if (path.length === 0 && !isAbsolute) path = \".\";\n if (path.length > 0 && trailingSeparator) path += \"/\";\n\n if (isAbsolute) return `/${path}`;\n return path;\n}\n","// Copyright 2018-2025 the Deno authors. MIT license.\n// This module is browser compatible.\n\nimport { assertPath } from \"../_common/assert_path.js\";\nimport { fromFileUrl } from \"./from_file_url.js\";\nimport { normalize } from \"./normalize.js\";\n\n/**\n * Join all given a sequence of `paths`,then normalizes the resulting path.\n *\n * @example Usage\n * ```ts\n * import { join } from \"@std/path/posix/join\";\n * import { assertEquals } from \"@std/assert\";\n *\n * assertEquals(join(\"/foo\", \"bar\", \"baz/asdf\", \"quux\", \"..\"), \"/foo/bar/baz/asdf\");\n * assertEquals(join(new URL(\"file:///foo\"), \"bar\", \"baz/asdf\", \"quux\", \"..\"), \"/foo/bar/baz/asdf\");\n * ```\n *\n * @example Working with URLs\n * ```ts\n * import { join } from \"@std/path/posix/join\";\n * import { assertEquals } from \"@std/assert\";\n *\n * const url = new URL(\"https://deno.land\");\n * url.pathname = join(\"std\", \"path\", \"mod.ts\");\n * assertEquals(url.href, \"https://deno.land/std/path/mod.ts\");\n *\n * url.pathname = join(\"//std\", \"path/\", \"/mod.ts\");\n * assertEquals(url.href, \"https://deno.land/std/path/mod.ts\");\n * ```\n *\n * @param path The path to join. This can be string or file URL.\n * @param paths The paths to join.\n * @returns The joined path.\n */\nexport function join(path?: URL | string, ...paths: string[]): string {\n if (path === undefined) return \".\";\n if (path instanceof URL) {\n path = fromFileUrl(path);\n }\n paths = path ? [path, ...paths] : paths;\n paths.forEach((path) => assertPath(path));\n const joined = paths.filter((path) => path.length > 0).join(\"/\");\n return joined === \"\" ? \".\" : normalize(joined);\n}\n","// Copyright 2018-2025 the Deno authors. MIT license.\n// This module is browser compatible.\n\nimport { assertArg } from \"../_common/normalize.js\";\nimport { CHAR_COLON } from \"../_common/constants.js\";\nimport { normalizeString } from \"../_common/normalize_string.js\";\nimport { isPathSeparator, isWindowsDeviceRoot } from \"./_util.js\";\nimport { fromFileUrl } from \"./from_file_url.js\";\n\n/**\n * Normalize the `path`, resolving `'..'` and `'.'` segments.\n * Note that resolving these segments does not necessarily mean that all will be eliminated.\n * A `'..'` at the top-level will be preserved, and an empty path is canonically `'.'`.\n *\n * @example Usage\n * ```ts\n * import { normalize } from \"@std/path/windows/normalize\";\n * import { assertEquals } from \"@std/assert\";\n *\n * assertEquals(normalize(\"C:\\\\foo\\\\..\\\\bar\"), \"C:\\\\bar\");\n * assertEquals(normalize(new URL(\"file:///C:/foo/../bar\")), \"C:\\\\bar\");\n * ```\n *\n * @param path The path to normalize\n * @returns The normalized path\n */\nexport function normalize(path: string | URL): string {\n if (path instanceof URL) {\n path = fromFileUrl(path);\n }\n assertArg(path);\n\n const len = path.length;\n let rootEnd = 0;\n let device: string | undefined;\n let isAbsolute = false;\n const code = path.charCodeAt(0);\n\n // Try to match a root\n if (len > 1) {\n if (isPathSeparator(code)) {\n // Possible UNC root\n\n // If we started with a separator, we know we at least have an absolute\n // path of some kind (UNC or otherwise)\n isAbsolute = true;\n\n if (isPathSeparator(path.charCodeAt(1))) {\n // Matched double path separator at beginning\n let j = 2;\n let last = j;\n // Match 1 or more non-path separators\n for (; j < len; ++j) {\n if (isPathSeparator(path.charCodeAt(j))) break;\n }\n if (j < len && j !== last) {\n const firstPart = path.slice(last, j);\n // Matched!\n last = j;\n // Match 1 or more path separators\n for (; j < len; ++j) {\n if (!isPathSeparator(path.charCodeAt(j))) break;\n }\n if (j < len && j !== last) {\n // Matched!\n last = j;\n // Match 1 or more non-path separators\n for (; j < len; ++j) {\n if (isPathSeparator(path.charCodeAt(j))) break;\n }\n if (j === len) {\n // We matched a UNC root only\n // Return the normalized version of the UNC root since there\n // is nothing left to process\n\n return `\\\\\\\\${firstPart}\\\\${path.slice(last)}\\\\`;\n } else if (j !== last) {\n // We matched a UNC root with leftovers\n\n device = `\\\\\\\\${firstPart}\\\\${path.slice(last, j)}`;\n rootEnd = j;\n }\n }\n }\n } else {\n rootEnd = 1;\n }\n } else if (isWindowsDeviceRoot(code)) {\n // Possible device root\n\n if (path.charCodeAt(1) === CHAR_COLON) {\n device = path.slice(0, 2);\n rootEnd = 2;\n if (len > 2) {\n if (isPathSeparator(path.charCodeAt(2))) {\n // Treat separator following drive name as an absolute path\n // indicator\n isAbsolute = true;\n rootEnd = 3;\n }\n }\n }\n }\n } else if (isPathSeparator(code)) {\n // `path` contains just a path separator, exit early to avoid unnecessary\n // work\n return \"\\\\\";\n }\n\n let tail: string;\n if (rootEnd < len) {\n tail = normalizeString(\n path.slice(rootEnd),\n !isAbsolute,\n \"\\\\\",\n isPathSeparator,\n );\n } else {\n tail = \"\";\n }\n if (tail.length === 0 && !isAbsolute) tail = \".\";\n if (tail.length > 0 && isPathSeparator(path.charCodeAt(len - 1))) {\n tail += \"\\\\\";\n }\n if (device === undefined) {\n if (isAbsolute) {\n if (tail.length > 0) return `\\\\${tail}`;\n else return \"\\\\\";\n }\n return tail;\n } else if (isAbsolute) {\n if (tail.length > 0) return `${device}\\\\${tail}`;\n else return `${device}\\\\`;\n }\n return device + tail;\n}\n","// Copyright 2018-2025 the Deno authors. MIT license.\n// This module is browser compatible.\n\nimport { assertPath } from \"../_common/assert_path.js\";\nimport { isPathSeparator } from \"./_util.js\";\nimport { normalize } from \"./normalize.js\";\nimport { fromFileUrl } from \"./from_file_url.js\";\n\n/**\n * Join all given a sequence of `paths`,then normalizes the resulting path.\n *\n * @example Usage\n * ```ts\n * import { join } from \"@std/path/windows/join\";\n * import { assertEquals } from \"@std/assert\";\n *\n * assertEquals(join(\"C:\\\\foo\", \"bar\", \"baz\\\\..\"), \"C:\\\\foo\\\\bar\");\n * assertEquals(join(new URL(\"file:///C:/foo\"), \"bar\", \"baz\\\\..\"), \"C:\\\\foo\\\\bar\");\n * ```\n *\n * @param path The path to join. This can be string or file URL.\n * @param paths The paths to join.\n * @returns The joined path.\n */\nexport function join(path?: URL | string, ...paths: string[]): string {\n if (path instanceof URL) {\n path = fromFileUrl(path);\n }\n paths = path ? [path, ...paths] : paths;\n paths.forEach((path) => assertPath(path));\n paths = paths.filter((path) => path.length > 0);\n if (paths.length === 0) return \".\";\n\n // Make sure that the joined path doesn't start with two slashes, because\n // normalize() will mistake it for an UNC path then.\n //\n // This step is skipped when it is very clear that the user actually\n // intended to point at an UNC path. This is assumed when the first\n // non-empty string arguments starts with exactly two slashes followed by\n // at least one more non-slash character.\n //\n // Note that for normalize() to treat a path as an UNC path it needs to\n // have at least 2 components, so we don't filter for that here.\n // This means that the user can use join to construct UNC paths from\n // a server name and a share name; for example:\n // path.join('//server', 'share') -> '\\\\\\\\server\\\\share\\\\'\n let needsReplace = true;\n let slashCount = 0;\n const firstPart = paths[0]!;\n if (isPathSeparator(firstPart.charCodeAt(0))) {\n ++slashCount;\n const firstLen = firstPart.length;\n if (firstLen > 1) {\n if (isPathSeparator(firstPart.charCodeAt(1))) {\n ++slashCount;\n if (firstLen > 2) {\n if (isPathSeparator(firstPart.charCodeAt(2))) ++slashCount;\n else {\n // We matched a UNC path in the first part\n needsReplace = false;\n }\n }\n }\n }\n }\n let joined = paths.join(\"\\\\\");\n if (needsReplace) {\n // Find any more consecutive slashes we need to replace\n for (; slashCount < joined.length; ++slashCount) {\n if (!isPathSeparator(joined.charCodeAt(slashCount))) break;\n }\n\n // Replace the slashes if needed\n if (slashCount >= 2) joined = `\\\\${joined.slice(slashCount)}`;\n }\n\n return normalize(joined);\n}\n","// Copyright 2018-2025 the Deno authors. MIT license.\n// This module is browser compatible.\n\nimport { isWindows } from \"@jsr/std__internal/os\";\nimport { join as posixJoin } from \"./posix/join.js\";\nimport { join as windowsJoin } from \"./windows/join.js\";\n\n/**\n * Joins a sequence of paths, then normalizes the resulting path.\n *\n * @example Usage\n * ```ts\n * import { join } from \"@std/path/join\";\n * import { assertEquals } from \"@std/assert\";\n *\n * if (Deno.build.os === \"windows\") {\n * assertEquals(join(\"C:\\\\foo\", \"bar\", \"baz\\\\quux\", \"garply\", \"..\"), \"C:\\\\foo\\\\bar\\\\baz\\\\quux\");\n * assertEquals(join(new URL(\"file:///C:/foo\"), \"bar\", \"baz/asdf\", \"quux\", \"..\"), \"C:\\\\foo\\\\bar\\\\baz\\\\asdf\");\n * } else {\n * assertEquals(join(\"/foo\", \"bar\", \"baz/quux\", \"garply\", \"..\"), \"/foo/bar/baz/quux\");\n * assertEquals(join(new URL(\"file:///foo\"), \"bar\", \"baz/asdf\", \"quux\", \"..\"), \"/foo/bar/baz/asdf\");\n * }\n * ```\n *\n * @param path The path to join. This can be string or file URL.\n * @param paths Paths to be joined and normalized.\n * @returns The joined and normalized path.\n */\nexport function join(path: string | URL, ...paths: string[]): string {\n return isWindows ? windowsJoin(path, ...paths) : posixJoin(path, ...paths);\n}\n","// Copyright 2018-2025 the Deno authors. MIT license.\n// This module is browser compatible.\n\nimport { isWindows } from \"@jsr/std__internal/os\";\nimport { normalize as posixNormalize } from \"./posix/normalize.js\";\nimport { normalize as windowsNormalize } from \"./windows/normalize.js\";\n/**\n * Normalize the path, resolving `'..'` and `'.'` segments.\n *\n * Note: Resolving these segments does not necessarily mean that all will be\n * eliminated. A `'..'` at the top-level will be preserved, and an empty path is\n * canonically `'.'`.\n *\n * @example Usage\n * ```ts\n * import { normalize } from \"@std/path/normalize\";\n * import { assertEquals } from \"@std/assert\";\n *\n * if (Deno.build.os === \"windows\") {\n * assertEquals(normalize(\"C:\\\\foo\\\\bar\\\\..\\\\baz\\\\quux\"), \"C:\\\\foo\\\\baz\\\\quux\");\n * assertEquals(normalize(new URL(\"file:///C:/foo/bar/../baz/quux\")), \"C:\\\\foo\\\\baz\\\\quux\");\n * } else {\n * assertEquals(normalize(\"/foo/bar/../baz/quux\"), \"/foo/baz/quux\");\n * assertEquals(normalize(new URL(\"file:///foo/bar/../baz/quux\")), \"/foo/baz/quux\");\n * }\n * ```\n *\n * @param path Path to be normalized\n * @returns The normalized path.\n */\nexport function normalize(path: string | URL): string {\n return isWindows ? windowsNormalize(path) : posixNormalize(path);\n}\n","// deno-lint-ignore-file no-explicit-any\n\n/**\n * Get file info.\n *\n * @internal\n * @param input Path to the file.\n */\nexport async function stat(input: string): Promise<{ isDirectory: boolean }> {\n // dnt-shim-ignore\n const { Deno } = globalThis as any;\n\n if (Deno) {\n return Deno.stat(input);\n }\n const { statSync } = await import(\"node:fs\");\n const stats = statSync(input);\n\n return {\n get isDirectory() {\n return stats.isDirectory();\n },\n };\n}\n","import { stat } from \"./stat.js\";\n\n/**\n * Check if given path is a directory.\n *\n * @internal\n * @param path The file path.\n */\nexport async function isDirectory(path: string): Promise<boolean> {\n try {\n const { isDirectory } = await stat(path);\n return isDirectory;\n } catch {\n return false;\n }\n}\n","// deno-lint-ignore-file no-explicit-any\n\n/**\n * Get directory list.\n *\n * @internal\n * @param path Path to the directory.\n */\nexport async function readDir(path: string): Promise<Array<{ name: string }>> {\n // dnt-shim-ignore\n const { Deno } = globalThis as any;\n path ||= \".\";\n\n if (Deno) {\n const array = [];\n for await (const item of Deno.readDir(path)) {\n array.push(item);\n }\n return array;\n }\n\n const fs = await import(\"node:fs\");\n\n return new Promise((resolve, reject) => {\n fs.readdir(\n path,\n (err: unknown, files: Array<string>) =>\n err ? reject(err) : resolve(files.map((name) => ({ name }))),\n );\n });\n}\n","// deno-lint-ignore-file no-explicit-any\n\nimport type { KeyCode } from \"jsr:@cliffy/keycode@1.0.0\";\nimport {\n bold,\n brightBlue,\n dim,\n stripAnsiCode,\n underline,\n} from \"@jsr/std__fmt/colors\";\nimport { dirname, join, normalize } from \"@jsr/std__path\";\nimport { levenshteinDistance } from \"@jsr/std__text/levenshtein-distance\";\nimport { Figures, getFiguresByKeys } from \"./_figures.js\";\nimport {\n GenericInput,\n type GenericInputKeys,\n type GenericInputPromptOptions,\n type GenericInputPromptSettings,\n} from \"./_generic_input.js\";\nimport { getOs } from \"@jsr/cliffy__internal/runtime/get-os\";\nimport { isDirectory } from \"@jsr/cliffy__internal/runtime/is-directory\";\nimport { readDir } from \"@jsr/cliffy__internal/runtime/read-dir\";\nimport { stat } from \"@jsr/cliffy__internal/runtime/stat\";\n\n/** Generic input prompt options. */\nexport interface GenericSuggestionsOptions<TValue, TRawValue>\n extends GenericInputPromptOptions<TValue, TRawValue> {\n /** Keymap to assign key names to prompt actions. */\n keys?: GenericSuggestionsKeys;\n /**\n * Prompt id. If set, the prompt value is stored in local storage and used for\n * auto suggestions the next time the prompt is used.\n */\n id?: string;\n /**\n * An array of suggestions or a callback function that returns an array of\n * suggestions.\n */\n suggestions?: Array<string | number> | SuggestionHandler;\n /** Callback function for auto-suggestion completion. */\n complete?: CompleteHandler;\n /**\n * Enable autosuggestions for files. Can be a boolean to enable all files or a\n * regular expression to include only specific files.\n */\n files?: boolean | RegExp;\n /** Show auto suggestions as a list. */\n list?: boolean;\n /** Display prompt info. */\n info?: boolean;\n /** Change list pointer. Default is `brightBlue(\"❯\")`. */\n listPointer?: string;\n /** Limit max displayed rows per page. */\n maxRows?: number;\n}\n\n/** Generic input prompt settings. */\nexport interface GenericSuggestionsSettings<TValue, TRawValue>\n extends GenericInputPromptSettings<TValue, TRawValue> {\n keys?: GenericSuggestionsKeys;\n id?: string;\n suggestions?: Array<string | number> | SuggestionHandler;\n complete?: CompleteHandler;\n files?: boolean | RegExp;\n list?: boolean;\n info?: boolean;\n listPointer: string;\n maxRows: number;\n}\n\n/** Input keys options. */\nexport interface GenericSuggestionsKeys extends GenericInputKeys {\n /** Apply auto-suggestion keymap. Default is `[\"tab\"]`. */\n complete?: string[];\n /** Select next option keymap. Default is `[\"up\"]`. */\n next?: string[];\n /** Select previous option keymap. Default is `[\"down\"]`. */\n previous?: string[];\n /** Select next page keymap. Default is `[\"pageup\"]`. */\n nextPage?: string[];\n /** Select previous page keymap. Default is `[\"pagedown\"]`. */\n previousPage?: string[];\n}\n\n/** Auto-suggestions handler. */\nexport type SuggestionHandler = (\n input: string,\n) => Array<string | number> | Promise<Array<string | number>>;\n\n/** Auto-suggestions complete handler. */\nexport type CompleteHandler = (\n input: string,\n suggestion?: string,\n) => Promise<string> | string;\n\ninterface LocalStorage {\n getItem(key: string): string | null;\n removeItem(key: string): void;\n setItem(key: string, value: string): void;\n}\n\nconst sep = getOs() === \"windows\" ? \"\\\\\" : \"/\";\n\n/** Generic input prompt representation. */\nexport abstract class GenericSuggestions<TValue, TRawValue>\n extends GenericInput<TValue, TRawValue> {\n // @ts-ignore ignore jsr publish error\n protected abstract override readonly settings: GenericSuggestionsSettings<\n TValue,\n TRawValue\n >;\n protected suggestionsIndex = -1;\n protected suggestionsOffset = 0;\n protected suggestions: Array<string | number> = [];\n #envPermissions: Record<string, boolean> = {};\n #hasReadPermissions?: boolean;\n\n public override getDefaultSettings(\n options: GenericSuggestionsOptions<TValue, TRawValue>,\n ): GenericSuggestionsSettings<TValue, TRawValue> {\n const settings = super.getDefaultSettings(options);\n return {\n ...settings,\n listPointer: options.listPointer ?? brightBlue(Figures.POINTER),\n maxRows: options.maxRows ?? 8,\n keys: {\n complete: [\"tab\"],\n next: [\"up\"],\n previous: [\"down\"],\n nextPage: [\"pageup\"],\n previousPage: [\"pagedown\"],\n ...(settings.keys ?? {}),\n },\n };\n }\n\n protected get localStorage(): LocalStorage | null {\n // Keep support for deno < 1.10.\n if (this.settings.id && \"localStorage\" in window) {\n try {\n // dnt-shim-ignore\n return (window as any).localStorage;\n } catch (_) {\n // Ignore error if --location is not set.\n }\n }\n return null;\n }\n\n protected loadSuggestions(): Array<string | number> {\n if (this.settings.id) {\n const json = this.localStorage?.getItem(this.settings.id);\n const suggestions: Array<string | number> = json ? JSON.parse(json) : [];\n if (!Array.isArray(suggestions)) {\n return [];\n }\n return suggestions;\n }\n return [];\n }\n\n protected saveSuggestions(...suggestions: Array<string | number>): void {\n if (this.settings.id) {\n this.localStorage?.setItem(\n this.settings.id,\n JSON.stringify([\n ...suggestions,\n ...this.loadSuggestions(),\n ].filter(uniqueSuggestions)),\n );\n }\n }\n\n protected override async render(): Promise<void> {\n if (this.settings.files && this.#hasReadPermissions === undefined) {\n // dnt-shim-ignore\n const status = await (globalThis as any).Deno?.permissions.request({\n name: \"read\",\n });\n // disable path completion if read permissions are denied.\n this.#hasReadPermissions = !status || status.state === \"granted\";\n }\n if (this.#isFileModeEnabled()) {\n await this.#expandInputValue(this.inputValue);\n }\n await this.match();\n return super.render();\n }\n\n protected async match(): Promise<void> {\n this.suggestions = await this.getSuggestions();\n this.suggestionsIndex = Math.max(\n this.getCurrentInputValue().trim().length === 0 ? -1 : 0,\n Math.min(this.suggestions.length - 1, this.suggestionsIndex),\n );\n this.suggestionsOffset = Math.max(\n 0,\n Math.min(\n this.suggestions.length - this.getListHeight(),\n this.suggestionsOffset,\n ),\n );\n }\n\n protected override input(): string {\n return super.input() + dim(this.getSuggestion());\n }\n\n protected getSuggestion(): string {\n return this.suggestions[this.suggestionsIndex]?.toString()\n .substr(\n this.getCurrentInputValue().length,\n ) ?? \"\";\n }\n\n protected async getUserSuggestions(\n input: string,\n ): Promise<Array<string | number>> {\n return typeof this.settings.suggestions === \"function\"\n ? await this.settings.suggestions(input)\n : this.settings.suggestions ?? [];\n }\n\n #isFileModeEnabled(): boolean {\n return !!this.settings.files && this.#hasReadPermissions === true;\n }\n\n protected async getFileSuggestions(\n input: string,\n ): Promise<Array<string | number>> {\n if (!this.#isFileModeEnabled()) {\n return [];\n }\n\n const path = await stat(input)\n .then((file) => file.isDirectory ? input : dirname(input))\n .catch(() => dirname(input));\n\n try {\n return await listDir(path, this.settings.files);\n } catch (error) {\n if (\n error instanceof Deno.errors.NotFound ||\n error instanceof Deno.errors.PermissionDenied\n ) {\n this.setErrorMessage(error.message);\n return [];\n }\n throw error;\n }\n }\n\n protected async getSuggestions(): Promise<Array<string | number>> {\n const input = this.getCurrentInputValue();\n const suggestions = [\n ...this.loadSuggestions(),\n ...await this.getUserSuggestions(input),\n ...await this.getFileSuggestions(input),\n ].filter(uniqueSuggestions);\n\n if (!input.length) {\n return suggestions;\n }\n\n return suggestions\n .filter((value: string | number) =>\n stripAnsiCode(value.toString())\n .toLowerCase()\n .startsWith(input.toLowerCase())\n )\n .sort((a: string | number, b: string | number) =>\n levenshteinDistance((a || a).toString(), input) -\n levenshteinDistance((b || b).toString(), input)\n );\n }\n\n protected override body(): string | Promise<string> {\n return this.getList() + this.getInfo();\n }\n\n protected getInfo(): string {\n if (!this.settings.info) {\n return \"\";\n }\n const selected: number = this.suggestionsIndex + 1;\n const matched: number = this.suggestions.length;\n const actions: Array<[string, Array<string>]> = [];\n\n if (this.suggestions.length) {\n if (this.settings.list) {\n actions.push(\n [\"Next\", getFiguresByKeys(this.settings.keys?.next ?? [])],\n [\"Previous\", getFiguresByKeys(this.settings.keys?.previous ?? [])],\n [\"Next Page\", getFiguresByKeys(this.settings.keys?.nextPage ?? [])],\n [\n \"Previous Page\",\n getFiguresByKeys(this.settings.keys?.previousPage ?? []),\n ],\n );\n } else {\n actions.push(\n [\"Next\", getFiguresByKeys(this.settings.keys?.next ?? [])],\n [\"Previous\", getFiguresByKeys(this.settings.keys?.previous ?? [])],\n );\n }\n actions.push(\n [\"Complete\", getFiguresByKeys(this.settings.keys?.complete ?? [])],\n );\n }\n actions.push(\n [\"Submit\", getFiguresByKeys(this.settings.keys?.submit ?? [])],\n );\n\n let info = this.settings.indent;\n if (this.suggestions.length) {\n info += brightBlue(Figures.INFO) + bold(` ${selected}/${matched} `);\n }\n info += actions\n .map((cur) => `${cur[0]}: ${bold(cur[1].join(\" \"))}`)\n .join(\", \");\n\n return info;\n }\n\n protected getList(): string {\n if (!this.suggestions.length || !this.settings.list) {\n return \"\";\n }\n const list: Array<string> = [];\n const height: number = this.getListHeight();\n for (\n let i = this.suggestionsOffset;\n i < this.suggestionsOffset + height;\n i++\n ) {\n list.push(\n this.getListItem(\n this.suggestions[i],\n this.suggestionsIndex === i,\n ),\n );\n }\n if (list.length && this.settings.info) {\n list.push(\"\");\n }\n return list.join(\"\\n\");\n }\n\n /**\n * Render option.\n * @param value Option.\n * @param isSelected Set to true if option is selected.\n */\n protected getListItem(\n value: string | number,\n isSelected?: boolean,\n ): string {\n let line = this.settings.indent ?? \"\";\n line += isSelected ? `${this.settings.listPointer} ` : \" \";\n if (isSelected) {\n line += underline(this.highlight(value));\n } else {\n line += this.highlight(value);\n }\n return line;\n }\n\n /** Get suggestions row height. */\n protected getListHeight(\n suggestions: Array<string | number> = this.suggestions,\n ): number {\n return Math.min(\n suggestions.length,\n this.settings.maxRows || suggestions.length,\n );\n }\n\n /**\n * Handle user input event.\n * @param event Key event.\n */\n protected override async handleEvent(event: KeyCode): Promise<void> {\n switch (true) {\n case this.isKey(this.settings.keys, \"next\", event):\n if (this.settings.list) {\n this.selectPreviousSuggestion();\n } else {\n this.selectNextSuggestion();\n }\n break;\n case this.isKey(this.settings.keys, \"previous\", event):\n if (this.settings.list) {\n this.selectNextSuggestion();\n } else {\n this.selectPreviousSuggestion();\n }\n break;\n case this.isKey(this.settings.keys, \"nextPage\", event):\n if (this.settings.list) {\n this.selectPreviousSuggestionsPage();\n } else {\n this.selectNextSuggestionsPage();\n }\n break;\n case this.isKey(this.settings.keys, \"previousPage\", event):\n if (this.settings.list) {\n this.selectNextSuggestionsPage();\n } else {\n this.selectPreviousSuggestionsPage();\n }\n break;\n case this.isKey(this.settings.keys, \"complete\", event):\n await this.#completeValue();\n break;\n case this.isKey(this.settings.keys, \"moveCursorRight\", event):\n if (this.inputIndex < this.inputValue.length) {\n this.moveCursorRight();\n } else {\n await this.#completeValue();\n }\n break;\n default:\n await super.handleEvent(event);\n }\n }\n\n /** Delete char right. */\n protected override deleteCharRight(): void {\n if (this.inputIndex < this.inputValue.length) {\n super.deleteCharRight();\n if (!this.getCurrentInputValue().length) {\n this.suggestionsIndex = -1;\n this.suggestionsOffset = 0;\n }\n }\n }\n\n async #completeValue() {\n const inputValue = await this.complete();\n this.setInputValue(inputValue);\n }\n\n private setInputValue(inputValue: string): void {\n this.inputValue = inputValue;\n this.inputIndex = this.inputValue.length;\n this.suggestionsIndex = 0;\n this.suggestionsOffset = 0;\n }\n\n protected async complete(): Promise<string> {\n let input: string = this.getCurrentInputValue();\n const suggestion: string | undefined = this\n .suggestions[this.suggestionsIndex]?.toString();\n\n if (this.settings.complete) {\n input = await this.settings.complete(input, suggestion);\n } else if (\n this.#isFileModeEnabled() &&\n input.at(-1) !== sep &&\n await isDirectory(input) &&\n (\n this.getCurrentInputValue().at(-1) !== \".\" ||\n this.getCurrentInputValue().endsWith(\"..\")\n )\n ) {\n input += sep;\n } else if (suggestion) {\n input = suggestion;\n }\n\n return this.#isFileModeEnabled() ? normalize(input) : input;\n }\n\n /** Select previous suggestion. */\n protected selectPreviousSuggestion(): void {\n if (this.suggestions.length) {\n if (this.suggestionsIndex > -1) {\n this.suggestionsIndex--;\n if (this.suggestionsIndex < this.suggestionsOffset) {\n this.suggestionsOffset--;\n }\n }\n }\n }\n\n /** Select next suggestion. */\n protected selectNextSuggestion(): void {\n if (this.suggestions.length) {\n if (this.suggestionsIndex < this.suggestions.length - 1) {\n this.suggestionsIndex++;\n if (\n this.suggestionsIndex >=\n this.suggestionsOffset + this.getListHeight()\n ) {\n this.suggestionsOffset++;\n }\n }\n }\n }\n\n /** Select previous suggestions page. */\n protected selectPreviousSuggestionsPage(): void {\n if (this.suggestions.length) {\n const height: number = this.getListHeight();\n if (this.suggestionsOffset >= height) {\n this.suggestionsIndex -= height;\n this.suggestionsOffset -= height;\n } else if (this.suggestionsOffset > 0) {\n this.suggestionsIndex -= this.suggestionsOffset;\n this.suggestionsOffset = 0;\n }\n }\n }\n\n /** Select next suggestions page. */\n protected selectNextSuggestionsPage(): void {\n if (this.suggestions.length) {\n const height: number = this.getListHeight();\n if (this.suggestionsOffset + height + height < this.suggestions.length) {\n this.suggestionsIndex += height;\n this.suggestionsOffset += height;\n } else if (this.suggestionsOffset + height < this.suggestions.length) {\n const offset = this.suggestions.length - height;\n this.suggestionsIndex += offset - this.suggestionsOffset;\n this.suggestionsOffset = offset;\n }\n }\n }\n\n async #expandInputValue(path: string): Promise<void> {\n if (!path.startsWith(\"~\")) {\n return;\n }\n const envVar = getHomeDirEnvVar();\n const hasEnvPermissions = await this.#hasEnvPermissions(envVar);\n\n if (!hasEnvPermissions) {\n return;\n }\n const homeDir = getHomeDir();\n\n if (homeDir) {\n path = path.replace(\"~\", homeDir);\n this.setInputValue(path);\n }\n }\n\n async #hasEnvPermissions(variable: string): Promise<boolean> {\n if (this.#envPermissions[variable]) {\n return this.#envPermissions[variable];\n }\n const desc: Deno.PermissionDescriptor = {\n name: \"env\",\n variable,\n };\n const currentStatus = await Deno.permissions.query(desc);\n this.#envPermissions[variable] = currentStatus.state === \"granted\";\n\n if (!this.#envPermissions[variable]) {\n this.clear();\n const newStatus = await Deno.permissions.request(desc);\n this.#envPermissions[variable] = newStatus.state === \"granted\";\n }\n\n return this.#envPermissions[variable];\n }\n}\n\nfunction uniqueSuggestions(\n value: unknown,\n index: number,\n self: Array<unknown>,\n) {\n return typeof value !== \"undefined\" && value !== \"\" &&\n self.indexOf(value) === index;\n}\n\nasync function listDir(\n path: string,\n mode?: boolean | RegExp,\n): Promise<Array<string>> {\n const fileNames: string[] = [];\n\n for (const file of await readDir(path)) {\n if (\n mode === true && (file.name.startsWith(\".\") || file.name.endsWith(\"~\"))\n ) {\n continue;\n }\n const filePath = join(path, file.name);\n\n if (mode instanceof RegExp && !mode.test(filePath)) {\n continue;\n }\n fileNames.push(filePath);\n }\n\n return fileNames.sort(function (a, b) {\n return a.toLowerCase().localeCompare(b.toLowerCase());\n });\n}\n\nfunction getHomeDirEnvVar() {\n return Deno.build.os === \"windows\" ? \"USERPROFILE\" : \"HOME\";\n}\n\nfunction getHomeDir(): string | undefined {\n return Deno.env.get(getHomeDirEnvVar());\n}\n","import { GenericPrompt } from \"./_generic_prompt.js\";\nimport {\n GenericSuggestions,\n type GenericSuggestionsKeys,\n type GenericSuggestionsOptions,\n type GenericSuggestionsSettings,\n} from \"./_generic_suggestions.js\";\nimport { dim } from \"@jsr/std__fmt/colors\";\n\ntype UnsupportedOptions =\n | \"files\"\n | \"complete\"\n | \"suggestions\"\n | \"list\"\n | \"info\";\n\n/** Confirm prompt options. */\nexport interface ConfirmOptions\n extends Omit<GenericSuggestionsOptions<boolean, string>, UnsupportedOptions> {\n /** Keymap to assign key names to prompt actions. */\n keys?: ConfirmKeys;\n /** Change active label. Default is `Yes`. */\n active?: string;\n /** Change inactive label. Default is `No`. */\n inactive?: string;\n}\n\n/** Confirm prompt settings. */\ninterface ConfirmSettings extends GenericSuggestionsSettings<boolean, string> {\n active: string;\n inactive: string;\n keys?: ConfirmKeys;\n}\n\n/** Confirm prompt keymap. */\nexport type ConfirmKeys = GenericSuggestionsKeys;\n\n/**\n * Confirm prompt representation.\n *\n * ```ts\n * import { Confirm } from \"./mod.ts\";\n *\n * const confirmed: boolean = await Confirm.prompt(\"Please confirm\");\n * ```\n */\nexport class Confirm extends GenericSuggestions<boolean, string> {\n protected readonly settings: ConfirmSettings;\n\n /** Execute the prompt with provided options. */\n public static prompt(\n options: string | ConfirmOptions,\n ): Promise<boolean> {\n return new this(options).prompt();\n }\n\n /**\n * Inject prompt value. If called, the prompt doesn't prompt for an input and\n * returns immediately the injected value. Can be used for unit tests or pre\n * selections.\n *\n * @param value Input value.\n */\n public static override inject(value: string): void {\n GenericPrompt.inject(value);\n }\n\n constructor(options: string | ConfirmOptions) {\n super();\n if (typeof options === \"string\") {\n options = { message: options };\n }\n this.settings = this.getDefaultSettings(options);\n }\n\n public override getDefaultSettings(options: ConfirmOptions): ConfirmSettings {\n return {\n ...super.getDefaultSettings(options),\n active: options.active || \"Yes\",\n inactive: options.inactive || \"No\",\n files: false,\n complete: undefined,\n suggestions: [\n options.active || \"Yes\",\n options.inactive || \"No\",\n ],\n list: false,\n info: false,\n };\n }\n\n protected override defaults(): string {\n let defaultMessage = \"\";\n\n if (this.settings.default === true) {\n defaultMessage += this.settings.active[0].toUpperCase() + \"/\" +\n this.settings.inactive[0].toLowerCase();\n } else if (this.settings.default === false) {\n defaultMessage += this.settings.active[0].toLowerCase() + \"/\" +\n this.settings.inactive[0].toUpperCase();\n } else {\n defaultMessage += this.settings.active[0].toLowerCase() + \"/\" +\n this.settings.inactive[0].toLowerCase();\n }\n\n return defaultMessage ? dim(` (${defaultMessage})`) : \"\";\n }\n\n protected override success(value: boolean): string | undefined {\n this.saveSuggestions(this.format(value));\n return super.success(value);\n }\n\n /** Get input input. */\n protected getValue(): string {\n return this.inputValue;\n }\n\n /**\n * Validate input value.\n * @param value User input value.\n * @return True on success, false or error message on error.\n */\n protected validate(value: string): boolean | string {\n return typeof value === \"string\" &&\n [\n this.settings.active[0].toLowerCase(),\n this.settings.active.toLowerCase(),\n this.settings.inactive[0].toLowerCase(),\n this.settings.inactive.toLowerCase(),\n ].indexOf(value.toLowerCase()) !== -1;\n }\n\n /**\n * Map input value to output value.\n * @param value Input value.\n * @return Output value.\n */\n protected transform(value: string): boolean | undefined {\n switch (value.toLowerCase()) {\n case this.settings.active[0].toLowerCase():\n case this.settings.active.toLowerCase():\n return true;\n case this.settings.inactive[0].toLowerCase():\n case this.settings.inactive.toLowerCase():\n return false;\n }\n return;\n }\n\n /**\n * Format output value.\n * @param value Output value.\n */\n protected format(value: boolean): string {\n return value ? this.settings.active : this.settings.inactive;\n }\n}\n","import { GenericPrompt } from \"./_generic_prompt.js\";\nimport {\n GenericSuggestions,\n type GenericSuggestionsKeys,\n type GenericSuggestionsOptions,\n type GenericSuggestionsSettings,\n} from \"./_generic_suggestions.js\";\nimport { normalize } from \"@jsr/std__path\";\n\n/** Input prompt options. */\nexport interface InputOptions\n extends GenericSuggestionsOptions<string, string> {\n /** Keymap to assign key names to prompt actions. */\n keys?: InputKeys;\n /** Set minimum allowed length of input value. */\n minLength?: number;\n /** Set maximum allowed length of input value. */\n maxLength?: number;\n}\n\n/** Input prompt settings. */\ninterface InputSettings extends GenericSuggestionsSettings<string, string> {\n minLength: number;\n maxLength: number;\n keys?: InputKeys;\n}\n\n/** Input prompt keymap. */\nexport type InputKeys = GenericSuggestionsKeys;\n\n/**\n * Input prompt representation.\n *\n * ```ts\n * import { Input } from \"./mod.ts\";\n *\n * const confirmed: string = await Input.prompt(\"Enter your name\");\n * ```\n */\nexport class Input extends GenericSuggestions<string, string> {\n protected readonly settings: InputSettings;\n\n /** Execute the prompt with provided options. */\n public static prompt(options: string | InputOptions): Promise<string> {\n return new this(options).prompt();\n }\n\n /**\n * Inject prompt value. If called, the prompt doesn't prompt for an input and\n * returns immediately the injected value. Can be used for unit tests or pre\n * selections.\n *\n * @param value Input value.\n */\n public static override inject(value: string): void {\n GenericPrompt.inject(value);\n }\n\n constructor(options: string | InputOptions) {\n super();\n if (typeof options === \"string\") {\n options = { message: options };\n }\n this.settings = this.getDefaultSettings(options);\n }\n\n public override getDefaultSettings(options: InputOptions): InputSettings {\n return {\n ...super.getDefaultSettings(options),\n minLength: options.minLength ?? 0,\n maxLength: options.maxLength ?? Infinity,\n };\n }\n\n protected override success(value: string): string | undefined {\n this.saveSuggestions(value);\n return super.success(value);\n }\n\n /** Get input value. */\n protected getValue(): string {\n return this.settings.files && this.inputValue\n ? normalize(this.inputValue)\n : this.inputValue;\n }\n\n /**\n * Validate input value.\n * @param value User input value.\n * @return True on success, false or error message on error.\n */\n protected validate(value: string): boolean | string {\n if (typeof value !== \"string\") {\n return false;\n }\n if (value.length < this.settings.minLength) {\n return `Value must be longer than ${this.settings.minLength} but has a length of ${value.length}.`;\n }\n if (value.length > this.settings.maxLength) {\n return `Value can't be longer than ${this.settings.maxLength} but has a length of ${value.length}.`;\n }\n return true;\n }\n\n /**\n * Map input value to output value.\n * @param value Input value.\n * @return Output value.\n */\n protected transform(value: string): string | undefined {\n return value.trim();\n }\n\n /**\n * Format output value.\n * @param value Output value.\n */\n protected format(value: string): string {\n return value;\n }\n}\n","import type { WidenType } from \"./_utils.ts\";\nimport { brightBlue, underline } from \"@jsr/std__fmt/colors\";\nimport {\n GenericList,\n type GenericListKeys,\n type GenericListOption,\n type GenericListOptionGroup,\n type GenericListOptionGroupSettings,\n type GenericListOptions,\n type GenericListOptionSettings,\n type GenericListSeparatorOption,\n type GenericListSettings,\n isOption,\n isOptionGroup,\n} from \"./_generic_list.js\";\nimport { GenericPrompt } from \"./_generic_prompt.js\";\nimport { getFiguresByKeys } from \"./_figures.js\";\nimport { equal } from \"@jsr/std__assert/equal\";\n\n/** Select prompt options. */\nexport interface SelectOptions<TValue>\n extends GenericListOptions<TValue, TValue, TValue> {\n /** Keymap to assign key names to prompt actions. */\n keys?: SelectKeys;\n /** An array of child options. */\n options: Array<\n // | Extract<TValue, string | number>\n | Extract<WidenType<TValue>, string | number>\n | SelectOption<TValue>\n | SelectOptionGroup<TValue>\n | GenericListSeparatorOption\n >;\n}\n\n/** Select prompt settings. */\nexport interface SelectSettings<TValue> extends\n GenericListSettings<\n TValue,\n TValue,\n TValue,\n SelectOptionSettings<TValue>,\n SelectOptionGroupSettings<TValue>\n > {\n keys: SelectKeys;\n}\n\n/** Select option options. */\nexport type SelectOption<TValue> = GenericListOption<TValue>;\n\n/** Select option group options. */\nexport type SelectOptionGroup<TValue> = GenericListOptionGroup<\n TValue,\n GenericListOption<TValue>\n>;\n\n/** Select option settings. */\nexport type SelectOptionSettings<TValue> = GenericListOptionSettings<TValue>;\n\n/** Select option group settings. */\nexport type SelectOptionGroupSettings<TValue> = GenericListOptionGroupSettings<\n TValue,\n SelectOptionSettings<TValue>\n>;\n\n/** Select prompt keymap. */\nexport type SelectKeys = GenericListKeys;\n\n/**\n * Select prompt representation.\n *\n * Simple prompt:\n *\n * ```ts\n * import { Select } from \"./mod.ts\";\n *\n * const color: string = await Select.prompt({\n * message: \"Pick a color\",\n * options: [\"red\", \"green\", \"blue\"],\n * });\n * ```\n *\n * Mixed option types:\n *\n * ```ts\n * import { Select } from \"./mod.ts\";\n *\n * const value: string | number = await Select.prompt<string | number>({\n * message: \"Pick a color\",\n * options: [1, 2, \"3\", \"4\"],\n * });\n * ```\n *\n * None primitive option types:\n *\n * ```ts\n * import { Select } from \"./mod.ts\";\n *\n * const date: Date = await Select.prompt({\n * message: \"Pick a date\",\n * options: [\n * {\n * name: \"Date 1\",\n * value: new Date(100000),\n * },\n * {\n * name: \"Date 2\",\n * value: new Date(200000),\n * },\n * {\n * name: \"Date 3\",\n * value: new Date(300000),\n * },\n * ],\n * });\n * ```\n *\n * Grouped options:\n *\n * ```ts\n * import { Select } from \"./mod.ts\";\n *\n * const value = await Select.prompt({\n * message: \"Select a value\",\n * options: [{\n * name: \"Group 1\",\n * options: [\"foo\", \"bar\", \"baz\"],\n * }, {\n * name: \"Group 2\",\n * options: [\"beep\", \"boop\"],\n * }],\n * });\n * ```\n */\nexport class Select<TValue> extends GenericList<\n TValue,\n TValue,\n TValue,\n SelectOptionSettings<TValue>,\n SelectOptionGroupSettings<TValue>\n> {\n protected readonly settings: SelectSettings<TValue>;\n protected options: Array<\n SelectOptionSettings<TValue> | SelectOptionGroupSettings<TValue>\n >;\n protected listIndex: number;\n protected listOffset: number;\n\n /** Execute the prompt with provided options. */\n public static prompt<TValue>(\n options: SelectOptions<TValue>,\n ): Promise<WidenType<TValue>> {\n return new this(options).prompt() as Promise<WidenType<TValue>>;\n }\n\n /**\n * Inject prompt value. If called, the prompt doesn't prompt for an input and\n * returns immediately the injected value. Can be used for unit tests or pre\n * selections.\n *\n * @param value Input value.\n */\n public static override inject<TValue>(value: TValue): void {\n GenericPrompt.inject(value);\n }\n\n constructor(options: SelectOptions<TValue>) {\n super();\n this.settings = this.getDefaultSettings(options);\n this.options = this.settings.options.slice();\n this.listIndex = this.getListIndex(this.settings.default);\n this.listOffset = this.getPageOffset(this.listIndex);\n }\n\n public override getDefaultSettings(\n options: SelectOptions<TValue>,\n ): SelectSettings<TValue> {\n return {\n ...super.getDefaultSettings(options),\n options: this.mapOptions(options, options.options),\n };\n }\n\n /** Map string option values to options and set option defaults. */\n protected mapOptions(\n promptOptions: SelectOptions<TValue>,\n options: Array<\n | Extract<TValue, string | number>\n | Extract<WidenType<TValue>, string | number>\n | SelectOption<TValue>\n | SelectOptionGroup<TValue>\n | GenericListSeparatorOption\n >,\n ): Array<SelectOptionSettings<TValue> | SelectOptionGroupSettings<TValue>> {\n return options.map((option) =>\n isSelectOptionGroup(option)\n ? this.mapOptionGroup(promptOptions, option)\n : typeof option === \"string\" || typeof option === \"number\"\n ? this.mapOption(\n promptOptions,\n { value: option as TValue },\n )\n : this.mapOption(promptOptions, option)\n );\n }\n\n protected override input(): string {\n return underline(brightBlue(this.inputValue));\n }\n\n protected override async submit(): Promise<void> {\n if (\n this.isBackButton(this.selectedOption) ||\n isOptionGroup(this.selectedOption)\n ) {\n const info = isOptionGroup(this.selectedOption)\n ? ` To select a group use ${\n getFiguresByKeys(this.settings.keys.open ?? []).join(\", \")\n }.`\n : \"\";\n this.setErrorMessage(`No option selected.${info}`);\n return;\n }\n\n await super.submit();\n }\n\n /** Get value of selected option. */\n protected getValue(): TValue {\n const option = this.options[this.listIndex];\n assertIsOption(option);\n return option.value;\n }\n\n /**\n * Validate input value.\n * @param value User input value.\n * @return True on success, false or error message on error.\n */\n protected validate(value: TValue): boolean | string {\n return this.options.findIndex((\n option: SelectOptionSettings<TValue> | SelectOptionGroupSettings<TValue>,\n ) => isOption(option) && equal(option.value, value)) !== -1;\n }\n\n /**\n * Map input value to output value.\n * @param value Input value.\n * @return Output value.\n */\n protected transform(value: TValue): TValue {\n return value;\n }\n\n /**\n * Format output value.\n * @param value Output value.\n */\n protected format(value: TValue): string {\n return this.settings.format?.(value) ??\n this.getOptionByValue(value)?.name ?? String(value);\n }\n}\n\nfunction assertIsOption<\n TValue,\n TOption extends GenericListOption<TValue>,\n>(\n option: TOption | GenericListOptionGroup<TValue, GenericListOption<TValue>>,\n): asserts option is TOption {\n if (!isOption(option)) {\n throw new Error(\"Expected an option but got an option group.\");\n }\n}\n\nexport function isSelectOptionGroup(\n option: unknown,\n // deno-lint-ignore no-explicit-any\n): option is SelectOptionGroup<any> {\n return isOptionGroup(option);\n}\n","import { Command } from \"@cliffy/command\";\nimport { Input } from \"@cliffy/prompt\";\nimport { TaskManager, NotInitializedError } from \"dyson-swarm\";\n\nexport async function createAction(options: any) {\n const taskManager = new TaskManager();\n\n try {\n const title = options.title ?? await Input.prompt({\n message: \"Enter task title:\",\n minLength: 1,\n });\n\n const description = options.description ?? await Input.prompt({\n message: \"Enter task description:\",\n minLength: 1,\n });\n\n const assignee = options.assignee ?? await Input.prompt({\n message: \"Enter assignee (optional):\",\n });\n\n const parent = options.parent ?? await Input.prompt({\n message: \"Enter parent task ID (optional):\",\n });\n\n const task = await taskManager.createTask({\n title,\n description,\n assignee: assignee || undefined,\n parentTaskId: parent || undefined,\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 (parent) {\n console.log(`Parent: ${parent}`);\n }\n } catch (error) {\n if (error instanceof NotInitializedError) {\n console.error(\"Error:\", error.message);\n process.exit(1);\n }\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 .allowEmpty()\n .option(\"-d, --description <description>\", \"Task description.\", { required: true })\n .allowEmpty()\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, NotInitializedError } 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 if (error instanceof NotInitializedError) {\n console.error(\"Error:\", error.message);\n process.exit(1);\n }\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, NotInitializedError } 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 if (error instanceof NotInitializedError) {\n console.error(\"Error:\", error.message);\n process.exit(1);\n }\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 { Input } from \"@cliffy/prompt\";\nimport { TaskManager, NotInitializedError } from \"dyson-swarm\";\n\nexport async function updateAction(taskId: string, options: any) {\n const taskManager = new TaskManager();\n\n const updateOptions: any = {};\n\n if (options.title !== undefined) {\n updateOptions.title = options.title;\n } else {\n const title = await Input.prompt({\n message: \"New title (optional, press Enter to skip):\",\n });\n if (title) {\n updateOptions.title = title;\n }\n }\n\n if (options.description !== undefined) {\n updateOptions.description = options.description;\n } else {\n const description = await Input.prompt({\n message: \"New description (optional, press Enter to skip):\",\n });\n if (description) {\n updateOptions.description = description;\n }\n }\n\n if (options.assignee !== undefined) {\n updateOptions.assignee = options.assignee;\n } else {\n const assignee = await Input.prompt({\n message: \"New assignee (optional, press Enter to skip):\",\n });\n if (assignee) {\n updateOptions.assignee = assignee;\n }\n }\n\n if (Object.keys(updateOptions).length === 0) {\n console.log(\"No updates specified. Task was not modified.\");\n return;\n }\n\n try {\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 if (error instanceof NotInitializedError) {\n console.error(\"Error:\", error.message);\n process.exit(1);\n }\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 { Select } from \"@cliffy/prompt\";\nimport { TaskManager, NotInitializedError } from \"dyson-swarm\";\n\nexport async function statusAction(taskId: string, status: string | undefined) {\n const taskManager = new TaskManager();\n\n const resolvedStatus = status ?? await Select.prompt({\n message: \"Select new status:\",\n options: [\n { value: \"open\", name: \"Open\" },\n { value: \"in-progress\", name: \"In Progress\" },\n { value: \"closed\", name: \"Closed\" },\n ],\n });\n\n if (![\"open\", \"in-progress\", \"closed\"].includes(resolvedStatus)) {\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, resolvedStatus 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 if (error instanceof NotInitializedError) {\n console.error(\"Error:\", error.message);\n process.exit(1);\n }\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 | undefined) => statusAction(taskId, status));\n","import { Command } from \"@cliffy/command\";\nimport { Input } from \"@cliffy/prompt\";\nimport { TaskManager, NotInitializedError } from \"dyson-swarm\";\n\nexport async function assignAction(taskId: string, assignee: string | undefined) {\n const taskManager = new TaskManager();\n\n const resolvedAssignee = assignee ?? await Input.prompt({\n message: \"Enter assignee username:\",\n minLength: 1,\n });\n\n try {\n const task = await taskManager.assignTask(taskId, resolvedAssignee);\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 if (error instanceof NotInitializedError) {\n console.error(\"Error:\", error.message);\n process.exit(1);\n }\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 | undefined) => assignAction(taskId, assignee));\n","import { Command } from \"@cliffy/command\";\nimport { TaskManager, NotInitializedError } 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 if (error instanceof NotInitializedError) {\n console.error(\"Error:\", error.message);\n process.exit(1);\n }\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 { Confirm } from \"@cliffy/prompt\";\nimport { TaskManager, NotInitializedError } from \"dyson-swarm\";\n\nexport async function deleteAction(taskId: string, options: any) {\n const taskManager = new TaskManager();\n\n const force = options.force ?? await Confirm.prompt({\n message: `Are you sure you want to delete task ${taskId}?`,\n default: false,\n });\n\n if (!force) {\n console.log(\"Deletion cancelled.\");\n return;\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 if (error instanceof NotInitializedError) {\n console.error(\"Error:\", error.message);\n process.exit(1);\n }\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","import { Command } from \"@cliffy/command\";\nimport { initialize, checkInitialization } from \"dyson-swarm\";\n\nexport async function initAction() {\n const { isInitialized, missingComponents } = await checkInitialization();\n\n if (isInitialized) {\n console.warn(\"Warning: This directory is already initialized for dyson-swarm.\");\n console.warn(\"If you want to reinitialize, remove the .swarm directory first.\");\n process.exit(1);\n }\n\n try {\n await initialize();\n console.log(\"✓ Initialized dyson-swarm in the current directory\");\n console.log(\" Created .swarm/ directory with:\");\n console.log(\" - version file (schema version 2)\");\n console.log(\" - tasks/ directory\");\n console.log(\" - statuses/ directory with status files (draft, open, in-progress, closed)\");\n console.log(\" - lockfile for concurrent access\");\n console.log(\"\\nYou can now create and manage tasks with commands like:\");\n console.log(\" swarm create -t \\\"My task\\\" -d \\\"Task description\\\"\");\n } catch (error) {\n console.error(\"Failed to initialize:\", error instanceof Error ? error.message : error);\n process.exit(1);\n }\n}\n\nexport const initCommand: any = new Command()\n .description(\"Initialize dyson-swarm in the current directory.\")\n .action(initAction);\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","n","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","createRequire","isKeyedCollection","x","prototypesEqual","a","b","pa","pb","isBasicObjectOrArray","obj","proto","ownKeys","getKeysDeep","keys","key","Temporal","stringComparablePrototypes","isPrimitive","TypedArray","compareTypedArrays","i","sameValueZero","equal","seen","compare","aKeys","unmatchedEntries","aKey","aValue","bKey","bValue","getOs","Deno","process","main","win","Figures","getOs","keyMap","getFiguresByKeys","keys","figures","key","figure","Deno","process","Buffer","readSyncNode","readSync","data","buffer","bytesRead","setRaw","mode","cbreak","Deno","process","writeSync","data","Deno","process","ansi_escapes_exports","__export","bel","clearScreen","clearTerminal","cursorBackward","cursorDown","cursorForward","cursorHide","cursorLeft","cursorMove","cursorNextLine","cursorPosition","cursorPrevLine","cursorRestore","cursorSave","cursorShow","cursorTo","cursorUp","eraseDown","eraseLine","eraseLineEnd","eraseLineStart","eraseLines","eraseScreen","eraseUp","image","link","scrollDown","scrollUp","alphabet","rAlphabet","byte","i","calcSizeBase64","originalSize","encode","buffer","o","padding","x","detach","buffer","maxSize","originalSize","b","padding","alphabet","rAlphabet","byte","i","encodeBase64","data","output","detach","calcSizeBase64","encode","ESC","CSI","OSC","SEP","bel","cursorPosition","cursorTo","x","y","cursorMove","ret","cursorUp","count","cursorDown","cursorForward","cursorBackward","cursorNextLine","cursorPrevLine","cursorLeft","cursorHide","cursorShow","cursorSave","cursorRestore","scrollUp","scrollDown","eraseScreen","eraseUp","eraseDown","eraseLine","eraseLineEnd","eraseLineStart","eraseLines","clear","i","clearScreen","clearTerminal","getOs","link","text","url","image","buffer","options","encodeBase64","encoder","decoder","getCursorPosition","reader","readSync","setRaw","writer","writeSync","data","cursorPosition","y","x","tty","factory","encoder","options","result","stack","writer","writeSync","reader","readSync","setRaw","args","update","text","getCursorPosition","methodList","ansi_escapes_exports","name","method","prev","cur","getRuntimeName","KeyMap","KeyMapShift","KeyMapCtrl","SpecialKeyMap","kUTF16SurrogateThreshold","kEscape","parse","data","index","keys","input","hasNext","next","parseNext","ch","s","escaped","key","code","modifier","cmdStart","cmd","match","KeyMap","KeyMapShift","KeyMapCtrl","SpecialKeyMap","charLengthAt","str","i","pos","getColumns","Deno","process","isTerminal","Deno","process","read","data","Deno","process","resolve","reject","buffer","i","error","GenericPrompt","_GenericPrompt","#value","#lastError","#isFirstRun","#encoder","value","options","tty","readSync","setRaw","writeSync","read","isTerminal","brightBlue","Figures","yellow","#execute","successMessage","content","lines","columns","getColumns","y","prev","next","length","stripAnsiCode","#validateValue","events","#readKey","event","bold","defaultMessage","dim","green","red","italic","message","exit","data","#readChar","parse","buffer","getRuntimeName","isTty","nread","#transformValue","validation","keys","name","keyNames","GenericInput","GenericPrompt","options","settings","message","stripAnsiCode","underline","value","color1","dim","color2","brightBlue","inputLowerCase","index","matched","event","char","GenericList","GenericInput","label","groupIcon","groupOpenIcon","options","settings","brightBlue","Figures","option","isOption","recursive","input","matches","matchOptions","flatMatchedOptions","parent","index","parentOption","selectedOption","message","bold","dim","stripAnsiCode","selected","groupActions","isOptionGroup","getFiguresByKeys","actions","cur","list","height","isSelected","line","indentLevel","yellow","val","names","value","event","char","loop","offset","searchInput","matched","children","sortByDistance","item","matchOption","levenshteinDistance","a","b","inputString","matchInput","result","checkWindows","global","os","isWindows","checkWindows","assertPath","path","assertArg","url","fromFileUrl","url","assertArg","stripTrailingSeparators","segment","isSep","end","isPosixPathSeparator","code","isPosixPathSeparator","code","isPathSeparator","isWindowsDeviceRoot","fromFileUrl","url","assertArg","path","assertArg","path","assertPath","dirname","path","fromFileUrl","assertArg","end","matchedNonSeparator","isPosixPathSeparator","stripTrailingSeparators","dirname","path","fromFileUrl","assertArg","len","rootEnd","end","matchedSlash","offset","code","isPathSeparator","j","last","isWindowsDeviceRoot","i","stripTrailingSeparators","isPosixPathSeparator","dirname","path","isWindows","assertArg","path","assertPath","normalizeString","path","allowAboveRoot","separator","isPathSeparator","res","lastSegmentLength","lastSlash","dots","code","i","lastSlashIndex","normalize","path","fromFileUrl","assertArg","isAbsolute","isPosixPathSeparator","trailingSeparator","normalizeString","join","path","paths","fromFileUrl","assertPath","joined","normalize","normalize","path","fromFileUrl","assertArg","len","rootEnd","device","isAbsolute","code","isPathSeparator","j","last","firstPart","isWindowsDeviceRoot","tail","normalizeString","join","path","paths","fromFileUrl","assertPath","needsReplace","slashCount","firstPart","isPathSeparator","firstLen","joined","normalize","join","path","paths","isWindows","normalize","path","isWindows","stat","input","Deno","statSync","stats","isDirectory","path","stat","readDir","path","Deno","array","item","fs","resolve","reject","err","files","name","sep","getOs","GenericSuggestions","GenericInput","#envPermissions","#hasReadPermissions","options","settings","brightBlue","Figures","json","suggestions","uniqueSuggestions","status","#isFileModeEnabled","#expandInputValue","dim","input","path","stat","file","dirname","listDir","error","value","stripAnsiCode","a","b","levenshteinDistance","selected","matched","actions","getFiguresByKeys","info","bold","cur","list","height","isSelected","line","underline","event","#completeValue","inputValue","suggestion","isDirectory","normalize","offset","envVar","getHomeDirEnvVar","#hasEnvPermissions","homeDir","getHomeDir","variable","desc","currentStatus","newStatus","index","self","mode","fileNames","readDir","filePath","join","Confirm","GenericSuggestions","options","value","GenericPrompt","defaultMessage","dim","Input","GenericSuggestions","options","value","GenericPrompt","normalize","Select","GenericList","options","value","GenericPrompt","promptOptions","option","isSelectOptionGroup","underline","brightBlue","isOptionGroup","info","getFiguresByKeys","assertIsOption","isOption","equal","TaskManager","NotInitializedError","createAction","options","taskManager","title","Input","description","assignee","parent","task","error","createCommand","Command","TaskManager","NotInitializedError","listAction","options","taskManager","filter","tasks","task","error","listCommand","Command","TaskManager","NotInitializedError","getAction","taskId","taskManager","task","error","getCommand","Command","_options","TaskManager","NotInitializedError","updateAction","taskId","options","taskManager","updateOptions","title","Input","description","assignee","task","error","updateCommand","Command","TaskManager","NotInitializedError","statusAction","taskId","status","taskManager","resolvedStatus","Select","task","error","statusCommand","Command","_options","TaskManager","NotInitializedError","assignAction","taskId","assignee","taskManager","resolvedAssignee","Input","task","error","assignCommand","Command","_options","TaskManager","NotInitializedError","unassignAction","taskId","taskManager","task","error","unassignCommand","Command","_options","TaskManager","NotInitializedError","deleteAction","taskId","options","taskManager","Confirm","error","deleteCommand","Command","initialize","checkInitialization","initAction","isInitialized","missingComponents","error","initCommand","Command","require","createRequire","version","Command","flatHelp","initCommand","createCommand","listCommand","getCommand","updateCommand","statusCommand","assignCommand","unassignCommand","deleteCommand"]}