jackspeak 4.2.2 → 4.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commonjs/index.d.ts.map +1 -1
- package/dist/commonjs/index.js +0 -1
- package/dist/commonjs/index.js.map +1 -1
- package/dist/commonjs/index.min.js +1 -1
- package/dist/commonjs/index.min.js.map +2 -2
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +0 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.min.js +1 -1
- package/dist/esm/index.min.js.map +2 -2
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/index.ts", "../../node_modules/@isaacs/cliui/src/ansi-regex/index.ts", "../../node_modules/@isaacs/cliui/src/strip-ansi/index.ts", "../../node_modules/@isaacs/cliui/src/eastasianwidth/index.ts", "../../node_modules/@isaacs/cliui/src/emoji-regex/index.ts", "../../node_modules/@isaacs/cliui/src/string-width/index.ts", "../../node_modules/@isaacs/cliui/src/ansi-styles/index.ts", "../../node_modules/@isaacs/cliui/src/wrap-ansi/index.ts", "../../node_modules/@isaacs/cliui/src/index.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n inspect,\n InspectOptions,\n parseArgs,\n ParseArgsConfig,\n} from 'node:util'\n\nimport { cliui } from '@isaacs/cliui/min'\nimport { basename } from 'node:path'\n\nexport type ParseArgsOptions = Exclude<\n ParseArgsConfig['options'],\n undefined\n>\nexport type ParseArgsOption = ParseArgsOptions[string]\nexport type ParseArgsDefault = Exclude<ConfigValue, number | number[]>\n\nexport type ConfigType = 'number' | 'string' | 'boolean'\n\nexport const isConfigType = (t: unknown): t is ConfigType =>\n typeof t === 'string' &&\n (t === 'string' || t === 'number' || t === 'boolean')\n\nexport type ConfigValuePrimitive = string | boolean | number\nexport type ConfigValueArray = string[] | boolean[] | number[]\nexport type ConfigValue = ConfigValuePrimitive | ConfigValueArray\n\n/**\n * Given a Jack object, get the typeof its ConfigSet\n */\nexport type Unwrap<J> = J extends Jack<infer C> ? C : never\n\n/**\n * Defines the type of value that is valid, given a config definition's\n * {@link ConfigType} and boolean multiple setting\n */\nexport type ValidValue<\n T extends ConfigType = ConfigType,\n M extends boolean = boolean,\n> =\n [T, M] extends ['number', true] ? number[]\n : [T, M] extends ['string', true] ? string[]\n : [T, M] extends ['boolean', true] ? boolean[]\n : [T, M] extends ['number', false] ? number\n : [T, M] extends ['string', false] ? string\n : [T, M] extends ['boolean', false] ? boolean\n : [T, M] extends ['string', boolean] ? string | string[]\n : [T, M] extends ['boolean', boolean] ? boolean | boolean[]\n : [T, M] extends ['number', boolean] ? number | number[]\n : [T, M] extends [ConfigType, false] ? ConfigValuePrimitive\n : [T, M] extends [ConfigType, true] ? ConfigValueArray\n : ConfigValue\n\nconst isValidValue = <T extends ConfigType, M extends boolean>(\n v: unknown,\n type: T,\n multi: M,\n): v is ValidValue<T, M> => {\n if (multi) {\n if (!Array.isArray(v)) return false\n return !v.some((v: unknown) => !isValidValue(v, type, false))\n }\n if (Array.isArray(v)) return false\n return typeof v === type\n}\n\nexport type ReadonlyArrays = readonly number[] | readonly string[]\n\n/**\n * Defines the type of validOptions that are valid, given a config definition's\n * {@link ConfigType}\n */\nexport type ValidOptions<T extends ConfigType> =\n T extends 'boolean' ? undefined\n : T extends 'string' ? readonly string[]\n : T extends 'number' ? readonly number[]\n : ReadonlyArrays\n\nconst isValidOption = <T extends ConfigType>(\n v: unknown,\n vo: readonly unknown[],\n): vo is Exclude<ValidOptions<T>, undefined> =>\n !!vo &&\n (Array.isArray(v) ? v.every(x => isValidOption(x, vo)) : vo.includes(v))\n\n/**\n * A config field definition, in its full representation.\n * This is what is passed in to addFields so `type` is required.\n */\nexport type ConfigOption<\n T extends ConfigType = ConfigType,\n M extends boolean = boolean,\n O extends undefined | ValidOptions<T> = undefined | ValidOptions<T>,\n> = {\n type: T\n short?: string\n default?: ValidValue<T, M> &\n (O extends ReadonlyArrays ?\n M extends false ?\n O[number]\n : O[number][]\n : unknown)\n description?: string\n hint?: T extends 'boolean' ? undefined : string\n validate?:\n | ((v: unknown) => v is ValidValue<T, M>)\n | ((v: unknown) => boolean)\n validOptions?: O\n delim?: M extends false ? undefined : string\n multiple?: M\n}\n\n/**\n * Determine whether an unknown object is a {@link ConfigOption} based only\n * on its `type` and `multiple` property\n */\nexport const isConfigOptionOfType = <\n T extends ConfigType,\n M extends boolean,\n>(\n o: unknown,\n type: T,\n multi: M,\n): o is ConfigOption<T, M> =>\n !!o &&\n typeof o === 'object' &&\n 'type' in o &&\n isConfigType(o.type) &&\n o.type === type &&\n 'multiple' in o &&\n !!o.multiple === multi\n\n/**\n * Determine whether an unknown object is a {@link ConfigOption} based on\n * it having all valid properties\n */\nexport const isConfigOption = <T extends ConfigType, M extends boolean>(\n o: unknown,\n type: T,\n multi: M,\n): o is ConfigOption<T, M> =>\n isConfigOptionOfType(o, type, multi) &&\n undefOrType(o.short, 'string') &&\n undefOrType(o.description, 'string') &&\n undefOrType(o.hint, 'string') &&\n undefOrType(o.validate, 'function') &&\n (o.type === 'boolean' ?\n o.validOptions === undefined\n : undefOrTypeArray(o.validOptions, o.type)) &&\n (o.default === undefined || isValidValue(o.default, type, multi))\n\n/**\n * The meta information for a config option definition, when the\n * type and multiple values can be inferred by the method being used\n */\nexport type ConfigOptionMeta<\n T extends ConfigType,\n M extends boolean,\n O extends ConfigOption<T, M> = ConfigOption<T, M>,\n> = Pick<Partial<O>, 'type'> & Omit<O, 'type'>\n\n/**\n * A set of {@link ConfigOption} objects, referenced by their longOption\n * string values.\n */\nexport type ConfigSet = {\n [longOption: string]: ConfigOption\n}\n\n/**\n * A set of {@link ConfigOptionMeta} fields, referenced by their longOption\n * string values.\n */\nexport type ConfigMetaSet<T extends ConfigType, M extends boolean> = {\n [longOption: string]: ConfigOptionMeta<T, M>\n}\n\n/**\n * Infer {@link ConfigSet} fields from a given {@link ConfigMetaSet}\n */\nexport type ConfigSetFromMetaSet<\n T extends ConfigType,\n M extends boolean,\n S extends ConfigMetaSet<T, M>,\n> = S & { [longOption in keyof S]: ConfigOption<T, M> }\n\n/**\n * The 'values' field returned by {@link Jack#parse}. If a value has\n * a default field it will be required on the object otherwise it is optional.\n */\nexport type OptionsResults<T extends ConfigSet> = {\n [K in keyof T]:\n | (T[K]['validOptions'] extends ReadonlyArrays ?\n T[K] extends ConfigOption<'string' | 'number', false> ?\n T[K]['validOptions'][number]\n : T[K] extends ConfigOption<'string' | 'number', true> ?\n T[K]['validOptions'][number][]\n : never\n : T[K] extends ConfigOption<'string', false> ? string\n : T[K] extends ConfigOption<'string', true> ? string[]\n : T[K] extends ConfigOption<'number', false> ? number\n : T[K] extends ConfigOption<'number', true> ? number[]\n : T[K] extends ConfigOption<'boolean', false> ? boolean\n : T[K] extends ConfigOption<'boolean', true> ? boolean[]\n : never)\n | (T[K]['default'] extends ConfigValue ? never : undefined)\n}\n\n/**\n * The object retured by {@link Jack#parse}\n */\nexport type Parsed<T extends ConfigSet> = {\n values: OptionsResults<T>\n positionals: string[]\n}\n\n/**\n * A row used when generating the {@link Jack#usage} string\n */\nexport interface Row {\n left?: string\n text: string\n skipLine?: boolean\n type?: string\n}\n\n/**\n * A heading for a section in the usage, created by the jack.heading()\n * method.\n *\n * First heading is always level 1, subsequent headings default to 2.\n *\n * The level of the nearest heading level sets the indentation of the\n * description that follows.\n */\nexport interface Heading extends Row {\n type: 'heading'\n text: string\n left?: ''\n skipLine?: boolean\n level: number\n pre?: boolean\n}\n\nconst isHeading = (r: { type?: string }): r is Heading =>\n r.type === 'heading'\n\n/**\n * An arbitrary blob of text describing some stuff, set by the\n * jack.description() method.\n *\n * Indentation determined by level of the nearest header.\n */\nexport interface Description extends Row {\n type: 'description'\n text: string\n left?: ''\n skipLine?: boolean\n pre?: boolean\n}\n\nconst isDescription = (r: { type?: string }): r is Description =>\n r.type === 'description'\n\n/**\n * A heading or description row used when generating the {@link Jack#usage}\n * string\n */\nexport type TextRow = Heading | Description\n\n/**\n * Either a {@link TextRow} or a reference to a {@link ConfigOption}\n */\nexport type UsageField =\n | TextRow\n | {\n type: 'config'\n name: string\n value: ConfigOption\n }\n\nconst width = Math.min(process?.stdout?.columns ?? 80, 80)\n\n// indentation spaces from heading level\nconst indent = (n: number) => (n - 1) * 2\n\nconst toEnvKey = (pref: string, key: string): string =>\n [pref, key.replace(/[^a-zA-Z0-9]+/g, ' ')]\n .join(' ')\n .trim()\n .toUpperCase()\n .replace(/ /g, '_')\n\nconst toEnvVal = (value: ConfigValue, delim: string = '\\n'): string => {\n const str =\n typeof value === 'string' ? value\n : typeof value === 'boolean' ?\n value ? '1'\n : '0'\n : typeof value === 'number' ? String(value)\n : Array.isArray(value) ?\n value.map((v: ConfigValue) => toEnvVal(v)).join(delim)\n : /* c8 ignore start */ undefined\n if (typeof str !== 'string') {\n throw new Error(\n `could not serialize value to environment: ${JSON.stringify(value)}`,\n { cause: { code: 'JACKSPEAK' } },\n )\n }\n /* c8 ignore stop */\n return str\n}\n\nconst fromEnvVal = <T extends ConfigType, M extends boolean>(\n env: string,\n type: T,\n multiple: M,\n delim: string = '\\n',\n): ValidValue<T, M> =>\n (multiple ?\n env ? env.split(delim).map(v => fromEnvVal(v, type, false))\n : []\n : type === 'string' ? env\n : type === 'boolean' ? env === '1'\n : +env.trim()) as ValidValue<T, M>\n\nconst undefOrType = (v: unknown, t: string): boolean =>\n v === undefined || typeof v === t\n\nconst undefOrTypeArray = (v: unknown, t: string): boolean =>\n v === undefined || (Array.isArray(v) && v.every(x => typeof x === t))\n\n// print the value type, for error message reporting\nconst valueType = (\n v: ConfigValue | { type: ConfigType; multiple?: boolean },\n): string =>\n typeof v === 'string' ? 'string'\n : typeof v === 'boolean' ? 'boolean'\n : typeof v === 'number' ? 'number'\n : Array.isArray(v) ?\n `${joinTypes([...new Set(v.map(v => valueType(v)))])}[]`\n : `${v.type}${v.multiple ? '[]' : ''}`\n\nconst joinTypes = (types: string[]): string =>\n types.length === 1 && typeof types[0] === 'string' ?\n types[0]\n : `(${types.join('|')})`\n\nconst validateFieldMeta = <T extends ConfigType, M extends boolean>(\n field: ConfigOptionMeta<T, M>,\n fieldMeta?: { type: T; multiple: M },\n): { type: ConfigType; multiple: boolean } => {\n if (fieldMeta) {\n if (field.type !== undefined && field.type !== fieldMeta.type) {\n throw new TypeError(`invalid type`, {\n cause: {\n found: field.type,\n wanted: [fieldMeta.type, undefined],\n },\n })\n }\n if (\n field.multiple !== undefined &&\n !!field.multiple !== fieldMeta.multiple\n ) {\n throw new TypeError(`invalid multiple`, {\n cause: {\n found: field.multiple,\n wanted: [fieldMeta.multiple, undefined],\n },\n })\n }\n return fieldMeta\n }\n\n if (!isConfigType(field.type)) {\n throw new TypeError(`invalid type`, {\n cause: {\n found: field.type,\n wanted: ['string', 'number', 'boolean'],\n },\n })\n }\n\n return {\n type: field.type,\n multiple: !!field.multiple,\n }\n}\n\nconst validateField = (\n o: ConfigOption,\n type: ConfigType,\n multiple: boolean,\n): ConfigOption => {\n const validateValidOptions = <\n T extends ConfigValue | undefined,\n V extends T extends Array<infer U> ? U : T,\n >(\n def: T | undefined,\n validOptions: readonly V[] | undefined,\n ) => {\n if (!undefOrTypeArray(validOptions, type)) {\n throw new TypeError('invalid validOptions', {\n cause: {\n found: validOptions,\n wanted: valueType({ type, multiple: true }),\n },\n })\n }\n if (def !== undefined && validOptions !== undefined) {\n const valid =\n Array.isArray(def) ?\n def.every(v => validOptions.includes(v as V))\n : validOptions.includes(def as V)\n if (!valid) {\n throw new TypeError('invalid default value not in validOptions', {\n cause: {\n found: def,\n wanted: validOptions,\n },\n })\n }\n }\n }\n\n if (\n o.default !== undefined &&\n !isValidValue(o.default, type, multiple)\n ) {\n throw new TypeError('invalid default value', {\n cause: {\n found: o.default,\n wanted: valueType({ type, multiple }),\n },\n })\n }\n\n if (\n isConfigOptionOfType(o, 'number', false) ||\n isConfigOptionOfType(o, 'number', true)\n ) {\n validateValidOptions(o.default, o.validOptions)\n } else if (\n isConfigOptionOfType(o, 'string', false) ||\n isConfigOptionOfType(o, 'string', true)\n ) {\n validateValidOptions(o.default, o.validOptions)\n } else if (\n isConfigOptionOfType(o, 'boolean', false) ||\n isConfigOptionOfType(o, 'boolean', true)\n ) {\n if (o.hint !== undefined) {\n throw new TypeError('cannot provide hint for flag')\n }\n if (o.validOptions !== undefined) {\n throw new TypeError('cannot provide validOptions for flag')\n }\n }\n\n return o\n}\n\nconst toParseArgsOptionsConfig = (\n options: ConfigSet,\n): ParseArgsOptions => {\n return Object.entries(options).reduce((acc, [longOption, o]) => {\n const p: ParseArgsOption = {\n type: 'string',\n multiple: !!o.multiple,\n ...(typeof o.short === 'string' ? { short: o.short } : undefined),\n }\n const setNoBool = () => {\n if (!longOption.startsWith('no-') && !options[`no-${longOption}`]) {\n acc[`no-${longOption}`] = {\n type: 'boolean',\n multiple: !!o.multiple,\n }\n }\n }\n const setDefault = <T>(\n def: T | undefined,\n fn: (d: T) => ParseArgsDefault,\n ) => {\n if (def !== undefined) {\n p.default = fn(def)\n }\n }\n if (isConfigOption(o, 'number', false)) {\n setDefault(o.default, String)\n } else if (isConfigOption(o, 'number', true)) {\n setDefault(o.default, d => d.map(v => String(v)))\n } else if (\n isConfigOption(o, 'string', false) ||\n isConfigOption(o, 'string', true)\n ) {\n setDefault(o.default, v => v)\n } else if (\n isConfigOption(o, 'boolean', false) ||\n isConfigOption(o, 'boolean', true)\n ) {\n p.type = 'boolean'\n setDefault(o.default, v => v)\n setNoBool()\n }\n acc[longOption] = p\n return acc\n }, {} as ParseArgsOptions)\n}\n\n/**\n * Options provided to the {@link Jack} constructor\n */\nexport interface JackOptions {\n /**\n * Whether to allow positional arguments\n *\n * @default true\n */\n allowPositionals?: boolean\n\n /**\n * Prefix to use when reading/writing the environment variables\n *\n * If not specified, environment behavior will not be available.\n */\n envPrefix?: string\n\n /**\n * Environment object to read/write. Defaults `process.env`.\n * No effect if `envPrefix` is not set.\n */\n env?: Record<string, string | undefined>\n\n /**\n * A short usage string. If not provided, will be generated from the\n * options provided, but that can of course be rather verbose if\n * there are a lot of options.\n */\n usage?: string\n\n /**\n * Stop parsing flags and opts at the first positional argument.\n * This is to support cases like `cmd [flags] <subcmd> [options]`, where\n * each subcommand may have different options. This effectively treats\n * any positional as a `--` argument. Only relevant if `allowPositionals`\n * is true.\n *\n * To do subcommands, set this option, look at the first positional, and\n * parse the remaining positionals as appropriate.\n *\n * @default false\n */\n stopAtPositional?: boolean\n\n /**\n * Conditional `stopAtPositional`. If set to a `(string)=>boolean` function,\n * will be called with each positional argument encountered. If the function\n * returns true, then parsing will stop at that point.\n */\n stopAtPositionalTest?: (arg: string) => boolean\n}\n\n/**\n * Class returned by the {@link jack} function and all configuration\n * definition methods. This is what gets chained together.\n */\nexport class Jack<C extends ConfigSet = {}> {\n #configSet: C\n #shorts: Record<string, string>\n #options: JackOptions\n #fields: UsageField[] = []\n #env: Record<string, string | undefined>\n #envPrefix?: string\n #allowPositionals: boolean\n #usage?: string\n #usageMarkdown?: string\n\n constructor(options: JackOptions = {}) {\n this.#options = options\n this.#allowPositionals = options.allowPositionals !== false\n this.#env =\n this.#options.env === undefined ? process.env : this.#options.env\n this.#envPrefix = options.envPrefix\n // We need to fib a little, because it's always the same object, but it\n // starts out as having an empty config set. Then each method that adds\n // fields returns `this as Jack<C & { ...newConfigs }>`\n this.#configSet = Object.create(null) as C\n this.#shorts = Object.create(null)\n }\n\n /**\n * Resulting definitions, suitable to be passed to Node's `util.parseArgs`,\n * but also including `description` and `short` fields, if set.\n */\n get definitions(): C {\n return this.#configSet\n }\n\n /** map of `{ <short>: <long> }` strings for each short name defined */\n get shorts() {\n return this.#shorts\n }\n\n /**\n * options passed to the {@link Jack} constructor\n */\n get jackOptions() {\n return this.#options\n }\n\n /**\n * the data used to generate {@link Jack#usage} and\n * {@link Jack#usageMarkdown} content.\n */\n get usageFields() {\n return this.#fields\n }\n\n /**\n * Set the default value (which will still be overridden by env or cli)\n * as if from a parsed config file. The optional `source` param, if\n * provided, will be included in error messages if a value is invalid or\n * unknown.\n */\n setConfigValues(values: Partial<OptionsResults<C>>, source = '') {\n try {\n this.validate(values)\n } catch (er) {\n if (source && er instanceof Error) {\n /* c8 ignore next */\n const cause = typeof er.cause === 'object' ? er.cause : {}\n er.cause = { ...cause, path: source }\n Error.captureStackTrace(er, this.setConfigValues)\n }\n throw er\n }\n for (const [field, value] of Object.entries(values)) {\n const my = this.#configSet[field]\n // already validated, just for TS's benefit\n /* c8 ignore start */\n if (!my) {\n throw new Error('unexpected field in config set: ' + field, {\n cause: {\n code: 'JACKSPEAK',\n found: field,\n },\n })\n }\n /* c8 ignore stop */\n my.default = value as ConfigValue\n }\n return this\n }\n\n /**\n * Parse a string of arguments, and return the resulting\n * `{ values, positionals }` object.\n *\n * If an {@link JackOptions#envPrefix} is set, then it will read default\n * values from the environment, and write the resulting values back\n * to the environment as well.\n *\n * Environment values always take precedence over any other value, except\n * an explicit CLI setting.\n */\n parse(args: string[] = process.argv): Parsed<C> {\n this.loadEnvDefaults()\n const p = this.parseRaw(args)\n this.applyDefaults(p)\n this.writeEnv(p)\n return p\n }\n\n loadEnvDefaults() {\n if (this.#envPrefix) {\n for (const [field, my] of Object.entries(this.#configSet)) {\n const ek = toEnvKey(this.#envPrefix, field)\n const env = this.#env[ek]\n if (env !== undefined) {\n my.default = fromEnvVal(env, my.type, !!my.multiple, my.delim)\n }\n }\n }\n }\n\n applyDefaults(p: Parsed<C>) {\n for (const [field, c] of Object.entries(this.#configSet)) {\n if (c.default !== undefined && !(field in p.values)) {\n //@ts-ignore\n p.values[field] = c.default\n }\n }\n }\n\n /**\n * Only parse the command line arguments passed in.\n * Does not strip off the `node script.js` bits, so it must be just the\n * arguments you wish to have parsed.\n * Does not read from or write to the environment, or set defaults.\n */\n parseRaw(args: string[]): Parsed<C> {\n if (args === process.argv) {\n args = args.slice(\n (process as { _eval?: string })._eval !== undefined ? 1 : 2,\n )\n }\n\n const result = parseArgs({\n args,\n options: toParseArgsOptionsConfig(this.#configSet),\n // always strict, but using our own logic\n strict: false,\n allowPositionals: this.#allowPositionals,\n tokens: true,\n })\n\n const p: Parsed<C> = {\n values: {} as OptionsResults<C>,\n positionals: [],\n }\n for (const token of result.tokens) {\n if (token.kind === 'positional') {\n p.positionals.push(token.value)\n if (\n this.#options.stopAtPositional ||\n this.#options.stopAtPositionalTest?.(token.value)\n ) {\n p.positionals.push(...args.slice(token.index + 1))\n break\n }\n } else if (token.kind === 'option') {\n let value: ConfigValue | undefined = undefined\n if (token.name.startsWith('no-')) {\n const my = this.#configSet[token.name]\n const pname = token.name.substring('no-'.length)\n const pos = this.#configSet[pname]\n if (\n pos &&\n pos.type === 'boolean' &&\n (!my ||\n (my.type === 'boolean' && !!my.multiple === !!pos.multiple))\n ) {\n value = false\n token.name = pname\n }\n }\n const my = this.#configSet[token.name]\n if (!my) {\n throw new Error(\n `Unknown option '${token.rawName}'. ` +\n `To specify a positional argument starting with a '-', ` +\n `place it at the end of the command after '--', as in ` +\n `'-- ${token.rawName}'`,\n {\n cause: {\n code: 'JACKSPEAK',\n found:\n token.rawName + (token.value ? `=${token.value}` : ''),\n },\n },\n )\n }\n if (value === undefined) {\n if (token.value === undefined) {\n if (my.type !== 'boolean') {\n throw new Error(\n `No value provided for ${token.rawName}, expected ${my.type}`,\n {\n cause: {\n code: 'JACKSPEAK',\n name: token.rawName,\n wanted: valueType(my),\n },\n },\n )\n }\n value = true\n } else {\n if (my.type === 'boolean') {\n throw new Error(\n `Flag ${token.rawName} does not take a value, received '${token.value}'`,\n { cause: { code: 'JACKSPEAK', found: token } },\n )\n }\n if (my.type === 'string') {\n value = token.value\n } else {\n value = +token.value\n if (value !== value) {\n throw new Error(\n `Invalid value '${token.value}' provided for ` +\n `'${token.rawName}' option, expected number`,\n {\n cause: {\n code: 'JACKSPEAK',\n name: token.rawName,\n found: token.value,\n wanted: 'number',\n },\n },\n )\n }\n }\n }\n }\n if (my.multiple) {\n const pv = p.values as Record<string, ConfigValue[]>\n const tn = pv[token.name] ?? []\n pv[token.name] = tn\n tn.push(value)\n } else {\n const pv = p.values as Record<string, ConfigValue>\n pv[token.name] = value\n }\n }\n }\n\n for (const [field, value] of Object.entries(p.values)) {\n const valid = this.#configSet[field]?.validate\n const validOptions = this.#configSet[field]?.validOptions\n const cause =\n validOptions && !isValidOption(value, validOptions) ?\n { name: field, found: value, validOptions }\n : valid && !valid(value) ? { name: field, found: value }\n : undefined\n if (cause) {\n throw new Error(\n `Invalid value provided for --${field}: ${JSON.stringify(value)}`,\n { cause: { ...cause, code: 'JACKSPEAK' } },\n )\n }\n }\n\n return p\n }\n\n /**\n * do not set fields as 'no-foo' if 'foo' exists and both are bools\n * just set foo.\n */\n #noNoFields(f: string, val: unknown, s: string = f) {\n if (!f.startsWith('no-') || typeof val !== 'boolean') return\n const yes = f.substring('no-'.length)\n // recurse so we get the core config key we care about.\n this.#noNoFields(yes, val, s)\n if (this.#configSet[yes]?.type === 'boolean') {\n throw new Error(\n `do not set '${s}', instead set '${yes}' as desired.`,\n { cause: { code: 'JACKSPEAK', found: s, wanted: yes } },\n )\n }\n }\n\n /**\n * Validate that any arbitrary object is a valid configuration `values`\n * object. Useful when loading config files or other sources.\n */\n validate(o: unknown): asserts o is Parsed<C>['values'] {\n if (!o || typeof o !== 'object') {\n throw new Error('Invalid config: not an object', {\n cause: { code: 'JACKSPEAK', found: o },\n })\n }\n const opts = o as Record<string, ValidValue>\n for (const field in o) {\n const value = opts[field]\n /* c8 ignore next - for TS */\n if (value === undefined) continue\n this.#noNoFields(field, value)\n const config = this.#configSet[field]\n if (!config) {\n throw new Error(`Unknown config option: ${field}`, {\n cause: { code: 'JACKSPEAK', found: field },\n })\n }\n if (!isValidValue(value, config.type, !!config.multiple)) {\n throw new Error(\n `Invalid value ${valueType(value)} for ${field}, expected ${valueType(config)}`,\n {\n cause: {\n code: 'JACKSPEAK',\n name: field,\n found: value,\n wanted: valueType(config),\n },\n },\n )\n }\n const cause =\n config.validOptions && !isValidOption(value, config.validOptions) ?\n { name: field, found: value, validOptions: config.validOptions }\n : config.validate && !config.validate(value) ?\n { name: field, found: value }\n : undefined\n if (cause) {\n throw new Error(\n `Invalid config value for ${field}: ${JSON.stringify(value)}`,\n {\n cause: { ...cause, code: 'JACKSPEAK' },\n },\n )\n }\n }\n }\n\n writeEnv(p: Parsed<C>) {\n if (!this.#env || !this.#envPrefix) return\n for (const [field, value] of Object.entries(p.values)) {\n const my = this.#configSet[field]\n this.#env[toEnvKey(this.#envPrefix, field)] = toEnvVal(\n value as ConfigValue,\n my?.delim,\n )\n }\n }\n\n /**\n * Add a heading to the usage output banner\n */\n heading(\n text: string,\n level?: 1 | 2 | 3 | 4 | 5 | 6,\n { pre = false }: { pre?: boolean } = {},\n ): Jack<C> {\n if (level === undefined) {\n level = this.#fields.some(r => isHeading(r)) ? 2 : 1\n }\n this.#fields.push({ type: 'heading', text, level, pre })\n return this\n }\n\n /**\n * Add a long-form description to the usage output at this position.\n */\n description(text: string, { pre }: { pre?: boolean } = {}): Jack<C> {\n this.#fields.push({ type: 'description', text, pre })\n return this\n }\n\n /**\n * Add one or more number fields.\n */\n num<F extends ConfigMetaSet<'number', false>>(\n fields: F,\n ): Jack<C & ConfigSetFromMetaSet<'number', false, F>> {\n return this.#addFieldsWith(fields, 'number', false)\n }\n\n /**\n * Add one or more multiple number fields.\n */\n numList<F extends ConfigMetaSet<'number', true>>(\n fields: F,\n ): Jack<C & ConfigSetFromMetaSet<'number', true, F>> {\n return this.#addFieldsWith(fields, 'number', true)\n }\n\n /**\n * Add one or more string option fields.\n */\n opt<F extends ConfigMetaSet<'string', false>>(\n fields: F,\n ): Jack<C & ConfigSetFromMetaSet<'string', false, F>> {\n return this.#addFieldsWith(fields, 'string', false)\n }\n\n /**\n * Add one or more multiple string option fields.\n */\n optList<F extends ConfigMetaSet<'string', true>>(\n fields: F,\n ): Jack<C & ConfigSetFromMetaSet<'string', true, F>> {\n return this.#addFieldsWith(fields, 'string', true)\n }\n\n /**\n * Add one or more flag fields.\n */\n flag<F extends ConfigMetaSet<'boolean', false>>(\n fields: F,\n ): Jack<C & ConfigSetFromMetaSet<'boolean', false, F>> {\n return this.#addFieldsWith(fields, 'boolean', false)\n }\n\n /**\n * Add one or more multiple flag fields.\n */\n flagList<F extends ConfigMetaSet<'boolean', true>>(\n fields: F,\n ): Jack<C & ConfigSetFromMetaSet<'boolean', true, F>> {\n return this.#addFieldsWith(fields, 'boolean', true)\n }\n\n /**\n * Generic field definition method. Similar to flag/flagList/number/etc,\n * but you must specify the `type` (and optionally `multiple` and `delim`)\n * fields on each one, or Jack won't know how to define them.\n */\n addFields<F extends ConfigSet>(fields: F): Jack<C & F> {\n return this.#addFields(this as unknown as Jack<C & F>, fields)\n }\n\n #addFieldsWith<\n T extends ConfigType,\n M extends boolean,\n F extends ConfigMetaSet<T, M>,\n O extends ConfigSetFromMetaSet<T, M, F>,\n >(fields: F, type: ConfigType, multiple: boolean): Jack<C & O> {\n return this.#addFields(this as unknown as Jack<C & O>, fields, {\n type,\n multiple,\n })\n }\n\n #addFields<\n T extends ConfigType,\n M extends boolean,\n F extends ConfigMetaSet<T, M>,\n O extends Jack,\n >(next: O, fields: F, opt?: { type: T; multiple: M }): O {\n Object.assign(\n next.#configSet,\n Object.fromEntries(\n Object.entries(fields).map(([name, field]) => {\n this.#validateName(name, field)\n const { type, multiple } = validateFieldMeta(field, opt)\n const value = { ...field, type, multiple }\n validateField(value, type, multiple)\n next.#fields.push({ type: 'config', name, value })\n return [name, value]\n }),\n ),\n )\n return next\n }\n\n #validateName(name: string, field: { short?: string }) {\n if (!/^[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?$/.test(name)) {\n throw new TypeError(\n `Invalid option name: ${name}, ` +\n `must be '-' delimited ASCII alphanumeric`,\n )\n }\n if (this.#configSet[name]) {\n throw new TypeError(`Cannot redefine option ${name}`)\n }\n if (this.#shorts[name]) {\n throw new TypeError(\n `Cannot redefine option ${name}, already ` +\n `in use for ${this.#shorts[name]}`,\n )\n }\n if (field.short) {\n if (!/^[a-zA-Z0-9]$/.test(field.short)) {\n throw new TypeError(\n `Invalid ${name} short option: ${field.short}, ` +\n 'must be 1 ASCII alphanumeric character',\n )\n }\n if (this.#shorts[field.short]) {\n throw new TypeError(\n `Invalid ${name} short option: ${field.short}, ` +\n `already in use for ${this.#shorts[field.short]}`,\n )\n }\n this.#shorts[field.short] = name\n this.#shorts[name] = name\n }\n }\n\n /**\n * Return the usage banner for the given configuration\n */\n usage(): string {\n if (this.#usage) return this.#usage\n\n let headingLevel = 1\n //@ts-ignore\n const ui = cliui({ width })\n const first = this.#fields[0]\n let start = first?.type === 'heading' ? 1 : 0\n if (first?.type === 'heading') {\n ui.div({\n padding: [0, 0, 0, 0],\n text: normalize(first.text),\n })\n }\n ui.div({ padding: [0, 0, 0, 0], text: 'Usage:' })\n if (this.#options.usage) {\n ui.div({\n text: this.#options.usage,\n padding: [0, 0, 0, 2],\n })\n } else {\n const cmd = basename(String(process.argv[1]))\n const shortFlags: string[] = []\n const shorts: string[][] = []\n const flags: string[] = []\n const opts: string[][] = []\n for (const [field, config] of Object.entries(this.#configSet)) {\n if (config.short) {\n if (config.type === 'boolean') shortFlags.push(config.short)\n else shorts.push([config.short, config.hint || field])\n } else {\n if (config.type === 'boolean') flags.push(field)\n else opts.push([field, config.hint || field])\n }\n }\n const sf = shortFlags.length ? ' -' + shortFlags.join('') : ''\n const so = shorts.map(([k, v]) => ` --${k}=<${v}>`).join('')\n const lf = flags.map(k => ` --${k}`).join('')\n const lo = opts.map(([k, v]) => ` --${k}=<${v}>`).join('')\n const usage = `${cmd}${sf}${so}${lf}${lo}`.trim()\n ui.div({\n text: usage,\n padding: [0, 0, 0, 2],\n })\n }\n\n ui.div({ padding: [0, 0, 0, 0], text: '' })\n const maybeDesc = this.#fields[start]\n if (maybeDesc && isDescription(maybeDesc)) {\n const print = normalize(maybeDesc.text, maybeDesc.pre)\n start++\n ui.div({ padding: [0, 0, 0, 0], text: print })\n ui.div({ padding: [0, 0, 0, 0], text: '' })\n }\n\n const { rows, maxWidth } = this.#usageRows(start)\n\n // every heading/description after the first gets indented by 2\n // extra spaces.\n for (const row of rows) {\n if (row.left) {\n // If the row is too long, don't wrap it\n // Bump the right-hand side down a line to make room\n const configIndent = indent(Math.max(headingLevel, 2))\n if (row.left.length > maxWidth - 3) {\n ui.div({ text: row.left, padding: [0, 0, 0, configIndent] })\n ui.div({ text: row.text, padding: [0, 0, 0, maxWidth] })\n } else {\n ui.div(\n {\n text: row.left,\n padding: [0, 1, 0, configIndent],\n width: maxWidth,\n },\n { padding: [0, 0, 0, 0], text: row.text },\n )\n }\n if (row.skipLine) {\n ui.div({ padding: [0, 0, 0, 0], text: '' })\n }\n } else {\n if (isHeading(row)) {\n const { level } = row\n headingLevel = level\n // only h1 and h2 have bottom padding\n // h3-h6 do not\n const b = level <= 2 ? 1 : 0\n ui.div({ ...row, padding: [0, 0, b, indent(level)] })\n } else {\n ui.div({ ...row, padding: [0, 0, 1, indent(headingLevel + 1)] })\n }\n }\n }\n\n return (this.#usage = ui.toString())\n }\n\n /**\n * Return the usage banner markdown for the given configuration\n */\n usageMarkdown(): string {\n if (this.#usageMarkdown) return this.#usageMarkdown\n\n const out: string[] = []\n\n let headingLevel = 1\n const first = this.#fields[0]\n let start = first?.type === 'heading' ? 1 : 0\n if (first?.type === 'heading') {\n out.push(`# ${normalizeOneLine(first.text)}`)\n }\n out.push('Usage:')\n if (this.#options.usage) {\n out.push(normalizeMarkdown(this.#options.usage, true))\n } else {\n const cmd = basename(String(process.argv[1]))\n const shortFlags: string[] = []\n const shorts: string[][] = []\n const flags: string[] = []\n const opts: string[][] = []\n for (const [field, config] of Object.entries(this.#configSet)) {\n if (config.short) {\n if (config.type === 'boolean') shortFlags.push(config.short)\n else shorts.push([config.short, config.hint || field])\n } else {\n if (config.type === 'boolean') flags.push(field)\n else opts.push([field, config.hint || field])\n }\n }\n const sf = shortFlags.length ? ' -' + shortFlags.join('') : ''\n const so = shorts.map(([k, v]) => ` --${k}=<${v}>`).join('')\n const lf = flags.map(k => ` --${k}`).join('')\n const lo = opts.map(([k, v]) => ` --${k}=<${v}>`).join('')\n const usage = `${cmd}${sf}${so}${lf}${lo}`.trim()\n out.push(normalizeMarkdown(usage, true))\n }\n\n const maybeDesc = this.#fields[start]\n if (maybeDesc && isDescription(maybeDesc)) {\n out.push(normalizeMarkdown(maybeDesc.text, maybeDesc.pre))\n start++\n }\n\n const { rows } = this.#usageRows(start)\n\n // heading level in markdown is number of # ahead of text\n for (const row of rows) {\n if (row.left) {\n out.push(\n '#'.repeat(headingLevel + 1) +\n ' ' +\n normalizeOneLine(row.left, true),\n )\n if (row.text) out.push(normalizeMarkdown(row.text))\n } else if (isHeading(row)) {\n const { level } = row\n headingLevel = level\n out.push(\n `${'#'.repeat(headingLevel)} ${normalizeOneLine(\n row.text,\n row.pre,\n )}`,\n )\n } else {\n out.push(normalizeMarkdown(row.text, !!(row as Description).pre))\n }\n }\n\n return (this.#usageMarkdown = out.join('\\n\\n') + '\\n')\n }\n\n #usageRows(start: number) {\n // turn each config type into a row, and figure out the width of the\n // left hand indentation for the option descriptions.\n const maxMax = Math.max(12, Math.min(26, Math.floor(width / 3)))\n let maxWidth = 8\n let prev: Row | TextRow | undefined = undefined\n const rows: (Row | TextRow)[] = []\n for (const field of this.#fields.slice(start)) {\n if (field.type !== 'config') {\n if (prev?.type === 'config') prev.skipLine = true\n prev = undefined\n field.text = normalize(field.text, !!field.pre)\n rows.push(field)\n continue\n }\n const { value } = field\n const desc = value.description || ''\n const mult = value.multiple ? 'Can be set multiple times' : ''\n const opts =\n value.validOptions?.length ?\n 'Valid options: ' +\n value.validOptions.map(v => JSON.stringify(v)).join(', ')\n : ''\n const dmDelim = desc.includes('\\n') ? '\\n\\n' : '\\n'\n const extra = [opts, mult].join(dmDelim).trim()\n const text = (normalize(desc) + dmDelim + extra).trim()\n const hint =\n value.hint ||\n (value.type === 'number' ? 'n'\n : value.type === 'string' ? field.name\n : undefined)\n const short =\n !value.short ? ''\n : value.type === 'boolean' ? `-${value.short} `\n : `-${value.short}<${hint}> `\n const left =\n value.type === 'boolean' ?\n `${short}--${field.name}`\n : `${short}--${field.name}=<${hint}>`\n const row: Row = { text, left, type: 'config' }\n if (text.length > width - maxMax) {\n row.skipLine = true\n }\n if (prev && left.length > maxMax) prev.skipLine = true\n prev = row\n const len = left.length + 4\n if (len > maxWidth && len < maxMax) {\n maxWidth = len\n }\n\n rows.push(row)\n }\n\n return { rows, maxWidth }\n }\n\n /**\n * Return the configuration options as a plain object\n */\n toJSON() {\n return Object.fromEntries(\n Object.entries(this.#configSet).map(([field, def]) => [\n field,\n {\n type: def.type,\n ...(def.multiple ? { multiple: true } : {}),\n ...(def.delim ? { delim: def.delim } : {}),\n ...(def.short ? { short: def.short } : {}),\n ...(def.description ?\n { description: normalize(def.description) }\n : {}),\n ...(def.validate ? { validate: def.validate } : {}),\n ...(def.validOptions ? { validOptions: def.validOptions } : {}),\n ...(def.default !== undefined ? { default: def.default } : {}),\n ...(def.hint ? { hint: def.hint } : {}),\n },\n ]),\n )\n }\n\n /**\n * Custom printer for `util.inspect`\n */\n [inspect.custom](_: number, options: InspectOptions) {\n return `Jack ${inspect(this.toJSON(), options)}`\n }\n}\n\n/**\n * Main entry point. Create and return a {@link Jack} object.\n */\nexport const jack = (options: JackOptions = {}) => new Jack(options)\n\n// Unwrap and un-indent, so we can wrap description\n// strings however makes them look nice in the code.\nconst normalize = (s: string, pre = false) => {\n if (pre)\n // prepend a ZWSP to each line so cliui doesn't strip it.\n return s\n .split('\\n')\n .map(l => `\\u200b${l}`)\n .join('\\n')\n return s\n .split(/^\\s*```\\s*$/gm)\n .map((s, i) => {\n if (i % 2 === 1) {\n if (!s.trim()) {\n return `\\`\\`\\`\\n\\`\\`\\`\\n`\n }\n // outdent the ``` blocks, but preserve whitespace otherwise.\n const split = s.split('\\n')\n // throw out the \\n at the start and end\n split.pop()\n split.shift()\n const si = split.reduce((shortest, l) => {\n /* c8 ignore next */\n const ind = l.match(/^\\s*/)?.[0] ?? ''\n if (ind.length) return Math.min(ind.length, shortest)\n else return shortest\n }, Infinity)\n /* c8 ignore next */\n const i = isFinite(si) ? si : 0\n return (\n '\\n```\\n' +\n split.map(s => `\\u200b${s.substring(i)}`).join('\\n') +\n '\\n```\\n'\n )\n }\n return (\n s\n // remove single line breaks, except for lists\n .replace(/([^\\n])\\n[ \\t]*([^\\n])/g, (_, $1, $2) =>\n !/^[-*]/.test($2) ? `${$1} ${$2}` : `${$1}\\n${$2}`,\n )\n // normalize mid-line whitespace\n .replace(/([^\\n])[ \\t]+([^\\n])/g, '$1 $2')\n // two line breaks are enough\n .replace(/\\n{3,}/g, '\\n\\n')\n // remove any spaces at the start of a line\n .replace(/\\n[ \\t]+/g, '\\n')\n .trim()\n )\n })\n .join('\\n')\n}\n\n// normalize for markdown printing, remove leading spaces on lines\nconst normalizeMarkdown = (s: string, pre: boolean = false): string => {\n const n = normalize(s, pre).replace(/\\\\/g, '\\\\\\\\')\n return pre ?\n `\\`\\`\\`\\n${n.replace(/\\u200b/g, '')}\\n\\`\\`\\``\n : n.replace(/\\n +/g, '\\n').trim()\n}\n\nconst normalizeOneLine = (s: string, pre: boolean = false) => {\n const n = normalize(s, pre)\n .replace(/[\\s\\u200b]+/g, ' ')\n .trim()\n return pre ? `\\`${n}\\`` : n\n}\n", "// TODO! cut this down? do we need the onlyFirst option?\n\nexport const ansiRegex = ({ onlyFirst = false } = {}) => {\n // Valid string terminator sequences are BEL, ESC\\, and 0x9c\n const ST = \"(?:\\\\u0007|\\\\u001B\\\\u005C|\\\\u009C)\";\n\n // OSC sequences only: ESC ] ... ST (non-greedy until the first ST)\n const osc = `(?:\\\\u001B\\\\][\\\\s\\\\S]*?${ST})`;\n\n // CSI and related: ESC/C1, optional intermediates, optional params (supports ; and :) then final byte\n const csi =\n \"[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:\\\\d{1,4}(?:[;:]\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]\";\n\n const pattern = `${osc}|${csi}`;\n\n return new RegExp(pattern, onlyFirst ? undefined : \"g\");\n};\n", "import { ansiRegex } from \"../ansi-regex/index.js\";\nconst regex = ansiRegex();\nexport const stripAnsi = (str: string) => str.replace(regex, \"\");\n", "export const eastAsianWidth = (character: string) => {\n var x = character.charCodeAt(0);\n var y = character.length == 2 ? character.charCodeAt(1) : 0;\n var codePoint = x;\n if (0xd800 <= x && x <= 0xdbff && 0xdc00 <= y && y <= 0xdfff) {\n x &= 0x3ff;\n y &= 0x3ff;\n codePoint = (x << 10) | y;\n codePoint += 0x10000;\n }\n\n if (\n 0x3000 == codePoint ||\n (0xff01 <= codePoint && codePoint <= 0xff60) ||\n (0xffe0 <= codePoint && codePoint <= 0xffe6)\n ) {\n return \"F\";\n }\n if (\n 0x20a9 == codePoint ||\n (0xff61 <= codePoint && codePoint <= 0xffbe) ||\n (0xffc2 <= codePoint && codePoint <= 0xffc7) ||\n (0xffca <= codePoint && codePoint <= 0xffcf) ||\n (0xffd2 <= codePoint && codePoint <= 0xffd7) ||\n (0xffda <= codePoint && codePoint <= 0xffdc) ||\n (0xffe8 <= codePoint && codePoint <= 0xffee)\n ) {\n return \"H\";\n }\n if (\n (0x1100 <= codePoint && codePoint <= 0x115f) ||\n (0x11a3 <= codePoint && codePoint <= 0x11a7) ||\n (0x11fa <= codePoint && codePoint <= 0x11ff) ||\n (0x2329 <= codePoint && codePoint <= 0x232a) ||\n (0x2e80 <= codePoint && codePoint <= 0x2e99) ||\n (0x2e9b <= codePoint && codePoint <= 0x2ef3) ||\n (0x2f00 <= codePoint && codePoint <= 0x2fd5) ||\n (0x2ff0 <= codePoint && codePoint <= 0x2ffb) ||\n (0x3001 <= codePoint && codePoint <= 0x303e) ||\n (0x3041 <= codePoint && codePoint <= 0x3096) ||\n (0x3099 <= codePoint && codePoint <= 0x30ff) ||\n (0x3105 <= codePoint && codePoint <= 0x312d) ||\n (0x3131 <= codePoint && codePoint <= 0x318e) ||\n (0x3190 <= codePoint && codePoint <= 0x31ba) ||\n (0x31c0 <= codePoint && codePoint <= 0x31e3) ||\n (0x31f0 <= codePoint && codePoint <= 0x321e) ||\n (0x3220 <= codePoint && codePoint <= 0x3247) ||\n (0x3250 <= codePoint && codePoint <= 0x32fe) ||\n (0x3300 <= codePoint && codePoint <= 0x4dbf) ||\n (0x4e00 <= codePoint && codePoint <= 0xa48c) ||\n (0xa490 <= codePoint && codePoint <= 0xa4c6) ||\n (0xa960 <= codePoint && codePoint <= 0xa97c) ||\n (0xac00 <= codePoint && codePoint <= 0xd7a3) ||\n (0xd7b0 <= codePoint && codePoint <= 0xd7c6) ||\n (0xd7cb <= codePoint && codePoint <= 0xd7fb) ||\n (0xf900 <= codePoint && codePoint <= 0xfaff) ||\n (0xfe10 <= codePoint && codePoint <= 0xfe19) ||\n (0xfe30 <= codePoint && codePoint <= 0xfe52) ||\n (0xfe54 <= codePoint && codePoint <= 0xfe66) ||\n (0xfe68 <= codePoint && codePoint <= 0xfe6b) ||\n (0x1b000 <= codePoint && codePoint <= 0x1b001) ||\n (0x1f200 <= codePoint && codePoint <= 0x1f202) ||\n (0x1f210 <= codePoint && codePoint <= 0x1f23a) ||\n (0x1f240 <= codePoint && codePoint <= 0x1f248) ||\n (0x1f250 <= codePoint && codePoint <= 0x1f251) ||\n (0x20000 <= codePoint && codePoint <= 0x2f73f) ||\n (0x2b740 <= codePoint && codePoint <= 0x2fffd) ||\n (0x30000 <= codePoint && codePoint <= 0x3fffd)\n ) {\n return \"W\";\n }\n if (\n (0x0020 <= codePoint && codePoint <= 0x007e) ||\n (0x00a2 <= codePoint && codePoint <= 0x00a3) ||\n (0x00a5 <= codePoint && codePoint <= 0x00a6) ||\n 0x00ac == codePoint ||\n 0x00af == codePoint ||\n (0x27e6 <= codePoint && codePoint <= 0x27ed) ||\n (0x2985 <= codePoint && codePoint <= 0x2986)\n ) {\n return \"Na\";\n }\n if (\n 0x00a1 == codePoint ||\n 0x00a4 == codePoint ||\n (0x00a7 <= codePoint && codePoint <= 0x00a8) ||\n 0x00aa == codePoint ||\n (0x00ad <= codePoint && codePoint <= 0x00ae) ||\n (0x00b0 <= codePoint && codePoint <= 0x00b4) ||\n (0x00b6 <= codePoint && codePoint <= 0x00ba) ||\n (0x00bc <= codePoint && codePoint <= 0x00bf) ||\n 0x00c6 == codePoint ||\n 0x00d0 == codePoint ||\n (0x00d7 <= codePoint && codePoint <= 0x00d8) ||\n (0x00de <= codePoint && codePoint <= 0x00e1) ||\n 0x00e6 == codePoint ||\n (0x00e8 <= codePoint && codePoint <= 0x00ea) ||\n (0x00ec <= codePoint && codePoint <= 0x00ed) ||\n 0x00f0 == codePoint ||\n (0x00f2 <= codePoint && codePoint <= 0x00f3) ||\n (0x00f7 <= codePoint && codePoint <= 0x00fa) ||\n 0x00fc == codePoint ||\n 0x00fe == codePoint ||\n 0x0101 == codePoint ||\n 0x0111 == codePoint ||\n 0x0113 == codePoint ||\n 0x011b == codePoint ||\n (0x0126 <= codePoint && codePoint <= 0x0127) ||\n 0x012b == codePoint ||\n (0x0131 <= codePoint && codePoint <= 0x0133) ||\n 0x0138 == codePoint ||\n (0x013f <= codePoint && codePoint <= 0x0142) ||\n 0x0144 == codePoint ||\n (0x0148 <= codePoint && codePoint <= 0x014b) ||\n 0x014d == codePoint ||\n (0x0152 <= codePoint && codePoint <= 0x0153) ||\n (0x0166 <= codePoint && codePoint <= 0x0167) ||\n 0x016b == codePoint ||\n 0x01ce == codePoint ||\n 0x01d0 == codePoint ||\n 0x01d2 == codePoint ||\n 0x01d4 == codePoint ||\n 0x01d6 == codePoint ||\n 0x01d8 == codePoint ||\n 0x01da == codePoint ||\n 0x01dc == codePoint ||\n 0x0251 == codePoint ||\n 0x0261 == codePoint ||\n 0x02c4 == codePoint ||\n 0x02c7 == codePoint ||\n (0x02c9 <= codePoint && codePoint <= 0x02cb) ||\n 0x02cd == codePoint ||\n 0x02d0 == codePoint ||\n (0x02d8 <= codePoint && codePoint <= 0x02db) ||\n 0x02dd == codePoint ||\n 0x02df == codePoint ||\n (0x0300 <= codePoint && codePoint <= 0x036f) ||\n (0x0391 <= codePoint && codePoint <= 0x03a1) ||\n (0x03a3 <= codePoint && codePoint <= 0x03a9) ||\n (0x03b1 <= codePoint && codePoint <= 0x03c1) ||\n (0x03c3 <= codePoint && codePoint <= 0x03c9) ||\n 0x0401 == codePoint ||\n (0x0410 <= codePoint && codePoint <= 0x044f) ||\n 0x0451 == codePoint ||\n 0x2010 == codePoint ||\n (0x2013 <= codePoint && codePoint <= 0x2016) ||\n (0x2018 <= codePoint && codePoint <= 0x2019) ||\n (0x201c <= codePoint && codePoint <= 0x201d) ||\n (0x2020 <= codePoint && codePoint <= 0x2022) ||\n (0x2024 <= codePoint && codePoint <= 0x2027) ||\n 0x2030 == codePoint ||\n (0x2032 <= codePoint && codePoint <= 0x2033) ||\n 0x2035 == codePoint ||\n 0x203b == codePoint ||\n 0x203e == codePoint ||\n 0x2074 == codePoint ||\n 0x207f == codePoint ||\n (0x2081 <= codePoint && codePoint <= 0x2084) ||\n 0x20ac == codePoint ||\n 0x2103 == codePoint ||\n 0x2105 == codePoint ||\n 0x2109 == codePoint ||\n 0x2113 == codePoint ||\n 0x2116 == codePoint ||\n (0x2121 <= codePoint && codePoint <= 0x2122) ||\n 0x2126 == codePoint ||\n 0x212b == codePoint ||\n (0x2153 <= codePoint && codePoint <= 0x2154) ||\n (0x215b <= codePoint && codePoint <= 0x215e) ||\n (0x2160 <= codePoint && codePoint <= 0x216b) ||\n (0x2170 <= codePoint && codePoint <= 0x2179) ||\n 0x2189 == codePoint ||\n (0x2190 <= codePoint && codePoint <= 0x2199) ||\n (0x21b8 <= codePoint && codePoint <= 0x21b9) ||\n 0x21d2 == codePoint ||\n 0x21d4 == codePoint ||\n 0x21e7 == codePoint ||\n 0x2200 == codePoint ||\n (0x2202 <= codePoint && codePoint <= 0x2203) ||\n (0x2207 <= codePoint && codePoint <= 0x2208) ||\n 0x220b == codePoint ||\n 0x220f == codePoint ||\n 0x2211 == codePoint ||\n 0x2215 == codePoint ||\n 0x221a == codePoint ||\n (0x221d <= codePoint && codePoint <= 0x2220) ||\n 0x2223 == codePoint ||\n 0x2225 == codePoint ||\n (0x2227 <= codePoint && codePoint <= 0x222c) ||\n 0x222e == codePoint ||\n (0x2234 <= codePoint && codePoint <= 0x2237) ||\n (0x223c <= codePoint && codePoint <= 0x223d) ||\n 0x2248 == codePoint ||\n 0x224c == codePoint ||\n 0x2252 == codePoint ||\n (0x2260 <= codePoint && codePoint <= 0x2261) ||\n (0x2264 <= codePoint && codePoint <= 0x2267) ||\n (0x226a <= codePoint && codePoint <= 0x226b) ||\n (0x226e <= codePoint && codePoint <= 0x226f) ||\n (0x2282 <= codePoint && codePoint <= 0x2283) ||\n (0x2286 <= codePoint && codePoint <= 0x2287) ||\n 0x2295 == codePoint ||\n 0x2299 == codePoint ||\n 0x22a5 == codePoint ||\n 0x22bf == codePoint ||\n 0x2312 == codePoint ||\n (0x2460 <= codePoint && codePoint <= 0x24e9) ||\n (0x24eb <= codePoint && codePoint <= 0x254b) ||\n (0x2550 <= codePoint && codePoint <= 0x2573) ||\n (0x2580 <= codePoint && codePoint <= 0x258f) ||\n (0x2592 <= codePoint && codePoint <= 0x2595) ||\n (0x25a0 <= codePoint && codePoint <= 0x25a1) ||\n (0x25a3 <= codePoint && codePoint <= 0x25a9) ||\n (0x25b2 <= codePoint && codePoint <= 0x25b3) ||\n (0x25b6 <= codePoint && codePoint <= 0x25b7) ||\n (0x25bc <= codePoint && codePoint <= 0x25bd) ||\n (0x25c0 <= codePoint && codePoint <= 0x25c1) ||\n (0x25c6 <= codePoint && codePoint <= 0x25c8) ||\n 0x25cb == codePoint ||\n (0x25ce <= codePoint && codePoint <= 0x25d1) ||\n (0x25e2 <= codePoint && codePoint <= 0x25e5) ||\n 0x25ef == codePoint ||\n (0x2605 <= codePoint && codePoint <= 0x2606) ||\n 0x2609 == codePoint ||\n (0x260e <= codePoint && codePoint <= 0x260f) ||\n (0x2614 <= codePoint && codePoint <= 0x2615) ||\n 0x261c == codePoint ||\n 0x261e == codePoint ||\n 0x2640 == codePoint ||\n 0x2642 == codePoint ||\n (0x2660 <= codePoint && codePoint <= 0x2661) ||\n (0x2663 <= codePoint && codePoint <= 0x2665) ||\n (0x2667 <= codePoint && codePoint <= 0x266a) ||\n (0x266c <= codePoint && codePoint <= 0x266d) ||\n 0x266f == codePoint ||\n (0x269e <= codePoint && codePoint <= 0x269f) ||\n (0x26be <= codePoint && codePoint <= 0x26bf) ||\n (0x26c4 <= codePoint && codePoint <= 0x26cd) ||\n (0x26cf <= codePoint && codePoint <= 0x26e1) ||\n 0x26e3 == codePoint ||\n (0x26e8 <= codePoint && codePoint <= 0x26ff) ||\n 0x273d == codePoint ||\n 0x2757 == codePoint ||\n (0x2776 <= codePoint && codePoint <= 0x277f) ||\n (0x2b55 <= codePoint && codePoint <= 0x2b59) ||\n (0x3248 <= codePoint && codePoint <= 0x324f) ||\n (0xe000 <= codePoint && codePoint <= 0xf8ff) ||\n (0xfe00 <= codePoint && codePoint <= 0xfe0f) ||\n 0xfffd == codePoint ||\n (0x1f100 <= codePoint && codePoint <= 0x1f10a) ||\n (0x1f110 <= codePoint && codePoint <= 0x1f12d) ||\n (0x1f130 <= codePoint && codePoint <= 0x1f169) ||\n (0x1f170 <= codePoint && codePoint <= 0x1f19a) ||\n (0xe0100 <= codePoint && codePoint <= 0xe01ef) ||\n (0xf0000 <= codePoint && codePoint <= 0xffffd) ||\n (0x100000 <= codePoint && codePoint <= 0x10fffd)\n ) {\n return \"A\";\n }\n\n return \"N\";\n};\n\nexport const characterLength = (character: string) => {\n var code = eastAsianWidth(character);\n if (code == \"F\" || code == \"W\" || code == \"A\") {\n return 2;\n } else {\n return 1;\n }\n};\n\n// Split a string considering surrogate-pairs.\nexport const stringToArray = (str: string) => {\n return str.match(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[^\\uD800-\\uDFFF]/g) || [];\n};\n\nexport const length = (str: string) => {\n var characters = stringToArray(str);\n var len = 0;\n for (const char of characters) {\n len = len + characterLength(char);\n }\n return len;\n};\n\nexport const slice = (text: string, start: number, end: number) => {\n const textLen = length(text);\n start = start ? start : 0;\n end = end ? end : 1;\n if (start < 0) {\n start = textLen + start;\n }\n if (end < 0) {\n end = textLen + end;\n }\n var result = \"\";\n var eawLen = 0;\n var chars = stringToArray(text);\n for (const char of chars) {\n var charLen = length(char);\n if (eawLen >= start - (charLen == 2 ? 1 : 0)) {\n if (eawLen + charLen <= end) {\n result += char;\n } else {\n break;\n }\n }\n eawLen += charLen;\n }\n return result;\n};\n", "// https://mths.be/emoji\nexport const emojiRegex = () =>\n /\\uD83C\\uDFF4\\uDB40\\uDC67\\uDB40\\uDC62(?:\\uDB40\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73|\\uDB40\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDB40\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67)\\uDB40\\uDC7F|(?:\\uD83E\\uDDD1\\uD83C\\uDFFF\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFE])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFE\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFD\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFC\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFB\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFB\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFC-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C\\uDFFB(?:\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF]))|\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFC-\\uDFFF])|[\\u2695\\u2696\\u2708]\\uFE0F|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))?|(?:\\uD83C[\\uDFFC-\\uDFFF])\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF]))|\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83D\\uDC68|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFE])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])\\uFE0F|\\u200D(?:(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83D[\\uDC66\\uDC67])|\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC)?|(?:\\uD83D\\uDC69(?:\\uD83C\\uDFFB\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|(?:\\uD83C[\\uDFFC-\\uDFFF])\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69]))|\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1)(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC69(?:\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83E\\uDDD1(?:\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|(?:\\uD83D\\uDC41\\uFE0F\\u200D\\uD83D\\uDDE8|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|\\uD83D\\uDC69(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|\\uD83D\\uDE36\\u200D\\uD83C\\uDF2B|\\uD83C\\uDFF3\\uFE0F\\u200D\\u26A7|\\uD83D\\uDC3B\\u200D\\u2744|(?:(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF])\\u200D[\\u2640\\u2642]|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|\\uD83C\\uDFF4\\u200D\\u2620|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])\\u200D[\\u2640\\u2642]|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u2600-\\u2604\\u260E\\u2611\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26B0\\u26B1\\u26C8\\u26CF\\u26D1\\u26D3\\u26E9\\u26F0\\u26F1\\u26F4\\u26F7\\u26F8\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]|\\uD83D[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3])\\uFE0F|\\uD83C\\uDFF3\\uFE0F\\u200D\\uD83C\\uDF08|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66|\\uD83D\\uDE35\\u200D\\uD83D\\uDCAB|\\uD83D\\uDE2E\\u200D\\uD83D\\uDCA8|\\uD83D\\uDC15\\u200D\\uD83E\\uDDBA|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC|\\uD83C\\uDFFB)?|\\uD83D\\uDC69(?:\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC|\\uD83C\\uDFFB)?|\\uD83C\\uDDFD\\uD83C\\uDDF0|\\uD83C\\uDDF6\\uD83C\\uDDE6|\\uD83C\\uDDF4\\uD83C\\uDDF2|\\uD83D\\uDC08\\u200D\\u2B1B|\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79)|\\uD83D\\uDC41\\uFE0F|\\uD83C\\uDFF3\\uFE0F|\\uD83C\\uDDFF(?:\\uD83C[\\uDDE6\\uDDF2\\uDDFC])|\\uD83C\\uDDFE(?:\\uD83C[\\uDDEA\\uDDF9])|\\uD83C\\uDDFC(?:\\uD83C[\\uDDEB\\uDDF8])|\\uD83C\\uDDFB(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA])|\\uD83C\\uDDFA(?:\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF])|\\uD83C\\uDDF9(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF])|\\uD83C\\uDDF8(?:\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF])|\\uD83C\\uDDF7(?:\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC])|\\uD83C\\uDDF5(?:\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE])|\\uD83C\\uDDF3(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF])|\\uD83C\\uDDF2(?:\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF])|\\uD83C\\uDDF1(?:\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE])|\\uD83C\\uDDF0(?:\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDEF(?:\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5])|\\uD83C\\uDDEE(?:\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9])|\\uD83C\\uDDED(?:\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA])|\\uD83C\\uDDEC(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE])|\\uD83C\\uDDEB(?:\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7])|\\uD83C\\uDDEA(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA])|\\uD83C\\uDDE9(?:\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF])|\\uD83C\\uDDE8(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF])|\\uD83C\\uDDE7(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDE6(?:\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF])|[#\\*0-9]\\uFE0F\\u20E3|\\u2764\\uFE0F|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDFF4|(?:[\\u270A\\u270B]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u261D\\u270C\\u270D]|\\uD83D[\\uDD74\\uDD90])(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])|[\\u270A\\u270B]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC08\\uDC15\\uDC3B\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE2E\\uDE35\\uDE36\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5]|\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD]|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF]|[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD1D\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78\\uDD7A-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCB\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6]|(?:[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u270A\\u270B\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF93\\uDFA0-\\uDFCA\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF4\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC3E\\uDC40\\uDC42-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDD7A\\uDD95\\uDD96\\uDDA4\\uDDFB-\\uDE4F\\uDE80-\\uDEC5\\uDECC\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6])|(?:[#\\*0-9\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u261D\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A1\\u26A7\\u26AA\\u26AB\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C5\\u26C8\\u26CE\\u26CF\\u26D1\\u26D3\\u26D4\\u26E9\\u26EA\\u26F0-\\u26F5\\u26F7-\\u26FA\\u26FD\\u2702\\u2705\\u2708-\\u270D\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763\\u2764\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDC04\\uDCCF\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE02\\uDE1A\\uDE2F\\uDE32-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF21\\uDF24-\\uDF93\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E-\\uDFF0\\uDFF3-\\uDFF5\\uDFF7-\\uDFFF]|\\uD83D[\\uDC00-\\uDCFD\\uDCFF-\\uDD3D\\uDD49-\\uDD4E\\uDD50-\\uDD67\\uDD6F\\uDD70\\uDD73-\\uDD7A\\uDD87\\uDD8A-\\uDD8D\\uDD90\\uDD95\\uDD96\\uDDA4\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA-\\uDE4F\\uDE80-\\uDEC5\\uDECB-\\uDED2\\uDED5-\\uDED7\\uDEE0-\\uDEE5\\uDEE9\\uDEEB\\uDEEC\\uDEF0\\uDEF3-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6])\\uFE0F|(?:[\\u261D\\u26F9\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2-\\uDFC4\\uDFC7\\uDFCA-\\uDFCC]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66-\\uDC78\\uDC7C\\uDC81-\\uDC83\\uDC85-\\uDC87\\uDC8F\\uDC91\\uDCAA\\uDD74\\uDD75\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE45-\\uDE47\\uDE4B-\\uDE4F\\uDEA3\\uDEB4-\\uDEB6\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD26\\uDD30-\\uDD39\\uDD3C-\\uDD3E\\uDD77\\uDDB5\\uDDB6\\uDDB8\\uDDB9\\uDDBB\\uDDCD-\\uDDCF\\uDDD1-\\uDDDD])/g;\n", "import { stripAnsi } from \"../strip-ansi/index.js\";\nimport { eastAsianWidth } from \"../eastasianwidth/index.js\";\nimport { emojiRegex } from \"../emoji-regex/index.js\";\n\nexport type Options = {\n ambiguousIsNarrow?: boolean;\n};\n\nexport function stringWidth(str: string, options: Options = {}) {\n if (typeof str !== \"string\" || str.length === 0) {\n return 0;\n }\n\n options = {\n ambiguousIsNarrow: true,\n ...options,\n };\n\n str = stripAnsi(str);\n\n if (str.length === 0) {\n return 0;\n }\n\n str = str.replace(emojiRegex(), \" \");\n\n const ambiguousCharacterWidth = options.ambiguousIsNarrow ? 1 : 2;\n let width = 0;\n\n for (const character of str) {\n const codePoint = character.codePointAt(0);\n\n // Ignore control characters\n if (\n !codePoint ||\n codePoint <= 0x1f ||\n (codePoint >= 0x7f && codePoint <= 0x9f)\n ) {\n continue;\n }\n\n // Ignore combining characters\n if (codePoint >= 0x300 && codePoint <= 0x36f) {\n continue;\n }\n\n const code = eastAsianWidth(character);\n switch (code) {\n case \"F\":\n case \"W\":\n width += 2;\n break;\n case \"A\":\n width += ambiguousCharacterWidth;\n break;\n default:\n width += 1;\n }\n }\n\n return width;\n}\n", "const styles = {\n modifier: {\n reset: [0, 0],\n // 21 isn't widely supported and 22 does the same thing\n bold: [1, 22],\n dim: [2, 22],\n italic: [3, 23],\n underline: [4, 24],\n overline: [53, 55],\n inverse: [7, 27],\n hidden: [8, 28],\n strikethrough: [9, 29],\n },\n color: {\n black: [30, 39],\n red: [31, 39],\n green: [32, 39],\n yellow: [33, 39],\n blue: [34, 39],\n magenta: [35, 39],\n cyan: [36, 39],\n white: [37, 39],\n\n // Bright color\n blackBright: [90, 39],\n gray: [90, 39], // Alias of `blackBright`\n grey: [90, 39], // Alias of `blackBright`\n redBright: [91, 39],\n greenBright: [92, 39],\n yellowBright: [93, 39],\n blueBright: [94, 39],\n magentaBright: [95, 39],\n cyanBright: [96, 39],\n whiteBright: [97, 39],\n },\n bgColor: {\n bgBlack: [40, 49],\n bgRed: [41, 49],\n bgGreen: [42, 49],\n bgYellow: [43, 49],\n bgBlue: [44, 49],\n bgMagenta: [45, 49],\n bgCyan: [46, 49],\n bgWhite: [47, 49],\n\n // Bright color\n bgBlackBright: [100, 49],\n bgGray: [100, 49], // Alias of `bgBlackBright`\n bgGrey: [100, 49], // Alias of `bgBlackBright`\n bgRedBright: [101, 49],\n bgGreenBright: [102, 49],\n bgYellowBright: [103, 49],\n bgBlueBright: [104, 49],\n bgMagentaBright: [105, 49],\n bgCyanBright: [106, 49],\n bgWhiteBright: [107, 49],\n },\n} as const;\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\ninterface AnsiStyles extends Record<string, unknown> {}\nclass AnsiStyles {}\n\nexport const codes = new Map<number, number>();\nconst ingest = (set: Record<string, readonly [number, number]>) =>\n Object.fromEntries(\n Object.entries(set).map(([key, [open, close]]) => {\n codes.set(open, close);\n return [\n key,\n (AnsiStyles.prototype[key] = {\n open: `\\u001B[${open}m`,\n close: `\\u001B[${close}m`,\n }),\n ];\n }),\n );\n\nexport const ansiStyles = new (class extends AnsiStyles {\n codes = codes;\n\n modifier = ingest(styles.modifier);\n\n color = {\n ...ingest(styles.color),\n close: \"\\x1B[39m\",\n ansi: (code: number) => `\\u001B[${code}m`,\n ansi256: (code: number) => `\\u001B[${38};5;${code}m`,\n ansi16m: (red: number, green: number, blue: number) =>\n `\\u001B[${38};2;${red};${green};${blue}m`,\n };\n\n bgColor = {\n ...ingest(styles.bgColor),\n close: \"\\u001B[49m\",\n ansi: (code: number) => `\\u001B[${code + 10}m`,\n ansi256: (code: number) => `\\u001B[${48};5;${code}m`,\n ansi16m: (red: number, green: number, blue: number) =>\n `\\u001B[${48};2;${red};${green};${blue}m`,\n };\n\n rgbToAnsi256(red: number, green: number, blue: number) {\n // We use the extended greyscale palette here, with the exception of\n // black and white. normal palette only has 4 greyscale shades.\n if (red === green && green === blue) {\n if (red < 8) return 16;\n if (red > 248) return 231;\n return Math.round(((red - 8) / 247) * 24) + 232;\n }\n\n return (\n 16 +\n 36 * Math.round((red / 255) * 5) +\n 6 * Math.round((green / 255) * 5) +\n Math.round((blue / 255) * 5)\n );\n }\n\n hexToRgb(hex: number): [number, number, number] {\n const matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n if (!matches) {\n return [0, 0, 0];\n }\n\n let [colorString] = matches;\n\n if (colorString.length === 3) {\n colorString = [...colorString]\n .map((character) => character + character)\n .join(\"\");\n }\n\n const integer = Number.parseInt(colorString, 16);\n\n return [\n (integer >> 16) & 0xff,\n (integer >> 8) & 0xff,\n integer & 0xff,\n ];\n }\n\n hexToAnsi256(hex: number) {\n return this.rgbToAnsi256(...this.hexToRgb(hex));\n }\n ansi256ToAnsi(code: number) {\n if (code < 8) {\n return 30 + code;\n }\n\n if (code < 16) {\n return 90 + (code - 8);\n }\n\n let red;\n let green;\n let blue;\n\n if (code >= 232) {\n red = ((code - 232) * 10 + 8) / 255;\n green = red;\n blue = red;\n } else {\n code -= 16;\n\n const remainder = code % 36;\n\n red = Math.floor(code / 36) / 5;\n green = Math.floor(remainder / 6) / 5;\n blue = (remainder % 6) / 5;\n }\n\n const value = Math.max(red, green, blue) * 2;\n\n if (value === 0) {\n return 30;\n }\n\n let result =\n 30 +\n ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n if (value === 2) {\n result += 60;\n }\n\n return result;\n }\n rgbToAnsi(red: number, green: number, blue: number) {\n return this.ansi256ToAnsi(this.rgbToAnsi256(red, green, blue));\n }\n hexToAnsi(hex: number) {\n return this.ansi256ToAnsi(this.hexToAnsi256(hex));\n }\n})();\n", "import { stringWidth } from \"../string-width/index.js\";\nimport { stripAnsi } from \"../strip-ansi/index.js\";\nimport { ansiStyles } from \"../ansi-styles/index.js\";\n\nconst ESCAPES = new Set([\"\\u001B\", \"\\u009B\"]);\n\nconst END_CODE = 39;\nconst ANSI_ESCAPE_BELL = \"\\u0007\";\nconst ANSI_CSI = \"[\";\nconst ANSI_OSC = \"]\";\nconst ANSI_SGR_TERMINATOR = \"m\";\nconst ANSI_ESCAPE_LINK = `${ANSI_OSC}8;;`;\n\nconst wrapAnsiCode = (code: number) =>\n `${ESCAPES.values().next().value}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`;\nconst wrapAnsiHyperlink = (uri: string) =>\n `${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${uri}${ANSI_ESCAPE_BELL}`;\n\n// Calculate the length of words split on ' ', ignoring\n// the extra characters added by ansi escape codes\nconst wordLengths = (str: string) =>\n str.split(\" \").map((character) => stringWidth(character));\n\n// Wrap a long word across multiple rows\n// Ansi escape codes do not count towards length\nconst wrapWord = (rows: string[], word: string, columns: number) => {\n const characters = [...word];\n\n let isInsideEscape = false;\n let isInsideLinkEscape = false;\n let visible = stringWidth(stripAnsi(String(rows[rows.length - 1])));\n\n for (const [index, character] of characters.entries()) {\n const characterLength = stringWidth(character);\n\n if (visible + characterLength <= columns) {\n rows[rows.length - 1] += character;\n } else {\n rows.push(character);\n visible = 0;\n }\n\n if (ESCAPES.has(character)) {\n isInsideEscape = true;\n isInsideLinkEscape = characters\n .slice(index + 1)\n .join(\"\")\n .startsWith(ANSI_ESCAPE_LINK);\n }\n\n if (isInsideEscape) {\n if (isInsideLinkEscape) {\n if (character === ANSI_ESCAPE_BELL) {\n isInsideEscape = false;\n isInsideLinkEscape = false;\n }\n } else if (character === ANSI_SGR_TERMINATOR) {\n isInsideEscape = false;\n }\n\n continue;\n }\n\n visible += characterLength;\n\n if (visible === columns && index < characters.length - 1) {\n rows.push(\"\");\n visible = 0;\n }\n }\n\n // It's possible that the last row we copy over is only\n // ansi escape characters, handle this edge-case\n if (!visible && String(rows[rows.length - 1]).length > 0 && rows.length > 1) {\n rows[rows.length - 2] = String(rows[rows.length - 1]) + rows.pop();\n }\n};\n\n// Trims spaces from a string ignoring invisible sequences\nconst stringVisibleTrimSpacesRight = (str: string) => {\n const words = str.split(\" \");\n let last = words.length;\n\n while (last > 0) {\n if (stringWidth(String(words[last - 1])) > 0) {\n break;\n }\n\n last--;\n }\n\n if (last === words.length) {\n return str;\n }\n\n return words.slice(0, last).join(\" \") + words.slice(last).join(\"\");\n};\n\n// The wrap-ansi module can be invoked in either 'hard' or 'soft' wrap mode\n//\n// 'hard' will never allow a string to take up more than columns characters\n//\n// 'soft' allows long words to expand past the column length\nexport type Options = { trim?: boolean; wordWrap?: boolean; hard?: boolean };\nconst exec = (str: string, columns: number, options: Options = {}) => {\n if (options.trim !== false && str.trim() === \"\") {\n return \"\";\n }\n\n let returnValue = \"\";\n let escapeCode;\n let escapeUrl;\n\n const lengths = wordLengths(str);\n let rows = [\"\"];\n\n for (const [index, word] of str.split(\" \").entries()) {\n if (options.trim !== false) {\n rows[rows.length - 1] = String(rows[rows.length - 1]).trimStart();\n }\n\n let rowLength = stringWidth(String(rows[rows.length - 1]));\n\n if (index !== 0) {\n if (\n rowLength >= columns &&\n (options.wordWrap === false || options.trim === false)\n ) {\n // If we start with a new word but the current row length equals the length of the columns, add a new row\n rows.push(\"\");\n rowLength = 0;\n }\n\n if (rowLength > 0 || options.trim === false) {\n rows[rows.length - 1] += \" \";\n rowLength++;\n }\n }\n\n // In 'hard' wrap mode, the length of a line is never allowed to extend past 'columns'\n const len = Number(lengths[index]);\n if (options.hard && len > columns) {\n const remainingColumns = columns - rowLength;\n const breaksStartingThisLine =\n 1 + Math.floor((len - remainingColumns - 1) / columns);\n const breaksStartingNextLine = Math.floor((len - 1) / columns);\n if (breaksStartingNextLine < breaksStartingThisLine) {\n rows.push(\"\");\n }\n\n wrapWord(rows, word, columns);\n continue;\n }\n\n if (rowLength + len > columns && rowLength > 0 && len > 0) {\n if (options.wordWrap === false && rowLength < columns) {\n wrapWord(rows, word, columns);\n continue;\n }\n\n rows.push(\"\");\n }\n\n if (rowLength + len > columns && options.wordWrap === false) {\n wrapWord(rows, word, columns);\n continue;\n }\n\n rows[rows.length - 1] += word;\n }\n\n if (options.trim !== false) {\n rows = rows.map((row) => stringVisibleTrimSpacesRight(row));\n }\n\n const pre = [...rows.join(\"\\n\")];\n\n for (const [index, character] of pre.entries()) {\n returnValue += character;\n\n if (ESCAPES.has(character)) {\n const { groups } = (new RegExp(\n `(?:\\\\${ANSI_CSI}(?<code>\\\\d+)m|\\\\${ANSI_ESCAPE_LINK}(?<uri>.*)${ANSI_ESCAPE_BELL})`,\n ).exec(pre.slice(index).join(\"\")) || { groups: {} }) as {\n groups: {\n code?: string;\n uri?: string;\n };\n };\n if (groups.code !== undefined) {\n const code = Number.parseFloat(groups.code);\n escapeCode = code === END_CODE ? undefined : code;\n } else if (groups.uri !== undefined) {\n escapeUrl = groups.uri.length === 0 ? undefined : groups.uri;\n }\n }\n\n const code = ansiStyles.codes.get(Number(escapeCode));\n\n if (pre[index + 1] === \"\\n\") {\n if (escapeUrl) {\n returnValue += wrapAnsiHyperlink(\"\");\n }\n\n if (escapeCode && code) {\n returnValue += wrapAnsiCode(code);\n }\n } else if (character === \"\\n\") {\n if (escapeCode && code) {\n returnValue += wrapAnsiCode(escapeCode);\n }\n\n if (escapeUrl) {\n returnValue += wrapAnsiHyperlink(escapeUrl);\n }\n }\n }\n\n return returnValue;\n};\n\n// For each newline, invoke the method separately\nexport const wrap = (str: string, columns: number, options: Options) =>\n String(str)\n .normalize()\n .replace(/\\r\\n/g, \"\\n\")\n .split(\"\\n\")\n .map((line) => exec(line, columns, options))\n .join(\"\\n\");\n", "import { stringWidth } from './string-width/index.js'\nimport { stripAnsi } from './strip-ansi/index.js'\nimport { wrap } from './wrap-ansi/index.js'\n\nconst align = {\n right: (str: string, width: number): string =>\n `${' '.repeat(Math.max(0, width - stringWidth(str)))}${str}`,\n center: (str: string, width: number): string =>\n `${' '.repeat(Math.max(0, width - stringWidth(str)) >> 1)}${str}`,\n}\n\nconst top = 0\nconst right = 1\nconst bottom = 2\nconst left = 3\n\nexport type UIOptions = {\n width: number\n wrap?: boolean\n rows?: string[]\n}\n\nexport type Column = {\n text: string\n width?: number\n align?: 'right' | 'left' | 'center'\n padding?: number[]\n border?: boolean\n}\n\nexport type ColumnArray = Column[] & {\n span?: boolean\n}\n\nexport type Line = {\n hidden?: boolean\n text: string\n span?: boolean\n}\n\nexport class UI {\n width: number\n wrap: boolean\n rows: ColumnArray[]\n\n constructor(opts: UIOptions) {\n this.width = opts.width\n /* c8 ignore start */\n this.wrap = opts.wrap ?? true\n /* c8 ignore stop */\n this.rows = []\n }\n\n span(...args: ColumnArray) {\n const cols = this.div(...args)\n cols.span = true\n }\n\n resetOutput() {\n this.rows = []\n }\n\n div(...args: (Column | string)[]): ColumnArray {\n if (args.length === 0) {\n this.div('')\n }\n\n if (\n this.wrap &&\n this.shouldApplyLayoutDSL(...args) &&\n typeof args[0] === 'string'\n ) {\n return this.applyLayoutDSL(args[0])\n }\n\n const cols: ColumnArray = Object.assign(\n args.map(arg => {\n if (typeof arg === 'string') {\n return this.colFromString(arg)\n }\n return arg\n }),\n { span: false },\n )\n\n this.rows.push(cols)\n return cols\n }\n\n shouldApplyLayoutDSL(...args: (Column | string)[]): boolean {\n return (\n args.length === 1 &&\n typeof args[0] === 'string' &&\n /[\\t\\n]/.test(args[0])\n )\n }\n\n applyLayoutDSL(str: string): ColumnArray {\n const rows = str.split('\\n').map(row => row.split('\\t'))\n let leftColumnWidth = 0\n\n // simple heuristic for layout, make sure the\n // second column lines up along the left-hand.\n // don't allow the first column to take up more\n // than 50% of the screen.\n rows.forEach(columns => {\n if (\n columns.length > 1 &&\n stringWidth(String(columns[0])) > leftColumnWidth\n ) {\n leftColumnWidth = Math.min(\n Math.floor(this.width * 0.5),\n stringWidth(String(columns[0])),\n )\n }\n })\n\n // generate a table:\n // replacing ' ' with padding calculations.\n // using the algorithmically generated width.\n rows.forEach(columns => {\n this.div(\n ...columns.map((r, i) => {\n return {\n text: r.trim(),\n padding: this.measurePadding(r),\n width:\n i === 0 && columns.length > 1 ? leftColumnWidth : undefined,\n } as Column\n }),\n )\n })\n\n const row = this.rows[this.rows.length - 1]\n /* c8 ignore start */\n if (!row) {\n throw new Error('no rows found')\n }\n /* c8 ignore stop */\n return row\n }\n\n colFromString(text: string): Column {\n return {\n text,\n padding: this.measurePadding(text),\n }\n }\n\n measurePadding(str: string): number[] {\n // measure padding without ansi escape codes\n const noAnsi = stripAnsi(str)\n const [right = '', left = ''] = [\n noAnsi.match(/\\s*$/)?.[0],\n noAnsi.match(/^\\s*/)?.[0],\n ]\n return [0, right.length, 0, left.length]\n }\n\n toString(): string {\n const lines: Line[] = []\n\n this.rows.forEach(row => {\n this.rowToString(row, lines)\n })\n\n // don't display any lines with the\n // hidden flag set.\n return lines\n .filter(line => !line.hidden)\n .map(line => line.text)\n .join('\\n')\n }\n\n rowToString(row: ColumnArray, lines: Line[]) {\n this.rasterize(row).forEach((rrow, r) => {\n let str = ''\n rrow.forEach((col: string, c: number) => {\n const column = row[c] as Column\n const { width } = column as Column // the width with padding.\n const wrapWidth = this.negatePadding(column) // the width without padding.\n\n let ts = col // temporary string used during alignment/padding.\n\n if (wrapWidth > stringWidth(col)) {\n ts += ' '.repeat(wrapWidth - stringWidth(col))\n }\n\n // align the string within its column.\n if (column.align && column.align !== 'left' && this.wrap) {\n const fn = align[column.align as 'right' | 'center']\n ts = fn(ts.trim(), wrapWidth)\n if (stringWidth(ts) < wrapWidth) {\n /* c8 ignore start */\n const w = width || 0\n /* c8 ignore stop */\n ts += ' '.repeat(w - stringWidth(ts) - 1)\n }\n }\n\n // apply border and padding to string.\n const padding = column.padding || [0, 0, 0, 0]\n if (padding[left]) {\n str += ' '.repeat(padding[left])\n }\n\n str += addBorder(column, ts, '| ')\n str += ts\n str += addBorder(column, ts, ' |')\n if (padding[right]) {\n str += ' '.repeat(padding[right])\n }\n\n // if prior row is span, try to render the\n // current row on the prior line.\n if (r === 0 && lines.length > 0) {\n const lastLine = lines[lines.length - 1]\n /* c8 ignore start */\n if (!lastLine) {\n throw new Error('last line not found')\n }\n /* c8 ignore stop */\n str = this.renderInline(str, lastLine)\n }\n })\n\n // remove trailing whitespace.\n lines.push({\n text: str.replace(/ +$/, ''),\n span: row.span,\n })\n })\n\n return lines\n }\n\n // if the full 'source' can render in\n // the target line, do so.\n renderInline(source: string, previousLine: Line) {\n const match = source.match(/^ */)\n /* c8 ignore start */\n const leadingWhitespace = match ? match[0].length : 0\n /* c8 ignore stop */\n const target = previousLine.text\n const targetTextWidth = stringWidth(target.trimEnd())\n\n if (!previousLine.span) {\n return source\n }\n\n // if we're not applying wrapping logic,\n // just always append to the span.\n if (!this.wrap) {\n previousLine.hidden = true\n return target + source\n }\n\n if (leadingWhitespace < targetTextWidth) {\n return source\n }\n\n previousLine.hidden = true\n\n return (\n target.trimEnd() +\n ' '.repeat(leadingWhitespace - targetTextWidth) +\n source.trimStart()\n )\n }\n\n rasterize(row: ColumnArray) {\n const rrows: string[][] = []\n const widths = this.columnWidths(row)\n let wrapped: string[]\n\n // word wrap all columns, and create\n // a data-structure that is easy to rasterize.\n row.forEach((col, c) => {\n // leave room for left and right padding.\n col.width = widths[c]\n if (this.wrap) {\n wrapped = wrap(col.text, this.negatePadding(col), {\n hard: true,\n }).split('\\n')\n } else {\n wrapped = col.text.split('\\n')\n }\n\n if (col.border) {\n wrapped.unshift(\n '.' + '-'.repeat(this.negatePadding(col) + 2) + '.',\n )\n wrapped.push(\"'\" + '-'.repeat(this.negatePadding(col) + 2) + \"'\")\n }\n\n // add top and bottom padding.\n if (col.padding) {\n wrapped.unshift(...new Array(col.padding[top] || 0).fill(''))\n wrapped.push(...new Array(col.padding[bottom] || 0).fill(''))\n }\n\n wrapped.forEach((str: string, r: number) => {\n if (!rrows[r]) {\n rrows.push([])\n }\n\n /* c8 ignore start */\n const rrow = rrows[r] ?? []\n /* c8 ignore stop */\n\n for (let i = 0; i < c; i++) {\n if (rrow[i] === undefined) {\n rrow.push('')\n }\n }\n\n rrow.push(str)\n })\n })\n\n return rrows\n }\n\n negatePadding(col: Column) {\n /* c8 ignore start */\n let wrapWidth = col.width || 0\n /* c8 ignore stop */\n if (col.padding) {\n wrapWidth -= (col.padding[left] || 0) + (col.padding[right] || 0)\n }\n\n if (col.border) {\n wrapWidth -= 4\n }\n\n return wrapWidth\n }\n\n columnWidths(row: ColumnArray) {\n if (!this.wrap) {\n return row.map(col => {\n return col.width || stringWidth(col.text)\n })\n }\n\n let unset = row.length\n let remainingWidth = this.width\n\n // column widths can be set in config.\n const widths = row.map(col => {\n if (col.width) {\n unset--\n remainingWidth -= col.width\n return col.width\n }\n\n return undefined\n })\n\n // any unset widths should be calculated.\n /* c8 ignore start */\n const unsetWidth = unset ? Math.floor(remainingWidth / unset) : 0\n /* c8 ignore stop */\n\n return widths.map((w, i) => {\n if (w === undefined) {\n /* c8 ignore start */\n const col = row[i] ?? { text: '', padding: [] }\n /* c8 ignore stop */\n return Math.max(unsetWidth, _minWidth(col))\n }\n\n return w\n })\n }\n}\n\nconst addBorder = (col: Column, ts: string, style: string) => {\n if (col.border) {\n if (/[.']-+[.']/.test(ts)) {\n return ''\n }\n\n if (ts.trim().length !== 0) {\n return style\n }\n\n return ' '\n }\n\n return ''\n}\n\n// calculates the minimum width of\n// a column, based on padding preferences.\nconst _minWidth = (col: Column) => {\n const padding = col.padding || []\n const minWidth = 1 + (padding[left] || 0) + (padding[right] || 0)\n if (col.border) {\n return minWidth + 4\n }\n\n return minWidth\n}\n\nconst getWindowWidth = (): number => {\n /* c8 ignore start */\n if (\n typeof process === 'object' &&\n process.stdout &&\n process.stdout.columns\n ) {\n return process.stdout.columns\n }\n return 80\n}\n/* c8 ignore stop */\n\nexport const cliui = (opts: Partial<UIOptions> = {}) =>\n new UI({\n /* c8 ignore start */\n width: opts?.width || getWindowWidth(),\n wrap: opts?.wrap,\n /* c8 ignore stop */\n })\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import {\n inspect,\n InspectOptions,\n parseArgs,\n ParseArgsConfig,\n} from 'node:util'\n\nimport { cliui } from '@isaacs/cliui/min'\nimport { basename } from 'node:path'\n\nexport type ParseArgsOptions = Exclude<\n ParseArgsConfig['options'],\n undefined\n>\nexport type ParseArgsOption = ParseArgsOptions[string]\nexport type ParseArgsDefault = Exclude<ConfigValue, number | number[]>\n\nexport type ConfigType = 'number' | 'string' | 'boolean'\n\nexport const isConfigType = (t: unknown): t is ConfigType =>\n typeof t === 'string' &&\n (t === 'string' || t === 'number' || t === 'boolean')\n\nexport type ConfigValuePrimitive = string | boolean | number\nexport type ConfigValueArray = string[] | boolean[] | number[]\nexport type ConfigValue = ConfigValuePrimitive | ConfigValueArray\n\n/**\n * Given a Jack object, get the typeof its ConfigSet\n */\nexport type Unwrap<J> = J extends Jack<infer C> ? C : never\n\n/**\n * Defines the type of value that is valid, given a config definition's\n * {@link ConfigType} and boolean multiple setting\n */\nexport type ValidValue<\n T extends ConfigType = ConfigType,\n M extends boolean = boolean,\n> =\n [T, M] extends ['number', true] ? number[]\n : [T, M] extends ['string', true] ? string[]\n : [T, M] extends ['boolean', true] ? boolean[]\n : [T, M] extends ['number', false] ? number\n : [T, M] extends ['string', false] ? string\n : [T, M] extends ['boolean', false] ? boolean\n : [T, M] extends ['string', boolean] ? string | string[]\n : [T, M] extends ['boolean', boolean] ? boolean | boolean[]\n : [T, M] extends ['number', boolean] ? number | number[]\n : [T, M] extends [ConfigType, false] ? ConfigValuePrimitive\n : [T, M] extends [ConfigType, true] ? ConfigValueArray\n : ConfigValue\n\nconst isValidValue = <T extends ConfigType, M extends boolean>(\n v: unknown,\n type: T,\n multi: M,\n): v is ValidValue<T, M> => {\n if (multi) {\n if (!Array.isArray(v)) return false\n return !v.some((v: unknown) => !isValidValue(v, type, false))\n }\n if (Array.isArray(v)) return false\n return typeof v === type\n}\n\nexport type ReadonlyArrays = readonly number[] | readonly string[]\n\n/**\n * Defines the type of validOptions that are valid, given a config definition's\n * {@link ConfigType}\n */\nexport type ValidOptions<T extends ConfigType> =\n T extends 'boolean' ? undefined\n : T extends 'string' ? readonly string[]\n : T extends 'number' ? readonly number[]\n : ReadonlyArrays\n\nconst isValidOption = <T extends ConfigType>(\n v: unknown,\n vo: readonly unknown[],\n): vo is Exclude<ValidOptions<T>, undefined> =>\n !!vo &&\n (Array.isArray(v) ? v.every(x => isValidOption(x, vo)) : vo.includes(v))\n\n/**\n * A config field definition, in its full representation.\n * This is what is passed in to addFields so `type` is required.\n */\nexport type ConfigOption<\n T extends ConfigType = ConfigType,\n M extends boolean = boolean,\n O extends undefined | ValidOptions<T> = undefined | ValidOptions<T>,\n> = {\n type: T\n short?: string\n default?: ValidValue<T, M> &\n (O extends ReadonlyArrays ?\n M extends false ?\n O[number]\n : O[number][]\n : unknown)\n description?: string\n hint?: T extends 'boolean' ? undefined : string\n validate?:\n | ((v: unknown) => v is ValidValue<T, M>)\n | ((v: unknown) => boolean)\n validOptions?: O\n delim?: M extends false ? undefined : string\n multiple?: M\n}\n\n/**\n * Determine whether an unknown object is a {@link ConfigOption} based only\n * on its `type` and `multiple` property\n */\nexport const isConfigOptionOfType = <\n T extends ConfigType,\n M extends boolean,\n>(\n o: unknown,\n type: T,\n multi: M,\n): o is ConfigOption<T, M> =>\n !!o &&\n typeof o === 'object' &&\n 'type' in o &&\n isConfigType(o.type) &&\n o.type === type &&\n !!(o as { multiple?: boolean }).multiple === multi\n\n/**\n * Determine whether an unknown object is a {@link ConfigOption} based on\n * it having all valid properties\n */\nexport const isConfigOption = <T extends ConfigType, M extends boolean>(\n o: unknown,\n type: T,\n multi: M,\n): o is ConfigOption<T, M> =>\n isConfigOptionOfType(o, type, multi) &&\n undefOrType(o.short, 'string') &&\n undefOrType(o.description, 'string') &&\n undefOrType(o.hint, 'string') &&\n undefOrType(o.validate, 'function') &&\n (o.type === 'boolean' ?\n o.validOptions === undefined\n : undefOrTypeArray(o.validOptions, o.type)) &&\n (o.default === undefined || isValidValue(o.default, type, multi))\n\n/**\n * The meta information for a config option definition, when the\n * type and multiple values can be inferred by the method being used\n */\nexport type ConfigOptionMeta<\n T extends ConfigType,\n M extends boolean,\n O extends ConfigOption<T, M> = ConfigOption<T, M>,\n> = Pick<Partial<O>, 'type'> & Omit<O, 'type'>\n\n/**\n * A set of {@link ConfigOption} objects, referenced by their longOption\n * string values.\n */\nexport type ConfigSet = {\n [longOption: string]: ConfigOption\n}\n\n/**\n * A set of {@link ConfigOptionMeta} fields, referenced by their longOption\n * string values.\n */\nexport type ConfigMetaSet<T extends ConfigType, M extends boolean> = {\n [longOption: string]: ConfigOptionMeta<T, M>\n}\n\n/**\n * Infer {@link ConfigSet} fields from a given {@link ConfigMetaSet}\n */\nexport type ConfigSetFromMetaSet<\n T extends ConfigType,\n M extends boolean,\n S extends ConfigMetaSet<T, M>,\n> = S & { [longOption in keyof S]: ConfigOption<T, M> }\n\n/**\n * The 'values' field returned by {@link Jack#parse}. If a value has\n * a default field it will be required on the object otherwise it is optional.\n */\nexport type OptionsResults<T extends ConfigSet> = {\n [K in keyof T]:\n | (T[K]['validOptions'] extends ReadonlyArrays ?\n T[K] extends ConfigOption<'string' | 'number', false> ?\n T[K]['validOptions'][number]\n : T[K] extends ConfigOption<'string' | 'number', true> ?\n T[K]['validOptions'][number][]\n : never\n : T[K] extends ConfigOption<'string', false> ? string\n : T[K] extends ConfigOption<'string', true> ? string[]\n : T[K] extends ConfigOption<'number', false> ? number\n : T[K] extends ConfigOption<'number', true> ? number[]\n : T[K] extends ConfigOption<'boolean', false> ? boolean\n : T[K] extends ConfigOption<'boolean', true> ? boolean[]\n : never)\n | (T[K]['default'] extends ConfigValue ? never : undefined)\n}\n\n/**\n * The object retured by {@link Jack#parse}\n */\nexport type Parsed<T extends ConfigSet> = {\n values: OptionsResults<T>\n positionals: string[]\n}\n\n/**\n * A row used when generating the {@link Jack#usage} string\n */\nexport interface Row {\n left?: string\n text: string\n skipLine?: boolean\n type?: string\n}\n\n/**\n * A heading for a section in the usage, created by the jack.heading()\n * method.\n *\n * First heading is always level 1, subsequent headings default to 2.\n *\n * The level of the nearest heading level sets the indentation of the\n * description that follows.\n */\nexport interface Heading extends Row {\n type: 'heading'\n text: string\n left?: ''\n skipLine?: boolean\n level: number\n pre?: boolean\n}\n\nconst isHeading = (r: { type?: string }): r is Heading =>\n r.type === 'heading'\n\n/**\n * An arbitrary blob of text describing some stuff, set by the\n * jack.description() method.\n *\n * Indentation determined by level of the nearest header.\n */\nexport interface Description extends Row {\n type: 'description'\n text: string\n left?: ''\n skipLine?: boolean\n pre?: boolean\n}\n\nconst isDescription = (r: { type?: string }): r is Description =>\n r.type === 'description'\n\n/**\n * A heading or description row used when generating the {@link Jack#usage}\n * string\n */\nexport type TextRow = Heading | Description\n\n/**\n * Either a {@link TextRow} or a reference to a {@link ConfigOption}\n */\nexport type UsageField =\n | TextRow\n | {\n type: 'config'\n name: string\n value: ConfigOption\n }\n\nconst width = Math.min(process?.stdout?.columns ?? 80, 80)\n\n// indentation spaces from heading level\nconst indent = (n: number) => (n - 1) * 2\n\nconst toEnvKey = (pref: string, key: string): string =>\n [pref, key.replace(/[^a-zA-Z0-9]+/g, ' ')]\n .join(' ')\n .trim()\n .toUpperCase()\n .replace(/ /g, '_')\n\nconst toEnvVal = (value: ConfigValue, delim: string = '\\n'): string => {\n const str =\n typeof value === 'string' ? value\n : typeof value === 'boolean' ?\n value ? '1'\n : '0'\n : typeof value === 'number' ? String(value)\n : Array.isArray(value) ?\n value.map((v: ConfigValue) => toEnvVal(v)).join(delim)\n : /* c8 ignore start */ undefined\n if (typeof str !== 'string') {\n throw new Error(\n `could not serialize value to environment: ${JSON.stringify(value)}`,\n { cause: { code: 'JACKSPEAK' } },\n )\n }\n /* c8 ignore stop */\n return str\n}\n\nconst fromEnvVal = <T extends ConfigType, M extends boolean>(\n env: string,\n type: T,\n multiple: M,\n delim: string = '\\n',\n): ValidValue<T, M> =>\n (multiple ?\n env ? env.split(delim).map(v => fromEnvVal(v, type, false))\n : []\n : type === 'string' ? env\n : type === 'boolean' ? env === '1'\n : +env.trim()) as ValidValue<T, M>\n\nconst undefOrType = (v: unknown, t: string): boolean =>\n v === undefined || typeof v === t\n\nconst undefOrTypeArray = (v: unknown, t: string): boolean =>\n v === undefined || (Array.isArray(v) && v.every(x => typeof x === t))\n\n// print the value type, for error message reporting\nconst valueType = (\n v: ConfigValue | { type: ConfigType; multiple?: boolean },\n): string =>\n typeof v === 'string' ? 'string'\n : typeof v === 'boolean' ? 'boolean'\n : typeof v === 'number' ? 'number'\n : Array.isArray(v) ?\n `${joinTypes([...new Set(v.map(v => valueType(v)))])}[]`\n : `${v.type}${v.multiple ? '[]' : ''}`\n\nconst joinTypes = (types: string[]): string =>\n types.length === 1 && typeof types[0] === 'string' ?\n types[0]\n : `(${types.join('|')})`\n\nconst validateFieldMeta = <T extends ConfigType, M extends boolean>(\n field: ConfigOptionMeta<T, M>,\n fieldMeta?: { type: T; multiple: M },\n): { type: ConfigType; multiple: boolean } => {\n if (fieldMeta) {\n if (field.type !== undefined && field.type !== fieldMeta.type) {\n throw new TypeError(`invalid type`, {\n cause: {\n found: field.type,\n wanted: [fieldMeta.type, undefined],\n },\n })\n }\n if (\n field.multiple !== undefined &&\n !!field.multiple !== fieldMeta.multiple\n ) {\n throw new TypeError(`invalid multiple`, {\n cause: {\n found: field.multiple,\n wanted: [fieldMeta.multiple, undefined],\n },\n })\n }\n return fieldMeta\n }\n\n if (!isConfigType(field.type)) {\n throw new TypeError(`invalid type`, {\n cause: {\n found: field.type,\n wanted: ['string', 'number', 'boolean'],\n },\n })\n }\n\n return {\n type: field.type,\n multiple: !!field.multiple,\n }\n}\n\nconst validateField = (\n o: ConfigOption,\n type: ConfigType,\n multiple: boolean,\n): ConfigOption => {\n const validateValidOptions = <\n T extends ConfigValue | undefined,\n V extends T extends Array<infer U> ? U : T,\n >(\n def: T | undefined,\n validOptions: readonly V[] | undefined,\n ) => {\n if (!undefOrTypeArray(validOptions, type)) {\n throw new TypeError('invalid validOptions', {\n cause: {\n found: validOptions,\n wanted: valueType({ type, multiple: true }),\n },\n })\n }\n if (def !== undefined && validOptions !== undefined) {\n const valid =\n Array.isArray(def) ?\n def.every(v => validOptions.includes(v as V))\n : validOptions.includes(def as V)\n if (!valid) {\n throw new TypeError('invalid default value not in validOptions', {\n cause: {\n found: def,\n wanted: validOptions,\n },\n })\n }\n }\n }\n\n if (\n o.default !== undefined &&\n !isValidValue(o.default, type, multiple)\n ) {\n throw new TypeError('invalid default value', {\n cause: {\n found: o.default,\n wanted: valueType({ type, multiple }),\n },\n })\n }\n\n if (\n isConfigOptionOfType(o, 'number', false) ||\n isConfigOptionOfType(o, 'number', true)\n ) {\n validateValidOptions(o.default, o.validOptions)\n } else if (\n isConfigOptionOfType(o, 'string', false) ||\n isConfigOptionOfType(o, 'string', true)\n ) {\n validateValidOptions(o.default, o.validOptions)\n } else if (\n isConfigOptionOfType(o, 'boolean', false) ||\n isConfigOptionOfType(o, 'boolean', true)\n ) {\n if (o.hint !== undefined) {\n throw new TypeError('cannot provide hint for flag')\n }\n if (o.validOptions !== undefined) {\n throw new TypeError('cannot provide validOptions for flag')\n }\n }\n\n return o\n}\n\nconst toParseArgsOptionsConfig = (\n options: ConfigSet,\n): ParseArgsOptions => {\n return Object.entries(options).reduce((acc, [longOption, o]) => {\n const p: ParseArgsOption = {\n type: 'string',\n multiple: !!o.multiple,\n ...(typeof o.short === 'string' ? { short: o.short } : undefined),\n }\n const setNoBool = () => {\n if (!longOption.startsWith('no-') && !options[`no-${longOption}`]) {\n acc[`no-${longOption}`] = {\n type: 'boolean',\n multiple: !!o.multiple,\n }\n }\n }\n const setDefault = <T>(\n def: T | undefined,\n fn: (d: T) => ParseArgsDefault,\n ) => {\n if (def !== undefined) {\n p.default = fn(def)\n }\n }\n if (isConfigOption(o, 'number', false)) {\n setDefault(o.default, String)\n } else if (isConfigOption(o, 'number', true)) {\n setDefault(o.default, d => d.map(v => String(v)))\n } else if (\n isConfigOption(o, 'string', false) ||\n isConfigOption(o, 'string', true)\n ) {\n setDefault(o.default, v => v)\n } else if (\n isConfigOption(o, 'boolean', false) ||\n isConfigOption(o, 'boolean', true)\n ) {\n p.type = 'boolean'\n setDefault(o.default, v => v)\n setNoBool()\n }\n acc[longOption] = p\n return acc\n }, {} as ParseArgsOptions)\n}\n\n/**\n * Options provided to the {@link Jack} constructor\n */\nexport interface JackOptions {\n /**\n * Whether to allow positional arguments\n *\n * @default true\n */\n allowPositionals?: boolean\n\n /**\n * Prefix to use when reading/writing the environment variables\n *\n * If not specified, environment behavior will not be available.\n */\n envPrefix?: string\n\n /**\n * Environment object to read/write. Defaults `process.env`.\n * No effect if `envPrefix` is not set.\n */\n env?: Record<string, string | undefined>\n\n /**\n * A short usage string. If not provided, will be generated from the\n * options provided, but that can of course be rather verbose if\n * there are a lot of options.\n */\n usage?: string\n\n /**\n * Stop parsing flags and opts at the first positional argument.\n * This is to support cases like `cmd [flags] <subcmd> [options]`, where\n * each subcommand may have different options. This effectively treats\n * any positional as a `--` argument. Only relevant if `allowPositionals`\n * is true.\n *\n * To do subcommands, set this option, look at the first positional, and\n * parse the remaining positionals as appropriate.\n *\n * @default false\n */\n stopAtPositional?: boolean\n\n /**\n * Conditional `stopAtPositional`. If set to a `(string)=>boolean` function,\n * will be called with each positional argument encountered. If the function\n * returns true, then parsing will stop at that point.\n */\n stopAtPositionalTest?: (arg: string) => boolean\n}\n\n/**\n * Class returned by the {@link jack} function and all configuration\n * definition methods. This is what gets chained together.\n */\nexport class Jack<C extends ConfigSet = {}> {\n #configSet: C\n #shorts: Record<string, string>\n #options: JackOptions\n #fields: UsageField[] = []\n #env: Record<string, string | undefined>\n #envPrefix?: string\n #allowPositionals: boolean\n #usage?: string\n #usageMarkdown?: string\n\n constructor(options: JackOptions = {}) {\n this.#options = options\n this.#allowPositionals = options.allowPositionals !== false\n this.#env =\n this.#options.env === undefined ? process.env : this.#options.env\n this.#envPrefix = options.envPrefix\n // We need to fib a little, because it's always the same object, but it\n // starts out as having an empty config set. Then each method that adds\n // fields returns `this as Jack<C & { ...newConfigs }>`\n this.#configSet = Object.create(null) as C\n this.#shorts = Object.create(null)\n }\n\n /**\n * Resulting definitions, suitable to be passed to Node's `util.parseArgs`,\n * but also including `description` and `short` fields, if set.\n */\n get definitions(): C {\n return this.#configSet\n }\n\n /** map of `{ <short>: <long> }` strings for each short name defined */\n get shorts() {\n return this.#shorts\n }\n\n /**\n * options passed to the {@link Jack} constructor\n */\n get jackOptions() {\n return this.#options\n }\n\n /**\n * the data used to generate {@link Jack#usage} and\n * {@link Jack#usageMarkdown} content.\n */\n get usageFields() {\n return this.#fields\n }\n\n /**\n * Set the default value (which will still be overridden by env or cli)\n * as if from a parsed config file. The optional `source` param, if\n * provided, will be included in error messages if a value is invalid or\n * unknown.\n */\n setConfigValues(values: Partial<OptionsResults<C>>, source = '') {\n try {\n this.validate(values)\n } catch (er) {\n if (source && er instanceof Error) {\n /* c8 ignore next */\n const cause = typeof er.cause === 'object' ? er.cause : {}\n er.cause = { ...cause, path: source }\n Error.captureStackTrace(er, this.setConfigValues)\n }\n throw er\n }\n for (const [field, value] of Object.entries(values)) {\n const my = this.#configSet[field]\n // already validated, just for TS's benefit\n /* c8 ignore start */\n if (!my) {\n throw new Error('unexpected field in config set: ' + field, {\n cause: {\n code: 'JACKSPEAK',\n found: field,\n },\n })\n }\n /* c8 ignore stop */\n my.default = value as ConfigValue\n }\n return this\n }\n\n /**\n * Parse a string of arguments, and return the resulting\n * `{ values, positionals }` object.\n *\n * If an {@link JackOptions#envPrefix} is set, then it will read default\n * values from the environment, and write the resulting values back\n * to the environment as well.\n *\n * Environment values always take precedence over any other value, except\n * an explicit CLI setting.\n */\n parse(args: string[] = process.argv): Parsed<C> {\n this.loadEnvDefaults()\n const p = this.parseRaw(args)\n this.applyDefaults(p)\n this.writeEnv(p)\n return p\n }\n\n loadEnvDefaults() {\n if (this.#envPrefix) {\n for (const [field, my] of Object.entries(this.#configSet)) {\n const ek = toEnvKey(this.#envPrefix, field)\n const env = this.#env[ek]\n if (env !== undefined) {\n my.default = fromEnvVal(env, my.type, !!my.multiple, my.delim)\n }\n }\n }\n }\n\n applyDefaults(p: Parsed<C>) {\n for (const [field, c] of Object.entries(this.#configSet)) {\n if (c.default !== undefined && !(field in p.values)) {\n //@ts-ignore\n p.values[field] = c.default\n }\n }\n }\n\n /**\n * Only parse the command line arguments passed in.\n * Does not strip off the `node script.js` bits, so it must be just the\n * arguments you wish to have parsed.\n * Does not read from or write to the environment, or set defaults.\n */\n parseRaw(args: string[]): Parsed<C> {\n if (args === process.argv) {\n args = args.slice(\n (process as { _eval?: string })._eval !== undefined ? 1 : 2,\n )\n }\n\n const result = parseArgs({\n args,\n options: toParseArgsOptionsConfig(this.#configSet),\n // always strict, but using our own logic\n strict: false,\n allowPositionals: this.#allowPositionals,\n tokens: true,\n })\n\n const p: Parsed<C> = {\n values: {} as OptionsResults<C>,\n positionals: [],\n }\n for (const token of result.tokens) {\n if (token.kind === 'positional') {\n p.positionals.push(token.value)\n if (\n this.#options.stopAtPositional ||\n this.#options.stopAtPositionalTest?.(token.value)\n ) {\n p.positionals.push(...args.slice(token.index + 1))\n break\n }\n } else if (token.kind === 'option') {\n let value: ConfigValue | undefined = undefined\n if (token.name.startsWith('no-')) {\n const my = this.#configSet[token.name]\n const pname = token.name.substring('no-'.length)\n const pos = this.#configSet[pname]\n if (\n pos &&\n pos.type === 'boolean' &&\n (!my ||\n (my.type === 'boolean' && !!my.multiple === !!pos.multiple))\n ) {\n value = false\n token.name = pname\n }\n }\n const my = this.#configSet[token.name]\n if (!my) {\n throw new Error(\n `Unknown option '${token.rawName}'. ` +\n `To specify a positional argument starting with a '-', ` +\n `place it at the end of the command after '--', as in ` +\n `'-- ${token.rawName}'`,\n {\n cause: {\n code: 'JACKSPEAK',\n found:\n token.rawName + (token.value ? `=${token.value}` : ''),\n },\n },\n )\n }\n if (value === undefined) {\n if (token.value === undefined) {\n if (my.type !== 'boolean') {\n throw new Error(\n `No value provided for ${token.rawName}, expected ${my.type}`,\n {\n cause: {\n code: 'JACKSPEAK',\n name: token.rawName,\n wanted: valueType(my),\n },\n },\n )\n }\n value = true\n } else {\n if (my.type === 'boolean') {\n throw new Error(\n `Flag ${token.rawName} does not take a value, received '${token.value}'`,\n { cause: { code: 'JACKSPEAK', found: token } },\n )\n }\n if (my.type === 'string') {\n value = token.value\n } else {\n value = +token.value\n if (value !== value) {\n throw new Error(\n `Invalid value '${token.value}' provided for ` +\n `'${token.rawName}' option, expected number`,\n {\n cause: {\n code: 'JACKSPEAK',\n name: token.rawName,\n found: token.value,\n wanted: 'number',\n },\n },\n )\n }\n }\n }\n }\n if (my.multiple) {\n const pv = p.values as Record<string, ConfigValue[]>\n const tn = pv[token.name] ?? []\n pv[token.name] = tn\n tn.push(value)\n } else {\n const pv = p.values as Record<string, ConfigValue>\n pv[token.name] = value\n }\n }\n }\n\n for (const [field, value] of Object.entries(p.values)) {\n const valid = this.#configSet[field]?.validate\n const validOptions = this.#configSet[field]?.validOptions\n const cause =\n validOptions && !isValidOption(value, validOptions) ?\n { name: field, found: value, validOptions }\n : valid && !valid(value) ? { name: field, found: value }\n : undefined\n if (cause) {\n throw new Error(\n `Invalid value provided for --${field}: ${JSON.stringify(value)}`,\n { cause: { ...cause, code: 'JACKSPEAK' } },\n )\n }\n }\n\n return p\n }\n\n /**\n * do not set fields as 'no-foo' if 'foo' exists and both are bools\n * just set foo.\n */\n #noNoFields(f: string, val: unknown, s: string = f) {\n if (!f.startsWith('no-') || typeof val !== 'boolean') return\n const yes = f.substring('no-'.length)\n // recurse so we get the core config key we care about.\n this.#noNoFields(yes, val, s)\n if (this.#configSet[yes]?.type === 'boolean') {\n throw new Error(\n `do not set '${s}', instead set '${yes}' as desired.`,\n { cause: { code: 'JACKSPEAK', found: s, wanted: yes } },\n )\n }\n }\n\n /**\n * Validate that any arbitrary object is a valid configuration `values`\n * object. Useful when loading config files or other sources.\n */\n validate(o: unknown): asserts o is Parsed<C>['values'] {\n if (!o || typeof o !== 'object') {\n throw new Error('Invalid config: not an object', {\n cause: { code: 'JACKSPEAK', found: o },\n })\n }\n const opts = o as Record<string, ValidValue>\n for (const field in o) {\n const value = opts[field]\n /* c8 ignore next - for TS */\n if (value === undefined) continue\n this.#noNoFields(field, value)\n const config = this.#configSet[field]\n if (!config) {\n throw new Error(`Unknown config option: ${field}`, {\n cause: { code: 'JACKSPEAK', found: field },\n })\n }\n if (!isValidValue(value, config.type, !!config.multiple)) {\n throw new Error(\n `Invalid value ${valueType(value)} for ${field}, expected ${valueType(config)}`,\n {\n cause: {\n code: 'JACKSPEAK',\n name: field,\n found: value,\n wanted: valueType(config),\n },\n },\n )\n }\n const cause =\n config.validOptions && !isValidOption(value, config.validOptions) ?\n { name: field, found: value, validOptions: config.validOptions }\n : config.validate && !config.validate(value) ?\n { name: field, found: value }\n : undefined\n if (cause) {\n throw new Error(\n `Invalid config value for ${field}: ${JSON.stringify(value)}`,\n {\n cause: { ...cause, code: 'JACKSPEAK' },\n },\n )\n }\n }\n }\n\n writeEnv(p: Parsed<C>) {\n if (!this.#env || !this.#envPrefix) return\n for (const [field, value] of Object.entries(p.values)) {\n const my = this.#configSet[field]\n this.#env[toEnvKey(this.#envPrefix, field)] = toEnvVal(\n value as ConfigValue,\n my?.delim,\n )\n }\n }\n\n /**\n * Add a heading to the usage output banner\n */\n heading(\n text: string,\n level?: 1 | 2 | 3 | 4 | 5 | 6,\n { pre = false }: { pre?: boolean } = {},\n ): Jack<C> {\n if (level === undefined) {\n level = this.#fields.some(r => isHeading(r)) ? 2 : 1\n }\n this.#fields.push({ type: 'heading', text, level, pre })\n return this\n }\n\n /**\n * Add a long-form description to the usage output at this position.\n */\n description(text: string, { pre }: { pre?: boolean } = {}): Jack<C> {\n this.#fields.push({ type: 'description', text, pre })\n return this\n }\n\n /**\n * Add one or more number fields.\n */\n num<F extends ConfigMetaSet<'number', false>>(\n fields: F,\n ): Jack<C & ConfigSetFromMetaSet<'number', false, F>> {\n return this.#addFieldsWith(fields, 'number', false)\n }\n\n /**\n * Add one or more multiple number fields.\n */\n numList<F extends ConfigMetaSet<'number', true>>(\n fields: F,\n ): Jack<C & ConfigSetFromMetaSet<'number', true, F>> {\n return this.#addFieldsWith(fields, 'number', true)\n }\n\n /**\n * Add one or more string option fields.\n */\n opt<F extends ConfigMetaSet<'string', false>>(\n fields: F,\n ): Jack<C & ConfigSetFromMetaSet<'string', false, F>> {\n return this.#addFieldsWith(fields, 'string', false)\n }\n\n /**\n * Add one or more multiple string option fields.\n */\n optList<F extends ConfigMetaSet<'string', true>>(\n fields: F,\n ): Jack<C & ConfigSetFromMetaSet<'string', true, F>> {\n return this.#addFieldsWith(fields, 'string', true)\n }\n\n /**\n * Add one or more flag fields.\n */\n flag<F extends ConfigMetaSet<'boolean', false>>(\n fields: F,\n ): Jack<C & ConfigSetFromMetaSet<'boolean', false, F>> {\n return this.#addFieldsWith(fields, 'boolean', false)\n }\n\n /**\n * Add one or more multiple flag fields.\n */\n flagList<F extends ConfigMetaSet<'boolean', true>>(\n fields: F,\n ): Jack<C & ConfigSetFromMetaSet<'boolean', true, F>> {\n return this.#addFieldsWith(fields, 'boolean', true)\n }\n\n /**\n * Generic field definition method. Similar to flag/flagList/number/etc,\n * but you must specify the `type` (and optionally `multiple` and `delim`)\n * fields on each one, or Jack won't know how to define them.\n */\n addFields<F extends ConfigSet>(fields: F): Jack<C & F> {\n return this.#addFields(this as unknown as Jack<C & F>, fields)\n }\n\n #addFieldsWith<\n T extends ConfigType,\n M extends boolean,\n F extends ConfigMetaSet<T, M>,\n O extends ConfigSetFromMetaSet<T, M, F>,\n >(fields: F, type: ConfigType, multiple: boolean): Jack<C & O> {\n return this.#addFields(this as unknown as Jack<C & O>, fields, {\n type,\n multiple,\n })\n }\n\n #addFields<\n T extends ConfigType,\n M extends boolean,\n F extends ConfigMetaSet<T, M>,\n O extends Jack,\n >(next: O, fields: F, opt?: { type: T; multiple: M }): O {\n Object.assign(\n next.#configSet,\n Object.fromEntries(\n Object.entries(fields).map(([name, field]) => {\n this.#validateName(name, field)\n const { type, multiple } = validateFieldMeta(field, opt)\n const value = { ...field, type, multiple }\n validateField(value, type, multiple)\n next.#fields.push({ type: 'config', name, value })\n return [name, value]\n }),\n ),\n )\n return next\n }\n\n #validateName(name: string, field: { short?: string }) {\n if (!/^[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?$/.test(name)) {\n throw new TypeError(\n `Invalid option name: ${name}, ` +\n `must be '-' delimited ASCII alphanumeric`,\n )\n }\n if (this.#configSet[name]) {\n throw new TypeError(`Cannot redefine option ${name}`)\n }\n if (this.#shorts[name]) {\n throw new TypeError(\n `Cannot redefine option ${name}, already ` +\n `in use for ${this.#shorts[name]}`,\n )\n }\n if (field.short) {\n if (!/^[a-zA-Z0-9]$/.test(field.short)) {\n throw new TypeError(\n `Invalid ${name} short option: ${field.short}, ` +\n 'must be 1 ASCII alphanumeric character',\n )\n }\n if (this.#shorts[field.short]) {\n throw new TypeError(\n `Invalid ${name} short option: ${field.short}, ` +\n `already in use for ${this.#shorts[field.short]}`,\n )\n }\n this.#shorts[field.short] = name\n this.#shorts[name] = name\n }\n }\n\n /**\n * Return the usage banner for the given configuration\n */\n usage(): string {\n if (this.#usage) return this.#usage\n\n let headingLevel = 1\n //@ts-ignore\n const ui = cliui({ width })\n const first = this.#fields[0]\n let start = first?.type === 'heading' ? 1 : 0\n if (first?.type === 'heading') {\n ui.div({\n padding: [0, 0, 0, 0],\n text: normalize(first.text),\n })\n }\n ui.div({ padding: [0, 0, 0, 0], text: 'Usage:' })\n if (this.#options.usage) {\n ui.div({\n text: this.#options.usage,\n padding: [0, 0, 0, 2],\n })\n } else {\n const cmd = basename(String(process.argv[1]))\n const shortFlags: string[] = []\n const shorts: string[][] = []\n const flags: string[] = []\n const opts: string[][] = []\n for (const [field, config] of Object.entries(this.#configSet)) {\n if (config.short) {\n if (config.type === 'boolean') shortFlags.push(config.short)\n else shorts.push([config.short, config.hint || field])\n } else {\n if (config.type === 'boolean') flags.push(field)\n else opts.push([field, config.hint || field])\n }\n }\n const sf = shortFlags.length ? ' -' + shortFlags.join('') : ''\n const so = shorts.map(([k, v]) => ` --${k}=<${v}>`).join('')\n const lf = flags.map(k => ` --${k}`).join('')\n const lo = opts.map(([k, v]) => ` --${k}=<${v}>`).join('')\n const usage = `${cmd}${sf}${so}${lf}${lo}`.trim()\n ui.div({\n text: usage,\n padding: [0, 0, 0, 2],\n })\n }\n\n ui.div({ padding: [0, 0, 0, 0], text: '' })\n const maybeDesc = this.#fields[start]\n if (maybeDesc && isDescription(maybeDesc)) {\n const print = normalize(maybeDesc.text, maybeDesc.pre)\n start++\n ui.div({ padding: [0, 0, 0, 0], text: print })\n ui.div({ padding: [0, 0, 0, 0], text: '' })\n }\n\n const { rows, maxWidth } = this.#usageRows(start)\n\n // every heading/description after the first gets indented by 2\n // extra spaces.\n for (const row of rows) {\n if (row.left) {\n // If the row is too long, don't wrap it\n // Bump the right-hand side down a line to make room\n const configIndent = indent(Math.max(headingLevel, 2))\n if (row.left.length > maxWidth - 3) {\n ui.div({ text: row.left, padding: [0, 0, 0, configIndent] })\n ui.div({ text: row.text, padding: [0, 0, 0, maxWidth] })\n } else {\n ui.div(\n {\n text: row.left,\n padding: [0, 1, 0, configIndent],\n width: maxWidth,\n },\n { padding: [0, 0, 0, 0], text: row.text },\n )\n }\n if (row.skipLine) {\n ui.div({ padding: [0, 0, 0, 0], text: '' })\n }\n } else {\n if (isHeading(row)) {\n const { level } = row\n headingLevel = level\n // only h1 and h2 have bottom padding\n // h3-h6 do not\n const b = level <= 2 ? 1 : 0\n ui.div({ ...row, padding: [0, 0, b, indent(level)] })\n } else {\n ui.div({ ...row, padding: [0, 0, 1, indent(headingLevel + 1)] })\n }\n }\n }\n\n return (this.#usage = ui.toString())\n }\n\n /**\n * Return the usage banner markdown for the given configuration\n */\n usageMarkdown(): string {\n if (this.#usageMarkdown) return this.#usageMarkdown\n\n const out: string[] = []\n\n let headingLevel = 1\n const first = this.#fields[0]\n let start = first?.type === 'heading' ? 1 : 0\n if (first?.type === 'heading') {\n out.push(`# ${normalizeOneLine(first.text)}`)\n }\n out.push('Usage:')\n if (this.#options.usage) {\n out.push(normalizeMarkdown(this.#options.usage, true))\n } else {\n const cmd = basename(String(process.argv[1]))\n const shortFlags: string[] = []\n const shorts: string[][] = []\n const flags: string[] = []\n const opts: string[][] = []\n for (const [field, config] of Object.entries(this.#configSet)) {\n if (config.short) {\n if (config.type === 'boolean') shortFlags.push(config.short)\n else shorts.push([config.short, config.hint || field])\n } else {\n if (config.type === 'boolean') flags.push(field)\n else opts.push([field, config.hint || field])\n }\n }\n const sf = shortFlags.length ? ' -' + shortFlags.join('') : ''\n const so = shorts.map(([k, v]) => ` --${k}=<${v}>`).join('')\n const lf = flags.map(k => ` --${k}`).join('')\n const lo = opts.map(([k, v]) => ` --${k}=<${v}>`).join('')\n const usage = `${cmd}${sf}${so}${lf}${lo}`.trim()\n out.push(normalizeMarkdown(usage, true))\n }\n\n const maybeDesc = this.#fields[start]\n if (maybeDesc && isDescription(maybeDesc)) {\n out.push(normalizeMarkdown(maybeDesc.text, maybeDesc.pre))\n start++\n }\n\n const { rows } = this.#usageRows(start)\n\n // heading level in markdown is number of # ahead of text\n for (const row of rows) {\n if (row.left) {\n out.push(\n '#'.repeat(headingLevel + 1) +\n ' ' +\n normalizeOneLine(row.left, true),\n )\n if (row.text) out.push(normalizeMarkdown(row.text))\n } else if (isHeading(row)) {\n const { level } = row\n headingLevel = level\n out.push(\n `${'#'.repeat(headingLevel)} ${normalizeOneLine(\n row.text,\n row.pre,\n )}`,\n )\n } else {\n out.push(normalizeMarkdown(row.text, !!(row as Description).pre))\n }\n }\n\n return (this.#usageMarkdown = out.join('\\n\\n') + '\\n')\n }\n\n #usageRows(start: number) {\n // turn each config type into a row, and figure out the width of the\n // left hand indentation for the option descriptions.\n const maxMax = Math.max(12, Math.min(26, Math.floor(width / 3)))\n let maxWidth = 8\n let prev: Row | TextRow | undefined = undefined\n const rows: (Row | TextRow)[] = []\n for (const field of this.#fields.slice(start)) {\n if (field.type !== 'config') {\n if (prev?.type === 'config') prev.skipLine = true\n prev = undefined\n field.text = normalize(field.text, !!field.pre)\n rows.push(field)\n continue\n }\n const { value } = field\n const desc = value.description || ''\n const mult = value.multiple ? 'Can be set multiple times' : ''\n const opts =\n value.validOptions?.length ?\n 'Valid options: ' +\n value.validOptions.map(v => JSON.stringify(v)).join(', ')\n : ''\n const dmDelim = desc.includes('\\n') ? '\\n\\n' : '\\n'\n const extra = [opts, mult].join(dmDelim).trim()\n const text = (normalize(desc) + dmDelim + extra).trim()\n const hint =\n value.hint ||\n (value.type === 'number' ? 'n'\n : value.type === 'string' ? field.name\n : undefined)\n const short =\n !value.short ? ''\n : value.type === 'boolean' ? `-${value.short} `\n : `-${value.short}<${hint}> `\n const left =\n value.type === 'boolean' ?\n `${short}--${field.name}`\n : `${short}--${field.name}=<${hint}>`\n const row: Row = { text, left, type: 'config' }\n if (text.length > width - maxMax) {\n row.skipLine = true\n }\n if (prev && left.length > maxMax) prev.skipLine = true\n prev = row\n const len = left.length + 4\n if (len > maxWidth && len < maxMax) {\n maxWidth = len\n }\n\n rows.push(row)\n }\n\n return { rows, maxWidth }\n }\n\n /**\n * Return the configuration options as a plain object\n */\n toJSON() {\n return Object.fromEntries(\n Object.entries(this.#configSet).map(([field, def]) => [\n field,\n {\n type: def.type,\n ...(def.multiple ? { multiple: true } : {}),\n ...(def.delim ? { delim: def.delim } : {}),\n ...(def.short ? { short: def.short } : {}),\n ...(def.description ?\n { description: normalize(def.description) }\n : {}),\n ...(def.validate ? { validate: def.validate } : {}),\n ...(def.validOptions ? { validOptions: def.validOptions } : {}),\n ...(def.default !== undefined ? { default: def.default } : {}),\n ...(def.hint ? { hint: def.hint } : {}),\n },\n ]),\n )\n }\n\n /**\n * Custom printer for `util.inspect`\n */\n [inspect.custom](_: number, options: InspectOptions) {\n return `Jack ${inspect(this.toJSON(), options)}`\n }\n}\n\n/**\n * Main entry point. Create and return a {@link Jack} object.\n */\nexport const jack = (options: JackOptions = {}) => new Jack(options)\n\n// Unwrap and un-indent, so we can wrap description\n// strings however makes them look nice in the code.\nconst normalize = (s: string, pre = false) => {\n if (pre)\n // prepend a ZWSP to each line so cliui doesn't strip it.\n return s\n .split('\\n')\n .map(l => `\\u200b${l}`)\n .join('\\n')\n return s\n .split(/^\\s*```\\s*$/gm)\n .map((s, i) => {\n if (i % 2 === 1) {\n if (!s.trim()) {\n return `\\`\\`\\`\\n\\`\\`\\`\\n`\n }\n // outdent the ``` blocks, but preserve whitespace otherwise.\n const split = s.split('\\n')\n // throw out the \\n at the start and end\n split.pop()\n split.shift()\n const si = split.reduce((shortest, l) => {\n /* c8 ignore next */\n const ind = l.match(/^\\s*/)?.[0] ?? ''\n if (ind.length) return Math.min(ind.length, shortest)\n else return shortest\n }, Infinity)\n /* c8 ignore next */\n const i = isFinite(si) ? si : 0\n return (\n '\\n```\\n' +\n split.map(s => `\\u200b${s.substring(i)}`).join('\\n') +\n '\\n```\\n'\n )\n }\n return (\n s\n // remove single line breaks, except for lists\n .replace(/([^\\n])\\n[ \\t]*([^\\n])/g, (_, $1, $2) =>\n !/^[-*]/.test($2) ? `${$1} ${$2}` : `${$1}\\n${$2}`,\n )\n // normalize mid-line whitespace\n .replace(/([^\\n])[ \\t]+([^\\n])/g, '$1 $2')\n // two line breaks are enough\n .replace(/\\n{3,}/g, '\\n\\n')\n // remove any spaces at the start of a line\n .replace(/\\n[ \\t]+/g, '\\n')\n .trim()\n )\n })\n .join('\\n')\n}\n\n// normalize for markdown printing, remove leading spaces on lines\nconst normalizeMarkdown = (s: string, pre: boolean = false): string => {\n const n = normalize(s, pre).replace(/\\\\/g, '\\\\\\\\')\n return pre ?\n `\\`\\`\\`\\n${n.replace(/\\u200b/g, '')}\\n\\`\\`\\``\n : n.replace(/\\n +/g, '\\n').trim()\n}\n\nconst normalizeOneLine = (s: string, pre: boolean = false) => {\n const n = normalize(s, pre)\n .replace(/[\\s\\u200b]+/g, ' ')\n .trim()\n return pre ? `\\`${n}\\`` : n\n}\n", "// TODO! cut this down? do we need the onlyFirst option?\n\nexport const ansiRegex = ({ onlyFirst = false } = {}) => {\n // Valid string terminator sequences are BEL, ESC\\, and 0x9c\n const ST = \"(?:\\\\u0007|\\\\u001B\\\\u005C|\\\\u009C)\";\n\n // OSC sequences only: ESC ] ... ST (non-greedy until the first ST)\n const osc = `(?:\\\\u001B\\\\][\\\\s\\\\S]*?${ST})`;\n\n // CSI and related: ESC/C1, optional intermediates, optional params (supports ; and :) then final byte\n const csi =\n \"[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:\\\\d{1,4}(?:[;:]\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]\";\n\n const pattern = `${osc}|${csi}`;\n\n return new RegExp(pattern, onlyFirst ? undefined : \"g\");\n};\n", "import { ansiRegex } from \"../ansi-regex/index.js\";\nconst regex = ansiRegex();\nexport const stripAnsi = (str: string) => str.replace(regex, \"\");\n", "export const eastAsianWidth = (character: string) => {\n var x = character.charCodeAt(0);\n var y = character.length == 2 ? character.charCodeAt(1) : 0;\n var codePoint = x;\n if (0xd800 <= x && x <= 0xdbff && 0xdc00 <= y && y <= 0xdfff) {\n x &= 0x3ff;\n y &= 0x3ff;\n codePoint = (x << 10) | y;\n codePoint += 0x10000;\n }\n\n if (\n 0x3000 == codePoint ||\n (0xff01 <= codePoint && codePoint <= 0xff60) ||\n (0xffe0 <= codePoint && codePoint <= 0xffe6)\n ) {\n return \"F\";\n }\n if (\n 0x20a9 == codePoint ||\n (0xff61 <= codePoint && codePoint <= 0xffbe) ||\n (0xffc2 <= codePoint && codePoint <= 0xffc7) ||\n (0xffca <= codePoint && codePoint <= 0xffcf) ||\n (0xffd2 <= codePoint && codePoint <= 0xffd7) ||\n (0xffda <= codePoint && codePoint <= 0xffdc) ||\n (0xffe8 <= codePoint && codePoint <= 0xffee)\n ) {\n return \"H\";\n }\n if (\n (0x1100 <= codePoint && codePoint <= 0x115f) ||\n (0x11a3 <= codePoint && codePoint <= 0x11a7) ||\n (0x11fa <= codePoint && codePoint <= 0x11ff) ||\n (0x2329 <= codePoint && codePoint <= 0x232a) ||\n (0x2e80 <= codePoint && codePoint <= 0x2e99) ||\n (0x2e9b <= codePoint && codePoint <= 0x2ef3) ||\n (0x2f00 <= codePoint && codePoint <= 0x2fd5) ||\n (0x2ff0 <= codePoint && codePoint <= 0x2ffb) ||\n (0x3001 <= codePoint && codePoint <= 0x303e) ||\n (0x3041 <= codePoint && codePoint <= 0x3096) ||\n (0x3099 <= codePoint && codePoint <= 0x30ff) ||\n (0x3105 <= codePoint && codePoint <= 0x312d) ||\n (0x3131 <= codePoint && codePoint <= 0x318e) ||\n (0x3190 <= codePoint && codePoint <= 0x31ba) ||\n (0x31c0 <= codePoint && codePoint <= 0x31e3) ||\n (0x31f0 <= codePoint && codePoint <= 0x321e) ||\n (0x3220 <= codePoint && codePoint <= 0x3247) ||\n (0x3250 <= codePoint && codePoint <= 0x32fe) ||\n (0x3300 <= codePoint && codePoint <= 0x4dbf) ||\n (0x4e00 <= codePoint && codePoint <= 0xa48c) ||\n (0xa490 <= codePoint && codePoint <= 0xa4c6) ||\n (0xa960 <= codePoint && codePoint <= 0xa97c) ||\n (0xac00 <= codePoint && codePoint <= 0xd7a3) ||\n (0xd7b0 <= codePoint && codePoint <= 0xd7c6) ||\n (0xd7cb <= codePoint && codePoint <= 0xd7fb) ||\n (0xf900 <= codePoint && codePoint <= 0xfaff) ||\n (0xfe10 <= codePoint && codePoint <= 0xfe19) ||\n (0xfe30 <= codePoint && codePoint <= 0xfe52) ||\n (0xfe54 <= codePoint && codePoint <= 0xfe66) ||\n (0xfe68 <= codePoint && codePoint <= 0xfe6b) ||\n (0x1b000 <= codePoint && codePoint <= 0x1b001) ||\n (0x1f200 <= codePoint && codePoint <= 0x1f202) ||\n (0x1f210 <= codePoint && codePoint <= 0x1f23a) ||\n (0x1f240 <= codePoint && codePoint <= 0x1f248) ||\n (0x1f250 <= codePoint && codePoint <= 0x1f251) ||\n (0x20000 <= codePoint && codePoint <= 0x2f73f) ||\n (0x2b740 <= codePoint && codePoint <= 0x2fffd) ||\n (0x30000 <= codePoint && codePoint <= 0x3fffd)\n ) {\n return \"W\";\n }\n if (\n (0x0020 <= codePoint && codePoint <= 0x007e) ||\n (0x00a2 <= codePoint && codePoint <= 0x00a3) ||\n (0x00a5 <= codePoint && codePoint <= 0x00a6) ||\n 0x00ac == codePoint ||\n 0x00af == codePoint ||\n (0x27e6 <= codePoint && codePoint <= 0x27ed) ||\n (0x2985 <= codePoint && codePoint <= 0x2986)\n ) {\n return \"Na\";\n }\n if (\n 0x00a1 == codePoint ||\n 0x00a4 == codePoint ||\n (0x00a7 <= codePoint && codePoint <= 0x00a8) ||\n 0x00aa == codePoint ||\n (0x00ad <= codePoint && codePoint <= 0x00ae) ||\n (0x00b0 <= codePoint && codePoint <= 0x00b4) ||\n (0x00b6 <= codePoint && codePoint <= 0x00ba) ||\n (0x00bc <= codePoint && codePoint <= 0x00bf) ||\n 0x00c6 == codePoint ||\n 0x00d0 == codePoint ||\n (0x00d7 <= codePoint && codePoint <= 0x00d8) ||\n (0x00de <= codePoint && codePoint <= 0x00e1) ||\n 0x00e6 == codePoint ||\n (0x00e8 <= codePoint && codePoint <= 0x00ea) ||\n (0x00ec <= codePoint && codePoint <= 0x00ed) ||\n 0x00f0 == codePoint ||\n (0x00f2 <= codePoint && codePoint <= 0x00f3) ||\n (0x00f7 <= codePoint && codePoint <= 0x00fa) ||\n 0x00fc == codePoint ||\n 0x00fe == codePoint ||\n 0x0101 == codePoint ||\n 0x0111 == codePoint ||\n 0x0113 == codePoint ||\n 0x011b == codePoint ||\n (0x0126 <= codePoint && codePoint <= 0x0127) ||\n 0x012b == codePoint ||\n (0x0131 <= codePoint && codePoint <= 0x0133) ||\n 0x0138 == codePoint ||\n (0x013f <= codePoint && codePoint <= 0x0142) ||\n 0x0144 == codePoint ||\n (0x0148 <= codePoint && codePoint <= 0x014b) ||\n 0x014d == codePoint ||\n (0x0152 <= codePoint && codePoint <= 0x0153) ||\n (0x0166 <= codePoint && codePoint <= 0x0167) ||\n 0x016b == codePoint ||\n 0x01ce == codePoint ||\n 0x01d0 == codePoint ||\n 0x01d2 == codePoint ||\n 0x01d4 == codePoint ||\n 0x01d6 == codePoint ||\n 0x01d8 == codePoint ||\n 0x01da == codePoint ||\n 0x01dc == codePoint ||\n 0x0251 == codePoint ||\n 0x0261 == codePoint ||\n 0x02c4 == codePoint ||\n 0x02c7 == codePoint ||\n (0x02c9 <= codePoint && codePoint <= 0x02cb) ||\n 0x02cd == codePoint ||\n 0x02d0 == codePoint ||\n (0x02d8 <= codePoint && codePoint <= 0x02db) ||\n 0x02dd == codePoint ||\n 0x02df == codePoint ||\n (0x0300 <= codePoint && codePoint <= 0x036f) ||\n (0x0391 <= codePoint && codePoint <= 0x03a1) ||\n (0x03a3 <= codePoint && codePoint <= 0x03a9) ||\n (0x03b1 <= codePoint && codePoint <= 0x03c1) ||\n (0x03c3 <= codePoint && codePoint <= 0x03c9) ||\n 0x0401 == codePoint ||\n (0x0410 <= codePoint && codePoint <= 0x044f) ||\n 0x0451 == codePoint ||\n 0x2010 == codePoint ||\n (0x2013 <= codePoint && codePoint <= 0x2016) ||\n (0x2018 <= codePoint && codePoint <= 0x2019) ||\n (0x201c <= codePoint && codePoint <= 0x201d) ||\n (0x2020 <= codePoint && codePoint <= 0x2022) ||\n (0x2024 <= codePoint && codePoint <= 0x2027) ||\n 0x2030 == codePoint ||\n (0x2032 <= codePoint && codePoint <= 0x2033) ||\n 0x2035 == codePoint ||\n 0x203b == codePoint ||\n 0x203e == codePoint ||\n 0x2074 == codePoint ||\n 0x207f == codePoint ||\n (0x2081 <= codePoint && codePoint <= 0x2084) ||\n 0x20ac == codePoint ||\n 0x2103 == codePoint ||\n 0x2105 == codePoint ||\n 0x2109 == codePoint ||\n 0x2113 == codePoint ||\n 0x2116 == codePoint ||\n (0x2121 <= codePoint && codePoint <= 0x2122) ||\n 0x2126 == codePoint ||\n 0x212b == codePoint ||\n (0x2153 <= codePoint && codePoint <= 0x2154) ||\n (0x215b <= codePoint && codePoint <= 0x215e) ||\n (0x2160 <= codePoint && codePoint <= 0x216b) ||\n (0x2170 <= codePoint && codePoint <= 0x2179) ||\n 0x2189 == codePoint ||\n (0x2190 <= codePoint && codePoint <= 0x2199) ||\n (0x21b8 <= codePoint && codePoint <= 0x21b9) ||\n 0x21d2 == codePoint ||\n 0x21d4 == codePoint ||\n 0x21e7 == codePoint ||\n 0x2200 == codePoint ||\n (0x2202 <= codePoint && codePoint <= 0x2203) ||\n (0x2207 <= codePoint && codePoint <= 0x2208) ||\n 0x220b == codePoint ||\n 0x220f == codePoint ||\n 0x2211 == codePoint ||\n 0x2215 == codePoint ||\n 0x221a == codePoint ||\n (0x221d <= codePoint && codePoint <= 0x2220) ||\n 0x2223 == codePoint ||\n 0x2225 == codePoint ||\n (0x2227 <= codePoint && codePoint <= 0x222c) ||\n 0x222e == codePoint ||\n (0x2234 <= codePoint && codePoint <= 0x2237) ||\n (0x223c <= codePoint && codePoint <= 0x223d) ||\n 0x2248 == codePoint ||\n 0x224c == codePoint ||\n 0x2252 == codePoint ||\n (0x2260 <= codePoint && codePoint <= 0x2261) ||\n (0x2264 <= codePoint && codePoint <= 0x2267) ||\n (0x226a <= codePoint && codePoint <= 0x226b) ||\n (0x226e <= codePoint && codePoint <= 0x226f) ||\n (0x2282 <= codePoint && codePoint <= 0x2283) ||\n (0x2286 <= codePoint && codePoint <= 0x2287) ||\n 0x2295 == codePoint ||\n 0x2299 == codePoint ||\n 0x22a5 == codePoint ||\n 0x22bf == codePoint ||\n 0x2312 == codePoint ||\n (0x2460 <= codePoint && codePoint <= 0x24e9) ||\n (0x24eb <= codePoint && codePoint <= 0x254b) ||\n (0x2550 <= codePoint && codePoint <= 0x2573) ||\n (0x2580 <= codePoint && codePoint <= 0x258f) ||\n (0x2592 <= codePoint && codePoint <= 0x2595) ||\n (0x25a0 <= codePoint && codePoint <= 0x25a1) ||\n (0x25a3 <= codePoint && codePoint <= 0x25a9) ||\n (0x25b2 <= codePoint && codePoint <= 0x25b3) ||\n (0x25b6 <= codePoint && codePoint <= 0x25b7) ||\n (0x25bc <= codePoint && codePoint <= 0x25bd) ||\n (0x25c0 <= codePoint && codePoint <= 0x25c1) ||\n (0x25c6 <= codePoint && codePoint <= 0x25c8) ||\n 0x25cb == codePoint ||\n (0x25ce <= codePoint && codePoint <= 0x25d1) ||\n (0x25e2 <= codePoint && codePoint <= 0x25e5) ||\n 0x25ef == codePoint ||\n (0x2605 <= codePoint && codePoint <= 0x2606) ||\n 0x2609 == codePoint ||\n (0x260e <= codePoint && codePoint <= 0x260f) ||\n (0x2614 <= codePoint && codePoint <= 0x2615) ||\n 0x261c == codePoint ||\n 0x261e == codePoint ||\n 0x2640 == codePoint ||\n 0x2642 == codePoint ||\n (0x2660 <= codePoint && codePoint <= 0x2661) ||\n (0x2663 <= codePoint && codePoint <= 0x2665) ||\n (0x2667 <= codePoint && codePoint <= 0x266a) ||\n (0x266c <= codePoint && codePoint <= 0x266d) ||\n 0x266f == codePoint ||\n (0x269e <= codePoint && codePoint <= 0x269f) ||\n (0x26be <= codePoint && codePoint <= 0x26bf) ||\n (0x26c4 <= codePoint && codePoint <= 0x26cd) ||\n (0x26cf <= codePoint && codePoint <= 0x26e1) ||\n 0x26e3 == codePoint ||\n (0x26e8 <= codePoint && codePoint <= 0x26ff) ||\n 0x273d == codePoint ||\n 0x2757 == codePoint ||\n (0x2776 <= codePoint && codePoint <= 0x277f) ||\n (0x2b55 <= codePoint && codePoint <= 0x2b59) ||\n (0x3248 <= codePoint && codePoint <= 0x324f) ||\n (0xe000 <= codePoint && codePoint <= 0xf8ff) ||\n (0xfe00 <= codePoint && codePoint <= 0xfe0f) ||\n 0xfffd == codePoint ||\n (0x1f100 <= codePoint && codePoint <= 0x1f10a) ||\n (0x1f110 <= codePoint && codePoint <= 0x1f12d) ||\n (0x1f130 <= codePoint && codePoint <= 0x1f169) ||\n (0x1f170 <= codePoint && codePoint <= 0x1f19a) ||\n (0xe0100 <= codePoint && codePoint <= 0xe01ef) ||\n (0xf0000 <= codePoint && codePoint <= 0xffffd) ||\n (0x100000 <= codePoint && codePoint <= 0x10fffd)\n ) {\n return \"A\";\n }\n\n return \"N\";\n};\n\nexport const characterLength = (character: string) => {\n var code = eastAsianWidth(character);\n if (code == \"F\" || code == \"W\" || code == \"A\") {\n return 2;\n } else {\n return 1;\n }\n};\n\n// Split a string considering surrogate-pairs.\nexport const stringToArray = (str: string) => {\n return str.match(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[^\\uD800-\\uDFFF]/g) || [];\n};\n\nexport const length = (str: string) => {\n var characters = stringToArray(str);\n var len = 0;\n for (const char of characters) {\n len = len + characterLength(char);\n }\n return len;\n};\n\nexport const slice = (text: string, start: number, end: number) => {\n const textLen = length(text);\n start = start ? start : 0;\n end = end ? end : 1;\n if (start < 0) {\n start = textLen + start;\n }\n if (end < 0) {\n end = textLen + end;\n }\n var result = \"\";\n var eawLen = 0;\n var chars = stringToArray(text);\n for (const char of chars) {\n var charLen = length(char);\n if (eawLen >= start - (charLen == 2 ? 1 : 0)) {\n if (eawLen + charLen <= end) {\n result += char;\n } else {\n break;\n }\n }\n eawLen += charLen;\n }\n return result;\n};\n", "// https://mths.be/emoji\nexport const emojiRegex = () =>\n /\\uD83C\\uDFF4\\uDB40\\uDC67\\uDB40\\uDC62(?:\\uDB40\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73|\\uDB40\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDB40\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67)\\uDB40\\uDC7F|(?:\\uD83E\\uDDD1\\uD83C\\uDFFF\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFE])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFE\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFD\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFC\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFB\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFB\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFC-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C\\uDFFB(?:\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF]))|\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFC-\\uDFFF])|[\\u2695\\u2696\\u2708]\\uFE0F|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))?|(?:\\uD83C[\\uDFFC-\\uDFFF])\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF]))|\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83D\\uDC68|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFE])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])\\uFE0F|\\u200D(?:(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83D[\\uDC66\\uDC67])|\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC)?|(?:\\uD83D\\uDC69(?:\\uD83C\\uDFFB\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|(?:\\uD83C[\\uDFFC-\\uDFFF])\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69]))|\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1)(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC69(?:\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83E\\uDDD1(?:\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|(?:\\uD83D\\uDC41\\uFE0F\\u200D\\uD83D\\uDDE8|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|\\uD83D\\uDC69(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|\\uD83D\\uDE36\\u200D\\uD83C\\uDF2B|\\uD83C\\uDFF3\\uFE0F\\u200D\\u26A7|\\uD83D\\uDC3B\\u200D\\u2744|(?:(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF])\\u200D[\\u2640\\u2642]|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|\\uD83C\\uDFF4\\u200D\\u2620|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])\\u200D[\\u2640\\u2642]|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u2600-\\u2604\\u260E\\u2611\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26B0\\u26B1\\u26C8\\u26CF\\u26D1\\u26D3\\u26E9\\u26F0\\u26F1\\u26F4\\u26F7\\u26F8\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]|\\uD83D[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3])\\uFE0F|\\uD83C\\uDFF3\\uFE0F\\u200D\\uD83C\\uDF08|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66|\\uD83D\\uDE35\\u200D\\uD83D\\uDCAB|\\uD83D\\uDE2E\\u200D\\uD83D\\uDCA8|\\uD83D\\uDC15\\u200D\\uD83E\\uDDBA|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC|\\uD83C\\uDFFB)?|\\uD83D\\uDC69(?:\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC|\\uD83C\\uDFFB)?|\\uD83C\\uDDFD\\uD83C\\uDDF0|\\uD83C\\uDDF6\\uD83C\\uDDE6|\\uD83C\\uDDF4\\uD83C\\uDDF2|\\uD83D\\uDC08\\u200D\\u2B1B|\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79)|\\uD83D\\uDC41\\uFE0F|\\uD83C\\uDFF3\\uFE0F|\\uD83C\\uDDFF(?:\\uD83C[\\uDDE6\\uDDF2\\uDDFC])|\\uD83C\\uDDFE(?:\\uD83C[\\uDDEA\\uDDF9])|\\uD83C\\uDDFC(?:\\uD83C[\\uDDEB\\uDDF8])|\\uD83C\\uDDFB(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA])|\\uD83C\\uDDFA(?:\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF])|\\uD83C\\uDDF9(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF])|\\uD83C\\uDDF8(?:\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF])|\\uD83C\\uDDF7(?:\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC])|\\uD83C\\uDDF5(?:\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE])|\\uD83C\\uDDF3(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF])|\\uD83C\\uDDF2(?:\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF])|\\uD83C\\uDDF1(?:\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE])|\\uD83C\\uDDF0(?:\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDEF(?:\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5])|\\uD83C\\uDDEE(?:\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9])|\\uD83C\\uDDED(?:\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA])|\\uD83C\\uDDEC(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE])|\\uD83C\\uDDEB(?:\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7])|\\uD83C\\uDDEA(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA])|\\uD83C\\uDDE9(?:\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF])|\\uD83C\\uDDE8(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF])|\\uD83C\\uDDE7(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDE6(?:\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF])|[#\\*0-9]\\uFE0F\\u20E3|\\u2764\\uFE0F|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDFF4|(?:[\\u270A\\u270B]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u261D\\u270C\\u270D]|\\uD83D[\\uDD74\\uDD90])(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])|[\\u270A\\u270B]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC08\\uDC15\\uDC3B\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE2E\\uDE35\\uDE36\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5]|\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD]|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF]|[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD1D\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78\\uDD7A-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCB\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6]|(?:[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u270A\\u270B\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF93\\uDFA0-\\uDFCA\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF4\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC3E\\uDC40\\uDC42-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDD7A\\uDD95\\uDD96\\uDDA4\\uDDFB-\\uDE4F\\uDE80-\\uDEC5\\uDECC\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6])|(?:[#\\*0-9\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u261D\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A1\\u26A7\\u26AA\\u26AB\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C5\\u26C8\\u26CE\\u26CF\\u26D1\\u26D3\\u26D4\\u26E9\\u26EA\\u26F0-\\u26F5\\u26F7-\\u26FA\\u26FD\\u2702\\u2705\\u2708-\\u270D\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763\\u2764\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDC04\\uDCCF\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE02\\uDE1A\\uDE2F\\uDE32-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF21\\uDF24-\\uDF93\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E-\\uDFF0\\uDFF3-\\uDFF5\\uDFF7-\\uDFFF]|\\uD83D[\\uDC00-\\uDCFD\\uDCFF-\\uDD3D\\uDD49-\\uDD4E\\uDD50-\\uDD67\\uDD6F\\uDD70\\uDD73-\\uDD7A\\uDD87\\uDD8A-\\uDD8D\\uDD90\\uDD95\\uDD96\\uDDA4\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA-\\uDE4F\\uDE80-\\uDEC5\\uDECB-\\uDED2\\uDED5-\\uDED7\\uDEE0-\\uDEE5\\uDEE9\\uDEEB\\uDEEC\\uDEF0\\uDEF3-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6])\\uFE0F|(?:[\\u261D\\u26F9\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2-\\uDFC4\\uDFC7\\uDFCA-\\uDFCC]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66-\\uDC78\\uDC7C\\uDC81-\\uDC83\\uDC85-\\uDC87\\uDC8F\\uDC91\\uDCAA\\uDD74\\uDD75\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE45-\\uDE47\\uDE4B-\\uDE4F\\uDEA3\\uDEB4-\\uDEB6\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD26\\uDD30-\\uDD39\\uDD3C-\\uDD3E\\uDD77\\uDDB5\\uDDB6\\uDDB8\\uDDB9\\uDDBB\\uDDCD-\\uDDCF\\uDDD1-\\uDDDD])/g;\n", "import { stripAnsi } from \"../strip-ansi/index.js\";\nimport { eastAsianWidth } from \"../eastasianwidth/index.js\";\nimport { emojiRegex } from \"../emoji-regex/index.js\";\n\nexport type Options = {\n ambiguousIsNarrow?: boolean;\n};\n\nexport function stringWidth(str: string, options: Options = {}) {\n if (typeof str !== \"string\" || str.length === 0) {\n return 0;\n }\n\n options = {\n ambiguousIsNarrow: true,\n ...options,\n };\n\n str = stripAnsi(str);\n\n if (str.length === 0) {\n return 0;\n }\n\n str = str.replace(emojiRegex(), \" \");\n\n const ambiguousCharacterWidth = options.ambiguousIsNarrow ? 1 : 2;\n let width = 0;\n\n for (const character of str) {\n const codePoint = character.codePointAt(0);\n\n // Ignore control characters\n if (\n !codePoint ||\n codePoint <= 0x1f ||\n (codePoint >= 0x7f && codePoint <= 0x9f)\n ) {\n continue;\n }\n\n // Ignore combining characters\n if (codePoint >= 0x300 && codePoint <= 0x36f) {\n continue;\n }\n\n const code = eastAsianWidth(character);\n switch (code) {\n case \"F\":\n case \"W\":\n width += 2;\n break;\n case \"A\":\n width += ambiguousCharacterWidth;\n break;\n default:\n width += 1;\n }\n }\n\n return width;\n}\n", "const styles = {\n modifier: {\n reset: [0, 0],\n // 21 isn't widely supported and 22 does the same thing\n bold: [1, 22],\n dim: [2, 22],\n italic: [3, 23],\n underline: [4, 24],\n overline: [53, 55],\n inverse: [7, 27],\n hidden: [8, 28],\n strikethrough: [9, 29],\n },\n color: {\n black: [30, 39],\n red: [31, 39],\n green: [32, 39],\n yellow: [33, 39],\n blue: [34, 39],\n magenta: [35, 39],\n cyan: [36, 39],\n white: [37, 39],\n\n // Bright color\n blackBright: [90, 39],\n gray: [90, 39], // Alias of `blackBright`\n grey: [90, 39], // Alias of `blackBright`\n redBright: [91, 39],\n greenBright: [92, 39],\n yellowBright: [93, 39],\n blueBright: [94, 39],\n magentaBright: [95, 39],\n cyanBright: [96, 39],\n whiteBright: [97, 39],\n },\n bgColor: {\n bgBlack: [40, 49],\n bgRed: [41, 49],\n bgGreen: [42, 49],\n bgYellow: [43, 49],\n bgBlue: [44, 49],\n bgMagenta: [45, 49],\n bgCyan: [46, 49],\n bgWhite: [47, 49],\n\n // Bright color\n bgBlackBright: [100, 49],\n bgGray: [100, 49], // Alias of `bgBlackBright`\n bgGrey: [100, 49], // Alias of `bgBlackBright`\n bgRedBright: [101, 49],\n bgGreenBright: [102, 49],\n bgYellowBright: [103, 49],\n bgBlueBright: [104, 49],\n bgMagentaBright: [105, 49],\n bgCyanBright: [106, 49],\n bgWhiteBright: [107, 49],\n },\n} as const;\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\ninterface AnsiStyles extends Record<string, unknown> {}\nclass AnsiStyles {}\n\nexport const codes = new Map<number, number>();\nconst ingest = (set: Record<string, readonly [number, number]>) =>\n Object.fromEntries(\n Object.entries(set).map(([key, [open, close]]) => {\n codes.set(open, close);\n return [\n key,\n (AnsiStyles.prototype[key] = {\n open: `\\u001B[${open}m`,\n close: `\\u001B[${close}m`,\n }),\n ];\n }),\n );\n\nexport const ansiStyles = new (class extends AnsiStyles {\n codes = codes;\n\n modifier = ingest(styles.modifier);\n\n color = {\n ...ingest(styles.color),\n close: \"\\x1B[39m\",\n ansi: (code: number) => `\\u001B[${code}m`,\n ansi256: (code: number) => `\\u001B[${38};5;${code}m`,\n ansi16m: (red: number, green: number, blue: number) =>\n `\\u001B[${38};2;${red};${green};${blue}m`,\n };\n\n bgColor = {\n ...ingest(styles.bgColor),\n close: \"\\u001B[49m\",\n ansi: (code: number) => `\\u001B[${code + 10}m`,\n ansi256: (code: number) => `\\u001B[${48};5;${code}m`,\n ansi16m: (red: number, green: number, blue: number) =>\n `\\u001B[${48};2;${red};${green};${blue}m`,\n };\n\n rgbToAnsi256(red: number, green: number, blue: number) {\n // We use the extended greyscale palette here, with the exception of\n // black and white. normal palette only has 4 greyscale shades.\n if (red === green && green === blue) {\n if (red < 8) return 16;\n if (red > 248) return 231;\n return Math.round(((red - 8) / 247) * 24) + 232;\n }\n\n return (\n 16 +\n 36 * Math.round((red / 255) * 5) +\n 6 * Math.round((green / 255) * 5) +\n Math.round((blue / 255) * 5)\n );\n }\n\n hexToRgb(hex: number): [number, number, number] {\n const matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n if (!matches) {\n return [0, 0, 0];\n }\n\n let [colorString] = matches;\n\n if (colorString.length === 3) {\n colorString = [...colorString]\n .map((character) => character + character)\n .join(\"\");\n }\n\n const integer = Number.parseInt(colorString, 16);\n\n return [\n (integer >> 16) & 0xff,\n (integer >> 8) & 0xff,\n integer & 0xff,\n ];\n }\n\n hexToAnsi256(hex: number) {\n return this.rgbToAnsi256(...this.hexToRgb(hex));\n }\n ansi256ToAnsi(code: number) {\n if (code < 8) {\n return 30 + code;\n }\n\n if (code < 16) {\n return 90 + (code - 8);\n }\n\n let red;\n let green;\n let blue;\n\n if (code >= 232) {\n red = ((code - 232) * 10 + 8) / 255;\n green = red;\n blue = red;\n } else {\n code -= 16;\n\n const remainder = code % 36;\n\n red = Math.floor(code / 36) / 5;\n green = Math.floor(remainder / 6) / 5;\n blue = (remainder % 6) / 5;\n }\n\n const value = Math.max(red, green, blue) * 2;\n\n if (value === 0) {\n return 30;\n }\n\n let result =\n 30 +\n ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n if (value === 2) {\n result += 60;\n }\n\n return result;\n }\n rgbToAnsi(red: number, green: number, blue: number) {\n return this.ansi256ToAnsi(this.rgbToAnsi256(red, green, blue));\n }\n hexToAnsi(hex: number) {\n return this.ansi256ToAnsi(this.hexToAnsi256(hex));\n }\n})();\n", "import { stringWidth } from \"../string-width/index.js\";\nimport { stripAnsi } from \"../strip-ansi/index.js\";\nimport { ansiStyles } from \"../ansi-styles/index.js\";\n\nconst ESCAPES = new Set([\"\\u001B\", \"\\u009B\"]);\n\nconst END_CODE = 39;\nconst ANSI_ESCAPE_BELL = \"\\u0007\";\nconst ANSI_CSI = \"[\";\nconst ANSI_OSC = \"]\";\nconst ANSI_SGR_TERMINATOR = \"m\";\nconst ANSI_ESCAPE_LINK = `${ANSI_OSC}8;;`;\n\nconst wrapAnsiCode = (code: number) =>\n `${ESCAPES.values().next().value}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`;\nconst wrapAnsiHyperlink = (uri: string) =>\n `${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${uri}${ANSI_ESCAPE_BELL}`;\n\n// Calculate the length of words split on ' ', ignoring\n// the extra characters added by ansi escape codes\nconst wordLengths = (str: string) =>\n str.split(\" \").map((character) => stringWidth(character));\n\n// Wrap a long word across multiple rows\n// Ansi escape codes do not count towards length\nconst wrapWord = (rows: string[], word: string, columns: number) => {\n const characters = [...word];\n\n let isInsideEscape = false;\n let isInsideLinkEscape = false;\n let visible = stringWidth(stripAnsi(String(rows[rows.length - 1])));\n\n for (const [index, character] of characters.entries()) {\n const characterLength = stringWidth(character);\n\n if (visible + characterLength <= columns) {\n rows[rows.length - 1] += character;\n } else {\n rows.push(character);\n visible = 0;\n }\n\n if (ESCAPES.has(character)) {\n isInsideEscape = true;\n isInsideLinkEscape = characters\n .slice(index + 1)\n .join(\"\")\n .startsWith(ANSI_ESCAPE_LINK);\n }\n\n if (isInsideEscape) {\n if (isInsideLinkEscape) {\n if (character === ANSI_ESCAPE_BELL) {\n isInsideEscape = false;\n isInsideLinkEscape = false;\n }\n } else if (character === ANSI_SGR_TERMINATOR) {\n isInsideEscape = false;\n }\n\n continue;\n }\n\n visible += characterLength;\n\n if (visible === columns && index < characters.length - 1) {\n rows.push(\"\");\n visible = 0;\n }\n }\n\n // It's possible that the last row we copy over is only\n // ansi escape characters, handle this edge-case\n if (!visible && String(rows[rows.length - 1]).length > 0 && rows.length > 1) {\n rows[rows.length - 2] = String(rows[rows.length - 1]) + rows.pop();\n }\n};\n\n// Trims spaces from a string ignoring invisible sequences\nconst stringVisibleTrimSpacesRight = (str: string) => {\n const words = str.split(\" \");\n let last = words.length;\n\n while (last > 0) {\n if (stringWidth(String(words[last - 1])) > 0) {\n break;\n }\n\n last--;\n }\n\n if (last === words.length) {\n return str;\n }\n\n return words.slice(0, last).join(\" \") + words.slice(last).join(\"\");\n};\n\n// The wrap-ansi module can be invoked in either 'hard' or 'soft' wrap mode\n//\n// 'hard' will never allow a string to take up more than columns characters\n//\n// 'soft' allows long words to expand past the column length\nexport type Options = { trim?: boolean; wordWrap?: boolean; hard?: boolean };\nconst exec = (str: string, columns: number, options: Options = {}) => {\n if (options.trim !== false && str.trim() === \"\") {\n return \"\";\n }\n\n let returnValue = \"\";\n let escapeCode;\n let escapeUrl;\n\n const lengths = wordLengths(str);\n let rows = [\"\"];\n\n for (const [index, word] of str.split(\" \").entries()) {\n if (options.trim !== false) {\n rows[rows.length - 1] = String(rows[rows.length - 1]).trimStart();\n }\n\n let rowLength = stringWidth(String(rows[rows.length - 1]));\n\n if (index !== 0) {\n if (\n rowLength >= columns &&\n (options.wordWrap === false || options.trim === false)\n ) {\n // If we start with a new word but the current row length equals the length of the columns, add a new row\n rows.push(\"\");\n rowLength = 0;\n }\n\n if (rowLength > 0 || options.trim === false) {\n rows[rows.length - 1] += \" \";\n rowLength++;\n }\n }\n\n // In 'hard' wrap mode, the length of a line is never allowed to extend past 'columns'\n const len = Number(lengths[index]);\n if (options.hard && len > columns) {\n const remainingColumns = columns - rowLength;\n const breaksStartingThisLine =\n 1 + Math.floor((len - remainingColumns - 1) / columns);\n const breaksStartingNextLine = Math.floor((len - 1) / columns);\n if (breaksStartingNextLine < breaksStartingThisLine) {\n rows.push(\"\");\n }\n\n wrapWord(rows, word, columns);\n continue;\n }\n\n if (rowLength + len > columns && rowLength > 0 && len > 0) {\n if (options.wordWrap === false && rowLength < columns) {\n wrapWord(rows, word, columns);\n continue;\n }\n\n rows.push(\"\");\n }\n\n if (rowLength + len > columns && options.wordWrap === false) {\n wrapWord(rows, word, columns);\n continue;\n }\n\n rows[rows.length - 1] += word;\n }\n\n if (options.trim !== false) {\n rows = rows.map((row) => stringVisibleTrimSpacesRight(row));\n }\n\n const pre = [...rows.join(\"\\n\")];\n\n for (const [index, character] of pre.entries()) {\n returnValue += character;\n\n if (ESCAPES.has(character)) {\n const { groups } = (new RegExp(\n `(?:\\\\${ANSI_CSI}(?<code>\\\\d+)m|\\\\${ANSI_ESCAPE_LINK}(?<uri>.*)${ANSI_ESCAPE_BELL})`,\n ).exec(pre.slice(index).join(\"\")) || { groups: {} }) as {\n groups: {\n code?: string;\n uri?: string;\n };\n };\n if (groups.code !== undefined) {\n const code = Number.parseFloat(groups.code);\n escapeCode = code === END_CODE ? undefined : code;\n } else if (groups.uri !== undefined) {\n escapeUrl = groups.uri.length === 0 ? undefined : groups.uri;\n }\n }\n\n const code = ansiStyles.codes.get(Number(escapeCode));\n\n if (pre[index + 1] === \"\\n\") {\n if (escapeUrl) {\n returnValue += wrapAnsiHyperlink(\"\");\n }\n\n if (escapeCode && code) {\n returnValue += wrapAnsiCode(code);\n }\n } else if (character === \"\\n\") {\n if (escapeCode && code) {\n returnValue += wrapAnsiCode(escapeCode);\n }\n\n if (escapeUrl) {\n returnValue += wrapAnsiHyperlink(escapeUrl);\n }\n }\n }\n\n return returnValue;\n};\n\n// For each newline, invoke the method separately\nexport const wrap = (str: string, columns: number, options: Options) =>\n String(str)\n .normalize()\n .replace(/\\r\\n/g, \"\\n\")\n .split(\"\\n\")\n .map((line) => exec(line, columns, options))\n .join(\"\\n\");\n", "import { stringWidth } from './string-width/index.js'\nimport { stripAnsi } from './strip-ansi/index.js'\nimport { wrap } from './wrap-ansi/index.js'\n\nconst align = {\n right: (str: string, width: number): string =>\n `${' '.repeat(Math.max(0, width - stringWidth(str)))}${str}`,\n center: (str: string, width: number): string =>\n `${' '.repeat(Math.max(0, width - stringWidth(str)) >> 1)}${str}`,\n}\n\nconst top = 0\nconst right = 1\nconst bottom = 2\nconst left = 3\n\nexport type UIOptions = {\n width: number\n wrap?: boolean\n rows?: string[]\n}\n\nexport type Column = {\n text: string\n width?: number\n align?: 'right' | 'left' | 'center'\n padding?: number[]\n border?: boolean\n}\n\nexport type ColumnArray = Column[] & {\n span?: boolean\n}\n\nexport type Line = {\n hidden?: boolean\n text: string\n span?: boolean\n}\n\nexport class UI {\n width: number\n wrap: boolean\n rows: ColumnArray[]\n\n constructor(opts: UIOptions) {\n this.width = opts.width\n /* c8 ignore start */\n this.wrap = opts.wrap ?? true\n /* c8 ignore stop */\n this.rows = []\n }\n\n span(...args: ColumnArray) {\n const cols = this.div(...args)\n cols.span = true\n }\n\n resetOutput() {\n this.rows = []\n }\n\n div(...args: (Column | string)[]): ColumnArray {\n if (args.length === 0) {\n this.div('')\n }\n\n if (\n this.wrap &&\n this.shouldApplyLayoutDSL(...args) &&\n typeof args[0] === 'string'\n ) {\n return this.applyLayoutDSL(args[0])\n }\n\n const cols: ColumnArray = Object.assign(\n args.map(arg => {\n if (typeof arg === 'string') {\n return this.colFromString(arg)\n }\n return arg\n }),\n { span: false },\n )\n\n this.rows.push(cols)\n return cols\n }\n\n shouldApplyLayoutDSL(...args: (Column | string)[]): boolean {\n return (\n args.length === 1 &&\n typeof args[0] === 'string' &&\n /[\\t\\n]/.test(args[0])\n )\n }\n\n applyLayoutDSL(str: string): ColumnArray {\n const rows = str.split('\\n').map(row => row.split('\\t'))\n let leftColumnWidth = 0\n\n // simple heuristic for layout, make sure the\n // second column lines up along the left-hand.\n // don't allow the first column to take up more\n // than 50% of the screen.\n rows.forEach(columns => {\n if (\n columns.length > 1 &&\n stringWidth(String(columns[0])) > leftColumnWidth\n ) {\n leftColumnWidth = Math.min(\n Math.floor(this.width * 0.5),\n stringWidth(String(columns[0])),\n )\n }\n })\n\n // generate a table:\n // replacing ' ' with padding calculations.\n // using the algorithmically generated width.\n rows.forEach(columns => {\n this.div(\n ...columns.map((r, i) => {\n return {\n text: r.trim(),\n padding: this.measurePadding(r),\n width:\n i === 0 && columns.length > 1 ? leftColumnWidth : undefined,\n } as Column\n }),\n )\n })\n\n const row = this.rows[this.rows.length - 1]\n /* c8 ignore start */\n if (!row) {\n throw new Error('no rows found')\n }\n /* c8 ignore stop */\n return row\n }\n\n colFromString(text: string): Column {\n return {\n text,\n padding: this.measurePadding(text),\n }\n }\n\n measurePadding(str: string): number[] {\n // measure padding without ansi escape codes\n const noAnsi = stripAnsi(str)\n const [right = '', left = ''] = [\n noAnsi.match(/\\s*$/)?.[0],\n noAnsi.match(/^\\s*/)?.[0],\n ]\n return [0, right.length, 0, left.length]\n }\n\n toString(): string {\n const lines: Line[] = []\n\n this.rows.forEach(row => {\n this.rowToString(row, lines)\n })\n\n // don't display any lines with the\n // hidden flag set.\n return lines\n .filter(line => !line.hidden)\n .map(line => line.text)\n .join('\\n')\n }\n\n rowToString(row: ColumnArray, lines: Line[]) {\n this.rasterize(row).forEach((rrow, r) => {\n let str = ''\n rrow.forEach((col: string, c: number) => {\n const column = row[c] as Column\n const { width } = column as Column // the width with padding.\n const wrapWidth = this.negatePadding(column) // the width without padding.\n\n let ts = col // temporary string used during alignment/padding.\n\n if (wrapWidth > stringWidth(col)) {\n ts += ' '.repeat(wrapWidth - stringWidth(col))\n }\n\n // align the string within its column.\n if (column.align && column.align !== 'left' && this.wrap) {\n const fn = align[column.align as 'right' | 'center']\n ts = fn(ts.trim(), wrapWidth)\n if (stringWidth(ts) < wrapWidth) {\n /* c8 ignore start */\n const w = width || 0\n /* c8 ignore stop */\n ts += ' '.repeat(w - stringWidth(ts) - 1)\n }\n }\n\n // apply border and padding to string.\n const padding = column.padding || [0, 0, 0, 0]\n if (padding[left]) {\n str += ' '.repeat(padding[left])\n }\n\n str += addBorder(column, ts, '| ')\n str += ts\n str += addBorder(column, ts, ' |')\n if (padding[right]) {\n str += ' '.repeat(padding[right])\n }\n\n // if prior row is span, try to render the\n // current row on the prior line.\n if (r === 0 && lines.length > 0) {\n const lastLine = lines[lines.length - 1]\n /* c8 ignore start */\n if (!lastLine) {\n throw new Error('last line not found')\n }\n /* c8 ignore stop */\n str = this.renderInline(str, lastLine)\n }\n })\n\n // remove trailing whitespace.\n lines.push({\n text: str.replace(/ +$/, ''),\n span: row.span,\n })\n })\n\n return lines\n }\n\n // if the full 'source' can render in\n // the target line, do so.\n renderInline(source: string, previousLine: Line) {\n const match = source.match(/^ */)\n /* c8 ignore start */\n const leadingWhitespace = match ? match[0].length : 0\n /* c8 ignore stop */\n const target = previousLine.text\n const targetTextWidth = stringWidth(target.trimEnd())\n\n if (!previousLine.span) {\n return source\n }\n\n // if we're not applying wrapping logic,\n // just always append to the span.\n if (!this.wrap) {\n previousLine.hidden = true\n return target + source\n }\n\n if (leadingWhitespace < targetTextWidth) {\n return source\n }\n\n previousLine.hidden = true\n\n return (\n target.trimEnd() +\n ' '.repeat(leadingWhitespace - targetTextWidth) +\n source.trimStart()\n )\n }\n\n rasterize(row: ColumnArray) {\n const rrows: string[][] = []\n const widths = this.columnWidths(row)\n let wrapped: string[]\n\n // word wrap all columns, and create\n // a data-structure that is easy to rasterize.\n row.forEach((col, c) => {\n // leave room for left and right padding.\n col.width = widths[c]\n if (this.wrap) {\n wrapped = wrap(col.text, this.negatePadding(col), {\n hard: true,\n }).split('\\n')\n } else {\n wrapped = col.text.split('\\n')\n }\n\n if (col.border) {\n wrapped.unshift(\n '.' + '-'.repeat(this.negatePadding(col) + 2) + '.',\n )\n wrapped.push(\"'\" + '-'.repeat(this.negatePadding(col) + 2) + \"'\")\n }\n\n // add top and bottom padding.\n if (col.padding) {\n wrapped.unshift(...new Array(col.padding[top] || 0).fill(''))\n wrapped.push(...new Array(col.padding[bottom] || 0).fill(''))\n }\n\n wrapped.forEach((str: string, r: number) => {\n if (!rrows[r]) {\n rrows.push([])\n }\n\n /* c8 ignore start */\n const rrow = rrows[r] ?? []\n /* c8 ignore stop */\n\n for (let i = 0; i < c; i++) {\n if (rrow[i] === undefined) {\n rrow.push('')\n }\n }\n\n rrow.push(str)\n })\n })\n\n return rrows\n }\n\n negatePadding(col: Column) {\n /* c8 ignore start */\n let wrapWidth = col.width || 0\n /* c8 ignore stop */\n if (col.padding) {\n wrapWidth -= (col.padding[left] || 0) + (col.padding[right] || 0)\n }\n\n if (col.border) {\n wrapWidth -= 4\n }\n\n return wrapWidth\n }\n\n columnWidths(row: ColumnArray) {\n if (!this.wrap) {\n return row.map(col => {\n return col.width || stringWidth(col.text)\n })\n }\n\n let unset = row.length\n let remainingWidth = this.width\n\n // column widths can be set in config.\n const widths = row.map(col => {\n if (col.width) {\n unset--\n remainingWidth -= col.width\n return col.width\n }\n\n return undefined\n })\n\n // any unset widths should be calculated.\n /* c8 ignore start */\n const unsetWidth = unset ? Math.floor(remainingWidth / unset) : 0\n /* c8 ignore stop */\n\n return widths.map((w, i) => {\n if (w === undefined) {\n /* c8 ignore start */\n const col = row[i] ?? { text: '', padding: [] }\n /* c8 ignore stop */\n return Math.max(unsetWidth, _minWidth(col))\n }\n\n return w\n })\n }\n}\n\nconst addBorder = (col: Column, ts: string, style: string) => {\n if (col.border) {\n if (/[.']-+[.']/.test(ts)) {\n return ''\n }\n\n if (ts.trim().length !== 0) {\n return style\n }\n\n return ' '\n }\n\n return ''\n}\n\n// calculates the minimum width of\n// a column, based on padding preferences.\nconst _minWidth = (col: Column) => {\n const padding = col.padding || []\n const minWidth = 1 + (padding[left] || 0) + (padding[right] || 0)\n if (col.border) {\n return minWidth + 4\n }\n\n return minWidth\n}\n\nconst getWindowWidth = (): number => {\n /* c8 ignore start */\n if (\n typeof process === 'object' &&\n process.stdout &&\n process.stdout.columns\n ) {\n return process.stdout.columns\n }\n return 80\n}\n/* c8 ignore stop */\n\nexport const cliui = (opts: Partial<UIOptions> = {}) =>\n new UI({\n /* c8 ignore start */\n width: opts?.width || getWindowWidth(),\n wrap: opts?.wrap,\n /* c8 ignore stop */\n })\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["inspect", "parseArgs", "ansiRegex", "onlyFirst", "pattern", "regex", "stripAnsi", "str", "eastAsianWidth", "character", "x", "y", "codePoint", "emojiRegex", "stringWidth", "options", "ambiguousCharacterWidth", "width", "styles", "modifierNames", "foregroundColorNames", "backgroundColorNames", "colorNames", "AnsiStyles", "codes", "ingest", "set", "key", "open", "close", "ansiStyles", "code", "red", "green", "blue", "hex", "matches", "colorString", "integer", "remainder", "value", "result", "ESCAPES", "END_CODE", "ANSI_ESCAPE_BELL", "ANSI_CSI", "ANSI_OSC", "ANSI_SGR_TERMINATOR", "ANSI_ESCAPE_LINK", "wrapAnsiCode", "wrapAnsiHyperlink", "uri", "wordLengths", "wrapWord", "rows", "word", "columns", "characters", "isInsideEscape", "isInsideLinkEscape", "visible", "index", "characterLength", "stringVisibleTrimSpacesRight", "words", "last", "exec", "returnValue", "escapeCode", "escapeUrl", "lengths", "rowLength", "len", "remainingColumns", "breaksStartingThisLine", "row", "pre", "groups", "wrap", "line", "align", "top", "right", "bottom", "left", "UI", "opts", "args", "cols", "arg", "leftColumnWidth", "r", "i", "text", "noAnsi", "lines", "rrow", "col", "c", "column", "wrapWidth", "ts", "fn", "w", "padding", "addBorder", "lastLine", "source", "previousLine", "match", "leadingWhitespace", "target", "targetTextWidth", "rrows", "widths", "wrapped", "unset", "remainingWidth", "unsetWidth", "_minWidth", "style", "minWidth", "getWindowWidth", "cliui", "basename", "isConfigType", "t", "isValidValue", "v", "type", "multi", "isValidOption", "vo", "x", "isConfigOptionOfType", "o", "isConfigOption", "undefOrType", "undefOrTypeArray", "isHeading", "r", "isDescription", "width", "indent", "n", "toEnvKey", "pref", "key", "toEnvVal", "value", "delim", "str", "fromEnvVal", "env", "multiple", "valueType", "joinTypes", "types", "validateFieldMeta", "field", "fieldMeta", "validateField", "validateValidOptions", "def", "validOptions", "toParseArgsOptionsConfig", "options", "acc", "longOption", "p", "setNoBool", "setDefault", "fn", "d", "Jack", "#configSet", "#shorts", "#options", "#fields", "#env", "#envPrefix", "#allowPositionals", "#usage", "#usageMarkdown", "values", "source", "er", "cause", "my", "args", "ek", "c", "result", "parseArgs", "token", "pname", "pos", "pv", "tn", "valid", "#noNoFields", "f", "val", "s", "yes", "opts", "config", "text", "level", "pre", "fields", "#addFieldsWith", "#addFields", "next", "opt", "name", "#validateName", "headingLevel", "ui", "cD", "first", "start", "normalize", "cmd", "shortFlags", "shorts", "flags", "sf", "so", "k", "lf", "lo", "usage", "maybeDesc", "print", "rows", "maxWidth", "#usageRows", "row", "configIndent", "b", "out", "normalizeOneLine", "normalizeMarkdown", "maxMax", "prev", "desc", "mult", "dmDelim", "extra", "hint", "short", "left", "len", "inspect", "_", "jack", "l", "i", "split", "si", "shortest", "ind", "$1", "$2"]
|
|
7
7
|
}
|