@bemoje/cli 2.1.0 → 2.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.d.ts CHANGED
@@ -6,3 +6,24 @@ export * from './lib/helpers/getCommandAncestors';
6
6
  export * from './lib/helpers/getCommandAndAncestors';
7
7
  export * from './lib/helpers/parseOptionFlags';
8
8
  export * from './lib/types';
9
+ import * as MODULE_1 from './lib/Command';
10
+ import * as MODULE_2 from './lib/Help';
11
+ import * as MODULE_8 from './lib/types';
12
+ declare const _default: {
13
+ parseOptionFlags<Long extends string>(flags: MODULE_8.OptionUsage<Long>): {
14
+ short: string;
15
+ long: Long;
16
+ name: import("type-fest").CamelCase<Long>;
17
+ argName: string | undefined;
18
+ };
19
+ getCommandAndAncestors<C extends MODULE_8.ICommand>(cmd: C): [typeof cmd, ...MODULE_8.ICommand[]];
20
+ getCommandAncestors<C extends MODULE_8.ICommand>(cmd: C): C[];
21
+ findOption<C extends MODULE_8.ICommand>(cmd: C, nameOrShortOrLong: string): MODULE_8.Option | undefined;
22
+ findCommand<C extends MODULE_1.Command = MODULE_1.Command<[], {
23
+ help?: boolean;
24
+ debug?: boolean;
25
+ }, MODULE_8.SubCommands>>(cmd: MODULE_8.ICommand, nameOrAlias: string): C | undefined;
26
+ Help: typeof MODULE_2.Help;
27
+ Command: typeof MODULE_1.Command;
28
+ };
29
+ export default _default;
package/index.mjs CHANGED
@@ -1,6 +1,9 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ var __export = (target, all) => {
4
+ for (var name in all)
5
+ __defProp(target, name, { get: all[name], enumerable: true });
6
+ };
4
7
  var __decorateClass = (decorators, target, key, kind) => {
5
8
  var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
6
9
  for (var i = decorators.length - 1, decorator; i >= 0; i--)
@@ -10,7 +13,17 @@ var __decorateClass = (decorators, target, key, kind) => {
10
13
  return result;
11
14
  };
12
15
 
16
+ // src/lib/Command.ts
17
+ var Command_exports = {};
18
+ __export(Command_exports, {
19
+ Command: () => Command
20
+ });
21
+
13
22
  // src/lib/Help.ts
23
+ var Help_exports = {};
24
+ __export(Help_exports, {
25
+ Help: () => Help
26
+ });
14
27
  import C from "ansi-colors";
15
28
 
16
29
  // ../decorators/src/assertDescriptorValueIsFunction.ts
@@ -19,19 +32,16 @@ function assertDescriptorValueIsFunction(key, descriptor) {
19
32
  throw new TypeError(`"value" not a function for ${key} with descriptor: ${JSON.stringify(descriptor)}.`);
20
33
  }
21
34
  }
22
- __name(assertDescriptorValueIsFunction, "assertDescriptorValueIsFunction");
23
35
 
24
36
  // ../object/src/entriesOf.ts
25
37
  function entriesOf(obj) {
26
38
  return Object.entries(obj);
27
39
  }
28
- __name(entriesOf, "entriesOf");
29
40
 
30
41
  // ../object/src/keysOf.ts
31
42
  function keysOf(obj) {
32
43
  return Object.keys(obj);
33
44
  }
34
- __name(keysOf, "keysOf");
35
45
 
36
46
  // ../object/src/filterObject.ts
37
47
  function filterObject(obj, predicate) {
@@ -43,7 +53,6 @@ function filterObject(obj, predicate) {
43
53
  }
44
54
  return accum;
45
55
  }
46
- __name(filterObject, "filterObject");
47
56
 
48
57
  // ../object/src/objSortKeys.ts
49
58
  function objSortKeys(o, compare) {
@@ -57,13 +66,11 @@ function objSortKeys(o, compare) {
57
66
  }
58
67
  return Object.fromEntries(entries);
59
68
  }
60
- __name(objSortKeys, "objSortKeys");
61
69
 
62
70
  // ../object/src/valuesOf.ts
63
71
  function valuesOf(obj) {
64
72
  return Object.values(obj);
65
73
  }
66
- __name(valuesOf, "valuesOf");
67
74
 
68
75
  // ../map/src/mapGetOrDefault.ts
69
76
  function mapGetOrDefault(map, key, factory) {
@@ -75,7 +82,6 @@ function mapGetOrDefault(map, key, factory) {
75
82
  map.set(key, value);
76
83
  return value;
77
84
  }
78
- __name(mapGetOrDefault, "mapGetOrDefault");
79
85
 
80
86
  // ../map/src/TimeoutWeakMap.ts
81
87
  var TimeoutWeakMap = class {
@@ -85,9 +91,6 @@ var TimeoutWeakMap = class {
85
91
  constructor(timeoutMs) {
86
92
  this.timeoutMs = timeoutMs;
87
93
  }
88
- static {
89
- __name(this, "TimeoutWeakMap");
90
- }
91
94
  wmap = /* @__PURE__ */ new WeakMap();
92
95
  /**
93
96
  * Retrieves the value for the given key and refreshes its timeout.
@@ -200,7 +203,7 @@ import memoizee from "memoizee";
200
203
  import { ms } from "enhanced-ms";
201
204
  function memoizeSync(arg = {}) {
202
205
  const opts = typeof arg === "object" ? arg : { maxAge: typeof arg === "number" ? arg : ms(arg) };
203
- return /* @__PURE__ */ __name(function decorator(target, key, descriptor) {
206
+ return function decorator(target, key, descriptor) {
204
207
  if (!descriptor) {
205
208
  throw new TypeError("descriptor is undefined");
206
209
  }
@@ -220,9 +223,8 @@ function memoizeSync(arg = {}) {
220
223
  };
221
224
  }
222
225
  return descriptor;
223
- }, "decorator");
226
+ };
224
227
  }
225
- __name(memoizeSync, "memoizeSync");
226
228
 
227
229
  // ../decorators/src/lazyProp.ts
228
230
  import { ms as ms2 } from "enhanced-ms";
@@ -235,7 +237,6 @@ function lazyProp(targetOrTimeout, key, descriptor) {
235
237
  return decorator(targetOrTimeout, key, descriptor);
236
238
  }
237
239
  }
238
- __name(lazyProp, "lazyProp");
239
240
  function createLazyPropDecorator(map) {
240
241
  return function(target, key, descriptor) {
241
242
  const { get, value } = descriptor;
@@ -253,13 +254,9 @@ function createLazyPropDecorator(map) {
253
254
  throw new TypeError('neither "get" nor "value" are functions');
254
255
  };
255
256
  }
256
- __name(createLazyPropDecorator, "createLazyPropDecorator");
257
257
 
258
258
  // src/lib/Help.ts
259
259
  var Help = class {
260
- static {
261
- __name(this, "Help");
262
- }
263
260
  cmd;
264
261
  /** output helpWidth, long lines are wrapped to fit */
265
262
  helpWidth = process.stdout.isTTY ? process.stdout.columns : 80;
@@ -287,9 +284,9 @@ var Help = class {
287
284
  * Compare options for sort.
288
285
  */
289
286
  compareOptions(a, b) {
290
- const getSortKey = /* @__PURE__ */ __name((option) => {
287
+ const getSortKey = (option) => {
291
288
  return option.short ? option.short.replace(/^-/, "") : option.long.replace(/^--/, "");
292
- }, "getSortKey");
289
+ };
293
290
  return getSortKey(a).localeCompare(getSortKey(b));
294
291
  }
295
292
  visibleOptions() {
@@ -746,13 +743,11 @@ function arrLast(array) {
746
743
  }
747
744
  return array[array.length - 1];
748
745
  }
749
- __name(arrLast, "arrLast");
750
746
 
751
747
  // ../array/src/arrRemoveDuplicates.ts
752
748
  function arrRemoveDuplicates(array) {
753
749
  return Array.from(new Set(array));
754
750
  }
755
- __name(arrRemoveDuplicates, "arrRemoveDuplicates");
756
751
 
757
752
  // src/lib/internal/collectVariadicOptionValues.ts
758
753
  function collectVariadicOptionValues(parsed, options) {
@@ -787,20 +782,26 @@ function collectVariadicOptionValues(parsed, options) {
787
782
  );
788
783
  }
789
784
  }
790
- __name(collectVariadicOptionValues, "collectVariadicOptionValues");
791
785
 
792
786
  // src/lib/Command.ts
793
787
  import colors3 from "ansi-colors";
794
788
 
795
789
  // src/lib/helpers/findCommand.ts
790
+ var findCommand_exports = {};
791
+ __export(findCommand_exports, {
792
+ findCommand: () => findCommand
793
+ });
796
794
  function findCommand(cmd, nameOrAlias) {
797
795
  return cmd.commands[nameOrAlias] ?? valuesOf(cmd.commands).find((c) => {
798
796
  return c.aliases.includes(nameOrAlias);
799
797
  });
800
798
  }
801
- __name(findCommand, "findCommand");
802
799
 
803
800
  // src/lib/helpers/findOption.ts
801
+ var findOption_exports = {};
802
+ __export(findOption_exports, {
803
+ findOption: () => findOption
804
+ });
804
805
  function findOption(cmd, nameOrShortOrLong) {
805
806
  return nameOrShortOrLong.startsWith("--") ? cmd.options.find((o) => {
806
807
  return o.long === nameOrShortOrLong.slice(2);
@@ -810,9 +811,18 @@ function findOption(cmd, nameOrShortOrLong) {
810
811
  return o.name === nameOrShortOrLong;
811
812
  });
812
813
  }
813
- __name(findOption, "findOption");
814
+
815
+ // src/lib/helpers/getCommandAncestors.ts
816
+ var getCommandAncestors_exports = {};
817
+ __export(getCommandAncestors_exports, {
818
+ getCommandAncestors: () => getCommandAncestors
819
+ });
814
820
 
815
821
  // src/lib/helpers/getCommandAndAncestors.ts
822
+ var getCommandAndAncestors_exports = {};
823
+ __export(getCommandAndAncestors_exports, {
824
+ getCommandAndAncestors: () => getCommandAndAncestors
825
+ });
816
826
  function getCommandAndAncestors(cmd) {
817
827
  const result = [];
818
828
  let command = cmd;
@@ -821,13 +831,11 @@ function getCommandAndAncestors(cmd) {
821
831
  }
822
832
  return result;
823
833
  }
824
- __name(getCommandAndAncestors, "getCommandAndAncestors");
825
834
 
826
835
  // src/lib/helpers/getCommandAncestors.ts
827
836
  function getCommandAncestors(cmd) {
828
837
  return getCommandAndAncestors(cmd).slice(1);
829
838
  }
830
- __name(getCommandAncestors, "getCommandAncestors");
831
839
 
832
840
  // src/lib/Command.ts
833
841
  import { inspect } from "node:util";
@@ -841,7 +849,6 @@ function mergeOptionDefaults(values, options) {
841
849
  }
842
850
  }
843
851
  }
844
- __name(mergeOptionDefaults, "mergeOptionDefaults");
845
852
 
846
853
  // src/lib/internal/normalizeArgv.ts
847
854
  function normalizeArgv(argv, options) {
@@ -861,12 +868,15 @@ function normalizeArgv(argv, options) {
861
868
  }
862
869
  return argv;
863
870
  }
864
- __name(normalizeArgv, "normalizeArgv");
865
871
 
866
872
  // src/lib/Command.ts
867
873
  import { parseArgs } from "node:util";
868
874
 
869
875
  // src/lib/helpers/parseOptionFlags.ts
876
+ var parseOptionFlags_exports = {};
877
+ __export(parseOptionFlags_exports, {
878
+ parseOptionFlags: () => parseOptionFlags
879
+ });
870
880
  function parseOptionFlags(flags) {
871
881
  const match = flags.match(/^-(.+?), --([a-zA-Z][\w-]*)(?:\s*(<(.+?)>|\[(.+?)\]))?$/);
872
882
  if (!match) {
@@ -883,7 +893,6 @@ function parseOptionFlags(flags) {
883
893
  });
884
894
  return { short, long, name, argName };
885
895
  }
886
- __name(parseOptionFlags, "parseOptionFlags");
887
896
 
888
897
  // src/lib/internal/resolveArguments.ts
889
898
  function resolveArguments(positionals, args) {
@@ -899,7 +908,6 @@ function resolveArguments(positionals, args) {
899
908
  }
900
909
  return result;
901
910
  }
902
- __name(resolveArguments, "resolveArguments");
903
911
 
904
912
  // ../fn/src/setName.ts
905
913
  function setName(name, target) {
@@ -909,13 +917,11 @@ function setName(name, target) {
909
917
  enumerable: false
910
918
  });
911
919
  }
912
- __name(setName, "setName");
913
920
 
914
921
  // ../string/src/lib/strFirstCharToUpperCase.ts
915
922
  function strFirstCharToUpperCase(string) {
916
923
  return string.charAt(0).toUpperCase() + string.substring(1);
917
924
  }
918
- __name(strFirstCharToUpperCase, "strFirstCharToUpperCase");
919
925
 
920
926
  // ../node/src/createLogger.ts
921
927
  import colors from "ansi-colors";
@@ -933,32 +939,31 @@ function createLogger(name) {
933
939
  const cyanArgs = createColoredArgs(colors.cyan);
934
940
  const yellowArgs = createColoredArgs(colors.yellow);
935
941
  return {
936
- start: /* @__PURE__ */ __name((...args) => {
942
+ start: (...args) => {
937
943
  return console.info(...START, ...args);
938
- }, "start"),
939
- done: /* @__PURE__ */ __name((...args) => {
944
+ },
945
+ done: (...args) => {
940
946
  return console.info(...DONE, ...args);
941
- }, "done"),
942
- info: /* @__PURE__ */ __name((...args) => {
947
+ },
948
+ info: (...args) => {
943
949
  return console.info(...INFO, ...grayArgs(args));
944
- }, "info"),
945
- log: /* @__PURE__ */ __name((...args) => {
950
+ },
951
+ log: (...args) => {
946
952
  return console.log(...NAME ? [NAME, ...args] : args);
947
- }, "log"),
948
- warn: /* @__PURE__ */ __name((...args) => {
953
+ },
954
+ warn: (...args) => {
949
955
  return console.warn(...WARN, ...yellowArgs(args));
950
- }, "warn"),
951
- debug: /* @__PURE__ */ __name((...args) => {
956
+ },
957
+ debug: (...args) => {
952
958
  return console.debug(...DEBUG, ...cyanArgs(args));
953
- }, "debug"),
954
- error: /* @__PURE__ */ __name((...args) => {
959
+ },
960
+ error: (...args) => {
955
961
  return args.forEach((arg) => {
956
962
  return console.error(...ERROR, arg);
957
963
  });
958
- }, "error")
964
+ }
959
965
  };
960
966
  }
961
- __name(createLogger, "createLogger");
962
967
  function createColoredArgs(colorFn) {
963
968
  return (args) => {
964
969
  return args.map((arg) => {
@@ -976,7 +981,6 @@ function createColoredArgs(colorFn) {
976
981
  });
977
982
  };
978
983
  }
979
- __name(createColoredArgs, "createColoredArgs");
980
984
 
981
985
  // ../node/src/timer.ts
982
986
  import colors2 from "ansi-colors";
@@ -1005,9 +1009,7 @@ function timer(arg, task) {
1005
1009
  log.done(colors2.dim(humanizeDuration(ms3)));
1006
1010
  return retval2;
1007
1011
  }
1008
- __name(done, "done");
1009
1012
  }
1010
- __name(timer, "timer");
1011
1013
 
1012
1014
  // src/lib/internal/validateParsed.ts
1013
1015
  function validateParsed(args, optionValues, argDefs, optionDefs) {
@@ -1054,13 +1056,9 @@ function validateParsed(args, optionValues, argDefs, optionDefs) {
1054
1056
  void 0
1055
1057
  );
1056
1058
  }
1057
- __name(validateParsed, "validateParsed");
1058
1059
 
1059
1060
  // src/lib/Command.ts
1060
1061
  var _Command = class _Command {
1061
- static {
1062
- __name(this, "Command");
1063
- }
1064
1062
  /** parent command in the hierarchy, undefined for root command */
1065
1063
  parent;
1066
1064
  /** the command name used to invoke it */
@@ -1394,7 +1392,7 @@ var _Command = class _Command {
1394
1392
  const hooks = this.hooks.filter((t) => {
1395
1393
  return t.predicate(data);
1396
1394
  });
1397
- const execute = /* @__PURE__ */ __name(async () => {
1395
+ const execute = async () => {
1398
1396
  for (const hook of hooks) {
1399
1397
  await hook.action(data);
1400
1398
  if (process.exitCode !== void 0) {
@@ -1420,7 +1418,7 @@ var _Command = class _Command {
1420
1418
  }
1421
1419
  console.log(this.renderHelp());
1422
1420
  });
1423
- }, "execute");
1421
+ };
1424
1422
  return { ...data, hooks, execute };
1425
1423
  }
1426
1424
  /**
@@ -1440,13 +1438,29 @@ __decorateClass([
1440
1438
  lazyProp
1441
1439
  ], _Command.prototype, "help", 1);
1442
1440
  var Command = _Command;
1441
+
1442
+ // src/lib/types.ts
1443
+ var types_exports = {};
1444
+
1445
+ // src/index.ts
1446
+ var src_default = {
1447
+ ...Command_exports,
1448
+ //
1449
+ ...Help_exports,
1450
+ ...findCommand_exports,
1451
+ ...findOption_exports,
1452
+ ...getCommandAncestors_exports,
1453
+ ...getCommandAndAncestors_exports,
1454
+ ...parseOptionFlags_exports,
1455
+ ...types_exports
1456
+ };
1443
1457
  export {
1444
1458
  Command,
1445
1459
  Help,
1460
+ src_default as default,
1446
1461
  findCommand,
1447
1462
  findOption,
1448
1463
  getCommandAncestors,
1449
1464
  getCommandAndAncestors,
1450
1465
  parseOptionFlags
1451
1466
  };
1452
- //# sourceMappingURL=index.mjs.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bemoje/cli",
3
- "version": "2.1.0",
3
+ "version": "2.1.3",
4
4
  "description": "A type-safe CLI composer that can parse argv and generate help without execution coupling.",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -20,11 +20,6 @@
20
20
  "args",
21
21
  "argv"
22
22
  ],
23
- "module": "./index.mjs",
24
- "types": "./index.d.ts",
25
- "engines": {
26
- "node": ">=18"
27
- },
28
23
  "exports": {
29
24
  ".": {
30
25
  "types": "./index.d.ts",
package/index.mjs.map DELETED
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/lib/Help.ts", "../../decorators/src/assertDescriptorValueIsFunction.ts", "../../object/src/entriesOf.ts", "../../object/src/keysOf.ts", "../../object/src/filterObject.ts", "../../object/src/objSortKeys.ts", "../../object/src/valuesOf.ts", "../../map/src/mapGetOrDefault.ts", "../../map/src/TimeoutWeakMap.ts", "../../decorators/src/lazyProp.ts", "../../decorators/src/memoizeSync.ts", "../../array/src/arrLast.ts", "../../array/src/arrRemoveDuplicates.ts", "../src/lib/internal/collectVariadicOptionValues.ts", "../src/lib/Command.ts", "../src/lib/helpers/findCommand.ts", "../src/lib/helpers/findOption.ts", "../src/lib/helpers/getCommandAndAncestors.ts", "../src/lib/helpers/getCommandAncestors.ts", "../src/lib/internal/mergeOptionDefaults.ts", "../src/lib/internal/normalizeArgv.ts", "../src/lib/helpers/parseOptionFlags.ts", "../src/lib/internal/resolveArguments.ts", "../../fn/src/setName.ts", "../../string/src/lib/strFirstCharToUpperCase.ts", "../../node/src/createLogger.ts", "../../node/src/timer.ts", "../src/lib/internal/validateParsed.ts"],
4
- "sourcesContent": ["import type { Argument } from './types'\nimport C from 'ansi-colors'\nimport type { ICommand } from './types'\nimport type { IHelp } from './types'\nimport type { Option } from './types'\nimport { lazyProp } from '@mono/decorators'\n\n/**\n * This is a fork of the Help class from the 'commander' npm package. The Help class method names as well as the\n * expected interface of the Command instance to parse, are both similar, but different and not compatible without\n * custom adaptations, @see ICommand\n */\nexport class Help implements IHelp {\n protected readonly cmd: ICommand\n /** output helpWidth, long lines are wrapped to fit */\n helpWidth: number = process.stdout.isTTY ? process.stdout.columns : 80\n minWidthToWrap: number = 40\n sortSubcommands: boolean = true\n sortOptions: boolean = true\n usageDisplayOptionsAs: string = '[opts]'\n usageDisplaySubcommandAs: string = '[cmd]'\n\n constructor(cmd: ICommand) {\n this.cmd = cmd\n Object.defineProperty(this, 'cmd', { enumerable: false })\n }\n\n /**\n * Get an array of the visible subcommands. Includes a placeholder for the implicit help command, if there is one.\n */\n @lazyProp\n visibleCommands(): ICommand[] {\n const res = Object.values(this.cmd.commands).filter((c) => {\n return !c.hidden\n })\n if (this.sortSubcommands) {\n res.sort((a: ICommand, b: ICommand) => {\n return a.name.localeCompare(b.name)\n })\n }\n return res\n }\n\n /**\n * Compare options for sort.\n */\n compareOptions(a: Option, b: Option): number {\n const getSortKey = (option: Option): string => {\n // WYSIWYG for order displayed in help. Short used for comparison if present. No special handling for negated.\n return option.short ? option.short.replace(/^-/, '') : option.long!.replace(/^--/, '')\n }\n return getSortKey(a).localeCompare(getSortKey(b))\n }\n\n /**\n * Get an array of the visible options. Includes a placeholder for the implicit help option, if there is one.\n */\n @lazyProp\n visibleOptions(): Option[] {\n const res = this.cmd.options.filter((option: Option) => {\n return !option.hidden\n })\n if (this.sortOptions) {\n res.sort(this.compareOptions)\n }\n return res\n }\n\n /**\n * Get an array of the arguments if any have a description.\n */\n @lazyProp\n visibleArguments(): Argument[] {\n return this.cmd.arguments.slice()\n }\n\n /**\n * Get the command term to show in the list of subcommands.\n */\n subcommandTerm(sub: ICommand): string {\n const args = sub.arguments\n .map((arg) => {\n return arg.usage\n })\n .join(' ')\n return (\n (sub.aliases[0] ? `${sub.aliases[0].padEnd(this.longestSubcommandAliasLength(), ' ')} | ` : '') +\n sub.name +\n (sub.options.length ? ` ${this.usageDisplayOptionsAs}` : '') + // simplistic check for non-help option\n (args ? ` ${args}` : '')\n )\n }\n\n /**\n * Get the option term to show in the list of options.\n */\n optionTerm(option: Option): string {\n return option.flags\n }\n\n /**\n * Get the argument term to show in the list of arguments.\n */\n argumentTerm(argument: Argument): string {\n return argument.usage\n }\n\n /**\n * Get the longest subcommand primary alias length.\n */\n @lazyProp\n longestSubcommandAliasLength(): number {\n return Math.max(\n 0,\n ...this.visibleCommands().map((c) => {\n return c.aliases[0]?.length || 0\n }),\n )\n }\n\n /**\n * Get the longest subcommand term length.\n */\n @lazyProp\n longestSubcommandTermLength(): number {\n return this.visibleCommands().reduce((max: number, command) => {\n return Math.max(max, this.displayWidth(this.styleSubcommandTerm(this.subcommandTerm(command))))\n }, 0)\n }\n\n /**\n * Get the longest option term length.\n */\n @lazyProp\n longestOptionTermLength(): number {\n return this.visibleOptions().reduce((max: number, option) => {\n return Math.max(max, this.displayWidth(this.styleOptionTerm(this.optionTerm(option))))\n }, 0)\n }\n\n /**\n * Get the longest argument term length.\n */\n @lazyProp\n longestArgumentTermLength(): number {\n return this.visibleArguments().reduce((max: number, argument) => {\n return Math.max(max, this.displayWidth(this.styleArgumentTerm(this.argumentTerm(argument))))\n }, 0)\n }\n\n /**\n * Get the command usage to be displayed at the top of the built-in help.\n */\n commandUsage(): string {\n // Usage\n let path = ''\n for (let ancestor = this.cmd.parent; ancestor; ancestor = ancestor.parent) {\n path = `${ancestor.name} ${path}`\n }\n\n return `${path + this.cmd.name} ${[\n ...(Object.keys(this.cmd.commands).length ? [this.usageDisplaySubcommandAs] : []),\n ...(this.cmd.options.length ? [this.usageDisplayOptionsAs] : []),\n ...this.cmd.arguments.map((arg) => {\n return arg.required\n ? arg.variadic\n ? `<${arg.name}...>`\n : `<${arg.name}>`\n : arg.variadic\n ? `[${arg.name}...]`\n : `[${arg.name}]`\n }),\n ].join(' ')}`.trim()\n }\n\n /**\n * Get the description for the command.\n */\n commandDescription(): string {\n let res = ''\n if (this.cmd.aliases.length) {\n res += `Aliases: ${this.cmd.aliases.join(', ')}`\n res += '\\n\\n'\n }\n res += this.cmd.description\n return res\n }\n\n /**\n * Get the subcommand summary to show in the list of subcommands.\n * (Fallback to description for backwards compatibility.)\n */\n subcommandDescription(sub: ICommand): string {\n return (\n sub.summary ||\n (sub.description?.includes('\\n') ? sub.description.trim().split('\\n')[0] : sub.description.trim())\n )\n }\n\n /**\n * Get the option description to show in the list of options.\n */\n optionDescription(option: Option): string {\n const extraInfo: string[] = []\n\n if (option.choices) {\n extraInfo.push(\n // use stringify to match the display of the default value\n `choices: ${option.choices\n .map((choice: string) => {\n return String(choice)\n })\n .join(', ')}`,\n )\n }\n if (option.defaultValue && !(Array.isArray(option.defaultValue) && option.defaultValue.length === 0)) {\n extraInfo.push(`default: ${option.defaultValueDescription || String(option.defaultValue)}`)\n }\n\n if (option.env !== undefined) {\n extraInfo.push(`env: ${option.env}`)\n }\n if (extraInfo.length > 0) {\n const extraDescription = `(${extraInfo.join(', ')})`\n if (option.description) {\n return `${option.description} ${extraDescription}`\n }\n return extraDescription\n }\n\n return option.description ?? ''\n }\n\n /**\n * Get the argument description to show in the list of arguments.\n */\n argumentDescription(argument: Argument): string {\n const extraInfo: string[] = []\n if (argument.choices) {\n extraInfo.push(\n // use stringify to match the display of the default value\n `choices: ${argument.choices\n .map((choice: string) => {\n return String(choice)\n })\n .join(', ')}`,\n )\n }\n if (argument.defaultValue && !(Array.isArray(argument.defaultValue) && argument.defaultValue.length === 0)) {\n extraInfo.push(`default: ${argument.defaultValueDescription || String(argument.defaultValue)}`)\n }\n if (extraInfo.length > 0) {\n const extraDescription = `(${extraInfo.join(', ')})`\n if (argument.description) {\n return `${argument.description} ${extraDescription}`\n }\n return extraDescription\n }\n return argument.description ?? ''\n }\n\n /**\n * Format a list of items, given a heading and an array of formatted items.\n */\n formatItemList(heading: string, items: string[]): string[] {\n if (items.length === 0) {\n return []\n }\n return [this.styleTitle(heading), ...items, '']\n }\n\n /**\n * Group items by their help group heading.\n */\n groupItems<T extends ICommand | Option>(\n unsortedItems: T[],\n visibleItems: T[],\n getGroup: (item: T) => string,\n ): Map<string, T[]> {\n const result = new Map<string, T[]>()\n // Add groups in order of appearance in unsortedItems.\n unsortedItems.forEach((item: T) => {\n const group = getGroup(item)\n if (!result.has(group)) {\n result.set(group, [])\n }\n })\n // Add items in order of appearance in visibleItems.\n visibleItems.forEach((item: T) => {\n const group = getGroup(item)\n if (!result.has(group)) {\n result.set(group, [])\n }\n result.get(group)!.push(item)\n })\n return result\n }\n\n /**\n * Return display width of string, ignoring ANSI escape sequences. Used in padding and wrapping calculations.\n */\n displayWidth(str: string): number {\n // eslint-disable-next-line no-control-regex\n const sgrPattern = /\\x1b\\[\\d*(;\\d*)*m/g\n return str.replace(sgrPattern, '').length\n }\n\n /**\n * Style the title for displaying in the help. Called with 'Usage:', 'Options:', etc.\n */\n styleTitle(str: string): string {\n return C.yellow(str)\n }\n\n /**\n * Style the usage line for displaying in the help. Applies specific styling to different parts like options, commands, and arguments.\n */\n styleUsage(str: string): string {\n // Usage has lots of parts the user might like to color separately! Assume default usage string which is formed like:\n // command subcommand [opts] [cmd] <foo> [bar]\n return str\n .split(' ')\n .map((word: string, index, arr) => {\n if (word === this.usageDisplaySubcommandAs) {\n return C.green(word)\n }\n if (word === this.usageDisplayOptionsAs) {\n return C.blue(word)\n }\n if (word[0] === '<') {\n return C.red(word)\n }\n if (word[0] === '[') {\n return C.cyan(word)\n }\n if (arr[index + 1]?.startsWith('[')) {\n return C.magenta(word)\n }\n return this.styleCommandText(word) // Restrict to initial words?\n })\n .join(' ')\n }\n\n /**\n * Style command descriptions for display in help output.\n */\n styleCommandDescription(str: string): string {\n return this.styleDescriptionText(str)\n }\n\n /**\n * Style option descriptions for display in help output.\n */\n styleOptionDescription(str: string): string {\n return C.gray(this.styleDescriptionText(str))\n }\n\n /**\n * Style subcommand descriptions for display in help output.\n */\n styleSubcommandDescription(str: string): string {\n return this.styleDescriptionText(str)\n }\n\n /**\n * Style argument descriptions for display in help output.\n */\n styleArgumentDescription(str: string): string {\n return C.gray(this.styleDescriptionText(str))\n }\n\n /**\n * Base style used by descriptions. Override in subclass to apply custom formatting.\n */\n styleDescriptionText(str: string): string {\n return C.gray(str)\n }\n\n /**\n * Style option terms (flags) for display in help output.\n */\n styleOptionTerm(str: string): string {\n return this.styleOptionText(str)\n }\n\n /**\n * Style subcommand terms for display in help output. Applies specific styling to different parts like options and arguments.\n */\n styleSubcommandTerm(str: string): string {\n // This is very like usage with lots of parts! Assume default string which is formed like:\n // subcommand [opts] <foo> [bar]\n const res = str\n .split(' ')\n .map((word: string) => {\n if (word === this.usageDisplayOptionsAs) {\n return C.dim(word)\n }\n if (word[0] === '[' || word[0] === '<') {\n return C.dim(word)\n }\n return this.styleSubcommandText(word) // Restrict to initial words?\n })\n .join(' ')\n const split = res.split('|')\n if (split.length === 1) {\n return res\n }\n split[0] = C.green(split[0])\n return split.join('|')\n }\n\n /**\n * Style argument terms for display in help output.\n */\n styleArgumentTerm(str: string): string {\n return this.styleArgumentText(str)\n }\n\n /**\n * Base style used in terms and usage for options. Override in subclass to apply custom formatting.\n */\n styleOptionText(str: string): string {\n return str\n }\n\n /**\n * Base style used in terms and usage for arguments. Override in subclass to apply custom formatting.\n */\n styleArgumentText(str: string): string {\n return str\n }\n\n /**\n * Base style used in terms and usage for subcommands. Override in subclass to apply custom formatting.\n */\n styleSubcommandText(str: string): string {\n return str\n }\n\n /**\n * Base style used in terms and usage for commands. Override in subclass to apply custom formatting.\n */\n styleCommandText(str: string): string {\n return str\n }\n\n /**\n * Calculate the pad width from the maximum term length.\n */\n @lazyProp\n padWidth(): number {\n return Math.max(\n this.longestOptionTermLength(),\n this.longestSubcommandTermLength(),\n this.longestArgumentTermLength(),\n )\n }\n\n /**\n * Detect manually wrapped and indented strings by checking for line break followed by whitespace.\n */\n preformatted(str: string): boolean {\n return /\\n[^\\S\\r\\n]/.test(str)\n }\n\n /**\n * Format the \"item\", which consists of a term and description. Pad the term and wrap the description, indenting the following lines.\n *\n * So \"TTT\", 5, \"DDD DDDD DD DDD\" might be formatted for this.helpWidth=17 like so:\n * TTT DDD DDDD\n * DD DDD\n */\n formatItem(term: string, termWidth: number, description: string): string {\n const itemIndent = 2\n const itemIndentStr = ' '.repeat(itemIndent)\n if (!description) {\n return itemIndentStr + term\n }\n\n // Pad the term out to a consistent width, so descriptions are aligned.\n const paddedTerm = term.padEnd(termWidth + term.length - this.displayWidth(term))\n\n // Format the description.\n const spacerWidth = 2 // between term and description\n const helpWidth = this.helpWidth\n const remainingWidth = helpWidth - termWidth - spacerWidth - itemIndent\n let formattedDescription: string\n if (remainingWidth < this.minWidthToWrap || this.preformatted(description)) {\n formattedDescription = description\n } else {\n const wrappedDescription = this.boxWrap(description, remainingWidth)\n formattedDescription = wrappedDescription.replace(/\\n/g, `\\n${' '.repeat(termWidth + spacerWidth)}`)\n }\n\n // Construct and overall indent.\n return (\n itemIndentStr +\n paddedTerm +\n ' '.repeat(spacerWidth) +\n formattedDescription.replace(/\\n/g, `\\n${itemIndentStr}`)\n )\n }\n\n /**\n * Wrap a string at whitespace, preserving existing line breaks.\n * Wrapping is skipped if the width is less than `minWidthToWrap`.\n */\n boxWrap(str: string, width: number): string {\n if (width < this.minWidthToWrap) {\n return str\n }\n\n const rawLines = str.split(/\\r\\n|\\n/)\n // split up text by whitespace\n const chunkPattern = /[\\s]*[^\\s]+/g\n const wrappedLines: string[] = []\n rawLines.forEach((line: string) => {\n const chunks = line.match(chunkPattern)\n if (chunks === null) {\n wrappedLines.push('')\n return\n }\n\n let sumChunks = [chunks.shift()!]\n let sumWidth = this.displayWidth(sumChunks[0])\n chunks.forEach((chunk: string) => {\n const visibleWidth = this.displayWidth(chunk)\n // Accumulate chunks while they fit into width.\n if (sumWidth + visibleWidth <= width) {\n sumChunks.push(chunk)\n sumWidth += visibleWidth\n return\n }\n wrappedLines.push(sumChunks.join(''))\n\n const nextChunk = chunk.trimStart() // trim space at line break\n sumChunks = [nextChunk]\n sumWidth = this.displayWidth(nextChunk)\n })\n wrappedLines.push(sumChunks.join(''))\n })\n\n return wrappedLines.join('\\n')\n }\n\n /**\n * Generate the built-in help text.\n */\n render(): string {\n // Usage\n let output = [`${this.styleTitle('Usage:')} ${this.styleUsage(this.commandUsage())}`, '']\n\n // Description\n const des = this.commandDescription()\n if (des.length > 0) {\n output = output.concat([this.boxWrap(this.styleCommandDescription(des), this.helpWidth), ''])\n }\n\n // Arguments\n const argumentList = this.visibleArguments().map((argument: Argument) => {\n return this.formatItem(\n this.styleArgumentTerm(this.argumentTerm(argument)),\n this.padWidth(),\n this.styleArgumentDescription(this.argumentDescription(argument)),\n )\n })\n output = output.concat(this.formatItemList('Arguments:', argumentList))\n\n // Options\n const optionGroups = this.groupItems(this.cmd.options, this.visibleOptions(), (option: Option) => {\n return option.group ?? 'Options:'\n })\n optionGroups.forEach((options, group) => {\n const optionList = options.map((option: Option) => {\n return this.formatItem(\n this.styleOptionTerm(this.optionTerm(option)),\n this.padWidth(),\n this.styleOptionDescription(this.optionDescription(option)),\n )\n })\n output = output.concat(this.formatItemList(group, optionList))\n })\n\n // Commands\n const commandGroups = this.groupItems(\n Object.values(this.cmd.commands),\n this.visibleCommands(),\n\n (sub: ICommand) => {\n return sub.group || 'Commands:'\n },\n )\n commandGroups.forEach((commands, group) => {\n const commandList = commands.map((sub: ICommand) => {\n return this.formatItem(\n this.styleSubcommandTerm(this.subcommandTerm(sub)),\n this.padWidth(),\n this.styleSubcommandDescription(this.subcommandDescription(sub)),\n )\n })\n output = output.concat(this.formatItemList(group, commandList))\n })\n\n return output.join('\\n')\n }\n}\n", "/**\n * Asserts that a property descriptor contains a function value.\n */\nexport default function assertDescriptorValueIsFunction(key: string, descriptor: PropertyDescriptor) {\n if (!(typeof descriptor.value === 'function' && descriptor.value !== Function.prototype)) {\n throw new TypeError(`\"value\" not a function for ${key} with descriptor: ${JSON.stringify(descriptor)}.`)\n }\n}\n", "import { StringKeyOf } from '@mono/types'\n\n/**\n * Same as Object.entries except the keys are typed as keyof T.\n */\nexport function entriesOf<T extends object>(obj: T): [StringKeyOf<T>, T[StringKeyOf<T>]][] {\n return Object.entries(obj) as [StringKeyOf<T>, T[StringKeyOf<T>]][]\n}\n", "import { StringKeyOf } from '@mono/types'\n\n/**\n * Same as Object.keys except the keys are typed as string keys of T.\n */\nexport function keysOf<T extends object>(obj: T) {\n return Object.keys(obj) as StringKeyOf<T>[]\n}\n", "import { StringKeyOf } from '@mono/types'\nimport { ValueOf } from '@mono/types'\nimport { keysOf } from './keysOf'\n\n/**\n * Filter an object's own enumerable properties by predicate.\n */\nexport function filterObject<T extends object>(\n obj: T,\n predicate: (value: ValueOf<T>, key: StringKeyOf<T>, obj: T) => boolean,\n) {\n const accum = {} as T\n for (const key of keysOf(obj)) {\n if (predicate(obj[key], key, obj)) {\n accum[key] = obj[key]\n }\n }\n return accum\n}\n", "import { ValueOf } from '@mono/types'\n\n/**\n * Sorts the keys of an object in alphabetical order unless a custom compare function is provided.\n */\nexport function objSortKeys<T extends object>(\n o: T,\n compare?: (a: [string, ValueOf<T>], b: [string, ValueOf<T>]) => number,\n): T {\n const entries = Object.entries(o)\n if (compare) {\n entries.sort(compare)\n } else {\n entries.sort((a, b) => {\n return a[0].localeCompare(b[0])\n })\n }\n return Object.fromEntries(entries) as T\n}\n", "import { StringKeyOf } from '@mono/types'\n\n/**\n * Get the values of an object with type-safe return value.\n */\nexport function valuesOf<T extends object>(obj: T): T[StringKeyOf<T>][] {\n return Object.values(obj) as T[StringKeyOf<T>][]\n}\n", "import { GenericMap } from './types'\n\n/**\n * Gets a value from a map or creates it using a factory function if it doesn't exist.\n */\nexport function mapGetOrDefault<K, V, T extends GenericMap<K, V, 'get' | 'has' | 'set'>>(\n map: T,\n key: K,\n factory: (key: K, map: T) => V,\n): V {\n let value = map.get(key)\n if (value !== undefined || map.has(key)) {\n return value as V\n }\n value = factory(key, map)\n map.set(key, value)\n return value\n}\n", "/**\n * A WeakMap with automatic timeout-based expiry for entries.\n *\n * Entries are automatically removed after a specified timeout period.\n * Accessing an entry refreshes its timeout, extending its lifetime.\n * This is useful for caching scenarios where you want automatic cleanup\n * of unused entries while keeping frequently accessed ones alive.\n */\nexport class TimeoutWeakMap<K extends object, V> {\n protected readonly wmap = new WeakMap<K, [V, NodeJS.Timeout]>()\n\n /**\n * @param timeoutMs Default timeout in milliseconds for entries\n */\n constructor(readonly timeoutMs: number) {}\n\n /**\n * Retrieves the value for the given key and refreshes its timeout.\n *\n * @param key The key to retrieve\n * @returns The value if found, undefined otherwise\n */\n get(key: K): V | undefined {\n const vt: [V, NodeJS.Timeout] | undefined = this.wmap.get(key)\n if (!vt) {\n return undefined\n }\n const [value, timeout] = vt\n timeout.refresh()\n return value\n }\n\n /**\n * Sets a key-value pair with an optional custom timeout.\n *\n * @param key The key to set\n * @param value The value to associate with the key\n * @param timeoutMs Optional timeout override for this entry\n * @returns This instance for chaining\n */\n set(key: K, value: V, timeoutMs?: number): this {\n this.wmap.set(key, [\n value,\n setTimeout(() => {\n this.delete(key)\n }, timeoutMs ?? this.timeoutMs).unref(),\n ])\n return this\n }\n\n /**\n * Removes a key-value pair and clears its timeout.\n *\n * @param key The key to delete\n * @returns True if the key existed and was deleted, false otherwise\n */\n delete(key: K): boolean {\n const vt: [V, NodeJS.Timeout] | undefined = this.wmap.get(key)\n if (!vt) {\n return false\n }\n const timeout = vt[1]\n clearTimeout(timeout)\n return this.wmap.delete(key)\n }\n\n /**\n * Checks if a key exists in the map.\n * Does not refresh the timeout.\n *\n * @param key The key to check\n * @returns True if the key exists, false otherwise\n */\n has(key: K): boolean {\n return this.wmap.has(key)\n }\n\n /**\n * Loads multiple key-value pairs into the map.\n *\n * @param entries Iterable of key-value pairs to load\n * @param timeoutMs Optional timeout override for all entries\n * @returns This instance for chaining\n */\n load(entries: Iterable<[K, V]>, timeoutMs?: number): this {\n for (const [key, value] of entries) {\n this.set(key, value, timeoutMs)\n }\n return this\n }\n\n /**\n * Updates an existing value or creates a new one using an update function.\n *\n * @param key The key to update\n * @param update Function that receives the current value and returns the new value\n * @returns This instance for chaining\n */\n update(key: K, update: (value: V | undefined, key: K, map: this) => V): this {\n return this.set(key, update(this.get(key), key, this))\n }\n\n /**\n * Gets a value or creates it using a factory function if it doesn't exist.\n * Refreshes timeout if the value exists.\n *\n * @param key The key to get or create\n * @param factory Function to create the value if it doesn't exist\n * @param timeoutMs Optional timeout override for new entries\n * @returns The existing or newly created value\n */\n getOrDefault(key: K, factory: (key: K, map: this) => V, timeoutMs?: number): V {\n const vt: [V, NodeJS.Timeout] | undefined = this.wmap.get(key)\n if (vt) {\n const [value, timeout] = vt\n timeout.refresh()\n return value\n } else {\n const value = factory(key, this)\n this.set(key, value, timeoutMs)\n return value\n }\n }\n}\n", "import { GenericMap } from '@mono/map'\nimport { TimeoutWeakMap } from '@mono/map'\nimport { isFunction } from 'es-toolkit/predicate'\nimport { mapGetOrDefault } from '@mono/map'\nimport { memoizeSync } from './memoizeSync'\nimport { ms } from 'enhanced-ms'\n\n/**\n * Decorator to memoize a method or getter accessor property.\n */\nexport function lazyProp(target: object, key: string, descriptor: PropertyDescriptor): PropertyDescriptor\n\n/**\n * Decorator to temporarily memoize a method or getter accessor property.\n * @param maxAge The maximum age of the memoized value as number (ms) or descriptive string (e.g. '10 min'). Uses 'ms' library: https://github.com/zeit/ms\n */\nexport function lazyProp(\n maxAge: number | string,\n): (target: object, key: string, descriptor: PropertyDescriptor) => PropertyDescriptor\n\n//\nexport function lazyProp(\n targetOrTimeout: object | number | string,\n key?: string,\n descriptor?: PropertyDescriptor,\n) {\n if (typeof targetOrTimeout === 'number' || typeof targetOrTimeout === 'string') {\n const maxAge = typeof targetOrTimeout === 'number' ? targetOrTimeout : ms(targetOrTimeout)\n return createLazyPropDecorator(new TimeoutWeakMap(maxAge))\n } else {\n const decorator = createLazyPropDecorator(new WeakMap())\n return decorator(targetOrTimeout, key!, descriptor!)\n }\n}\n\nfunction createLazyPropDecorator<K extends object, V>(map: GenericMap<K, V, 'get' | 'set' | 'has'>) {\n return function (target: object, key: string, descriptor: PropertyDescriptor) {\n const { get, value } = descriptor\n\n if (isFunction(get)) {\n descriptor.get = function () {\n return mapGetOrDefault(map, this as K, () => {\n return get.call(this)\n })\n }\n return descriptor\n }\n\n if (isFunction(value)) {\n return memoizeSync()(target, key, descriptor)\n }\n\n throw new TypeError('neither \"get\" nor \"value\" are functions')\n }\n}\n", "import { MemoizeSyncOptions } from './types.internal'\nimport { SomeSyncFunction } from './types.internal'\nimport assertDescriptorValueIsFunction from './assertDescriptorValueIsFunction'\nimport { mapGetOrDefault } from '@mono/map'\nimport memoizee from 'memoizee'\nimport { ms } from 'enhanced-ms'\n\n/**\n * Decorator to memoize a sync method.\n * @param maxAge The maximum age of the memoized value as number (ms) or descriptive string (e.g. '10 min'). Uses 'ms' library: https://github.com/zeit/ms\n */\nexport function memoizeSync(\n maxAge?: number | string,\n): (target: object, key: string, descriptor: PropertyDescriptor) => PropertyDescriptor\n\n/**\n * Decorator to memoize a sync method.\n * @param options The options for memoization.\n */\nexport function memoizeSync(\n options: MemoizeSyncOptions,\n): (target: object, key: string, descriptor: PropertyDescriptor) => PropertyDescriptor\n\n//\nexport function memoizeSync(arg: (number | string) | MemoizeSyncOptions = {}) {\n const opts = typeof arg === 'object' ? arg : { maxAge: typeof arg === 'number' ? arg : ms(arg) }\n\n return function decorator(target: unknown, key: string, descriptor?: PropertyDescriptor) {\n if (!descriptor) {\n throw new TypeError('descriptor is undefined')\n }\n const orig = descriptor.value\n assertDescriptorValueIsFunction(key, descriptor)\n const options = { length: false, ...opts } as memoizee.Options<SomeSyncFunction>\n\n if (opts.instancesShareCache) {\n Reflect.deleteProperty(options, 'instancesShareCache')\n descriptor.value = memoizee(orig, options)\n } else {\n const wmap = new WeakMap()\n descriptor.value = function (...args: any[]) {\n const memoized = mapGetOrDefault(wmap, this, () => {\n return memoizee(orig, options)\n })\n return memoized.apply(this, args)\n }\n }\n\n return descriptor\n }\n}\n", "/**\n * Returns the last element of an array.\n * Throws an error if the array is empty.\n * @template T The type of elements in the array.\n * @param array The array to get the last element from.\n * @returns The last element of the array.\n * @throws If the array is empty.\n * @example const numbers = [1, 2, 3, 4, 5];\n * const lastNumber = arrLast(numbers);\n * //=> 5\n */\nexport function arrLast<T>(array: T[]): T {\n if (!array.length) {\n throw new Error('Cannot get last element of empty array.')\n }\n return array[array.length - 1]\n}\n", "/**\n * Remove duplicates from an array\n * @remarks This function uses the JavaScript Set object to remove duplicate values from an array.\n * @typeparam T - The type of elements in the array.\n * @returns The new array with duplicates removed.\n * @param array The array from which to remove duplicates.\n * @example ```ts\n * const array = [1, 2, 2, 3, 4, 4, 5];\n * arrRemoveDuplicates(array);\n * //=> [1, 2, 3, 4, 5]\n * ```\n */\nexport function arrRemoveDuplicates<T>(array: T[]): T[] {\n return Array.from(new Set(array))\n}\n", "import type { Option } from '../types'\n\n/** Collect consecutive positional tokens into variadic string option values */\nexport function collectVariadicOptionValues(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n parsed: { tokens: any[]; values: any; positionals: string[] },\n options: Option[],\n): void {\n for (let i = 0; i < parsed.tokens.length; i++) {\n const token = parsed.tokens[i]\n if (token.kind !== 'option') {\n continue\n }\n\n const def = options.find((o) => {\n return o.name === token.name\n })\n if (!def?.variadic || def.type !== 'string') {\n continue\n }\n\n const values = [token.value]\n let j = i + 1\n while (j < parsed.tokens.length && parsed.tokens[j].kind === 'positional') {\n const positionalToken = parsed.tokens[j]\n values.push(positionalToken.value)\n const posIndex = parsed.positionals.indexOf(positionalToken.value)\n if (posIndex !== -1) {\n parsed.positionals.splice(posIndex, 1)\n }\n j++\n }\n\n Reflect.set(\n parsed.values,\n token.name,\n values.filter((v): v is string => {\n return v !== undefined\n }),\n )\n }\n}\n", "import type { ActionHandler } from './types'\nimport type { AllowedArgumentUsage } from './types'\nimport type { Argument } from './types'\nimport type { ArgumentOptions } from './types'\nimport type { ArgumentUsage } from './types'\nimport type { Arguments } from './types'\nimport type { BooleanOptionOptions } from './types'\nimport type { CamelCase } from 'type-fest'\nimport { Help } from './Help'\nimport type { HookActionHandler } from './types'\nimport type { HookDefinition } from './types'\nimport type { HookPredicate } from './types'\nimport type { ICommand } from './types'\nimport type { InferAddOptionResult } from './types'\nimport type { InferAddedArgumentType } from './types'\nimport type { Option } from './types'\nimport type { OptionOptions } from './types'\nimport type { OptionUsage } from './types'\nimport type { OptionalArgumentOptions } from './types'\nimport type { OptionalArgumentOptionsWithDefaultValue } from './types'\nimport type { OptionalOptionOptions } from './types'\nimport type { OptionalVariadicArgumentOptions } from './types'\nimport type { OptionalVariadicOptionOptions } from './types'\nimport type { Options } from './types'\nimport type { ParseArgvResult } from './types'\nimport type { RequiredArgumentOptions } from './types'\nimport type { RequiredOptionOptions } from './types'\nimport type { RequiredVariadicArgumentOptions } from './types'\nimport type { RequiredVariadicOptionOptions } from './types'\nimport type { SetFieldType } from 'type-fest'\nimport type { SetRequired } from 'type-fest'\nimport type { Simplify } from 'type-fest'\nimport type { SubCommands } from './types'\nimport { arrRemoveDuplicates } from '@mono/array'\nimport { collectVariadicOptionValues } from './internal/collectVariadicOptionValues'\nimport colors from 'ansi-colors'\nimport { filterObject } from '@mono/object'\nimport { findCommand } from './helpers/findCommand'\nimport { findOption } from './helpers/findOption'\nimport { getCommandAncestors } from './helpers/getCommandAncestors'\nimport { getCommandAndAncestors } from './helpers/getCommandAndAncestors'\nimport { inspect } from 'node:util'\nimport { kebabCase } from 'es-toolkit/string'\nimport { lazyProp } from '@mono/decorators'\nimport { mergeOptionDefaults } from './internal/mergeOptionDefaults'\nimport { normalizeArgv } from './internal/normalizeArgv'\nimport { objSortKeys } from '@mono/object'\nimport { parseArgs } from 'node:util'\nimport { parseOptionFlags } from './helpers/parseOptionFlags'\nimport { resolveArguments } from './internal/resolveArguments'\nimport { setName } from '@mono/fn'\nimport { strFirstCharToUpperCase } from '@mono/string'\nimport { timer } from '@mono/node'\nimport { validateParsed } from './internal/validateParsed'\nimport { valuesOf } from '@mono/object'\n\n/**\n * a type-safe CLI composer that can parse argv and generate help without execution coupling.\n */\nexport class Command<\n A extends Arguments = [],\n O extends Options = { help?: boolean; debug?: boolean },\n Subs extends SubCommands = SubCommands,\n> implements ICommand\n{\n /** parent command in the hierarchy, undefined for root command */\n parent?: Command<Arguments, Options & O>\n /** the command name used to invoke it */\n name: string\n /** semantic version string displayed by --version flag */\n version?: string\n /** alternative names for invoking this command */\n aliases: string[]\n /** brief one-line description shown in command lists */\n summary?: string\n /** full description displayed in help text */\n description: string\n /** whether to exclude from help listings */\n hidden?: boolean\n /** category for organizing related commands in help output */\n group?: string\n /** positional arguments this command accepts */\n arguments: Argument[]\n /** cLI options (flags) this command recognizes */\n options: Option[]\n /** subcommands registered with this command */\n commands: Subs\n /** main action handler executed when command is invoked */\n protected action?: ActionHandler<A, O, Subs>\n /** option-driven actions (e.g., --help, --version) executed when their conditions match */\n protected hooks: HookDefinition<Arguments, Options & O>[]\n\n constructor(name: string, parent?: ICommand) {\n this.name = name\n this.aliases = []\n this.description = ''\n this.arguments = []\n this.options = []\n this.commands = {} as Subs\n this.hooks = []\n\n // make parent non-enumerable to avoid circular references for toJSON compatibility\n Object.defineProperty(this, 'parent', { value: parent, enumerable: false })\n\n if (!parent) {\n this.addOption('-D, --debug', { description: 'Display debug information' }) //\n .addOptionHook('debug', ({ cmd, ...data }) => {\n console.debug(inspect(cmd, { depth: 1, colors: true }))\n console.debug(inspect(data, { depth: 3, colors: true }))\n })\n\n this.addOption('-h, --help', { description: 'Display help information' }) //\n .addOptionHook('help', ({ cmd }) => {\n console.log(cmd.renderHelp())\n process.exitCode = 0\n })\n }\n }\n\n @lazyProp\n protected get help(): Help {\n return new Help(this)\n }\n\n /** configure how the help is rendered */\n helpConfiguration(cb?: (help: Help) => void): this {\n const help = this.help\n cb?.(help)\n return this\n }\n\n /** renders formatted help text using provided help definition */\n renderHelp(config: { noColor?: boolean } = {}): string {\n const result = this.help.render()\n return config.noColor ? colors.stripColor(result) : result\n }\n\n /** sets the command name */\n setName(name: string): void {\n this.name = name\n }\n\n /** sets command aliases, flattening nested arrays */\n setAliases(...aliases: (string | string[])[]): this {\n this.aliases = []\n this.addAliases(...aliases)\n return this\n }\n\n /** adds aliases to existing ones */\n addAliases(...aliases: (string | string[])[]): this {\n const taken = this.parent\n ? valuesOf(this.parent.commands).flatMap((c) => {\n return [c.name, ...c.aliases]\n })\n : []\n arrRemoveDuplicates(aliases.flat())\n .filter((a) => {\n return !this.aliases.includes(a) && a !== this.name\n })\n .forEach((a) => {\n if (taken.includes(a)) {\n throw new Error(\n `Alias \"${a}\" is already used by a sibling command: ${findCommand(this.parent!, a)?.name}`,\n )\n }\n this.aliases.push(a)\n })\n this.aliases.sort((a, b) => {\n return a.length - b.length\n })\n return this\n }\n\n /** sets the command version */\n setVersion(version: string): InferAddOptionResult<A, O, { version?: boolean }, Subs> {\n this.version = version\n if (findOption(this, 'version')) {\n return this\n }\n return this.addOption('-V, --version', { description: 'Display semver version' }) //\n .addOptionHook('version', ({ cmd }) => {\n console.log(\n getCommandAndAncestors(cmd).find((c) => {\n return c.version\n })?.version,\n )\n process.exitCode = 0\n })\n }\n\n /** sets the command summary */\n setSummary(summary?: string): this {\n this.summary = summary\n return this\n }\n\n /** sets command description, joining variadic lines */\n setDescription(...lines: string[]): this {\n this.description = lines.join('\\n')\n return this\n }\n\n /** sets whether command is hidden from help */\n setHidden(hidden: boolean | undefined = true): this {\n this.hidden = hidden\n return this\n }\n\n /** sets the command group for help organization */\n setGroup(group?: string): this {\n this.group = group\n return this\n }\n\n /** add a subcommand and return the subcommand. All options are inherited by the subcommand. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n command<Name extends string, Sub extends Command<any, any, any> = Command<[], O, {}>>(\n name: Name,\n cb?: (cmd: Command<[], O, {}>, parent: this) => Sub,\n ): Sub {\n if (this.arguments.length) {\n throw new Error(\n `Cannot add subcommand \"${name}\" to \"${this.name}\" because it already has arguments defined.`,\n )\n }\n const sub = this.createSubcommand(name)\n const inherit = this.options\n sub.options.push(...inherit)\n\n const inheritHooks = this.hooks.filter((t) => {\n return inherit.some((i) => {\n return i.name === t.name\n })\n })\n sub.hooks.push(...inheritHooks)\n\n const taken = valuesOf(this.commands).flatMap((c) => {\n return [c.name, ...c.aliases]\n })\n if (taken.includes(name)) {\n throw new Error(\n `Command name \"${getCommandAndAncestors(sub).map((c) => {\n return c.name\n })}\" is already used by this command or its aliases: ${taken.join(', ')}`,\n )\n }\n const kebab = kebabCase(name)\n const words = kebab.split('-')\n const initials = words\n .map((s) => {\n return s[0]\n })\n .join('')\n if (!taken.includes(initials)) {\n sub.addAliases(initials)\n } else {\n const initials = words\n .map((s) => {\n return s[0] + s[1]\n })\n .join('')\n if (!taken.includes(initials)) {\n sub.addAliases(initials)\n }\n }\n\n // asd\n\n this.commands[name] = sub as never\n\n return (cb ? cb(sub, this) : sub) as never\n }\n\n /** add a subcommand and return the subcommand. All options are inherited by the subcommand. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n addCommand<Name extends string, Sub extends Command<any, any, any> = Command<[], O, {}>>(\n name: Name,\n cb: (cmd: Command<[], O, {}>, parent: this) => Sub,\n ): Command<A, O, (SubCommands extends Subs ? {} : Subs) & { [K in Name]: Sub }> {\n this.command(name, cb)\n return this as never\n }\n\n /** add required variadic argument, eg.: `<name...>` */\n addArgument<const Opts extends RequiredVariadicArgumentOptions>(\n usage: AllowedArgumentUsage<this, `<${string}...>`>,\n options?: Opts,\n ): Command<[...A, InferAddedArgumentType<Opts>[]], O, Subs>\n\n /** add required argument, eg.: `<name>` */\n addArgument<const Opts extends RequiredArgumentOptions>(\n usage: AllowedArgumentUsage<this, `<${string}>`>,\n options?: Opts,\n ): Command<[...A, InferAddedArgumentType<Opts>], O, Subs>\n\n /** add optional variadic argument with defaults, eg.: `[name...]` */\n addArgument<const Opts extends OptionalVariadicArgumentOptions>(\n usage: AllowedArgumentUsage<this, `[${string}...]`>,\n options?: Opts,\n ): Command<[...A, InferAddedArgumentType<Opts>[]], O, Subs>\n\n /** add optional argument with default, eg.: `[name]` */\n addArgument<const Opts extends OptionalArgumentOptionsWithDefaultValue>(\n usage: AllowedArgumentUsage<this, `[${string}]`>,\n options: Opts,\n ): Command<[...A, InferAddedArgumentType<Opts>], O, Subs>\n\n /** add optional argument, eg.: `[name]` */\n addArgument<const Opts extends OptionalArgumentOptions>(\n usage: AllowedArgumentUsage<this, `[${string}]`>,\n options?: Opts,\n ): Command<[...A, InferAddedArgumentType<Opts> | undefined], O, Subs>\n\n // implementation\n addArgument(usage: ArgumentUsage, options: ArgumentOptions = {}) {\n if (!/^<(.*?)>$|^\\[(.*?)\\]$/.test(usage)) {\n throw new Error(`Invalid argument format: ${usage}`)\n }\n\n const name = usage.slice(1, -1).replace(/\\.\\.\\.$/, '')\n const required = usage.startsWith('<')\n const variadic = usage.slice(0, -1).endsWith('...')\n\n const prevArg = this.arguments[this.arguments.length - 1]\n\n if (prevArg?.variadic) {\n throw new Error(`Cannot add argument ${usage} after variadic argument ${prevArg.usage}`)\n }\n\n if (required && prevArg && !prevArg?.required) {\n throw new Error(`Cannot add required argument ${usage} after optional argument ${prevArg?.usage}`)\n }\n\n if (required && prevArg?.defaultValue) {\n throw new Error(\n `Cannot add required argument ${usage} after optional argument with default value ${prevArg.usage}`,\n )\n }\n\n const arg: Argument = {\n usage,\n name,\n required,\n variadic,\n ...options,\n }\n\n if (variadic && !arg.defaultValue) {\n arg.defaultValue = [] as string[]\n }\n\n this.arguments.push(arg)\n return this as never\n }\n\n /** add optional string option, eg.: `-o, --output [path]` */\n addOption<Long extends string>(\n flags: `-${string}, --${Long} [${string}]`,\n options?: SetFieldType<OptionalOptionOptions, 'defaultValue', undefined | never>,\n ): Command<A, Simplify<{ [K in CamelCase<Long>]?: string } & O>, Subs>\n /** add optional string option with default, eg.: `-o, --output [path]` */\n addOption<Long extends string>(\n flags: `-${string}, --${Long} [${string}]`,\n options: SetFieldType<SetRequired<OptionalOptionOptions, 'defaultValue'>, 'defaultValue', string>,\n ): Command<A, Simplify<{ [K in CamelCase<Long>]: string } & O>, Subs>\n /** add required variadic option, eg.: `-i, --include <patterns...>` */\n addOption<Long extends string>(\n flags: `-${string}, --${Long} <${string}...>`,\n options?: RequiredVariadicOptionOptions,\n ): Command<A, Simplify<{ [K in CamelCase<Long>]: string[] } & O>, Subs>\n /** add optional variadic option with defaults, eg.: `-e, --exclude [patterns...]` */\n addOption<Long extends string>(\n flags: `-${string}, --${Long} [${string}...]`,\n options?: OptionalVariadicOptionOptions,\n ): Command<A, Simplify<{ [K in CamelCase<Long>]: string[] } & O>, Subs>\n /** add required string option, eg.: `-f, --file <path>` */\n addOption<Long extends string>(\n flags: `-${string}, --${Long} <${string}>`,\n options?: RequiredOptionOptions,\n ): Command<A, Simplify<{ [K in CamelCase<Long>]: string } & O>, Subs>\n /** add boolean flag option with default, eg.: `-v, --verbose` */\n addOption<Long extends string>(\n flags: `-${string}, --${Long}`,\n options: SetFieldType<SetRequired<BooleanOptionOptions, 'defaultValue'>, 'defaultValue', boolean>,\n ): Command<A, Simplify<{ [K in CamelCase<Long>]: boolean } & O>, Subs>\n /** add boolean flag option, eg.: `-v, --verbose` */\n addOption<Long extends string>(\n flags: `-${string}, --${Long}`,\n options?: SetFieldType<BooleanOptionOptions, 'defaultValue', undefined | never>,\n ): Command<A, Simplify<{ [K in CamelCase<Long>]?: boolean } & O>, Subs>\n\n /**\n * adds command-line option with type inference. Parses format: `-s, --long [<value>|[value]|<value...>|[value...]]`\n */\n addOption<Long extends string>(flags: OptionUsage<Long>, opts: Partial<OptionOptions> = {}) {\n const ins = {} as Option\n\n const { short, long, name, argName } = parseOptionFlags<Long>(flags)\n\n for (const opt of this.options) {\n if (opt.long === long) {\n throw new Error(`Option long name, --${long} already in use by: ${opt.flags}`)\n }\n if (opt.short === short) {\n throw new Error(`Option short name, -${short} already in use by: ${opt.flags}`)\n }\n }\n\n ins.flags = flags\n ins.short = short\n ins.long = long\n ins.name = name\n ins.description = ''\n if (!argName) {\n ins.type = 'boolean'\n } else {\n ins.type = 'string'\n ins.argName = argName\n if (flags.endsWith('>')) {\n if (flags.endsWith('...>')) {\n ins.required = true\n ins.variadic = true\n } else {\n ins.required = true\n }\n } else if (flags.endsWith(']')) {\n if (flags.endsWith('...]')) {\n ins.variadic = true\n ins.defaultValue = (opts.defaultValue ?? []) as string[]\n }\n }\n }\n\n // assign options\n for (const [key, value] of Object.entries(opts)) {\n if (value !== undefined) {\n Reflect.set(ins, key, value)\n }\n }\n\n // if defined, set environment variable as defaultValue\n if (ins.env && ins.defaultValue === undefined && typeof process.env[ins.env] === 'string') {\n ins.required = false\n ins.flags = ins.flags.replace('<', '[').replace('>', ']')\n if (ins.type === 'boolean') {\n ins.defaultValue = /^(t(rue)?|y(es)?|1)$/i.test(process.env[ins.env]!)\n } else if (ins.variadic) {\n ins.defaultValue = process.env[ins.env]!.replace(/\\]|\\[/, '')\n .split(',')\n .map((v) => {\n return v.trim()\n })\n } else {\n ins.defaultValue = process.env[ins.env]!\n }\n }\n\n this.options.push(ins)\n return this as never\n }\n\n /**\n * register an action to be invoked when an option is set to true or string value.\n *\n * Hooks execute in addition to or instead of the main action handler,\n * allowing for option-driven behavior. For example, `--help` and `--version`\n * are implemented as hooks.\n */\n addOptionHook(optionName: keyof O, action: HookActionHandler<Arguments, O>): this {\n const def = findOption(this, optionName as string)!\n if (!def.group && /process\\.exitCode ?= ?.+;?\\s*\\}$/.test(action.toString())) {\n def.group = 'Command Options'\n }\n this.hooks.push({\n name: optionName,\n predicate: setName(`has${strFirstCharToUpperCase(optionName as string)}`, (({ opts }) => {\n return (\n opts[optionName] !== undefined &&\n opts[optionName] !== false &&\n !(Array.isArray(opts[optionName]) && opts[optionName].length === 0)\n )\n }) as HookPredicate<Arguments, Options & O>),\n action: setName(optionName as string, action),\n } as never)\n return this\n }\n\n /** parses command-line arguments with subcommand support and type-safe validation. */\n parseArgv(argv: string[] = process.argv.slice(2)): ParseArgvResult<Arguments, Options & O> {\n const sub = findCommand(this, argv[0])\n if (sub) {\n return sub.parseArgv(argv.slice(1)) as unknown as ParseArgvResult<Arguments, Options & O>\n }\n\n argv = normalizeArgv(argv, this.options)\n\n const parsed = parseArgs({\n args: argv,\n options: Object.fromEntries(\n this.options.map((o) => {\n return [o.name, { type: o.type, short: o.short, default: o.defaultValue, multiple: !!o.variadic }]\n }),\n ),\n allowPositionals: true,\n tokens: true,\n strict: false,\n allowNegative: true,\n })\n\n collectVariadicOptionValues(parsed, this.options)\n mergeOptionDefaults(parsed.values as Record<string, unknown>, this.options)\n\n parsed.values = objSortKeys(parsed.values, (a, b) => {\n return a[1] === false ? 1 : b[1] === false ? -1 : a[1] === true ? 1 : b[1] === true ? -1 : 0\n })\n\n const args = resolveArguments(parsed.positionals, this.arguments)\n const opts = filterObject(parsed.values, (value) => {\n return value !== undefined\n })\n const errors = validateParsed(args, parsed.values, this.arguments, this.options)\n const path = getCommandAncestors(this).map((c) => {\n return c.name\n })\n\n const data = {\n path,\n name: this.name,\n argv,\n args: args as Arguments,\n opts: opts as Options & O,\n errors,\n cmd: this as Command<Arguments, Options & O>,\n }\n\n const hooks = this.hooks.filter((t) => {\n return t.predicate(data)\n })\n\n const execute = async () => {\n for (const hook of hooks) {\n await hook.action(data)\n if (process.exitCode !== undefined) {\n return\n }\n }\n await timer([[...path, this.name].join(' '), this.description], async (logger) => {\n if (errors) {\n errors.forEach((msg) => {\n return logger.error(colors.red(msg))\n })\n process.exitCode = 1\n return\n }\n if (this.action) {\n return await this.action(...(args as A), opts as O, {\n ...data,\n args: args as A,\n opts: opts as O,\n cmd: this,\n logger,\n })\n }\n console.log(this.renderHelp())\n })\n }\n\n return { ...data, hooks, execute } as unknown as ParseArgvResult<Arguments, Options & O>\n }\n\n /**\n * sets the main action handler for this command, which is executed after any matching option hooks when the command is invoked.\n * The handler receives parsed arguments and options with correct typings.\n */\n setAction(fn: ActionHandler<A, O, Subs>): this {\n this.action = setName(this.name, fn as never)\n return this\n }\n\n /** returns a new Command instance. Override this method in subclasses. */\n protected createSubcommand(name: string): Command<[], O, {}> {\n return new Command<[], O, {}>(name, this)\n }\n}\n", "import type { Command } from '../Command'\nimport type { ICommand } from '../types'\nimport { valuesOf } from '@mono/object'\n\n/**\n * Finds subcommand by name or alias\n */\nexport function findCommand<C extends Command = Command>(cmd: ICommand, nameOrAlias: string): C | undefined {\n return (cmd.commands[nameOrAlias] ??\n valuesOf(cmd.commands).find((c) => {\n return c.aliases.includes(nameOrAlias)\n })) as C | undefined\n}\n", "import type { ICommand } from '../types'\nimport type { Option } from '../types'\n\n/**\n * Finds option by name, short name or long name\n */\nexport function findOption<C extends ICommand>(cmd: C, nameOrShortOrLong: string): Option | undefined {\n return nameOrShortOrLong.startsWith('--')\n ? cmd.options.find((o) => {\n return o.long === nameOrShortOrLong.slice(2)\n })\n : nameOrShortOrLong.startsWith('-')\n ? cmd.options.find((o) => {\n return o.short === nameOrShortOrLong.slice(1)\n })\n : cmd.options.find((o) => {\n return o.name === nameOrShortOrLong\n })\n}\n", "import type { ICommand } from '../types'\n\n/**\n * Returns command and all ancestor commands in hierarchy\n */\nexport function getCommandAndAncestors<C extends ICommand>(cmd: C) {\n const result = []\n let command: ICommand | undefined = cmd as unknown as ICommand\n for (; command; command = command.parent) {\n result.push(command)\n }\n return result as [typeof cmd, ...ICommand[]]\n}\n", "import type { ICommand } from '../types'\nimport { getCommandAndAncestors } from './getCommandAndAncestors'\n\n/**\n * Returns all ancestor commands excluding this command\n */\nexport function getCommandAncestors<C extends ICommand>(cmd: C) {\n return getCommandAndAncestors(cmd).slice(1) as C[]\n}\n", "import type { Option } from '../types'\n\n/** Merge default option values into parsed values where not already set */\nexport function mergeOptionDefaults(values: Record<string, unknown>, options: Option[]): void {\n for (const option of options) {\n if (option.defaultValue !== undefined && option.name in values) {\n values[option.name] ??= option.defaultValue\n }\n }\n}\n", "import type { Option } from '../types'\n\n/** Map long option names (kebab-case) to their camelCased equivalents in argv */\nexport function normalizeArgv(argv: string[], options: Option[]): string[] {\n for (const o of options) {\n if (o.long === o.name) {\n continue\n }\n argv = argv.map((a) => {\n if (a === `--${o.long}`) {\n return `--${o.name}`\n }\n if (a === `--no-${o.long}`) {\n return `--no-${o.name}`\n }\n return a\n })\n }\n return argv\n}\n", "import type { CamelCase } from 'type-fest'\nimport type { OptionUsage } from '../types'\n\n/**\n * Parses option flags string into its components\n */\nexport function parseOptionFlags<Long extends string>(\n flags: OptionUsage<Long>,\n): {\n short: string\n long: Long\n name: CamelCase<Long>\n argName: string | undefined\n} {\n const match = flags.match(/^-(.+?), --([a-zA-Z][\\w-]*)(?:\\s*(<(.+?)>|\\[(.+?)\\]))?$/)\n if (!match) {\n throw new Error(`Invalid option format: ${flags}`)\n }\n\n const short = match[1]\n if (short.length !== 1) {\n throw new Error(`Expected short name to be a single character. Got: -${short}`)\n }\n\n const long = match[2] as Long\n const argName = (match[4] || match[5])?.replace(/\\.\\.\\.$/, '') || undefined\n const name = long.split('-').reduce((str, word) => {\n return str + word[0].toUpperCase() + word.slice(1)\n }) as CamelCase<Long>\n\n return { short, long, name, argName }\n}\n", "import type { Argument } from '../types'\nimport { arrLast } from '@mono/array'\n\n/** Map positional strings to argument definitions, trimming trailing undefineds */\nexport function resolveArguments(positionals: string[], args: Argument[]): unknown[] {\n const result = args.map((arg, index) => {\n if (arg.variadic) {\n const remaining = positionals.slice(index)\n return remaining.length > 0 ? remaining : arg.defaultValue\n }\n return positionals[index] ?? arg.defaultValue\n })\n while (result.length && arrLast(result) === undefined) {\n result.pop()\n }\n return result\n}\n", "/**\n * Set the name of a function.\n */\nexport function setName<T extends object>(name: string | { name: string }, target: T): T {\n return Object.defineProperty(target, 'name', {\n value: typeof name === 'string' ? name : name.name,\n configurable: true,\n enumerable: false,\n })\n}\n", "/**\n * Converts the first character of a string to uppercase.\n * @param string The string to be converted.\n * @example ```ts\n * strFirstCharToUpperCase('hello');\n * //=> 'Hello'\n * ```\n */\nexport function strFirstCharToUpperCase(string: string): string {\n return string.charAt(0).toUpperCase() + string.substring(1)\n}\n", "import colors from 'ansi-colors'\nimport { isPrimitive } from 'es-toolkit/predicate'\nimport { isString } from 'es-toolkit/predicate'\n\n/**\n * Logger interface defining methods for different log levels.\n */\nexport interface Logger {\n start: (...args: unknown[]) => void\n done: (...args: unknown[]) => void\n info: (...args: unknown[]) => void\n log: (...args: unknown[]) => void\n warn: (...args: unknown[]) => void\n error: (...args: unknown[]) => void\n debug: (...args: unknown[]) => void\n}\n\n/**\n * Creates a logger instance with colored output and consistent formatting.\n */\nexport function createLogger(name: string): Logger {\n const NAME = name ? colors.dim.cyan(name) : name\n\n const START = [NAME, colors.dim.gray('[START]')].filter(Boolean)\n const DEBUG = [NAME, colors.dim.magenta('[DEBUG]')].filter(Boolean)\n const INFO = [NAME, colors.dim.gray('[INFO]')].filter(Boolean)\n const DONE = [NAME, colors.dim.green('[DONE] ')].filter(Boolean)\n const WARN = [NAME, colors.dim.yellow('[WARN] ')].filter(Boolean)\n const ERROR = [NAME, colors.dim.red('[ERROR]')].filter(Boolean)\n\n const grayArgs = createColoredArgs(colors.gray)\n const cyanArgs = createColoredArgs(colors.cyan)\n const yellowArgs = createColoredArgs(colors.yellow)\n\n return {\n start: (...args: unknown[]) => {\n return console.info(...START, ...args)\n },\n done: (...args: unknown[]) => {\n return console.info(...DONE, ...args)\n },\n info: (...args: unknown[]) => {\n return console.info(...INFO, ...grayArgs(args))\n },\n log: (...args: unknown[]) => {\n return console.log(...(NAME ? [NAME, ...args] : args))\n },\n warn: (...args: unknown[]) => {\n return console.warn(...WARN, ...yellowArgs(args))\n },\n debug: (...args: unknown[]) => {\n return console.debug(...DEBUG, ...cyanArgs(args))\n },\n error: (...args: unknown[]) => {\n return args.forEach((arg) => {\n return console.error(...ERROR, arg)\n })\n },\n }\n}\n\n/**\n * Creates a function that applies the given color function to string and primitive arguments.\n * Non-string and non-primitive arguments are returned unchanged.\n */\nfunction createColoredArgs(colorFn: (str: string) => string) {\n return (args: unknown[]) => {\n return args.map((arg) => {\n if (isString(arg)) {\n if (arg === colors.stripColor(arg)) {\n return colorFn(arg)\n } else {\n return arg\n }\n } else if (isPrimitive(arg)) {\n return colorFn(String(arg))\n } else {\n return arg\n }\n })\n }\n}\n", "import type { Logger } from './createLogger'\nimport colors from 'ansi-colors'\nimport { createLogger } from './createLogger'\nimport humanizeDuration from 'humanize-duration'\nimport { isPromise } from 'node:util/types'\n\n/**\n * Executes a task and logs the execution time.\n */\nexport function timer<T>(\n arg: string | [name: string, description: string],\n task: (log: Logger, name: string) => T,\n): T {\n const t0 = process.hrtime.bigint()\n const [name, description] = Array.isArray(arg) ? arg : [arg, '']\n const log = createLogger(name)\n\n if (name && description) {\n log.start(description)\n }\n\n const retval = task(log, name)\n\n if (!isPromise(retval)) {\n return done(retval)\n }\n\n return (retval as Promise<Awaited<T>>).then((result) => {\n return done(result)\n }) as T\n\n function done(retval: T) {\n if (process.exitCode) {\n return retval\n }\n const ns = process.hrtime.bigint() - t0\n const ms = Math.floor(Number(ns) / 1000000)\n log.done(colors.dim(humanizeDuration(ms)))\n return retval\n }\n}\n", "import type { Argument } from '../types'\nimport type { Option } from '../types'\nimport { entriesOf } from '@mono/object'\n\n/** Validate parsed arguments and option values, returning errors or undefined */\nexport function validateParsed(\n args: unknown[],\n optionValues: Record<string, unknown>,\n argDefs: Argument[],\n optionDefs: Option[],\n): string[] | undefined {\n return argDefs\n .map((def, index) => {\n const value = args[index]\n if (def.required) {\n if (def.variadic ? Array.isArray(value) && value.length === 0 : value === undefined) {\n return `Missing argument [${index}] ${def.usage}`\n }\n }\n if (def.choices && value !== undefined) {\n if (\n ![value].flat().every((v) => {\n return def.choices!.includes(v as string)\n })\n ) {\n return `Invalid argument [${index}] ${def.usage}: Got \\`${value}\\`. Accepted values: [${def.choices\n .map((c) => {\n return `\\`${c}\\``\n })\n .join(',')}]`\n }\n }\n })\n .concat(\n entriesOf(optionValues).map(([key, value]) => {\n const def = optionDefs.find((o) => {\n return o.name === key\n })!\n if (!def) {\n return `Unknown option --${key}`\n }\n if (def.choices && value !== undefined) {\n if (\n !((def.variadic ? value : [value]) as string[]).every((v) => {\n return def.choices!.includes(v)\n })\n ) {\n return `Invalid option value ${def.flags}: Got \\`${value}\\`. Accepted values: [${def.choices\n .map((c) => {\n return `\\`${c}\\``\n })\n .join(',')}]`\n }\n }\n }),\n )\n .filter((s) => {\n return s !== undefined\n })\n .reduce(\n (acc, curr) => {\n return (acc ?? []).concat(curr)\n },\n undefined as string[] | undefined,\n )\n}\n"],
5
- "mappings": "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",
6
- "names": ["ms", "ms", "colors", "colors", "retval", "ms", "colors", "colors", "initials"]
7
- }