{
  "version": 3,
  "sources": ["../../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", "../../src/index.ts"],
  "sourcesContent": ["// 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", "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"],
  "mappings": "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",
  "names": ["ansiRegex", "onlyFirst", "pattern", "exports", "index_js_1", "L", "regex", "stripAnsi", "str", "eastAsianWidth", "character", "x", "y", "codePoint", "characterLength", "code", "stringToArray", "length", "characters", "len", "char", "slice", "text", "start", "end", "textLen", "result", "eawLen", "chars", "charLen", "emojiRegex", "stringWidth", "p", "index_js_2", "k", "index_js_3", "R", "options", "ambiguousCharacterWidth", "width", "O", "c", "s", "styles", "AnsiStyles", "ingest", "set", "key", "open", "close", "red", "green", "blue", "hex", "matches", "colorString", "integer", "remainder", "value", "H", "v", "ESCAPES", "END_CODE", "ANSI_ESCAPE_BELL", "ANSI_CSI", "ANSI_OSC", "ANSI_SGR_TERMINATOR", "ANSI_ESCAPE_LINK", "wrapAnsiCode", "wrapAnsiHyperlink", "uri", "wordLengths", "wrapWord", "rows", "word", "columns", "isInsideEscape", "isInsideLinkEscape", "visible", "index", "stringVisibleTrimSpacesRight", "words", "last", "exec", "returnValue", "escapeCode", "escapeUrl", "lengths", "rowLength", "remainingColumns", "breaksStartingThisLine", "row", "pre", "groups", "wrap", "line", "align", "top", "right", "bottom", "left", "UI", "opts", "args", "cols", "arg", "leftColumnWidth", "r", "i", "noAnsi", "lines", "rrow", "col", "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", "node_util_1", "min_1", "node_path_1", "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", "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", "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", "_", "jack", "l", "i", "split", "si", "shortest", "ind", "$1", "$2"]
}
