ccusage 11.0.0 → 11.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/README.md +23 -1
  2. package/dist/{calculate-cost-2IwHSzmi.js → calculate-cost-D3IraeGW.js} +15 -0
  3. package/dist/calculate-cost.d.ts +26 -2
  4. package/dist/calculate-cost.js +1 -1
  5. package/dist/core-eFvU0K4V.js +698 -0
  6. package/dist/{data-loader-BAoqS297.js → data-loader-BzOeJe6y.js} +397 -222
  7. package/dist/{data-loader-DPQaq8_n.d.ts → data-loader-dbZm5kOW.d.ts} +116 -25
  8. package/dist/data-loader.d.ts +3 -3
  9. package/dist/data-loader.js +4 -4
  10. package/dist/{debug-DzFJHzM5.js → debug-CjjJciy1.js} +20 -7
  11. package/dist/debug.d.ts +17 -0
  12. package/dist/debug.js +4 -4
  13. package/dist/{effect-WSjEuzC9-DHMVzzyB.js → effect-WSjEuzC9-CZCpOgOT.js} +1 -1
  14. package/dist/{esm-BU3FhOe-.js → esm-D74K9ESq.js} +1 -1
  15. package/dist/{index-CISmcbXk-CW1Gj6Ab.js → index-CISmcbXk-DpuCarFe.js} +5 -5
  16. package/dist/index.js +1994 -51
  17. package/dist/{logger-D3WD64Tx.js → logger-E_Utl_fr.js} +8 -2
  18. package/dist/logger.d.ts +9 -4
  19. package/dist/logger.js +1 -1
  20. package/dist/{mcp-1J7r1g6-.js → mcp-SPAE-cNK.js} +7 -8
  21. package/dist/mcp.d.ts +2 -2
  22. package/dist/mcp.js +6 -6
  23. package/dist/{pricing-fetcher-D-eJQBEJ.js → pricing-fetcher-BtW4MVG7.js} +159 -4
  24. package/dist/{pricing-fetcher-BkSZh4lR.d.ts → pricing-fetcher-DHaTs-k2.d.ts} +67 -2
  25. package/dist/pricing-fetcher.d.ts +1 -1
  26. package/dist/pricing-fetcher.js +2 -2
  27. package/dist/{sury-DmrZ3_Oj-Cpjsc2Lm.js → sury-DmrZ3_Oj-Lq7x0IZW.js} +1 -1
  28. package/dist/valibot-CQk-M5rL-btpzU8Qa.js +10 -0
  29. package/dist/{zod-Db63SLXj-BIXn64AP.js → zod-Db63SLXj-BqWqpKnQ.js} +3 -3
  30. package/package.json +1 -2
  31. package/dist/chunk-BLXvPPr8.js +0 -30
  32. package/dist/core-DHCbAXJf.js +0 -693
  33. package/dist/utils.table-USks3NGv.js +0 -1844
  34. package/dist/utils.table.d.ts +0 -27
  35. package/dist/utils.table.js +0 -3
  36. package/dist/valibot-CQk-M5rL-BcaCeUrF.js +0 -10
  37. /package/dist/{arktype-C-GObzDh-CNoBqQrr.js → arktype-C-GObzDh-Bx7Fdrqj.js} +0 -0
  38. /package/dist/{dist-BZzwBtZs.js → dist-Cb1UHXV5.js} +0 -0
  39. /package/dist/{prompt-DtZgx4wU.js → prompt-CUbwSrjo.js} +0 -0
  40. /package/dist/{types-BlyCnKwN.js → types-5-VF7WcO.js} +0 -0
package/dist/index.js CHANGED
@@ -1,15 +1,13 @@
1
1
  #!/usr/bin/env node
2
- import { __commonJS, __toESM } from "./chunk-BLXvPPr8.js";
3
- import { calculateTotals, createTotalsObject, getTotalTokens } from "./calculate-cost-2IwHSzmi.js";
4
- import { calculateBurnRate, filterRecentBlocks, formatDateCompact, getDefaultClaudePath, loadDailyUsageData, loadFiveHourBlockData, loadMonthlyUsageData, loadSessionData, projectBlockUsage } from "./data-loader-BAoqS297.js";
2
+ import { CostModes, SortOrders, __commonJS, __require, __toESM, dateSchema } from "./pricing-fetcher-BtW4MVG7.js";
3
+ import { calculateTotals, createTotalsObject, getTotalTokens } from "./calculate-cost-D3IraeGW.js";
4
+ import { DEFAULT_SESSION_DURATION_HOURS, calculateBurnRate, filterRecentBlocks, formatDateCompact, getDefaultClaudePath, loadDailyUsageData, loadMonthlyUsageData, loadSessionBlockData, loadSessionData, projectBlockUsage } from "./data-loader-BzOeJe6y.js";
5
5
  import { safeParse } from "./dist-DCvt9hEv.js";
6
- import { description, log, logger, name, version } from "./logger-D3WD64Tx.js";
7
- import { CostModes, SortOrders, dateSchema } from "./pricing-fetcher-D-eJQBEJ.js";
8
- import { detectMismatches, printMismatchReport } from "./debug-DzFJHzM5.js";
9
- import { ResponsiveTable } from "./utils.table-USks3NGv.js";
10
- import "./types-BlyCnKwN.js";
11
- import { createMcpServer } from "./mcp-1J7r1g6-.js";
12
- import "./index-CISmcbXk-CW1Gj6Ab.js";
6
+ import { description, log, logger, name, version } from "./logger-E_Utl_fr.js";
7
+ import { detectMismatches, printMismatchReport } from "./debug-CjjJciy1.js";
8
+ import "./types-5-VF7WcO.js";
9
+ import { createMcpServer } from "./mcp-SPAE-cNK.js";
10
+ import "./index-CISmcbXk-DpuCarFe.js";
13
11
  import process$1 from "node:process";
14
12
 
15
13
  //#region node_modules/gunshi/lib/utils-D41C8Abf.js
@@ -188,7 +186,7 @@ async function createCommandContext({ args, values, positionals, rest, argv: arg
188
186
  /**
189
187
  * setup the environment
190
188
  */
191
- const env$1 = Object.assign(create(), COMMAND_OPTIONS_DEFAULT, cliOptions);
189
+ const env$2 = Object.assign(create(), COMMAND_OPTIONS_DEFAULT, cliOptions);
192
190
  const locale = resolveLocale(cliOptions.locale);
193
191
  const localeStr = locale.toString();
194
192
  const translationAdapterFactory = cliOptions.translationAdapterFactory || createTranslationAdapter;
@@ -235,7 +233,7 @@ async function createCommandContext({ args, values, positionals, rest, argv: arg
235
233
  omitted,
236
234
  callMode,
237
235
  locale,
238
- env: env$1,
236
+ env: env$2,
239
237
  args: _args,
240
238
  values,
241
239
  positionals,
@@ -334,18 +332,18 @@ const COMMON_ARGS_KEYS = Object.keys(COMMON_ARGS);
334
332
  * @returns A rendered usage.
335
333
  */
336
334
  async function renderUsage(ctx) {
337
- const messages = [];
335
+ const messages$1 = [];
338
336
  if (!ctx.omitted) {
339
337
  const description$1 = resolveDescription(ctx);
340
- if (description$1) messages.push(description$1, "");
338
+ if (description$1) messages$1.push(description$1, "");
341
339
  }
342
- messages.push(...await renderUsageSection(ctx), "");
343
- if (ctx.omitted && await hasCommands(ctx)) messages.push(...await renderCommandsSection(ctx), "");
344
- if (hasPositionalArgs(ctx)) messages.push(...await renderPositionalArgsSection(ctx), "");
345
- if (hasOptionalArgs(ctx)) messages.push(...await renderOptionalArgsSection(ctx), "");
340
+ messages$1.push(...await renderUsageSection(ctx), "");
341
+ if (ctx.omitted && await hasCommands(ctx)) messages$1.push(...await renderCommandsSection(ctx), "");
342
+ if (hasPositionalArgs(ctx)) messages$1.push(...await renderPositionalArgsSection(ctx), "");
343
+ if (hasOptionalArgs(ctx)) messages$1.push(...await renderOptionalArgsSection(ctx), "");
346
344
  const examples = await renderExamplesSection(ctx);
347
- if (examples.length > 0) messages.push(...examples, "");
348
- return messages.join("\n");
345
+ if (examples.length > 0) messages$1.push(...examples, "");
346
+ return messages$1.join("\n");
349
347
  }
350
348
  /**
351
349
  * Render the positional arguments section
@@ -353,10 +351,10 @@ async function renderUsage(ctx) {
353
351
  * @returns A rendered arguments section
354
352
  */
355
353
  async function renderPositionalArgsSection(ctx) {
356
- const messages = [];
357
- messages.push(`${ctx.translate(resolveBuiltInKey("ARGUMENTS"))}:`);
358
- messages.push(await generatePositionalArgsUsage(ctx));
359
- return messages;
354
+ const messages$1 = [];
355
+ messages$1.push(`${ctx.translate(resolveBuiltInKey("ARGUMENTS"))}:`);
356
+ messages$1.push(await generatePositionalArgsUsage(ctx));
357
+ return messages$1;
360
358
  }
361
359
  /**
362
360
  * Render the optional arguments section
@@ -364,10 +362,10 @@ async function renderPositionalArgsSection(ctx) {
364
362
  * @returns A rendered options section
365
363
  */
366
364
  async function renderOptionalArgsSection(ctx) {
367
- const messages = [];
368
- messages.push(`${ctx.translate(resolveBuiltInKey("OPTIONS"))}:`);
369
- messages.push(await generateOptionalArgsUsage(ctx, getOptionalArgsPairs(ctx)));
370
- return messages;
365
+ const messages$1 = [];
366
+ messages$1.push(`${ctx.translate(resolveBuiltInKey("OPTIONS"))}:`);
367
+ messages$1.push(await generateOptionalArgsUsage(ctx, getOptionalArgsPairs(ctx)));
368
+ return messages$1;
371
369
  }
372
370
  /**
373
371
  * Render the examples section
@@ -375,13 +373,13 @@ async function renderOptionalArgsSection(ctx) {
375
373
  * @returns A rendered examples section
376
374
  */
377
375
  async function renderExamplesSection(ctx) {
378
- const messages = [];
376
+ const messages$1 = [];
379
377
  const resolvedExamples = await resolveExamples$1(ctx);
380
378
  if (resolvedExamples) {
381
379
  const examples = resolvedExamples.split("\n").map((example) => example.padStart(ctx.env.leftMargin + example.length));
382
- messages.push(`${ctx.translate(resolveBuiltInKey("EXAMPLES"))}:`, ...examples);
380
+ messages$1.push(`${ctx.translate(resolveBuiltInKey("EXAMPLES"))}:`, ...examples);
383
381
  }
384
- return messages;
382
+ return messages$1;
385
383
  }
386
384
  /**
387
385
  * Render the usage section
@@ -389,19 +387,19 @@ async function renderExamplesSection(ctx) {
389
387
  * @returns A rendered usage section
390
388
  */
391
389
  async function renderUsageSection(ctx) {
392
- const messages = [`${ctx.translate(resolveBuiltInKey("USAGE"))}:`];
390
+ const messages$1 = [`${ctx.translate(resolveBuiltInKey("USAGE"))}:`];
393
391
  if (ctx.omitted) {
394
392
  const defaultCommand = `${resolveEntry(ctx)}${await hasCommands(ctx) ? ` [${resolveSubCommand(ctx)}]` : ""} ${[generateOptionsSymbols(ctx), generatePositionalSymbols(ctx)].filter(Boolean).join(" ")}`;
395
- messages.push(defaultCommand.padStart(ctx.env.leftMargin + defaultCommand.length));
393
+ messages$1.push(defaultCommand.padStart(ctx.env.leftMargin + defaultCommand.length));
396
394
  if (await hasCommands(ctx)) {
397
395
  const commandsUsage = `${resolveEntry(ctx)} <${ctx.translate(resolveBuiltInKey("COMMANDS"))}>`;
398
- messages.push(commandsUsage.padStart(ctx.env.leftMargin + commandsUsage.length));
396
+ messages$1.push(commandsUsage.padStart(ctx.env.leftMargin + commandsUsage.length));
399
397
  }
400
398
  } else {
401
399
  const usageStr = `${resolveEntry(ctx)} ${resolveSubCommand(ctx)} ${[generateOptionsSymbols(ctx), generatePositionalSymbols(ctx)].filter(Boolean).join(" ")}`;
402
- messages.push(usageStr.padStart(ctx.env.leftMargin + usageStr.length));
400
+ messages$1.push(usageStr.padStart(ctx.env.leftMargin + usageStr.length));
403
401
  }
404
- return messages;
402
+ return messages$1;
405
403
  }
406
404
  /**
407
405
  * Render the commands section
@@ -409,7 +407,7 @@ async function renderUsageSection(ctx) {
409
407
  * @returns A rendered commands section
410
408
  */
411
409
  async function renderCommandsSection(ctx) {
412
- const messages = [`${ctx.translate(resolveBuiltInKey("COMMANDS"))}:`];
410
+ const messages$1 = [`${ctx.translate(resolveBuiltInKey("COMMANDS"))}:`];
413
411
  const loadedCommands = await ctx.loadCommands();
414
412
  const commandMaxLength = Math.max(...loadedCommands.map((cmd) => (cmd.name || "").length));
415
413
  const commandsStr = await Promise.all(loadedCommands.map((cmd) => {
@@ -418,12 +416,12 @@ async function renderCommandsSection(ctx) {
418
416
  const command = `${key.padEnd(commandMaxLength + ctx.env.middleMargin)}${desc} `;
419
417
  return `${command.padStart(ctx.env.leftMargin + command.length)} `;
420
418
  }));
421
- messages.push(...commandsStr, "", ctx.translate(resolveBuiltInKey("FORMORE")));
422
- messages.push(...loadedCommands.map((cmd) => {
419
+ messages$1.push(...commandsStr, "", ctx.translate(resolveBuiltInKey("FORMORE")));
420
+ messages$1.push(...loadedCommands.map((cmd) => {
423
421
  const commandHelp = `${ctx.env.name} ${cmd.name} --help`;
424
422
  return `${commandHelp.padStart(ctx.env.leftMargin + commandHelp.length)}`;
425
423
  }));
426
- return messages;
424
+ return messages$1;
427
425
  }
428
426
  /**
429
427
  * Resolve the entry command name
@@ -594,9 +592,9 @@ function generatePositionalSymbols(ctx) {
594
592
  * @returns A rendered validation error.
595
593
  */
596
594
  function renderValidationErrors(_ctx, error) {
597
- const messages = [];
598
- for (const err of error.errors) messages.push(err.message);
599
- return Promise.resolve(messages.join("\n"));
595
+ const messages$1 = [];
596
+ for (const err of error.errors) messages$1.push(err.message);
597
+ return Promise.resolve(messages$1.join("\n"));
600
598
  }
601
599
 
602
600
  //#endregion
@@ -1146,8 +1144,8 @@ async function executeCommand(cmd, ctx, name$1) {
1146
1144
  //#endregion
1147
1145
  //#region node_modules/picocolors/picocolors.js
1148
1146
  var require_picocolors = __commonJS({ "node_modules/picocolors/picocolors.js"(exports, module) {
1149
- let p = process || {}, argv = p.argv || [], env = p.env || {};
1150
- let isColorSupported = !(!!env.NO_COLOR || argv.includes("--no-color")) && (!!env.FORCE_COLOR || argv.includes("--color") || p.platform === "win32" || (p.stdout || {}).isTTY && env.TERM !== "dumb" || !!env.CI);
1147
+ let p = process || {}, argv = p.argv || [], env$1 = p.env || {};
1148
+ let isColorSupported = !(!!env$1.NO_COLOR || argv.includes("--no-color")) && (!!env$1.FORCE_COLOR || argv.includes("--color") || p.platform === "win32" || (p.stdout || {}).isTTY && env$1.TERM !== "dumb" || !!env$1.CI);
1151
1149
  let formatter = (open, close, replace = open) => (input) => {
1152
1150
  let string = "" + input, index = string.indexOf(close, open.length);
1153
1151
  return ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close;
@@ -1214,11 +1212,20 @@ var require_picocolors = __commonJS({ "node_modules/picocolors/picocolors.js"(ex
1214
1212
 
1215
1213
  //#endregion
1216
1214
  //#region src/shared-args.internal.ts
1215
+ /**
1216
+ * Parses and validates a date argument in YYYYMMDD format
1217
+ * @param value - Date string to parse
1218
+ * @returns Validated date string
1219
+ * @throws TypeError if date format is invalid
1220
+ */
1217
1221
  function parseDateArg(value) {
1218
1222
  const result = safeParse(dateSchema, value);
1219
1223
  if (!result.success) throw new TypeError(result.issues[0].message);
1220
1224
  return result.output;
1221
1225
  }
1226
+ /**
1227
+ * Shared command line arguments used across multiple CLI commands
1228
+ */
1222
1229
  const sharedArgs = {
1223
1230
  since: {
1224
1231
  type: "custom",
@@ -1277,25 +1284,1914 @@ const sharedArgs = {
1277
1284
  default: false
1278
1285
  }
1279
1286
  };
1287
+ /**
1288
+ * Shared command configuration for Gunshi CLI commands
1289
+ */
1280
1290
  const sharedCommandConfig = {
1281
1291
  args: sharedArgs,
1282
1292
  toKebab: true
1283
1293
  };
1284
1294
 
1295
+ //#endregion
1296
+ //#region node_modules/cli-table3/src/debug.js
1297
+ var require_debug$1 = __commonJS({ "node_modules/cli-table3/src/debug.js"(exports, module) {
1298
+ let messages = [];
1299
+ let level = 0;
1300
+ const debug$3 = (msg, min) => {
1301
+ if (level >= min) messages.push(msg);
1302
+ };
1303
+ debug$3.WARN = 1;
1304
+ debug$3.INFO = 2;
1305
+ debug$3.DEBUG = 3;
1306
+ debug$3.reset = () => {
1307
+ messages = [];
1308
+ };
1309
+ debug$3.setDebugLevel = (v) => {
1310
+ level = v;
1311
+ };
1312
+ debug$3.warn = (msg) => debug$3(msg, debug$3.WARN);
1313
+ debug$3.info = (msg) => debug$3(msg, debug$3.INFO);
1314
+ debug$3.debug = (msg) => debug$3(msg, debug$3.DEBUG);
1315
+ debug$3.debugMessages = () => messages;
1316
+ module.exports = debug$3;
1317
+ } });
1318
+
1319
+ //#endregion
1320
+ //#region node_modules/cli-table3/node_modules/string-width/node_modules/strip-ansi/node_modules/ansi-regex/index.js
1321
+ var require_ansi_regex = __commonJS({ "node_modules/cli-table3/node_modules/string-width/node_modules/strip-ansi/node_modules/ansi-regex/index.js"(exports, module) {
1322
+ module.exports = ({ onlyFirst = false } = {}) => {
1323
+ const pattern = ["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)", "(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");
1324
+ return new RegExp(pattern, onlyFirst ? void 0 : "g");
1325
+ };
1326
+ } });
1327
+
1328
+ //#endregion
1329
+ //#region node_modules/cli-table3/node_modules/string-width/node_modules/strip-ansi/index.js
1330
+ var require_strip_ansi = __commonJS({ "node_modules/cli-table3/node_modules/string-width/node_modules/strip-ansi/index.js"(exports, module) {
1331
+ const ansiRegex$1 = require_ansi_regex();
1332
+ module.exports = (string) => typeof string === "string" ? string.replace(ansiRegex$1(), "") : string;
1333
+ } });
1334
+
1335
+ //#endregion
1336
+ //#region node_modules/is-fullwidth-code-point/index.js
1337
+ var require_is_fullwidth_code_point = __commonJS({ "node_modules/is-fullwidth-code-point/index.js"(exports, module) {
1338
+ const isFullwidthCodePoint$1 = (codePoint) => {
1339
+ if (Number.isNaN(codePoint)) return false;
1340
+ if (codePoint >= 4352 && (codePoint <= 4447 || codePoint === 9001 || codePoint === 9002 || 11904 <= codePoint && codePoint <= 12871 && codePoint !== 12351 || 12880 <= codePoint && codePoint <= 19903 || 19968 <= codePoint && codePoint <= 42182 || 43360 <= codePoint && codePoint <= 43388 || 44032 <= codePoint && codePoint <= 55203 || 63744 <= codePoint && codePoint <= 64255 || 65040 <= codePoint && codePoint <= 65049 || 65072 <= codePoint && codePoint <= 65131 || 65281 <= codePoint && codePoint <= 65376 || 65504 <= codePoint && codePoint <= 65510 || 110592 <= codePoint && codePoint <= 110593 || 127488 <= codePoint && codePoint <= 127569 || 131072 <= codePoint && codePoint <= 262141)) return true;
1341
+ return false;
1342
+ };
1343
+ module.exports = isFullwidthCodePoint$1;
1344
+ module.exports.default = isFullwidthCodePoint$1;
1345
+ } });
1346
+
1347
+ //#endregion
1348
+ //#region node_modules/cli-table3/node_modules/string-width/node_modules/emoji-regex/index.js
1349
+ var require_emoji_regex$1 = __commonJS({ "node_modules/cli-table3/node_modules/string-width/node_modules/emoji-regex/index.js"(exports, module) {
1350
+ module.exports = function() {
1351
+ return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\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\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])|\uD83C[\uDF3E\uDF73\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])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\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])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\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\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\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\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\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\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*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\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\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\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[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g;
1352
+ };
1353
+ } });
1354
+
1355
+ //#endregion
1356
+ //#region node_modules/cli-table3/node_modules/string-width/index.js
1357
+ var require_string_width = __commonJS({ "node_modules/cli-table3/node_modules/string-width/index.js"(exports, module) {
1358
+ const stripAnsi$1 = require_strip_ansi();
1359
+ const isFullwidthCodePoint = require_is_fullwidth_code_point();
1360
+ const emojiRegex$1 = require_emoji_regex$1();
1361
+ const stringWidth$2 = (string) => {
1362
+ if (typeof string !== "string" || string.length === 0) return 0;
1363
+ string = stripAnsi$1(string);
1364
+ if (string.length === 0) return 0;
1365
+ string = string.replace(emojiRegex$1(), " ");
1366
+ let width = 0;
1367
+ for (let i = 0; i < string.length; i++) {
1368
+ const code = string.codePointAt(i);
1369
+ if (code <= 31 || code >= 127 && code <= 159) continue;
1370
+ if (code >= 768 && code <= 879) continue;
1371
+ if (code > 65535) i++;
1372
+ width += isFullwidthCodePoint(code) ? 2 : 1;
1373
+ }
1374
+ return width;
1375
+ };
1376
+ module.exports = stringWidth$2;
1377
+ module.exports.default = stringWidth$2;
1378
+ } });
1379
+
1380
+ //#endregion
1381
+ //#region node_modules/cli-table3/src/utils.js
1382
+ var require_utils = __commonJS({ "node_modules/cli-table3/src/utils.js"(exports, module) {
1383
+ const stringWidth$1 = require_string_width();
1384
+ function codeRegex(capture) {
1385
+ return capture ? /\u001b\[((?:\d*;){0,5}\d*)m/g : /\u001b\[(?:\d*;){0,5}\d*m/g;
1386
+ }
1387
+ function strlen(str) {
1388
+ let code = codeRegex();
1389
+ let stripped = ("" + str).replace(code, "");
1390
+ let split = stripped.split("\n");
1391
+ return split.reduce(function(memo, s) {
1392
+ return stringWidth$1(s) > memo ? stringWidth$1(s) : memo;
1393
+ }, 0);
1394
+ }
1395
+ function repeat(str, times) {
1396
+ return Array(times + 1).join(str);
1397
+ }
1398
+ function pad(str, len, pad$1, dir) {
1399
+ let length = strlen(str);
1400
+ if (len + 1 >= length) {
1401
+ let padlen = len - length;
1402
+ switch (dir) {
1403
+ case "right": {
1404
+ str = repeat(pad$1, padlen) + str;
1405
+ break;
1406
+ }
1407
+ case "center": {
1408
+ let right = Math.ceil(padlen / 2);
1409
+ let left = padlen - right;
1410
+ str = repeat(pad$1, left) + str + repeat(pad$1, right);
1411
+ break;
1412
+ }
1413
+ default: {
1414
+ str = str + repeat(pad$1, padlen);
1415
+ break;
1416
+ }
1417
+ }
1418
+ }
1419
+ return str;
1420
+ }
1421
+ let codeCache = {};
1422
+ function addToCodeCache(name$1, on, off) {
1423
+ on = "\x1B[" + on + "m";
1424
+ off = "\x1B[" + off + "m";
1425
+ codeCache[on] = {
1426
+ set: name$1,
1427
+ to: true
1428
+ };
1429
+ codeCache[off] = {
1430
+ set: name$1,
1431
+ to: false
1432
+ };
1433
+ codeCache[name$1] = {
1434
+ on,
1435
+ off
1436
+ };
1437
+ }
1438
+ addToCodeCache("bold", 1, 22);
1439
+ addToCodeCache("italics", 3, 23);
1440
+ addToCodeCache("underline", 4, 24);
1441
+ addToCodeCache("inverse", 7, 27);
1442
+ addToCodeCache("strikethrough", 9, 29);
1443
+ function updateState(state, controlChars) {
1444
+ let controlCode = controlChars[1] ? parseInt(controlChars[1].split(";")[0]) : 0;
1445
+ if (controlCode >= 30 && controlCode <= 39 || controlCode >= 90 && controlCode <= 97) {
1446
+ state.lastForegroundAdded = controlChars[0];
1447
+ return;
1448
+ }
1449
+ if (controlCode >= 40 && controlCode <= 49 || controlCode >= 100 && controlCode <= 107) {
1450
+ state.lastBackgroundAdded = controlChars[0];
1451
+ return;
1452
+ }
1453
+ if (controlCode === 0) {
1454
+ for (let i in state)
1455
+ /* istanbul ignore else */
1456
+ if (Object.prototype.hasOwnProperty.call(state, i)) delete state[i];
1457
+ return;
1458
+ }
1459
+ let info$1 = codeCache[controlChars[0]];
1460
+ if (info$1) state[info$1.set] = info$1.to;
1461
+ }
1462
+ function readState(line) {
1463
+ let code = codeRegex(true);
1464
+ let controlChars = code.exec(line);
1465
+ let state = {};
1466
+ while (controlChars !== null) {
1467
+ updateState(state, controlChars);
1468
+ controlChars = code.exec(line);
1469
+ }
1470
+ return state;
1471
+ }
1472
+ function unwindState(state, ret) {
1473
+ let lastBackgroundAdded = state.lastBackgroundAdded;
1474
+ let lastForegroundAdded = state.lastForegroundAdded;
1475
+ delete state.lastBackgroundAdded;
1476
+ delete state.lastForegroundAdded;
1477
+ Object.keys(state).forEach(function(key) {
1478
+ if (state[key]) ret += codeCache[key].off;
1479
+ });
1480
+ if (lastBackgroundAdded && lastBackgroundAdded != "\x1B[49m") ret += "\x1B[49m";
1481
+ if (lastForegroundAdded && lastForegroundAdded != "\x1B[39m") ret += "\x1B[39m";
1482
+ return ret;
1483
+ }
1484
+ function rewindState(state, ret) {
1485
+ let lastBackgroundAdded = state.lastBackgroundAdded;
1486
+ let lastForegroundAdded = state.lastForegroundAdded;
1487
+ delete state.lastBackgroundAdded;
1488
+ delete state.lastForegroundAdded;
1489
+ Object.keys(state).forEach(function(key) {
1490
+ if (state[key]) ret = codeCache[key].on + ret;
1491
+ });
1492
+ if (lastBackgroundAdded && lastBackgroundAdded != "\x1B[49m") ret = lastBackgroundAdded + ret;
1493
+ if (lastForegroundAdded && lastForegroundAdded != "\x1B[39m") ret = lastForegroundAdded + ret;
1494
+ return ret;
1495
+ }
1496
+ function truncateWidth(str, desiredLength) {
1497
+ if (str.length === strlen(str)) return str.substr(0, desiredLength);
1498
+ while (strlen(str) > desiredLength) str = str.slice(0, -1);
1499
+ return str;
1500
+ }
1501
+ function truncateWidthWithAnsi(str, desiredLength) {
1502
+ let code = codeRegex(true);
1503
+ let split = str.split(codeRegex());
1504
+ let splitIndex = 0;
1505
+ let retLen = 0;
1506
+ let ret = "";
1507
+ let myArray;
1508
+ let state = {};
1509
+ while (retLen < desiredLength) {
1510
+ myArray = code.exec(str);
1511
+ let toAdd = split[splitIndex];
1512
+ splitIndex++;
1513
+ if (retLen + strlen(toAdd) > desiredLength) toAdd = truncateWidth(toAdd, desiredLength - retLen);
1514
+ ret += toAdd;
1515
+ retLen += strlen(toAdd);
1516
+ if (retLen < desiredLength) {
1517
+ if (!myArray) break;
1518
+ ret += myArray[0];
1519
+ updateState(state, myArray);
1520
+ }
1521
+ }
1522
+ return unwindState(state, ret);
1523
+ }
1524
+ function truncate(str, desiredLength, truncateChar) {
1525
+ truncateChar = truncateChar || "…";
1526
+ let lengthOfStr = strlen(str);
1527
+ if (lengthOfStr <= desiredLength) return str;
1528
+ desiredLength -= strlen(truncateChar);
1529
+ let ret = truncateWidthWithAnsi(str, desiredLength);
1530
+ ret += truncateChar;
1531
+ const hrefTag = "\x1B]8;;\x07";
1532
+ if (str.includes(hrefTag) && !ret.includes(hrefTag)) ret += hrefTag;
1533
+ return ret;
1534
+ }
1535
+ function defaultOptions() {
1536
+ return {
1537
+ chars: {
1538
+ top: "─",
1539
+ "top-mid": "┬",
1540
+ "top-left": "┌",
1541
+ "top-right": "┐",
1542
+ bottom: "─",
1543
+ "bottom-mid": "┴",
1544
+ "bottom-left": "└",
1545
+ "bottom-right": "┘",
1546
+ left: "│",
1547
+ "left-mid": "├",
1548
+ mid: "─",
1549
+ "mid-mid": "┼",
1550
+ right: "│",
1551
+ "right-mid": "┤",
1552
+ middle: "│"
1553
+ },
1554
+ truncate: "…",
1555
+ colWidths: [],
1556
+ rowHeights: [],
1557
+ colAligns: [],
1558
+ rowAligns: [],
1559
+ style: {
1560
+ "padding-left": 1,
1561
+ "padding-right": 1,
1562
+ head: ["red"],
1563
+ border: ["grey"],
1564
+ compact: false
1565
+ },
1566
+ head: []
1567
+ };
1568
+ }
1569
+ function mergeOptions(options, defaults) {
1570
+ options = options || {};
1571
+ defaults = defaults || defaultOptions();
1572
+ let ret = Object.assign({}, defaults, options);
1573
+ ret.chars = Object.assign({}, defaults.chars, options.chars);
1574
+ ret.style = Object.assign({}, defaults.style, options.style);
1575
+ return ret;
1576
+ }
1577
+ function wordWrap(maxLength, input) {
1578
+ let lines = [];
1579
+ let split = input.split(/(\s+)/g);
1580
+ let line = [];
1581
+ let lineLength = 0;
1582
+ let whitespace;
1583
+ for (let i = 0; i < split.length; i += 2) {
1584
+ let word = split[i];
1585
+ let newLength = lineLength + strlen(word);
1586
+ if (lineLength > 0 && whitespace) newLength += whitespace.length;
1587
+ if (newLength > maxLength) {
1588
+ if (lineLength !== 0) lines.push(line.join(""));
1589
+ line = [word];
1590
+ lineLength = strlen(word);
1591
+ } else {
1592
+ line.push(whitespace || "", word);
1593
+ lineLength = newLength;
1594
+ }
1595
+ whitespace = split[i + 1];
1596
+ }
1597
+ if (lineLength) lines.push(line.join(""));
1598
+ return lines;
1599
+ }
1600
+ function textWrap(maxLength, input) {
1601
+ let lines = [];
1602
+ let line = "";
1603
+ function pushLine(str, ws) {
1604
+ if (line.length && ws) line += ws;
1605
+ line += str;
1606
+ while (line.length > maxLength) {
1607
+ lines.push(line.slice(0, maxLength));
1608
+ line = line.slice(maxLength);
1609
+ }
1610
+ }
1611
+ let split = input.split(/(\s+)/g);
1612
+ for (let i = 0; i < split.length; i += 2) pushLine(split[i], i && split[i - 1]);
1613
+ if (line.length) lines.push(line);
1614
+ return lines;
1615
+ }
1616
+ function multiLineWordWrap(maxLength, input, wrapOnWordBoundary = true) {
1617
+ let output = [];
1618
+ input = input.split("\n");
1619
+ const handler = wrapOnWordBoundary ? wordWrap : textWrap;
1620
+ for (let i = 0; i < input.length; i++) output.push.apply(output, handler(maxLength, input[i]));
1621
+ return output;
1622
+ }
1623
+ function colorizeLines(input) {
1624
+ let state = {};
1625
+ let output = [];
1626
+ for (let i = 0; i < input.length; i++) {
1627
+ let line = rewindState(state, input[i]);
1628
+ state = readState(line);
1629
+ let temp = Object.assign({}, state);
1630
+ output.push(unwindState(temp, line));
1631
+ }
1632
+ return output;
1633
+ }
1634
+ /**
1635
+ * Credit: Matheus Sampaio https://github.com/matheussampaio
1636
+ */
1637
+ function hyperlink(url, text) {
1638
+ const OSC = "\x1B]";
1639
+ const BEL = "\x07";
1640
+ const SEP = ";";
1641
+ return [
1642
+ OSC,
1643
+ "8",
1644
+ SEP,
1645
+ SEP,
1646
+ url || text,
1647
+ BEL,
1648
+ text,
1649
+ OSC,
1650
+ "8",
1651
+ SEP,
1652
+ SEP,
1653
+ BEL
1654
+ ].join("");
1655
+ }
1656
+ module.exports = {
1657
+ strlen,
1658
+ repeat,
1659
+ pad,
1660
+ truncate,
1661
+ mergeOptions,
1662
+ wordWrap: multiLineWordWrap,
1663
+ colorizeLines,
1664
+ hyperlink
1665
+ };
1666
+ } });
1667
+
1668
+ //#endregion
1669
+ //#region node_modules/@colors/colors/lib/styles.js
1670
+ var require_styles = __commonJS({ "node_modules/@colors/colors/lib/styles.js"(exports, module) {
1671
+ var styles$1 = {};
1672
+ module["exports"] = styles$1;
1673
+ var codes = {
1674
+ reset: [0, 0],
1675
+ bold: [1, 22],
1676
+ dim: [2, 22],
1677
+ italic: [3, 23],
1678
+ underline: [4, 24],
1679
+ inverse: [7, 27],
1680
+ hidden: [8, 28],
1681
+ strikethrough: [9, 29],
1682
+ black: [30, 39],
1683
+ red: [31, 39],
1684
+ green: [32, 39],
1685
+ yellow: [33, 39],
1686
+ blue: [34, 39],
1687
+ magenta: [35, 39],
1688
+ cyan: [36, 39],
1689
+ white: [37, 39],
1690
+ gray: [90, 39],
1691
+ grey: [90, 39],
1692
+ brightRed: [91, 39],
1693
+ brightGreen: [92, 39],
1694
+ brightYellow: [93, 39],
1695
+ brightBlue: [94, 39],
1696
+ brightMagenta: [95, 39],
1697
+ brightCyan: [96, 39],
1698
+ brightWhite: [97, 39],
1699
+ bgBlack: [40, 49],
1700
+ bgRed: [41, 49],
1701
+ bgGreen: [42, 49],
1702
+ bgYellow: [43, 49],
1703
+ bgBlue: [44, 49],
1704
+ bgMagenta: [45, 49],
1705
+ bgCyan: [46, 49],
1706
+ bgWhite: [47, 49],
1707
+ bgGray: [100, 49],
1708
+ bgGrey: [100, 49],
1709
+ bgBrightRed: [101, 49],
1710
+ bgBrightGreen: [102, 49],
1711
+ bgBrightYellow: [103, 49],
1712
+ bgBrightBlue: [104, 49],
1713
+ bgBrightMagenta: [105, 49],
1714
+ bgBrightCyan: [106, 49],
1715
+ bgBrightWhite: [107, 49],
1716
+ blackBG: [40, 49],
1717
+ redBG: [41, 49],
1718
+ greenBG: [42, 49],
1719
+ yellowBG: [43, 49],
1720
+ blueBG: [44, 49],
1721
+ magentaBG: [45, 49],
1722
+ cyanBG: [46, 49],
1723
+ whiteBG: [47, 49]
1724
+ };
1725
+ Object.keys(codes).forEach(function(key) {
1726
+ var val = codes[key];
1727
+ var style = styles$1[key] = [];
1728
+ style.open = "\x1B[" + val[0] + "m";
1729
+ style.close = "\x1B[" + val[1] + "m";
1730
+ });
1731
+ } });
1732
+
1733
+ //#endregion
1734
+ //#region node_modules/@colors/colors/lib/system/has-flag.js
1735
+ var require_has_flag = __commonJS({ "node_modules/@colors/colors/lib/system/has-flag.js"(exports, module) {
1736
+ module.exports = function(flag, argv$1) {
1737
+ argv$1 = argv$1 || process.argv;
1738
+ var terminatorPos = argv$1.indexOf("--");
1739
+ var prefix = /^-{1,2}/.test(flag) ? "" : "--";
1740
+ var pos = argv$1.indexOf(prefix + flag);
1741
+ return pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos);
1742
+ };
1743
+ } });
1744
+
1745
+ //#endregion
1746
+ //#region node_modules/@colors/colors/lib/system/supports-colors.js
1747
+ var require_supports_colors = __commonJS({ "node_modules/@colors/colors/lib/system/supports-colors.js"(exports, module) {
1748
+ var os = __require("os");
1749
+ var hasFlag = require_has_flag();
1750
+ var env = process.env;
1751
+ var forceColor = void 0;
1752
+ if (hasFlag("no-color") || hasFlag("no-colors") || hasFlag("color=false")) forceColor = false;
1753
+ else if (hasFlag("color") || hasFlag("colors") || hasFlag("color=true") || hasFlag("color=always")) forceColor = true;
1754
+ if ("FORCE_COLOR" in env) forceColor = env.FORCE_COLOR.length === 0 || parseInt(env.FORCE_COLOR, 10) !== 0;
1755
+ function translateLevel(level$1) {
1756
+ if (level$1 === 0) return false;
1757
+ return {
1758
+ level: level$1,
1759
+ hasBasic: true,
1760
+ has256: level$1 >= 2,
1761
+ has16m: level$1 >= 3
1762
+ };
1763
+ }
1764
+ function supportsColor(stream) {
1765
+ if (forceColor === false) return 0;
1766
+ if (hasFlag("color=16m") || hasFlag("color=full") || hasFlag("color=truecolor")) return 3;
1767
+ if (hasFlag("color=256")) return 2;
1768
+ if (stream && !stream.isTTY && forceColor !== true) return 0;
1769
+ var min = forceColor ? 1 : 0;
1770
+ if (process.platform === "win32") {
1771
+ var osRelease = os.release().split(".");
1772
+ if (Number(process.versions.node.split(".")[0]) >= 8 && Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) return Number(osRelease[2]) >= 14931 ? 3 : 2;
1773
+ return 1;
1774
+ }
1775
+ if ("CI" in env) {
1776
+ if ([
1777
+ "TRAVIS",
1778
+ "CIRCLECI",
1779
+ "APPVEYOR",
1780
+ "GITLAB_CI"
1781
+ ].some(function(sign) {
1782
+ return sign in env;
1783
+ }) || env.CI_NAME === "codeship") return 1;
1784
+ return min;
1785
+ }
1786
+ if ("TEAMCITY_VERSION" in env) return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;
1787
+ if ("TERM_PROGRAM" in env) {
1788
+ var version$2 = parseInt((env.TERM_PROGRAM_VERSION || "").split(".")[0], 10);
1789
+ switch (env.TERM_PROGRAM) {
1790
+ case "iTerm.app": return version$2 >= 3 ? 3 : 2;
1791
+ case "Hyper": return 3;
1792
+ case "Apple_Terminal": return 2;
1793
+ }
1794
+ }
1795
+ if (/-256(color)?$/i.test(env.TERM)) return 2;
1796
+ if (/^screen|^xterm|^vt100|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) return 1;
1797
+ if ("COLORTERM" in env) return 1;
1798
+ if (env.TERM === "dumb") return min;
1799
+ return min;
1800
+ }
1801
+ function getSupportLevel(stream) {
1802
+ var level$1 = supportsColor(stream);
1803
+ return translateLevel(level$1);
1804
+ }
1805
+ module.exports = {
1806
+ supportsColor: getSupportLevel,
1807
+ stdout: getSupportLevel(process.stdout),
1808
+ stderr: getSupportLevel(process.stderr)
1809
+ };
1810
+ } });
1811
+
1812
+ //#endregion
1813
+ //#region node_modules/@colors/colors/lib/custom/trap.js
1814
+ var require_trap = __commonJS({ "node_modules/@colors/colors/lib/custom/trap.js"(exports, module) {
1815
+ module["exports"] = function runTheTrap(text, options) {
1816
+ var result = "";
1817
+ text = text || "Run the trap, drop the bass";
1818
+ text = text.split("");
1819
+ var trap = {
1820
+ a: [
1821
+ "@",
1822
+ "Ą",
1823
+ "Ⱥ",
1824
+ "Ʌ",
1825
+ "Δ",
1826
+ "Λ",
1827
+ "Д"
1828
+ ],
1829
+ b: [
1830
+ "ß",
1831
+ "Ɓ",
1832
+ "Ƀ",
1833
+ "ɮ",
1834
+ "β",
1835
+ "฿"
1836
+ ],
1837
+ c: [
1838
+ "©",
1839
+ "Ȼ",
1840
+ "Ͼ"
1841
+ ],
1842
+ d: [
1843
+ "Ð",
1844
+ "Ɗ",
1845
+ "Ԁ",
1846
+ "ԁ",
1847
+ "Ԃ",
1848
+ "ԃ"
1849
+ ],
1850
+ e: [
1851
+ "Ë",
1852
+ "ĕ",
1853
+ "Ǝ",
1854
+ "ɘ",
1855
+ "Σ",
1856
+ "ξ",
1857
+ "Ҽ",
1858
+ "੬"
1859
+ ],
1860
+ f: ["Ӻ"],
1861
+ g: ["ɢ"],
1862
+ h: [
1863
+ "Ħ",
1864
+ "ƕ",
1865
+ "Ң",
1866
+ "Һ",
1867
+ "Ӈ",
1868
+ "Ԋ"
1869
+ ],
1870
+ i: ["༏"],
1871
+ j: ["Ĵ"],
1872
+ k: [
1873
+ "ĸ",
1874
+ "Ҡ",
1875
+ "Ӄ",
1876
+ "Ԟ"
1877
+ ],
1878
+ l: ["Ĺ"],
1879
+ m: [
1880
+ "ʍ",
1881
+ "Ӎ",
1882
+ "ӎ",
1883
+ "Ԡ",
1884
+ "ԡ",
1885
+ "൩"
1886
+ ],
1887
+ n: [
1888
+ "Ñ",
1889
+ "ŋ",
1890
+ "Ɲ",
1891
+ "Ͷ",
1892
+ "Π",
1893
+ "Ҋ"
1894
+ ],
1895
+ o: [
1896
+ "Ø",
1897
+ "õ",
1898
+ "ø",
1899
+ "Ǿ",
1900
+ "ʘ",
1901
+ "Ѻ",
1902
+ "ם",
1903
+ "۝",
1904
+ "๏"
1905
+ ],
1906
+ p: ["Ƿ", "Ҏ"],
1907
+ q: ["্"],
1908
+ r: [
1909
+ "®",
1910
+ "Ʀ",
1911
+ "Ȑ",
1912
+ "Ɍ",
1913
+ "ʀ",
1914
+ "Я"
1915
+ ],
1916
+ s: [
1917
+ "§",
1918
+ "Ϟ",
1919
+ "ϟ",
1920
+ "Ϩ"
1921
+ ],
1922
+ t: [
1923
+ "Ł",
1924
+ "Ŧ",
1925
+ "ͳ"
1926
+ ],
1927
+ u: ["Ʊ", "Ս"],
1928
+ v: ["ט"],
1929
+ w: [
1930
+ "Ш",
1931
+ "Ѡ",
1932
+ "Ѽ",
1933
+ "൰"
1934
+ ],
1935
+ x: [
1936
+ "Ҳ",
1937
+ "Ӿ",
1938
+ "Ӽ",
1939
+ "ӽ"
1940
+ ],
1941
+ y: [
1942
+ "¥",
1943
+ "Ұ",
1944
+ "Ӌ"
1945
+ ],
1946
+ z: ["Ƶ", "ɀ"]
1947
+ };
1948
+ text.forEach(function(c) {
1949
+ c = c.toLowerCase();
1950
+ var chars = trap[c] || [" "];
1951
+ var rand = Math.floor(Math.random() * chars.length);
1952
+ if (typeof trap[c] !== "undefined") result += trap[c][rand];
1953
+ else result += c;
1954
+ });
1955
+ return result;
1956
+ };
1957
+ } });
1958
+
1959
+ //#endregion
1960
+ //#region node_modules/@colors/colors/lib/custom/zalgo.js
1961
+ var require_zalgo = __commonJS({ "node_modules/@colors/colors/lib/custom/zalgo.js"(exports, module) {
1962
+ module["exports"] = function zalgo(text, options) {
1963
+ text = text || " he is here ";
1964
+ var soul = {
1965
+ "up": [
1966
+ "̍",
1967
+ "̎",
1968
+ "̄",
1969
+ "̅",
1970
+ "̿",
1971
+ "̑",
1972
+ "̆",
1973
+ "̐",
1974
+ "͒",
1975
+ "͗",
1976
+ "͑",
1977
+ "̇",
1978
+ "̈",
1979
+ "̊",
1980
+ "͂",
1981
+ "̓",
1982
+ "̈",
1983
+ "͊",
1984
+ "͋",
1985
+ "͌",
1986
+ "̃",
1987
+ "̂",
1988
+ "̌",
1989
+ "͐",
1990
+ "̀",
1991
+ "́",
1992
+ "̋",
1993
+ "̏",
1994
+ "̒",
1995
+ "̓",
1996
+ "̔",
1997
+ "̽",
1998
+ "̉",
1999
+ "ͣ",
2000
+ "ͤ",
2001
+ "ͥ",
2002
+ "ͦ",
2003
+ "ͧ",
2004
+ "ͨ",
2005
+ "ͩ",
2006
+ "ͪ",
2007
+ "ͫ",
2008
+ "ͬ",
2009
+ "ͭ",
2010
+ "ͮ",
2011
+ "ͯ",
2012
+ "̾",
2013
+ "͛",
2014
+ "͆",
2015
+ "̚"
2016
+ ],
2017
+ "down": [
2018
+ "̖",
2019
+ "̗",
2020
+ "̘",
2021
+ "̙",
2022
+ "̜",
2023
+ "̝",
2024
+ "̞",
2025
+ "̟",
2026
+ "̠",
2027
+ "̤",
2028
+ "̥",
2029
+ "̦",
2030
+ "̩",
2031
+ "̪",
2032
+ "̫",
2033
+ "̬",
2034
+ "̭",
2035
+ "̮",
2036
+ "̯",
2037
+ "̰",
2038
+ "̱",
2039
+ "̲",
2040
+ "̳",
2041
+ "̹",
2042
+ "̺",
2043
+ "̻",
2044
+ "̼",
2045
+ "ͅ",
2046
+ "͇",
2047
+ "͈",
2048
+ "͉",
2049
+ "͍",
2050
+ "͎",
2051
+ "͓",
2052
+ "͔",
2053
+ "͕",
2054
+ "͖",
2055
+ "͙",
2056
+ "͚",
2057
+ "̣"
2058
+ ],
2059
+ "mid": [
2060
+ "̕",
2061
+ "̛",
2062
+ "̀",
2063
+ "́",
2064
+ "͘",
2065
+ "̡",
2066
+ "̢",
2067
+ "̧",
2068
+ "̨",
2069
+ "̴",
2070
+ "̵",
2071
+ "̶",
2072
+ "͜",
2073
+ "͝",
2074
+ "͞",
2075
+ "͟",
2076
+ "͠",
2077
+ "͢",
2078
+ "̸",
2079
+ "̷",
2080
+ "͡",
2081
+ " ҉"
2082
+ ]
2083
+ };
2084
+ var all = [].concat(soul.up, soul.down, soul.mid);
2085
+ function randomNumber(range) {
2086
+ var r = Math.floor(Math.random() * range);
2087
+ return r;
2088
+ }
2089
+ function isChar(character) {
2090
+ var bool = false;
2091
+ all.filter(function(i) {
2092
+ bool = i === character;
2093
+ });
2094
+ return bool;
2095
+ }
2096
+ function heComes(text$1, options$1) {
2097
+ var result = "";
2098
+ var counts;
2099
+ var l;
2100
+ options$1 = options$1 || {};
2101
+ options$1["up"] = typeof options$1["up"] !== "undefined" ? options$1["up"] : true;
2102
+ options$1["mid"] = typeof options$1["mid"] !== "undefined" ? options$1["mid"] : true;
2103
+ options$1["down"] = typeof options$1["down"] !== "undefined" ? options$1["down"] : true;
2104
+ options$1["size"] = typeof options$1["size"] !== "undefined" ? options$1["size"] : "maxi";
2105
+ text$1 = text$1.split("");
2106
+ for (l in text$1) {
2107
+ if (isChar(l)) continue;
2108
+ result = result + text$1[l];
2109
+ counts = {
2110
+ "up": 0,
2111
+ "down": 0,
2112
+ "mid": 0
2113
+ };
2114
+ switch (options$1.size) {
2115
+ case "mini":
2116
+ counts.up = randomNumber(8);
2117
+ counts.mid = randomNumber(2);
2118
+ counts.down = randomNumber(8);
2119
+ break;
2120
+ case "maxi":
2121
+ counts.up = randomNumber(16) + 3;
2122
+ counts.mid = randomNumber(4) + 1;
2123
+ counts.down = randomNumber(64) + 3;
2124
+ break;
2125
+ default:
2126
+ counts.up = randomNumber(8) + 1;
2127
+ counts.mid = randomNumber(6) / 2;
2128
+ counts.down = randomNumber(8) + 1;
2129
+ break;
2130
+ }
2131
+ var arr = [
2132
+ "up",
2133
+ "mid",
2134
+ "down"
2135
+ ];
2136
+ for (var d in arr) {
2137
+ var index = arr[d];
2138
+ for (var i = 0; i <= counts[index]; i++) if (options$1[index]) result = result + soul[index][randomNumber(soul[index].length)];
2139
+ }
2140
+ }
2141
+ return result;
2142
+ }
2143
+ return heComes(text, options);
2144
+ };
2145
+ } });
2146
+
2147
+ //#endregion
2148
+ //#region node_modules/@colors/colors/lib/maps/america.js
2149
+ var require_america = __commonJS({ "node_modules/@colors/colors/lib/maps/america.js"(exports, module) {
2150
+ module["exports"] = function(colors$2) {
2151
+ return function(letter, i, exploded) {
2152
+ if (letter === " ") return letter;
2153
+ switch (i % 3) {
2154
+ case 0: return colors$2.red(letter);
2155
+ case 1: return colors$2.white(letter);
2156
+ case 2: return colors$2.blue(letter);
2157
+ }
2158
+ };
2159
+ };
2160
+ } });
2161
+
2162
+ //#endregion
2163
+ //#region node_modules/@colors/colors/lib/maps/zebra.js
2164
+ var require_zebra = __commonJS({ "node_modules/@colors/colors/lib/maps/zebra.js"(exports, module) {
2165
+ module["exports"] = function(colors$2) {
2166
+ return function(letter, i, exploded) {
2167
+ return i % 2 === 0 ? letter : colors$2.inverse(letter);
2168
+ };
2169
+ };
2170
+ } });
2171
+
2172
+ //#endregion
2173
+ //#region node_modules/@colors/colors/lib/maps/rainbow.js
2174
+ var require_rainbow = __commonJS({ "node_modules/@colors/colors/lib/maps/rainbow.js"(exports, module) {
2175
+ module["exports"] = function(colors$2) {
2176
+ var rainbowColors = [
2177
+ "red",
2178
+ "yellow",
2179
+ "green",
2180
+ "blue",
2181
+ "magenta"
2182
+ ];
2183
+ return function(letter, i, exploded) {
2184
+ if (letter === " ") return letter;
2185
+ else return colors$2[rainbowColors[i++ % rainbowColors.length]](letter);
2186
+ };
2187
+ };
2188
+ } });
2189
+
2190
+ //#endregion
2191
+ //#region node_modules/@colors/colors/lib/maps/random.js
2192
+ var require_random = __commonJS({ "node_modules/@colors/colors/lib/maps/random.js"(exports, module) {
2193
+ module["exports"] = function(colors$2) {
2194
+ var available = [
2195
+ "underline",
2196
+ "inverse",
2197
+ "grey",
2198
+ "yellow",
2199
+ "red",
2200
+ "green",
2201
+ "blue",
2202
+ "white",
2203
+ "cyan",
2204
+ "magenta",
2205
+ "brightYellow",
2206
+ "brightRed",
2207
+ "brightGreen",
2208
+ "brightBlue",
2209
+ "brightWhite",
2210
+ "brightCyan",
2211
+ "brightMagenta"
2212
+ ];
2213
+ return function(letter, i, exploded) {
2214
+ return letter === " " ? letter : colors$2[available[Math.round(Math.random() * (available.length - 2))]](letter);
2215
+ };
2216
+ };
2217
+ } });
2218
+
2219
+ //#endregion
2220
+ //#region node_modules/@colors/colors/lib/colors.js
2221
+ var require_colors = __commonJS({ "node_modules/@colors/colors/lib/colors.js"(exports, module) {
2222
+ var colors$1 = {};
2223
+ module["exports"] = colors$1;
2224
+ colors$1.themes = {};
2225
+ var util = __require("util");
2226
+ var ansiStyles = colors$1.styles = require_styles();
2227
+ var defineProps = Object.defineProperties;
2228
+ var newLineRegex = new RegExp(/[\r\n]+/g);
2229
+ colors$1.supportsColor = require_supports_colors().supportsColor;
2230
+ if (typeof colors$1.enabled === "undefined") colors$1.enabled = colors$1.supportsColor() !== false;
2231
+ colors$1.enable = function() {
2232
+ colors$1.enabled = true;
2233
+ };
2234
+ colors$1.disable = function() {
2235
+ colors$1.enabled = false;
2236
+ };
2237
+ colors$1.stripColors = colors$1.strip = function(str) {
2238
+ return ("" + str).replace(/\x1B\[\d+m/g, "");
2239
+ };
2240
+ var stylize = colors$1.stylize = function stylize$1(str, style) {
2241
+ if (!colors$1.enabled) return str + "";
2242
+ var styleMap = ansiStyles[style];
2243
+ if (!styleMap && style in colors$1) return colors$1[style](str);
2244
+ return styleMap.open + str + styleMap.close;
2245
+ };
2246
+ var matchOperatorsRe = /[|\\{}()[\]^$+*?.]/g;
2247
+ var escapeStringRegexp = function(str) {
2248
+ if (typeof str !== "string") throw new TypeError("Expected a string");
2249
+ return str.replace(matchOperatorsRe, "\\$&");
2250
+ };
2251
+ function build(_styles) {
2252
+ var builder = function builder$1() {
2253
+ return applyStyle.apply(builder$1, arguments);
2254
+ };
2255
+ builder._styles = _styles;
2256
+ builder.__proto__ = proto;
2257
+ return builder;
2258
+ }
2259
+ var styles = function() {
2260
+ var ret = {};
2261
+ ansiStyles.grey = ansiStyles.gray;
2262
+ Object.keys(ansiStyles).forEach(function(key) {
2263
+ ansiStyles[key].closeRe = new RegExp(escapeStringRegexp(ansiStyles[key].close), "g");
2264
+ ret[key] = { get: function() {
2265
+ return build(this._styles.concat(key));
2266
+ } };
2267
+ });
2268
+ return ret;
2269
+ }();
2270
+ var proto = defineProps(function colors$2() {}, styles);
2271
+ function applyStyle() {
2272
+ var args = Array.prototype.slice.call(arguments);
2273
+ var str = args.map(function(arg) {
2274
+ if (arg != null && arg.constructor === String) return arg;
2275
+ else return util.inspect(arg);
2276
+ }).join(" ");
2277
+ if (!colors$1.enabled || !str) return str;
2278
+ var newLinesPresent = str.indexOf("\n") != -1;
2279
+ var nestedStyles = this._styles;
2280
+ var i = nestedStyles.length;
2281
+ while (i--) {
2282
+ var code = ansiStyles[nestedStyles[i]];
2283
+ str = code.open + str.replace(code.closeRe, code.open) + code.close;
2284
+ if (newLinesPresent) str = str.replace(newLineRegex, function(match) {
2285
+ return code.close + match + code.open;
2286
+ });
2287
+ }
2288
+ return str;
2289
+ }
2290
+ colors$1.setTheme = function(theme) {
2291
+ if (typeof theme === "string") {
2292
+ console.log("colors.setTheme now only accepts an object, not a string. If you are trying to set a theme from a file, it is now your (the caller's) responsibility to require the file. The old syntax looked like colors.setTheme(__dirname + '/../themes/generic-logging.js'); The new syntax looks like colors.setTheme(require(__dirname + '/../themes/generic-logging.js'));");
2293
+ return;
2294
+ }
2295
+ for (var style in theme) (function(style$1) {
2296
+ colors$1[style$1] = function(str) {
2297
+ if (typeof theme[style$1] === "object") {
2298
+ var out = str;
2299
+ for (var i in theme[style$1]) out = colors$1[theme[style$1][i]](out);
2300
+ return out;
2301
+ }
2302
+ return colors$1[theme[style$1]](str);
2303
+ };
2304
+ })(style);
2305
+ };
2306
+ function init() {
2307
+ var ret = {};
2308
+ Object.keys(styles).forEach(function(name$1) {
2309
+ ret[name$1] = { get: function() {
2310
+ return build([name$1]);
2311
+ } };
2312
+ });
2313
+ return ret;
2314
+ }
2315
+ var sequencer = function sequencer$1(map$1, str) {
2316
+ var exploded = str.split("");
2317
+ exploded = exploded.map(map$1);
2318
+ return exploded.join("");
2319
+ };
2320
+ colors$1.trap = require_trap();
2321
+ colors$1.zalgo = require_zalgo();
2322
+ colors$1.maps = {};
2323
+ colors$1.maps.america = require_america()(colors$1);
2324
+ colors$1.maps.zebra = require_zebra()(colors$1);
2325
+ colors$1.maps.rainbow = require_rainbow()(colors$1);
2326
+ colors$1.maps.random = require_random()(colors$1);
2327
+ for (var map in colors$1.maps) (function(map$1) {
2328
+ colors$1[map$1] = function(str) {
2329
+ return sequencer(colors$1.maps[map$1], str);
2330
+ };
2331
+ })(map);
2332
+ defineProps(colors$1, init());
2333
+ } });
2334
+
2335
+ //#endregion
2336
+ //#region node_modules/@colors/colors/safe.js
2337
+ var require_safe = __commonJS({ "node_modules/@colors/colors/safe.js"(exports, module) {
2338
+ var colors = require_colors();
2339
+ module["exports"] = colors;
2340
+ } });
2341
+
2342
+ //#endregion
2343
+ //#region node_modules/cli-table3/src/cell.js
2344
+ var require_cell = __commonJS({ "node_modules/cli-table3/src/cell.js"(exports, module) {
2345
+ const { info, debug: debug$2 } = require_debug$1();
2346
+ const utils$1 = require_utils();
2347
+ var Cell$1 = class Cell$1 {
2348
+ /**
2349
+ * A representation of a cell within the table.
2350
+ * Implementations must have `init` and `draw` methods,
2351
+ * as well as `colSpan`, `rowSpan`, `desiredHeight` and `desiredWidth` properties.
2352
+ * @param options
2353
+ * @constructor
2354
+ */
2355
+ constructor(options) {
2356
+ this.setOptions(options);
2357
+ /**
2358
+ * Each cell will have it's `x` and `y` values set by the `layout-manager` prior to
2359
+ * `init` being called;
2360
+ * @type {Number}
2361
+ */
2362
+ this.x = null;
2363
+ this.y = null;
2364
+ }
2365
+ setOptions(options) {
2366
+ if ([
2367
+ "boolean",
2368
+ "number",
2369
+ "bigint",
2370
+ "string"
2371
+ ].indexOf(typeof options) !== -1) options = { content: "" + options };
2372
+ options = options || {};
2373
+ this.options = options;
2374
+ let content = options.content;
2375
+ if ([
2376
+ "boolean",
2377
+ "number",
2378
+ "bigint",
2379
+ "string"
2380
+ ].indexOf(typeof content) !== -1) this.content = String(content);
2381
+ else if (!content) this.content = this.options.href || "";
2382
+ else throw new Error("Content needs to be a primitive, got: " + typeof content);
2383
+ this.colSpan = options.colSpan || 1;
2384
+ this.rowSpan = options.rowSpan || 1;
2385
+ if (this.options.href) Object.defineProperty(this, "href", { get() {
2386
+ return this.options.href;
2387
+ } });
2388
+ }
2389
+ mergeTableOptions(tableOptions, cells) {
2390
+ this.cells = cells;
2391
+ let optionsChars = this.options.chars || {};
2392
+ let tableChars = tableOptions.chars;
2393
+ let chars = this.chars = {};
2394
+ CHAR_NAMES.forEach(function(name$1) {
2395
+ setOption(optionsChars, tableChars, name$1, chars);
2396
+ });
2397
+ this.truncate = this.options.truncate || tableOptions.truncate;
2398
+ let style = this.options.style = this.options.style || {};
2399
+ let tableStyle = tableOptions.style;
2400
+ setOption(style, tableStyle, "padding-left", this);
2401
+ setOption(style, tableStyle, "padding-right", this);
2402
+ this.head = style.head || tableStyle.head;
2403
+ this.border = style.border || tableStyle.border;
2404
+ this.fixedWidth = tableOptions.colWidths[this.x];
2405
+ this.lines = this.computeLines(tableOptions);
2406
+ this.desiredWidth = utils$1.strlen(this.content) + this.paddingLeft + this.paddingRight;
2407
+ this.desiredHeight = this.lines.length;
2408
+ }
2409
+ computeLines(tableOptions) {
2410
+ const tableWordWrap = tableOptions.wordWrap || tableOptions.textWrap;
2411
+ const { wordWrap: wordWrap$1 = tableWordWrap } = this.options;
2412
+ if (this.fixedWidth && wordWrap$1) {
2413
+ this.fixedWidth -= this.paddingLeft + this.paddingRight;
2414
+ if (this.colSpan) {
2415
+ let i = 1;
2416
+ while (i < this.colSpan) {
2417
+ this.fixedWidth += tableOptions.colWidths[this.x + i];
2418
+ i++;
2419
+ }
2420
+ }
2421
+ const { wrapOnWordBoundary: tableWrapOnWordBoundary = true } = tableOptions;
2422
+ const { wrapOnWordBoundary = tableWrapOnWordBoundary } = this.options;
2423
+ return this.wrapLines(utils$1.wordWrap(this.fixedWidth, this.content, wrapOnWordBoundary));
2424
+ }
2425
+ return this.wrapLines(this.content.split("\n"));
2426
+ }
2427
+ wrapLines(computedLines) {
2428
+ const lines = utils$1.colorizeLines(computedLines);
2429
+ if (this.href) return lines.map((line) => utils$1.hyperlink(this.href, line));
2430
+ return lines;
2431
+ }
2432
+ /**
2433
+ * Initializes the Cells data structure.
2434
+ *
2435
+ * @param tableOptions - A fully populated set of tableOptions.
2436
+ * In addition to the standard default values, tableOptions must have fully populated the
2437
+ * `colWidths` and `rowWidths` arrays. Those arrays must have lengths equal to the number
2438
+ * of columns or rows (respectively) in this table, and each array item must be a Number.
2439
+ *
2440
+ */
2441
+ init(tableOptions) {
2442
+ let x = this.x;
2443
+ let y = this.y;
2444
+ this.widths = tableOptions.colWidths.slice(x, x + this.colSpan);
2445
+ this.heights = tableOptions.rowHeights.slice(y, y + this.rowSpan);
2446
+ this.width = this.widths.reduce(sumPlusOne, -1);
2447
+ this.height = this.heights.reduce(sumPlusOne, -1);
2448
+ this.hAlign = this.options.hAlign || tableOptions.colAligns[x];
2449
+ this.vAlign = this.options.vAlign || tableOptions.rowAligns[y];
2450
+ this.drawRight = x + this.colSpan == tableOptions.colWidths.length;
2451
+ }
2452
+ /**
2453
+ * Draws the given line of the cell.
2454
+ * This default implementation defers to methods `drawTop`, `drawBottom`, `drawLine` and `drawEmpty`.
2455
+ * @param lineNum - can be `top`, `bottom` or a numerical line number.
2456
+ * @param spanningCell - will be a number if being called from a RowSpanCell, and will represent how
2457
+ * many rows below it's being called from. Otherwise it's undefined.
2458
+ * @returns {String} The representation of this line.
2459
+ */
2460
+ draw(lineNum, spanningCell) {
2461
+ if (lineNum == "top") return this.drawTop(this.drawRight);
2462
+ if (lineNum == "bottom") return this.drawBottom(this.drawRight);
2463
+ let content = utils$1.truncate(this.content, 10, this.truncate);
2464
+ if (!lineNum) info(`${this.y}-${this.x}: ${this.rowSpan - lineNum}x${this.colSpan} Cell ${content}`);
2465
+ let padLen = Math.max(this.height - this.lines.length, 0);
2466
+ let padTop;
2467
+ switch (this.vAlign) {
2468
+ case "center":
2469
+ padTop = Math.ceil(padLen / 2);
2470
+ break;
2471
+ case "bottom":
2472
+ padTop = padLen;
2473
+ break;
2474
+ default: padTop = 0;
2475
+ }
2476
+ if (lineNum < padTop || lineNum >= padTop + this.lines.length) return this.drawEmpty(this.drawRight, spanningCell);
2477
+ let forceTruncation = this.lines.length > this.height && lineNum + 1 >= this.height;
2478
+ return this.drawLine(lineNum - padTop, this.drawRight, forceTruncation, spanningCell);
2479
+ }
2480
+ /**
2481
+ * Renders the top line of the cell.
2482
+ * @param drawRight - true if this method should render the right edge of the cell.
2483
+ * @returns {String}
2484
+ */
2485
+ drawTop(drawRight) {
2486
+ let content = [];
2487
+ if (this.cells) this.widths.forEach(function(width, index) {
2488
+ content.push(this._topLeftChar(index));
2489
+ content.push(utils$1.repeat(this.chars[this.y == 0 ? "top" : "mid"], width));
2490
+ }, this);
2491
+ else {
2492
+ content.push(this._topLeftChar(0));
2493
+ content.push(utils$1.repeat(this.chars[this.y == 0 ? "top" : "mid"], this.width));
2494
+ }
2495
+ if (drawRight) content.push(this.chars[this.y == 0 ? "topRight" : "rightMid"]);
2496
+ return this.wrapWithStyleColors("border", content.join(""));
2497
+ }
2498
+ _topLeftChar(offset) {
2499
+ let x = this.x + offset;
2500
+ let leftChar;
2501
+ if (this.y == 0) leftChar = x == 0 ? "topLeft" : offset == 0 ? "topMid" : "top";
2502
+ else if (x == 0) leftChar = "leftMid";
2503
+ else {
2504
+ leftChar = offset == 0 ? "midMid" : "bottomMid";
2505
+ if (this.cells) {
2506
+ let spanAbove = this.cells[this.y - 1][x] instanceof Cell$1.ColSpanCell;
2507
+ if (spanAbove) leftChar = offset == 0 ? "topMid" : "mid";
2508
+ if (offset == 0) {
2509
+ let i = 1;
2510
+ while (this.cells[this.y][x - i] instanceof Cell$1.ColSpanCell) i++;
2511
+ if (this.cells[this.y][x - i] instanceof Cell$1.RowSpanCell) leftChar = "leftMid";
2512
+ }
2513
+ }
2514
+ }
2515
+ return this.chars[leftChar];
2516
+ }
2517
+ wrapWithStyleColors(styleProperty, content) {
2518
+ if (this[styleProperty] && this[styleProperty].length) try {
2519
+ let colors$2 = require_safe();
2520
+ for (let i = this[styleProperty].length - 1; i >= 0; i--) colors$2 = colors$2[this[styleProperty][i]];
2521
+ return colors$2(content);
2522
+ } catch (e) {
2523
+ return content;
2524
+ }
2525
+ else return content;
2526
+ }
2527
+ /**
2528
+ * Renders a line of text.
2529
+ * @param lineNum - Which line of text to render. This is not necessarily the line within the cell.
2530
+ * There may be top-padding above the first line of text.
2531
+ * @param drawRight - true if this method should render the right edge of the cell.
2532
+ * @param forceTruncationSymbol - `true` if the rendered text should end with the truncation symbol even
2533
+ * if the text fits. This is used when the cell is vertically truncated. If `false` the text should
2534
+ * only include the truncation symbol if the text will not fit horizontally within the cell width.
2535
+ * @param spanningCell - a number of if being called from a RowSpanCell. (how many rows below). otherwise undefined.
2536
+ * @returns {String}
2537
+ */
2538
+ drawLine(lineNum, drawRight, forceTruncationSymbol, spanningCell) {
2539
+ let left = this.chars[this.x == 0 ? "left" : "middle"];
2540
+ if (this.x && spanningCell && this.cells) {
2541
+ let cellLeft = this.cells[this.y + spanningCell][this.x - 1];
2542
+ while (cellLeft instanceof ColSpanCell$1) cellLeft = this.cells[cellLeft.y][cellLeft.x - 1];
2543
+ if (!(cellLeft instanceof RowSpanCell$1)) left = this.chars["rightMid"];
2544
+ }
2545
+ let leftPadding = utils$1.repeat(" ", this.paddingLeft);
2546
+ let right = drawRight ? this.chars["right"] : "";
2547
+ let rightPadding = utils$1.repeat(" ", this.paddingRight);
2548
+ let line = this.lines[lineNum];
2549
+ let len = this.width - (this.paddingLeft + this.paddingRight);
2550
+ if (forceTruncationSymbol) line += this.truncate || "…";
2551
+ let content = utils$1.truncate(line, len, this.truncate);
2552
+ content = utils$1.pad(content, len, " ", this.hAlign);
2553
+ content = leftPadding + content + rightPadding;
2554
+ return this.stylizeLine(left, content, right);
2555
+ }
2556
+ stylizeLine(left, content, right) {
2557
+ left = this.wrapWithStyleColors("border", left);
2558
+ right = this.wrapWithStyleColors("border", right);
2559
+ if (this.y === 0) content = this.wrapWithStyleColors("head", content);
2560
+ return left + content + right;
2561
+ }
2562
+ /**
2563
+ * Renders the bottom line of the cell.
2564
+ * @param drawRight - true if this method should render the right edge of the cell.
2565
+ * @returns {String}
2566
+ */
2567
+ drawBottom(drawRight) {
2568
+ let left = this.chars[this.x == 0 ? "bottomLeft" : "bottomMid"];
2569
+ let content = utils$1.repeat(this.chars.bottom, this.width);
2570
+ let right = drawRight ? this.chars["bottomRight"] : "";
2571
+ return this.wrapWithStyleColors("border", left + content + right);
2572
+ }
2573
+ /**
2574
+ * Renders a blank line of text within the cell. Used for top and/or bottom padding.
2575
+ * @param drawRight - true if this method should render the right edge of the cell.
2576
+ * @param spanningCell - a number of if being called from a RowSpanCell. (how many rows below). otherwise undefined.
2577
+ * @returns {String}
2578
+ */
2579
+ drawEmpty(drawRight, spanningCell) {
2580
+ let left = this.chars[this.x == 0 ? "left" : "middle"];
2581
+ if (this.x && spanningCell && this.cells) {
2582
+ let cellLeft = this.cells[this.y + spanningCell][this.x - 1];
2583
+ while (cellLeft instanceof ColSpanCell$1) cellLeft = this.cells[cellLeft.y][cellLeft.x - 1];
2584
+ if (!(cellLeft instanceof RowSpanCell$1)) left = this.chars["rightMid"];
2585
+ }
2586
+ let right = drawRight ? this.chars["right"] : "";
2587
+ let content = utils$1.repeat(" ", this.width);
2588
+ return this.stylizeLine(left, content, right);
2589
+ }
2590
+ };
2591
+ var ColSpanCell$1 = class {
2592
+ /**
2593
+ * A Cell that doesn't do anything. It just draws empty lines.
2594
+ * Used as a placeholder in column spanning.
2595
+ * @constructor
2596
+ */
2597
+ constructor() {}
2598
+ draw(lineNum) {
2599
+ if (typeof lineNum === "number") debug$2(`${this.y}-${this.x}: 1x1 ColSpanCell`);
2600
+ return "";
2601
+ }
2602
+ init() {}
2603
+ mergeTableOptions() {}
2604
+ };
2605
+ var RowSpanCell$1 = class {
2606
+ /**
2607
+ * A placeholder Cell for a Cell that spans multiple rows.
2608
+ * It delegates rendering to the original cell, but adds the appropriate offset.
2609
+ * @param originalCell
2610
+ * @constructor
2611
+ */
2612
+ constructor(originalCell) {
2613
+ this.originalCell = originalCell;
2614
+ }
2615
+ init(tableOptions) {
2616
+ let y = this.y;
2617
+ let originalY = this.originalCell.y;
2618
+ this.cellOffset = y - originalY;
2619
+ this.offset = findDimension(tableOptions.rowHeights, originalY, this.cellOffset);
2620
+ }
2621
+ draw(lineNum) {
2622
+ if (lineNum == "top") return this.originalCell.draw(this.offset, this.cellOffset);
2623
+ if (lineNum == "bottom") return this.originalCell.draw("bottom");
2624
+ debug$2(`${this.y}-${this.x}: 1x${this.colSpan} RowSpanCell for ${this.originalCell.content}`);
2625
+ return this.originalCell.draw(this.offset + 1 + lineNum);
2626
+ }
2627
+ mergeTableOptions() {}
2628
+ };
2629
+ function firstDefined(...args) {
2630
+ return args.filter((v) => v !== void 0 && v !== null).shift();
2631
+ }
2632
+ function setOption(objA, objB, nameB, targetObj) {
2633
+ let nameA = nameB.split("-");
2634
+ if (nameA.length > 1) {
2635
+ nameA[1] = nameA[1].charAt(0).toUpperCase() + nameA[1].substr(1);
2636
+ nameA = nameA.join("");
2637
+ targetObj[nameA] = firstDefined(objA[nameA], objA[nameB], objB[nameA], objB[nameB]);
2638
+ } else targetObj[nameB] = firstDefined(objA[nameB], objB[nameB]);
2639
+ }
2640
+ function findDimension(dimensionTable, startingIndex, span) {
2641
+ let ret = dimensionTable[startingIndex];
2642
+ for (let i = 1; i < span; i++) ret += 1 + dimensionTable[startingIndex + i];
2643
+ return ret;
2644
+ }
2645
+ function sumPlusOne(a, b) {
2646
+ return a + b + 1;
2647
+ }
2648
+ let CHAR_NAMES = [
2649
+ "top",
2650
+ "top-mid",
2651
+ "top-left",
2652
+ "top-right",
2653
+ "bottom",
2654
+ "bottom-mid",
2655
+ "bottom-left",
2656
+ "bottom-right",
2657
+ "left",
2658
+ "left-mid",
2659
+ "mid",
2660
+ "mid-mid",
2661
+ "right",
2662
+ "right-mid",
2663
+ "middle"
2664
+ ];
2665
+ module.exports = Cell$1;
2666
+ module.exports.ColSpanCell = ColSpanCell$1;
2667
+ module.exports.RowSpanCell = RowSpanCell$1;
2668
+ } });
2669
+
2670
+ //#endregion
2671
+ //#region node_modules/cli-table3/src/layout-manager.js
2672
+ var require_layout_manager = __commonJS({ "node_modules/cli-table3/src/layout-manager.js"(exports, module) {
2673
+ const { warn, debug: debug$1 } = require_debug$1();
2674
+ const Cell = require_cell();
2675
+ const { ColSpanCell, RowSpanCell } = Cell;
2676
+ (function() {
2677
+ function next(alloc, col) {
2678
+ if (alloc[col] > 0) return next(alloc, col + 1);
2679
+ return col;
2680
+ }
2681
+ function layoutTable(table) {
2682
+ let alloc = {};
2683
+ table.forEach(function(row, rowIndex) {
2684
+ let col = 0;
2685
+ row.forEach(function(cell) {
2686
+ cell.y = rowIndex;
2687
+ cell.x = rowIndex ? next(alloc, col) : col;
2688
+ const rowSpan = cell.rowSpan || 1;
2689
+ const colSpan = cell.colSpan || 1;
2690
+ if (rowSpan > 1) for (let cs = 0; cs < colSpan; cs++) alloc[cell.x + cs] = rowSpan;
2691
+ col = cell.x + colSpan;
2692
+ });
2693
+ Object.keys(alloc).forEach((idx) => {
2694
+ alloc[idx]--;
2695
+ if (alloc[idx] < 1) delete alloc[idx];
2696
+ });
2697
+ });
2698
+ }
2699
+ function maxWidth(table) {
2700
+ let mw = 0;
2701
+ table.forEach(function(row) {
2702
+ row.forEach(function(cell) {
2703
+ mw = Math.max(mw, cell.x + (cell.colSpan || 1));
2704
+ });
2705
+ });
2706
+ return mw;
2707
+ }
2708
+ function maxHeight(table) {
2709
+ return table.length;
2710
+ }
2711
+ function cellsConflict(cell1, cell2) {
2712
+ let yMin1 = cell1.y;
2713
+ let yMax1 = cell1.y - 1 + (cell1.rowSpan || 1);
2714
+ let yMin2 = cell2.y;
2715
+ let yMax2 = cell2.y - 1 + (cell2.rowSpan || 1);
2716
+ let yConflict = !(yMin1 > yMax2 || yMin2 > yMax1);
2717
+ let xMin1 = cell1.x;
2718
+ let xMax1 = cell1.x - 1 + (cell1.colSpan || 1);
2719
+ let xMin2 = cell2.x;
2720
+ let xMax2 = cell2.x - 1 + (cell2.colSpan || 1);
2721
+ let xConflict = !(xMin1 > xMax2 || xMin2 > xMax1);
2722
+ return yConflict && xConflict;
2723
+ }
2724
+ function conflictExists(rows, x, y) {
2725
+ let i_max = Math.min(rows.length - 1, y);
2726
+ let cell = {
2727
+ x,
2728
+ y
2729
+ };
2730
+ for (let i = 0; i <= i_max; i++) {
2731
+ let row = rows[i];
2732
+ for (let j = 0; j < row.length; j++) if (cellsConflict(cell, row[j])) return true;
2733
+ }
2734
+ return false;
2735
+ }
2736
+ function allBlank(rows, y, xMin, xMax) {
2737
+ for (let x = xMin; x < xMax; x++) if (conflictExists(rows, x, y)) return false;
2738
+ return true;
2739
+ }
2740
+ function addRowSpanCells(table) {
2741
+ table.forEach(function(row, rowIndex) {
2742
+ row.forEach(function(cell) {
2743
+ for (let i = 1; i < cell.rowSpan; i++) {
2744
+ let rowSpanCell = new RowSpanCell(cell);
2745
+ rowSpanCell.x = cell.x;
2746
+ rowSpanCell.y = cell.y + i;
2747
+ rowSpanCell.colSpan = cell.colSpan;
2748
+ insertCell(rowSpanCell, table[rowIndex + i]);
2749
+ }
2750
+ });
2751
+ });
2752
+ }
2753
+ function addColSpanCells(cellRows) {
2754
+ for (let rowIndex = cellRows.length - 1; rowIndex >= 0; rowIndex--) {
2755
+ let cellColumns = cellRows[rowIndex];
2756
+ for (let columnIndex = 0; columnIndex < cellColumns.length; columnIndex++) {
2757
+ let cell = cellColumns[columnIndex];
2758
+ for (let k = 1; k < cell.colSpan; k++) {
2759
+ let colSpanCell = new ColSpanCell();
2760
+ colSpanCell.x = cell.x + k;
2761
+ colSpanCell.y = cell.y;
2762
+ cellColumns.splice(columnIndex + 1, 0, colSpanCell);
2763
+ }
2764
+ }
2765
+ }
2766
+ }
2767
+ function insertCell(cell, row) {
2768
+ let x = 0;
2769
+ while (x < row.length && row[x].x < cell.x) x++;
2770
+ row.splice(x, 0, cell);
2771
+ }
2772
+ function fillInTable(table) {
2773
+ let h_max = maxHeight(table);
2774
+ let w_max = maxWidth(table);
2775
+ debug$1(`Max rows: ${h_max}; Max cols: ${w_max}`);
2776
+ for (let y = 0; y < h_max; y++) for (let x = 0; x < w_max; x++) if (!conflictExists(table, x, y)) {
2777
+ let opts = {
2778
+ x,
2779
+ y,
2780
+ colSpan: 1,
2781
+ rowSpan: 1
2782
+ };
2783
+ x++;
2784
+ while (x < w_max && !conflictExists(table, x, y)) {
2785
+ opts.colSpan++;
2786
+ x++;
2787
+ }
2788
+ let y2 = y + 1;
2789
+ while (y2 < h_max && allBlank(table, y2, opts.x, opts.x + opts.colSpan)) {
2790
+ opts.rowSpan++;
2791
+ y2++;
2792
+ }
2793
+ let cell = new Cell(opts);
2794
+ cell.x = opts.x;
2795
+ cell.y = opts.y;
2796
+ warn(`Missing cell at ${cell.y}-${cell.x}.`);
2797
+ insertCell(cell, table[y]);
2798
+ }
2799
+ }
2800
+ function generateCells(rows) {
2801
+ return rows.map(function(row) {
2802
+ if (!Array.isArray(row)) {
2803
+ let key = Object.keys(row)[0];
2804
+ row = row[key];
2805
+ if (Array.isArray(row)) {
2806
+ row = row.slice();
2807
+ row.unshift(key);
2808
+ } else row = [key, row];
2809
+ }
2810
+ return row.map(function(cell) {
2811
+ return new Cell(cell);
2812
+ });
2813
+ });
2814
+ }
2815
+ function makeTableLayout(rows) {
2816
+ let cellRows = generateCells(rows);
2817
+ layoutTable(cellRows);
2818
+ fillInTable(cellRows);
2819
+ addRowSpanCells(cellRows);
2820
+ addColSpanCells(cellRows);
2821
+ return cellRows;
2822
+ }
2823
+ module.exports = {
2824
+ makeTableLayout,
2825
+ layoutTable,
2826
+ addRowSpanCells,
2827
+ maxWidth,
2828
+ fillInTable,
2829
+ computeWidths: makeComputeWidths("colSpan", "desiredWidth", "x", 1),
2830
+ computeHeights: makeComputeWidths("rowSpan", "desiredHeight", "y", 1)
2831
+ };
2832
+ })();
2833
+ function makeComputeWidths(colSpan, desiredWidth, x, forcedMin) {
2834
+ return function(vals, table) {
2835
+ let result = [];
2836
+ let spanners = [];
2837
+ let auto = {};
2838
+ table.forEach(function(row) {
2839
+ row.forEach(function(cell) {
2840
+ if ((cell[colSpan] || 1) > 1) spanners.push(cell);
2841
+ else result[cell[x]] = Math.max(result[cell[x]] || 0, cell[desiredWidth] || 0, forcedMin);
2842
+ });
2843
+ });
2844
+ vals.forEach(function(val, index) {
2845
+ if (typeof val === "number") result[index] = val;
2846
+ });
2847
+ for (let k = spanners.length - 1; k >= 0; k--) {
2848
+ let cell = spanners[k];
2849
+ let span = cell[colSpan];
2850
+ let col = cell[x];
2851
+ let existingWidth = result[col];
2852
+ let editableCols = typeof vals[col] === "number" ? 0 : 1;
2853
+ if (typeof existingWidth === "number") for (let i = 1; i < span; i++) {
2854
+ existingWidth += 1 + result[col + i];
2855
+ if (typeof vals[col + i] !== "number") editableCols++;
2856
+ }
2857
+ else {
2858
+ existingWidth = desiredWidth === "desiredWidth" ? cell.desiredWidth - 1 : 1;
2859
+ if (!auto[col] || auto[col] < existingWidth) auto[col] = existingWidth;
2860
+ }
2861
+ if (cell[desiredWidth] > existingWidth) {
2862
+ let i = 0;
2863
+ while (editableCols > 0 && cell[desiredWidth] > existingWidth) {
2864
+ if (typeof vals[col + i] !== "number") {
2865
+ let dif = Math.round((cell[desiredWidth] - existingWidth) / editableCols);
2866
+ existingWidth += dif;
2867
+ result[col + i] += dif;
2868
+ editableCols--;
2869
+ }
2870
+ i++;
2871
+ }
2872
+ }
2873
+ }
2874
+ Object.assign(vals, result, auto);
2875
+ for (let j = 0; j < vals.length; j++) vals[j] = Math.max(forcedMin, vals[j] || 0);
2876
+ };
2877
+ }
2878
+ } });
2879
+
2880
+ //#endregion
2881
+ //#region node_modules/cli-table3/src/table.js
2882
+ var require_table = __commonJS({ "node_modules/cli-table3/src/table.js"(exports, module) {
2883
+ const debug = require_debug$1();
2884
+ const utils = require_utils();
2885
+ const tableLayout = require_layout_manager();
2886
+ var Table$1 = class extends Array {
2887
+ constructor(opts) {
2888
+ super();
2889
+ const options = utils.mergeOptions(opts);
2890
+ Object.defineProperty(this, "options", {
2891
+ value: options,
2892
+ enumerable: options.debug
2893
+ });
2894
+ if (options.debug) {
2895
+ switch (typeof options.debug) {
2896
+ case "boolean":
2897
+ debug.setDebugLevel(debug.WARN);
2898
+ break;
2899
+ case "number":
2900
+ debug.setDebugLevel(options.debug);
2901
+ break;
2902
+ case "string":
2903
+ debug.setDebugLevel(parseInt(options.debug, 10));
2904
+ break;
2905
+ default:
2906
+ debug.setDebugLevel(debug.WARN);
2907
+ debug.warn(`Debug option is expected to be boolean, number, or string. Received a ${typeof options.debug}`);
2908
+ }
2909
+ Object.defineProperty(this, "messages", { get() {
2910
+ return debug.debugMessages();
2911
+ } });
2912
+ }
2913
+ }
2914
+ toString() {
2915
+ let array = this;
2916
+ let headersPresent = this.options.head && this.options.head.length;
2917
+ if (headersPresent) {
2918
+ array = [this.options.head];
2919
+ if (this.length) array.push.apply(array, this);
2920
+ } else this.options.style.head = [];
2921
+ let cells = tableLayout.makeTableLayout(array);
2922
+ cells.forEach(function(row) {
2923
+ row.forEach(function(cell) {
2924
+ cell.mergeTableOptions(this.options, cells);
2925
+ }, this);
2926
+ }, this);
2927
+ tableLayout.computeWidths(this.options.colWidths, cells);
2928
+ tableLayout.computeHeights(this.options.rowHeights, cells);
2929
+ cells.forEach(function(row) {
2930
+ row.forEach(function(cell) {
2931
+ cell.init(this.options);
2932
+ }, this);
2933
+ }, this);
2934
+ let result = [];
2935
+ for (let rowIndex = 0; rowIndex < cells.length; rowIndex++) {
2936
+ let row = cells[rowIndex];
2937
+ let heightOfRow = this.options.rowHeights[rowIndex];
2938
+ if (rowIndex === 0 || !this.options.style.compact || rowIndex == 1 && headersPresent) doDraw(row, "top", result);
2939
+ for (let lineNum = 0; lineNum < heightOfRow; lineNum++) doDraw(row, lineNum, result);
2940
+ if (rowIndex + 1 == cells.length) doDraw(row, "bottom", result);
2941
+ }
2942
+ return result.join("\n");
2943
+ }
2944
+ get width() {
2945
+ let str = this.toString().split("\n");
2946
+ return str[0].length;
2947
+ }
2948
+ };
2949
+ Table$1.reset = () => debug.reset();
2950
+ function doDraw(row, lineNum, result) {
2951
+ let line = [];
2952
+ row.forEach(function(cell) {
2953
+ line.push(cell.draw(lineNum));
2954
+ });
2955
+ let str = line.join("");
2956
+ if (str.length) result.push(str);
2957
+ }
2958
+ module.exports = Table$1;
2959
+ } });
2960
+
2961
+ //#endregion
2962
+ //#region node_modules/cli-table3/index.js
2963
+ var require_cli_table3 = __commonJS({ "node_modules/cli-table3/index.js"(exports, module) {
2964
+ module.exports = require_table();
2965
+ } });
2966
+
2967
+ //#endregion
2968
+ //#region node_modules/ansi-regex/index.js
2969
+ function ansiRegex({ onlyFirst = false } = {}) {
2970
+ const ST = "(?:\\u0007|\\u001B\\u005C|\\u009C)";
2971
+ const pattern = [`[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?${ST})`, "(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");
2972
+ return new RegExp(pattern, onlyFirst ? void 0 : "g");
2973
+ }
2974
+
2975
+ //#endregion
2976
+ //#region node_modules/strip-ansi/index.js
2977
+ const regex = ansiRegex();
2978
+ function stripAnsi(string) {
2979
+ if (typeof string !== "string") throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``);
2980
+ return string.replace(regex, "");
2981
+ }
2982
+
2983
+ //#endregion
2984
+ //#region node_modules/get-east-asian-width/lookup.js
2985
+ function isAmbiguous(x) {
2986
+ return x === 161 || x === 164 || x === 167 || x === 168 || x === 170 || x === 173 || x === 174 || x >= 176 && x <= 180 || x >= 182 && x <= 186 || x >= 188 && x <= 191 || x === 198 || x === 208 || x === 215 || x === 216 || x >= 222 && x <= 225 || x === 230 || x >= 232 && x <= 234 || x === 236 || x === 237 || x === 240 || x === 242 || x === 243 || x >= 247 && x <= 250 || x === 252 || x === 254 || x === 257 || x === 273 || x === 275 || x === 283 || x === 294 || x === 295 || x === 299 || x >= 305 && x <= 307 || x === 312 || x >= 319 && x <= 322 || x === 324 || x >= 328 && x <= 331 || x === 333 || x === 338 || x === 339 || x === 358 || x === 359 || x === 363 || x === 462 || x === 464 || x === 466 || x === 468 || x === 470 || x === 472 || x === 474 || x === 476 || x === 593 || x === 609 || x === 708 || x === 711 || x >= 713 && x <= 715 || x === 717 || x === 720 || x >= 728 && x <= 731 || x === 733 || x === 735 || x >= 768 && x <= 879 || x >= 913 && x <= 929 || x >= 931 && x <= 937 || x >= 945 && x <= 961 || x >= 963 && x <= 969 || x === 1025 || x >= 1040 && x <= 1103 || x === 1105 || x === 8208 || x >= 8211 && x <= 8214 || x === 8216 || x === 8217 || x === 8220 || x === 8221 || x >= 8224 && x <= 8226 || x >= 8228 && x <= 8231 || x === 8240 || x === 8242 || x === 8243 || x === 8245 || x === 8251 || x === 8254 || x === 8308 || x === 8319 || x >= 8321 && x <= 8324 || x === 8364 || x === 8451 || x === 8453 || x === 8457 || x === 8467 || x === 8470 || x === 8481 || x === 8482 || x === 8486 || x === 8491 || x === 8531 || x === 8532 || x >= 8539 && x <= 8542 || x >= 8544 && x <= 8555 || x >= 8560 && x <= 8569 || x === 8585 || x >= 8592 && x <= 8601 || x === 8632 || x === 8633 || x === 8658 || x === 8660 || x === 8679 || x === 8704 || x === 8706 || x === 8707 || x === 8711 || x === 8712 || x === 8715 || x === 8719 || x === 8721 || x === 8725 || x === 8730 || x >= 8733 && x <= 8736 || x === 8739 || x === 8741 || x >= 8743 && x <= 8748 || x === 8750 || x >= 8756 && x <= 8759 || x === 8764 || x === 8765 || x === 8776 || x === 8780 || x === 8786 || x === 8800 || x === 8801 || x >= 8804 && x <= 8807 || x === 8810 || x === 8811 || x === 8814 || x === 8815 || x === 8834 || x === 8835 || x === 8838 || x === 8839 || x === 8853 || x === 8857 || x === 8869 || x === 8895 || x === 8978 || x >= 9312 && x <= 9449 || x >= 9451 && x <= 9547 || x >= 9552 && x <= 9587 || x >= 9600 && x <= 9615 || x >= 9618 && x <= 9621 || x === 9632 || x === 9633 || x >= 9635 && x <= 9641 || x === 9650 || x === 9651 || x === 9654 || x === 9655 || x === 9660 || x === 9661 || x === 9664 || x === 9665 || x >= 9670 && x <= 9672 || x === 9675 || x >= 9678 && x <= 9681 || x >= 9698 && x <= 9701 || x === 9711 || x === 9733 || x === 9734 || x === 9737 || x === 9742 || x === 9743 || x === 9756 || x === 9758 || x === 9792 || x === 9794 || x === 9824 || x === 9825 || x >= 9827 && x <= 9829 || x >= 9831 && x <= 9834 || x === 9836 || x === 9837 || x === 9839 || x === 9886 || x === 9887 || x === 9919 || x >= 9926 && x <= 9933 || x >= 9935 && x <= 9939 || x >= 9941 && x <= 9953 || x === 9955 || x === 9960 || x === 9961 || x >= 9963 && x <= 9969 || x === 9972 || x >= 9974 && x <= 9977 || x === 9979 || x === 9980 || x === 9982 || x === 9983 || x === 10045 || x >= 10102 && x <= 10111 || x >= 11094 && x <= 11097 || x >= 12872 && x <= 12879 || x >= 57344 && x <= 63743 || x >= 65024 && x <= 65039 || x === 65533 || x >= 127232 && x <= 127242 || x >= 127248 && x <= 127277 || x >= 127280 && x <= 127337 || x >= 127344 && x <= 127373 || x === 127375 || x === 127376 || x >= 127387 && x <= 127404 || x >= 917760 && x <= 917999 || x >= 983040 && x <= 1048573 || x >= 1048576 && x <= 1114109;
2987
+ }
2988
+ function isFullWidth(x) {
2989
+ return x === 12288 || x >= 65281 && x <= 65376 || x >= 65504 && x <= 65510;
2990
+ }
2991
+ function isWide(x) {
2992
+ return x >= 4352 && x <= 4447 || x === 8986 || x === 8987 || x === 9001 || x === 9002 || x >= 9193 && x <= 9196 || x === 9200 || x === 9203 || x === 9725 || x === 9726 || x === 9748 || x === 9749 || x >= 9776 && x <= 9783 || x >= 9800 && x <= 9811 || x === 9855 || x >= 9866 && x <= 9871 || x === 9875 || x === 9889 || x === 9898 || x === 9899 || x === 9917 || x === 9918 || x === 9924 || x === 9925 || x === 9934 || x === 9940 || x === 9962 || x === 9970 || x === 9971 || x === 9973 || x === 9978 || x === 9981 || x === 9989 || x === 9994 || x === 9995 || x === 10024 || x === 10060 || x === 10062 || x >= 10067 && x <= 10069 || x === 10071 || x >= 10133 && x <= 10135 || x === 10160 || x === 10175 || x === 11035 || x === 11036 || x === 11088 || x === 11093 || x >= 11904 && x <= 11929 || x >= 11931 && x <= 12019 || x >= 12032 && x <= 12245 || x >= 12272 && x <= 12287 || x >= 12289 && x <= 12350 || x >= 12353 && x <= 12438 || x >= 12441 && x <= 12543 || x >= 12549 && x <= 12591 || x >= 12593 && x <= 12686 || x >= 12688 && x <= 12773 || x >= 12783 && x <= 12830 || x >= 12832 && x <= 12871 || x >= 12880 && x <= 42124 || x >= 42128 && x <= 42182 || x >= 43360 && x <= 43388 || x >= 44032 && x <= 55203 || x >= 63744 && x <= 64255 || x >= 65040 && x <= 65049 || x >= 65072 && x <= 65106 || x >= 65108 && x <= 65126 || x >= 65128 && x <= 65131 || x >= 94176 && x <= 94180 || x === 94192 || x === 94193 || x >= 94208 && x <= 100343 || x >= 100352 && x <= 101589 || x >= 101631 && x <= 101640 || x >= 110576 && x <= 110579 || x >= 110581 && x <= 110587 || x === 110589 || x === 110590 || x >= 110592 && x <= 110882 || x === 110898 || x >= 110928 && x <= 110930 || x === 110933 || x >= 110948 && x <= 110951 || x >= 110960 && x <= 111355 || x >= 119552 && x <= 119638 || x >= 119648 && x <= 119670 || x === 126980 || x === 127183 || x === 127374 || x >= 127377 && x <= 127386 || x >= 127488 && x <= 127490 || x >= 127504 && x <= 127547 || x >= 127552 && x <= 127560 || x === 127568 || x === 127569 || x >= 127584 && x <= 127589 || x >= 127744 && x <= 127776 || x >= 127789 && x <= 127797 || x >= 127799 && x <= 127868 || x >= 127870 && x <= 127891 || x >= 127904 && x <= 127946 || x >= 127951 && x <= 127955 || x >= 127968 && x <= 127984 || x === 127988 || x >= 127992 && x <= 128062 || x === 128064 || x >= 128066 && x <= 128252 || x >= 128255 && x <= 128317 || x >= 128331 && x <= 128334 || x >= 128336 && x <= 128359 || x === 128378 || x === 128405 || x === 128406 || x === 128420 || x >= 128507 && x <= 128591 || x >= 128640 && x <= 128709 || x === 128716 || x >= 128720 && x <= 128722 || x >= 128725 && x <= 128727 || x >= 128732 && x <= 128735 || x === 128747 || x === 128748 || x >= 128756 && x <= 128764 || x >= 128992 && x <= 129003 || x === 129008 || x >= 129292 && x <= 129338 || x >= 129340 && x <= 129349 || x >= 129351 && x <= 129535 || x >= 129648 && x <= 129660 || x >= 129664 && x <= 129673 || x >= 129679 && x <= 129734 || x >= 129742 && x <= 129756 || x >= 129759 && x <= 129769 || x >= 129776 && x <= 129784 || x >= 131072 && x <= 196605 || x >= 196608 && x <= 262141;
2993
+ }
2994
+
2995
+ //#endregion
2996
+ //#region node_modules/get-east-asian-width/index.js
2997
+ function validate(codePoint) {
2998
+ if (!Number.isSafeInteger(codePoint)) throw new TypeError(`Expected a code point, got \`${typeof codePoint}\`.`);
2999
+ }
3000
+ function eastAsianWidth(codePoint, { ambiguousAsWide = false } = {}) {
3001
+ validate(codePoint);
3002
+ if (isFullWidth(codePoint) || isWide(codePoint) || ambiguousAsWide && isAmbiguous(codePoint)) return 2;
3003
+ return 1;
3004
+ }
3005
+
3006
+ //#endregion
3007
+ //#region node_modules/emoji-regex/index.js
3008
+ var require_emoji_regex = __commonJS({ "node_modules/emoji-regex/index.js"(exports, module) {
3009
+ module.exports = () => {
3010
+ return /[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26D3\uFE0F?(?:\u200D\uD83D\uDCA5)?|\u26F9(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF43\uDF45-\uDF4A\uDF4C-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDF44(?:\u200D\uD83D\uDFEB)?|\uDF4B(?:\u200D\uD83D\uDFE9)?|\uDFC3(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\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?|[\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](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4\uDEB5](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\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-\uDE41\uDE43\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC08(?:\u200D\u2B1B)?|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC26(?:\u200D(?:\u2B1B|\uD83D\uDD25))?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE])))?))?|\uDC6F(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDD75(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|\uDE42(?:\u200D[\u2194\u2195]\uFE0F?)?|\uDEB6(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE89\uDE8F-\uDEC2\uDEC6\uDECE-\uDEDC\uDEDF-\uDEE9]|\uDD3C(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF])?|\uDDCE(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1|\uDDD1\u200D\uD83E\uDDD2(?:\u200D\uD83E\uDDD2)?|\uDDD2(?:\u200D\uD83E\uDDD2)?))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g;
3011
+ };
3012
+ } });
3013
+
3014
+ //#endregion
3015
+ //#region node_modules/string-width/index.js
3016
+ var import_emoji_regex = __toESM(require_emoji_regex(), 1);
3017
+ const segmenter = new Intl.Segmenter();
3018
+ const defaultIgnorableCodePointRegex = /^\p{Default_Ignorable_Code_Point}$/u;
3019
+ function stringWidth(string, options = {}) {
3020
+ if (typeof string !== "string" || string.length === 0) return 0;
3021
+ const { ambiguousIsNarrow = true, countAnsiEscapeCodes = false } = options;
3022
+ if (!countAnsiEscapeCodes) string = stripAnsi(string);
3023
+ if (string.length === 0) return 0;
3024
+ let width = 0;
3025
+ const eastAsianWidthOptions = { ambiguousAsWide: !ambiguousIsNarrow };
3026
+ for (const { segment: character } of segmenter.segment(string)) {
3027
+ const codePoint = character.codePointAt(0);
3028
+ if (codePoint <= 31 || codePoint >= 127 && codePoint <= 159) continue;
3029
+ if (codePoint >= 8203 && codePoint <= 8207 || codePoint === 65279) continue;
3030
+ if (codePoint >= 768 && codePoint <= 879 || codePoint >= 6832 && codePoint <= 6911 || codePoint >= 7616 && codePoint <= 7679 || codePoint >= 8400 && codePoint <= 8447 || codePoint >= 65056 && codePoint <= 65071) continue;
3031
+ if (codePoint >= 55296 && codePoint <= 57343) continue;
3032
+ if (codePoint >= 65024 && codePoint <= 65039) continue;
3033
+ if (defaultIgnorableCodePointRegex.test(character)) continue;
3034
+ if ((0, import_emoji_regex.default)().test(character)) {
3035
+ width += 2;
3036
+ continue;
3037
+ }
3038
+ width += eastAsianWidth(codePoint, eastAsianWidthOptions);
3039
+ }
3040
+ return width;
3041
+ }
3042
+
1285
3043
  //#endregion
1286
3044
  //#region src/utils.internal.ts
3045
+ var import_cli_table3 = __toESM(require_cli_table3(), 1);
1287
3046
  var import_picocolors$4 = __toESM(require_picocolors(), 1);
3047
+ /**
3048
+ * Responsive table class that adapts column widths based on terminal size
3049
+ * Automatically adjusts formatting and layout for different screen sizes
3050
+ */
3051
+ var ResponsiveTable = class {
3052
+ head;
3053
+ rows = [];
3054
+ colAligns;
3055
+ style;
3056
+ dateFormatter;
3057
+ /**
3058
+ * Creates a new responsive table instance
3059
+ * @param options - Table configuration options
3060
+ */
3061
+ constructor(options) {
3062
+ this.head = options.head;
3063
+ this.colAligns = options.colAligns ?? Array.from({ length: this.head.length }, () => "left");
3064
+ this.style = options.style;
3065
+ this.dateFormatter = options.dateFormatter;
3066
+ }
3067
+ /**
3068
+ * Adds a row to the table
3069
+ * @param row - Row data to add
3070
+ */
3071
+ push(row) {
3072
+ this.rows.push(row);
3073
+ }
3074
+ /**
3075
+ * Renders the table as a formatted string
3076
+ * Automatically adjusts layout based on terminal width
3077
+ * @returns Formatted table string
3078
+ */
3079
+ toString() {
3080
+ const terminalWidth = process$1.stdout.columns || 120;
3081
+ const dataRows = this.rows.filter((row) => !this.isSeparatorRow(row));
3082
+ const allRows = [this.head.map(String), ...dataRows.map((row) => row.map((cell) => {
3083
+ if (typeof cell === "object" && cell != null && "content" in cell) return String(cell.content);
3084
+ return String(cell ?? "");
3085
+ }))];
3086
+ const contentWidths = this.head.map((_, colIndex) => {
3087
+ const maxLength = Math.max(...allRows.map((row) => stringWidth(String(row[colIndex] ?? ""))));
3088
+ return maxLength;
3089
+ });
3090
+ const numColumns = this.head.length;
3091
+ const tableOverhead = 3 * numColumns + 1;
3092
+ const availableWidth = terminalWidth - tableOverhead;
3093
+ const columnWidths = contentWidths.map((width, index) => {
3094
+ const align = this.colAligns[index];
3095
+ if (align === "right") return Math.max(width + 3, 11);
3096
+ else if (index === 1) return Math.max(width + 2, 15);
3097
+ return Math.max(width + 2, 10);
3098
+ });
3099
+ const totalRequiredWidth = columnWidths.reduce((sum, width) => sum + width, 0) + tableOverhead;
3100
+ if (totalRequiredWidth > terminalWidth) {
3101
+ const scaleFactor = availableWidth / columnWidths.reduce((sum, width) => sum + width, 0);
3102
+ const adjustedWidths = columnWidths.map((width, index) => {
3103
+ const align = this.colAligns[index];
3104
+ let adjustedWidth = Math.floor(width * scaleFactor);
3105
+ if (align === "right") adjustedWidth = Math.max(adjustedWidth, 10);
3106
+ else if (index === 0) adjustedWidth = Math.max(adjustedWidth, 10);
3107
+ else if (index === 1) adjustedWidth = Math.max(adjustedWidth, 12);
3108
+ else adjustedWidth = Math.max(adjustedWidth, 8);
3109
+ return adjustedWidth;
3110
+ });
3111
+ const table = new import_cli_table3.default({
3112
+ head: this.head,
3113
+ style: this.style,
3114
+ colAligns: this.colAligns,
3115
+ colWidths: adjustedWidths,
3116
+ wordWrap: true,
3117
+ wrapOnWordBoundary: true
3118
+ });
3119
+ for (const row of this.rows) if (this.isSeparatorRow(row)) continue;
3120
+ else {
3121
+ const processedRow = row.map((cell, index) => {
3122
+ if (index === 0 && this.dateFormatter != null && typeof cell === "string" && this.isDateString(cell)) return this.dateFormatter(cell);
3123
+ return cell;
3124
+ });
3125
+ table.push(processedRow);
3126
+ }
3127
+ return table.toString();
3128
+ } else {
3129
+ const table = new import_cli_table3.default({
3130
+ head: this.head,
3131
+ style: this.style,
3132
+ colAligns: this.colAligns,
3133
+ colWidths: columnWidths,
3134
+ wordWrap: true,
3135
+ wrapOnWordBoundary: true
3136
+ });
3137
+ for (const row of this.rows) if (this.isSeparatorRow(row)) continue;
3138
+ else table.push(row);
3139
+ return table.toString();
3140
+ }
3141
+ }
3142
+ /**
3143
+ * Checks if a row is a separator row (contains only empty cells or dashes)
3144
+ * @param row - Row to check
3145
+ * @returns True if the row is a separator
3146
+ */
3147
+ isSeparatorRow(row) {
3148
+ return row.every((cell) => {
3149
+ if (typeof cell === "object" && cell != null && "content" in cell) return cell.content === "" || /^─+$/.test(cell.content);
3150
+ return typeof cell === "string" && (cell === "" || /^─+$/.test(cell));
3151
+ });
3152
+ }
3153
+ /**
3154
+ * Checks if a string matches the YYYY-MM-DD date format
3155
+ * @param text - String to check
3156
+ * @returns True if the string is a valid date format
3157
+ */
3158
+ isDateString(text) {
3159
+ return /^\d{4}-\d{2}-\d{2}$/.test(text);
3160
+ }
3161
+ };
3162
+ /**
3163
+ * Formats a number with locale-specific thousand separators
3164
+ * @param num - The number to format
3165
+ * @returns Formatted number string with commas as thousand separators
3166
+ */
1288
3167
  function formatNumber(num) {
1289
3168
  return num.toLocaleString("en-US");
1290
3169
  }
3170
+ /**
3171
+ * Formats a number as USD currency with dollar sign and 2 decimal places
3172
+ * @param amount - The amount to format
3173
+ * @returns Formatted currency string (e.g., "$12.34")
3174
+ */
1291
3175
  function formatCurrency(amount) {
1292
3176
  return `$${amount.toFixed(2)}`;
1293
3177
  }
3178
+ /**
3179
+ * Formats Claude model names into a shorter, more readable format
3180
+ * Extracts model type and generation from full model name
3181
+ * @param modelName - Full model name (e.g., "claude-sonnet-4-20250514")
3182
+ * @returns Shortened model name (e.g., "sonnet-4") or original if pattern doesn't match
3183
+ */
1294
3184
  function formatModelName(modelName) {
1295
3185
  const match = modelName.match(/claude-(\w+)-(\d+)-\d+/);
1296
3186
  if (match != null) return `${match[1]}-${match[2]}`;
1297
3187
  return modelName;
1298
3188
  }
3189
+ /**
3190
+ * Formats an array of model names for display as a comma-separated string
3191
+ * Removes duplicates and sorts alphabetically
3192
+ * @param models - Array of model names
3193
+ * @returns Formatted string with unique, sorted model names separated by commas
3194
+ */
1299
3195
  function formatModelsDisplay(models) {
1300
3196
  const uniqueModels = [...new Set(models.map(formatModelName))];
1301
3197
  return uniqueModels.sort().join(", ");
@@ -1322,10 +3218,28 @@ function pushBreakdownRows(table, breakdowns, extraColumns = 1, trailingColumns
1322
3218
  //#endregion
1323
3219
  //#region src/commands/blocks.ts
1324
3220
  var import_picocolors$3 = __toESM(require_picocolors(), 1);
3221
+ /**
3222
+ * Default number of recent days to show in blocks view
3223
+ */
1325
3224
  const RECENT_DAYS_DEFAULT = 3;
3225
+ /**
3226
+ * Threshold percentage for showing usage warnings (80%)
3227
+ */
1326
3228
  const WARNING_THRESHOLD = .8;
3229
+ /**
3230
+ * Terminal width threshold for switching to compact display mode
3231
+ */
1327
3232
  const COMPACT_WIDTH_THRESHOLD = 120;
3233
+ /**
3234
+ * Default terminal width when stdout.columns is not available
3235
+ */
1328
3236
  const DEFAULT_TERMINAL_WIDTH = 120;
3237
+ /**
3238
+ * Formats the time display for a session block
3239
+ * @param block - Session block to format
3240
+ * @param compact - Whether to use compact formatting for narrow terminals
3241
+ * @returns Formatted time string with duration and status information
3242
+ */
1329
3243
  function formatBlockTime(block, compact = false) {
1330
3244
  const start = compact ? block.startTime.toLocaleString(void 0, {
1331
3245
  month: "2-digit",
@@ -1359,10 +3273,22 @@ function formatBlockTime(block, compact = false) {
1359
3273
  if (hours > 0) return `${start} (${hours}h ${mins}m)`;
1360
3274
  return `${start} (${mins}m)`;
1361
3275
  }
3276
+ /**
3277
+ * Formats the list of models used in a block for display
3278
+ * @param models - Array of model names
3279
+ * @param compact - Whether to use compact formatting (unused currently)
3280
+ * @returns Formatted model names string
3281
+ */
1362
3282
  function formatModels(models, compact = false) {
1363
3283
  if (models.length === 0) return "-";
1364
3284
  return compact ? formatModelsDisplay(models) : formatModelsDisplay(models);
1365
3285
  }
3286
+ /**
3287
+ * Parses token limit argument, supporting 'max' keyword
3288
+ * @param value - Token limit string value
3289
+ * @param maxFromAll - Maximum token count found in all blocks
3290
+ * @returns Parsed token limit or undefined if invalid
3291
+ */
1366
3292
  function parseTokenLimit(value, maxFromAll) {
1367
3293
  if (value == null || value === "") return void 0;
1368
3294
  if (value === "max") return maxFromAll > 0 ? maxFromAll : void 0;
@@ -1371,7 +3297,7 @@ function parseTokenLimit(value, maxFromAll) {
1371
3297
  }
1372
3298
  const blocksCommand = define({
1373
3299
  name: "blocks",
1374
- description: "Show usage report grouped by 5-hour billing blocks",
3300
+ description: "Show usage report grouped by session billing blocks",
1375
3301
  args: {
1376
3302
  ...sharedCommandConfig.args,
1377
3303
  active: {
@@ -1390,17 +3316,28 @@ const blocksCommand = define({
1390
3316
  type: "string",
1391
3317
  short: "t",
1392
3318
  description: "Token limit for quota warnings (e.g., 500000 or \"max\" for highest previous block)"
3319
+ },
3320
+ sessionLength: {
3321
+ type: "number",
3322
+ short: "l",
3323
+ description: `Session block duration in hours (default: ${DEFAULT_SESSION_DURATION_HOURS})`,
3324
+ default: DEFAULT_SESSION_DURATION_HOURS
1393
3325
  }
1394
3326
  },
1395
3327
  toKebab: true,
1396
3328
  async run(ctx) {
1397
3329
  if (ctx.values.json) logger.level = 0;
1398
- let blocks = await loadFiveHourBlockData({
3330
+ if (ctx.values.sessionLength <= 0) {
3331
+ logger.error("Session length must be a positive number");
3332
+ process$1.exit(1);
3333
+ }
3334
+ let blocks = await loadSessionBlockData({
1399
3335
  since: ctx.values.since,
1400
3336
  until: ctx.values.until,
1401
3337
  claudePath: getDefaultClaudePath(),
1402
3338
  mode: ctx.values.mode,
1403
- order: ctx.values.order
3339
+ order: ctx.values.order,
3340
+ sessionDurationHours: ctx.values.sessionLength
1404
3341
  });
1405
3342
  if (blocks.length === 0) {
1406
3343
  if (ctx.values.json) log(JSON.stringify({ blocks: [] }));
@@ -1423,7 +3360,7 @@ const blocksCommand = define({
1423
3360
  blocks: [],
1424
3361
  message: "No active block"
1425
3362
  }));
1426
- else logger.info("No active 5-hour block found.");
3363
+ else logger.info("No active session block found.");
1427
3364
  process$1.exit(0);
1428
3365
  }
1429
3366
  }
@@ -1465,7 +3402,7 @@ const blocksCommand = define({
1465
3402
  }
1466
3403
  const burnRate = calculateBurnRate(block);
1467
3404
  const projection = projectBlockUsage(block);
1468
- logger.box("Current 5-Hour Block Status");
3405
+ logger.box("Current Session Block Status");
1469
3406
  const now = /* @__PURE__ */ new Date();
1470
3407
  const elapsed = Math.round((now.getTime() - block.startTime.getTime()) / (1e3 * 60));
1471
3408
  const remaining = Math.round((block.endTime.getTime() - now.getTime()) / (1e3 * 60));
@@ -1500,7 +3437,7 @@ const blocksCommand = define({
1500
3437
  }
1501
3438
  }
1502
3439
  } else {
1503
- logger.box("Claude Code Token Usage Report - 5-Hour Blocks");
3440
+ logger.box("Claude Code Token Usage Report - Session Blocks");
1504
3441
  const actualTokenLimit = parseTokenLimit(ctx.values.tokenLimit, maxTokensFromAll);
1505
3442
  const tableHeaders = [
1506
3443
  "Block Start",
@@ -1979,12 +3916,18 @@ const sessionCommand = define({
1979
3916
 
1980
3917
  //#endregion
1981
3918
  //#region src/commands/index.ts
3919
+ /**
3920
+ * Map of available CLI subcommands
3921
+ */
1982
3922
  const subCommands = /* @__PURE__ */ new Map();
1983
3923
  subCommands.set("daily", dailyCommand);
1984
3924
  subCommands.set("monthly", monthlyCommand);
1985
3925
  subCommands.set("session", sessionCommand);
1986
3926
  subCommands.set("blocks", blocksCommand);
1987
3927
  subCommands.set("mcp", mcpCommand);
3928
+ /**
3929
+ * Default command when no subcommand is specified (defaults to daily)
3930
+ */
1988
3931
  const mainCommand = dailyCommand;
1989
3932
  await cli(process$1.argv.slice(2), mainCommand, {
1990
3933
  name,