@duplojs/server 0.1.0-beta.2 → 0.1.0-beta.4

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 (198) hide show
  1. package/dist/_virtual/_rolldown/runtime.mjs +5 -1
  2. package/dist/command/argument.d.ts +2 -2
  3. package/dist/command/create.cjs +18 -10
  4. package/dist/command/create.d.ts +3 -3
  5. package/dist/command/create.mjs +18 -10
  6. package/dist/command/error.cjs +26 -2
  7. package/dist/command/error.d.ts +9 -1
  8. package/dist/command/error.mjs +25 -1
  9. package/dist/command/exec.d.ts +4 -3
  10. package/dist/command/help.cjs +11 -9
  11. package/dist/command/help.d.ts +1 -1
  12. package/dist/command/help.mjs +10 -8
  13. package/dist/command/index.cjs +4 -0
  14. package/dist/command/index.mjs +4 -2
  15. package/dist/command/options/base.cjs +21 -13
  16. package/dist/command/options/base.d.ts +6 -0
  17. package/dist/command/options/base.mjs +20 -14
  18. package/dist/command/options/defaults/array.d.ts +6 -4
  19. package/dist/command/options/defaults/boolean.cjs +21 -7
  20. package/dist/command/options/defaults/boolean.d.ts +6 -3
  21. package/dist/command/options/defaults/boolean.mjs +20 -8
  22. package/dist/command/options/defaults/simple.d.ts +6 -4
  23. package/dist/command/types/forbiddenInvalidIdentifier.d.ts +6 -0
  24. package/dist/command/types/index.d.ts +1 -0
  25. package/dist/common/environmentVariable/index.d.ts +1 -1
  26. package/dist/common/environmentVariable/overrideEnvironmentVariables.d.ts +1 -1
  27. package/dist/common/environmentVariable/parseEnvironmentFiles.d.ts +2 -1
  28. package/dist/common/index.cjs +3 -0
  29. package/dist/common/index.d.ts +1 -0
  30. package/dist/common/index.mjs +3 -1
  31. package/dist/common/meta/getCurrentDirectoryName.cjs +10 -0
  32. package/dist/common/meta/getCurrentDirectoryName.d.ts +7 -0
  33. package/dist/common/meta/getCurrentDirectoryName.mjs +7 -0
  34. package/dist/common/meta/index.d.ts +7 -0
  35. package/dist/dataStructure/common/codec/defaults/json.cjs +12 -1
  36. package/dist/dataStructure/common/codec/defaults/json.d.ts +2 -2
  37. package/dist/dataStructure/common/codec/defaults/json.mjs +12 -1
  38. package/dist/dataStructure/common/codec/defaults/string.cjs +12 -1
  39. package/dist/dataStructure/common/codec/defaults/string.d.ts +2 -2
  40. package/dist/dataStructure/common/codec/defaults/string.mjs +12 -1
  41. package/dist/dataStructure/common/error/defaultInterpreter.cjs +3 -1
  42. package/dist/dataStructure/common/error/defaultInterpreter.d.ts +7 -2
  43. package/dist/dataStructure/common/error/defaultInterpreter.mjs +3 -1
  44. package/dist/dataStructure/constraint/{exist.cjs → fileExist.cjs} +5 -5
  45. package/dist/dataStructure/constraint/fileExist.d.ts +10 -0
  46. package/dist/dataStructure/constraint/{exist.mjs → fileExist.mjs} +4 -4
  47. package/dist/dataStructure/constraint/folderExist.cjs +19 -0
  48. package/dist/dataStructure/constraint/folderExist.d.ts +10 -0
  49. package/dist/dataStructure/constraint/folderExist.mjs +15 -0
  50. package/dist/dataStructure/constraint/index.d.ts +2 -1
  51. package/dist/dataStructure/constraint/mimeType.cjs +1 -1
  52. package/dist/dataStructure/constraint/mimeType.mjs +1 -1
  53. package/dist/dataStructure/constraint/types/constraints.d.ts +4 -2
  54. package/dist/dataStructure/fundamentalType/folder.cjs +11 -0
  55. package/dist/dataStructure/fundamentalType/folder.d.ts +8 -0
  56. package/dist/dataStructure/fundamentalType/folder.mjs +8 -0
  57. package/dist/dataStructure/fundamentalType/index.d.ts +1 -0
  58. package/dist/dataStructure/fundamentalType/types/fundamentalTypes.d.ts +2 -0
  59. package/dist/dataStructure/helper/file.d.ts +1 -1
  60. package/dist/dataStructure/helper/fileExist.cjs +7 -0
  61. package/dist/dataStructure/helper/fileExist.d.ts +2 -0
  62. package/dist/dataStructure/helper/fileExist.mjs +7 -0
  63. package/dist/dataStructure/helper/folder.cjs +10 -0
  64. package/dist/dataStructure/helper/folder.d.ts +3 -0
  65. package/dist/dataStructure/helper/folder.mjs +8 -0
  66. package/dist/dataStructure/helper/folderExist.cjs +7 -0
  67. package/dist/dataStructure/helper/folderExist.d.ts +2 -0
  68. package/dist/dataStructure/helper/folderExist.mjs +7 -0
  69. package/dist/dataStructure/helper/index.d.ts +3 -1
  70. package/dist/dataStructure/index.cjs +29 -8
  71. package/dist/dataStructure/index.mjs +19 -6
  72. package/dist/dataStructure/type/folder.cjs +14 -0
  73. package/dist/dataStructure/type/folder.d.ts +11 -0
  74. package/dist/dataStructure/type/folder.mjs +11 -0
  75. package/dist/dataStructure/type/index.d.ts +1 -0
  76. package/dist/dataStructure/type/types/types.d.ts +2 -0
  77. package/dist/file/appendFile.cjs +46 -22
  78. package/dist/file/appendFile.d.ts +37 -5
  79. package/dist/file/appendFile.mjs +36 -23
  80. package/dist/file/appendTextFile.cjs +44 -20
  81. package/dist/file/appendTextFile.d.ts +37 -5
  82. package/dist/file/appendTextFile.mjs +34 -21
  83. package/dist/file/copy.cjs +36 -14
  84. package/dist/file/copy.d.ts +37 -5
  85. package/dist/file/copy.mjs +26 -15
  86. package/dist/file/createEntryInterface.cjs +6 -3
  87. package/dist/file/createEntryInterface.d.ts +1 -1
  88. package/dist/file/createEntryInterface.mjs +4 -2
  89. package/dist/file/ensureDirectory.cjs +37 -17
  90. package/dist/file/ensureDirectory.d.ts +30 -4
  91. package/dist/file/ensureDirectory.mjs +29 -18
  92. package/dist/file/ensureFile.cjs +41 -19
  93. package/dist/file/ensureFile.d.ts +33 -4
  94. package/dist/file/ensureFile.mjs +32 -20
  95. package/dist/file/exists.cjs +28 -14
  96. package/dist/file/exists.d.ts +21 -4
  97. package/dist/file/exists.mjs +23 -15
  98. package/dist/file/fileInterface.cjs +3 -1
  99. package/dist/file/fileInterface.d.ts +10 -9
  100. package/dist/file/fileInterface.mjs +3 -2
  101. package/dist/file/folderInterface.cjs +3 -1
  102. package/dist/file/folderInterface.d.ts +9 -8
  103. package/dist/file/folderInterface.mjs +3 -2
  104. package/dist/file/index.cjs +512 -0
  105. package/dist/file/index.d.ts +0 -1
  106. package/dist/file/index.mjs +291 -35
  107. package/dist/file/link.cjs +48 -22
  108. package/dist/file/link.d.ts +40 -5
  109. package/dist/file/link.mjs +37 -23
  110. package/dist/file/linkStat.cjs +29 -15
  111. package/dist/file/linkStat.d.ts +24 -4
  112. package/dist/file/linkStat.mjs +24 -16
  113. package/dist/file/makeDirectory.cjs +45 -21
  114. package/dist/file/makeDirectory.d.ts +35 -4
  115. package/dist/file/makeDirectory.mjs +35 -22
  116. package/dist/file/makeTemporaryDirectory.cjs +33 -15
  117. package/dist/file/makeTemporaryDirectory.d.ts +25 -2
  118. package/dist/file/makeTemporaryDirectory.mjs +26 -16
  119. package/dist/file/makeTemporaryFile.cjs +37 -20
  120. package/dist/file/makeTemporaryFile.d.ts +28 -2
  121. package/dist/file/makeTemporaryFile.mjs +30 -21
  122. package/dist/file/move.cjs +49 -23
  123. package/dist/file/move.d.ts +40 -5
  124. package/dist/file/move.mjs +38 -24
  125. package/dist/file/readDirectory.cjs +33 -9
  126. package/dist/file/readDirectory.d.ts +26 -5
  127. package/dist/file/readDirectory.mjs +25 -10
  128. package/dist/file/readFile.cjs +35 -17
  129. package/dist/file/readFile.d.ts +27 -4
  130. package/dist/file/readFile.mjs +28 -18
  131. package/dist/file/readJsonFile.cjs +35 -17
  132. package/dist/file/readJsonFile.d.ts +27 -5
  133. package/dist/file/readJsonFile.mjs +28 -18
  134. package/dist/file/readLink.cjs +31 -15
  135. package/dist/file/readLink.d.ts +24 -4
  136. package/dist/file/readLink.mjs +25 -16
  137. package/dist/file/readTextFile.cjs +35 -17
  138. package/dist/file/readTextFile.d.ts +27 -4
  139. package/dist/file/readTextFile.mjs +28 -18
  140. package/dist/file/realPath.cjs +27 -13
  141. package/dist/file/realPath.d.ts +21 -4
  142. package/dist/file/realPath.mjs +22 -14
  143. package/dist/file/relocate.cjs +52 -25
  144. package/dist/file/relocate.d.ts +40 -5
  145. package/dist/file/relocate.mjs +41 -26
  146. package/dist/file/remove.cjs +45 -23
  147. package/dist/file/remove.d.ts +32 -4
  148. package/dist/file/remove.mjs +36 -24
  149. package/dist/file/rename.cjs +52 -25
  150. package/dist/file/rename.d.ts +40 -5
  151. package/dist/file/rename.mjs +41 -26
  152. package/dist/file/setMode.cjs +29 -15
  153. package/dist/file/setMode.d.ts +24 -5
  154. package/dist/file/setMode.mjs +24 -16
  155. package/dist/file/setOwner.cjs +31 -15
  156. package/dist/file/setOwner.d.ts +25 -5
  157. package/dist/file/setOwner.mjs +25 -16
  158. package/dist/file/setTime.cjs +31 -15
  159. package/dist/file/setTime.d.ts +24 -5
  160. package/dist/file/setTime.mjs +25 -16
  161. package/dist/file/stat.cjs +29 -15
  162. package/dist/file/stat.d.ts +24 -4
  163. package/dist/file/stat.mjs +24 -16
  164. package/dist/file/symlink.cjs +42 -20
  165. package/dist/file/symlink.d.ts +34 -5
  166. package/dist/file/symlink.mjs +33 -21
  167. package/dist/file/truncate.cjs +43 -21
  168. package/dist/file/truncate.d.ts +36 -4
  169. package/dist/file/truncate.mjs +34 -22
  170. package/dist/file/unknownEntryInterface.cjs +5 -1
  171. package/dist/file/unknownEntryInterface.d.ts +8 -6
  172. package/dist/file/unknownEntryInterface.mjs +4 -2
  173. package/dist/file/walkDirectory.cjs +38 -15
  174. package/dist/file/walkDirectory.d.ts +25 -4
  175. package/dist/file/walkDirectory.mjs +32 -15
  176. package/dist/file/writeFile.cjs +45 -21
  177. package/dist/file/writeFile.d.ts +37 -5
  178. package/dist/file/writeFile.mjs +35 -22
  179. package/dist/file/writeJsonFile.cjs +48 -27
  180. package/dist/file/writeJsonFile.d.ts +37 -6
  181. package/dist/file/writeJsonFile.mjs +39 -28
  182. package/dist/file/writeTextFile.cjs +45 -21
  183. package/dist/file/writeTextFile.d.ts +37 -5
  184. package/dist/file/writeTextFile.mjs +35 -22
  185. package/dist/implementor.cjs +8 -5
  186. package/dist/implementor.d.ts +4 -4
  187. package/dist/implementor.mjs +8 -5
  188. package/dist/index.cjs +2 -0
  189. package/dist/index.mjs +2 -1
  190. package/dist/override.d.ts +8 -0
  191. package/package.json +4 -4
  192. package/dist/dataStructure/constraint/exist.d.ts +0 -10
  193. package/dist/dataStructure/helper/exist.cjs +0 -7
  194. package/dist/dataStructure/helper/exist.d.ts +0 -2
  195. package/dist/dataStructure/helper/exist.mjs +0 -7
  196. package/dist/file/types/fileSystemEither.d.ts +0 -2
  197. package/dist/file/types/index.d.ts +0 -1
  198. /package/{README → README.md} +0 -0
@@ -9,5 +9,9 @@ var __exportAll = (all, no_symbols) => {
9
9
  if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" });
10
10
  return target;
11
11
  };
12
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, { get: (a, b) => (typeof require !== "undefined" ? require : a)[b] }) : x)(function(x) {
13
+ if (typeof require !== "undefined") return require.apply(this, arguments);
14
+ throw Error("Calling `require` for \"" + x + "\" in an environment that doesn't expose the `require` function. See https://rolldown.rs/in-depth/bundling-cjs#require-external-modules for more details.");
15
+ });
12
16
  //#endregion
13
- export { __exportAll };
17
+ export { __exportAll, __require };
@@ -1,5 +1,5 @@
1
1
  import { Error, SymbolCommandError } from './error';
2
- import { EligibleType } from './types';
2
+ import { EligibleType, ForbiddenInvalidIdentifier } from './types';
3
3
  import type * as DCommon from "@duplojs/lang/common";
4
4
  import type * as DKind from "@duplojs/lang/kind";
5
5
  import type * as DDataStructure from "@duplojs/lang/dataStructure";
@@ -15,4 +15,4 @@ export interface CreateArgumentParams {
15
15
  readonly description?: string;
16
16
  readonly optional?: boolean;
17
17
  }
18
- export declare function createArgument<GenericName extends string, GenericStructure extends DDataStructure.Structure<EligibleType>, GenericValue extends DDataStructure.StructureValue<GenericStructure>, const GenericParams extends CreateArgumentParams = {}>(name: GenericName, dataStructure: GenericStructure, params?: GenericParams): Argument<GenericName, (GenericValue | (DCommon.IsEqual<GenericParams["optional"], true> extends true ? undefined : never))>;
18
+ export declare function createArgument<GenericName extends string, GenericStructure extends DDataStructure.Structure<EligibleType>, GenericValue extends DDataStructure.StructureValue<GenericStructure>, const GenericParams extends CreateArgumentParams = {}>(name: GenericName & ForbiddenInvalidIdentifier<GenericName>, dataStructure: GenericStructure, params?: GenericParams): Argument<GenericName, (GenericValue | (DCommon.IsEqual<GenericParams["optional"], true> extends true ? undefined : never))>;
@@ -1,6 +1,7 @@
1
1
  const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
2
2
  const require_kind = require("./kind.cjs");
3
3
  const require_error = require("./error.cjs");
4
+ const require_base = require("./options/base.cjs");
4
5
  const require_help = require("./help.cjs");
5
6
  let _duplojs_lang_common = require("@duplojs/lang/common");
6
7
  _duplojs_lang_common = require_runtime.__toESM(_duplojs_lang_common, 1);
@@ -51,19 +52,23 @@ function create(...args) {
51
52
  }
52
53
  const commandOptions = await _duplojs_lang_generator.asyncReduce(self.options, _duplojs_lang_generator.reduceFrom({
53
54
  options: {},
54
- restArgs: args
55
- }), async ({ item: option, lastValue, next, exit }) => {
55
+ restArgs: args,
56
+ hasError: false
57
+ }), async ({ item: option, lastValue, next }) => {
56
58
  const optionResult = await option.execute(lastValue.restArgs, error);
57
- if (optionResult === require_error.SymbolCommandError) return exit(require_error.SymbolCommandError);
59
+ if (optionResult === require_error.SymbolCommandError) return next(_duplojs_lang_object.override(lastValue, { hasError: true }));
58
60
  return next({
59
61
  options: _duplojs_lang_object.override(lastValue.options, { [option.name]: optionResult.result }),
60
- restArgs: optionResult.argumentRest
62
+ restArgs: optionResult.argumentRest,
63
+ hasError: lastValue.hasError
61
64
  });
62
65
  });
63
- if (commandOptions === require_error.SymbolCommandError) return require_error.SymbolCommandError;
66
+ if (commandOptions.hasError === true) return require_error.SymbolCommandError;
67
+ const unknownOptions = _duplojs_lang_array.filter(commandOptions.restArgs, require_base.isOptionToken);
68
+ if (unknownOptions.length > 0) return error.addUnknownOptionIssue(unknownOptions);
64
69
  if (self.subject?.type === "argument") {
65
- if (self.subject.args.length !== commandOptions.restArgs.length) return error.addTooMuchCommandArgumentIssue(self.subject.args.length, commandOptions.restArgs.length);
66
- const commandArguments = await _duplojs_lang_generator.asyncReduce(self.subject.args, _duplojs_lang_generator.reduceFrom({
70
+ if (self.subject.args.length < commandOptions.restArgs.length) return error.addTooMuchCommandArgumentIssue(self.subject.args.length, commandOptions.restArgs.length);
71
+ const commandArgs = await _duplojs_lang_generator.asyncReduce(self.subject.args, _duplojs_lang_generator.reduceFrom({
67
72
  args: {},
68
73
  restArgs: commandOptions.restArgs
69
74
  }), async ({ item: argument, lastValue, next, exit }) => {
@@ -75,13 +80,16 @@ function create(...args) {
75
80
  restArgs: _duplojs_lang_array.shift(lastValue.restArgs)
76
81
  });
77
82
  });
78
- if (commandArguments === require_error.SymbolCommandError) return require_error.SymbolCommandError;
83
+ if (commandArgs === require_error.SymbolCommandError) return require_error.SymbolCommandError;
79
84
  await execute({
80
85
  options: commandOptions.options,
81
- args: commandArguments.args
86
+ args: commandArgs.args
82
87
  });
83
88
  } else {
84
- if (commandOptions.restArgs.length > 0) return error.addTooMuchCommandArgumentIssue(0, commandOptions.restArgs.length);
89
+ if (commandOptions.restArgs.length > 0) {
90
+ if (self.subject?.type === "subCommand") return error.addUnknownSubCommandIssue(commandOptions.restArgs[0]);
91
+ return error.addTooMuchCommandArgumentIssue(0, commandOptions.restArgs.length);
92
+ }
85
93
  await execute({ options: commandOptions.options });
86
94
  }
87
95
  },
@@ -1,7 +1,7 @@
1
1
  import { Option } from './options';
2
2
  import { SymbolCommandError, Error } from './error';
3
3
  import { Argument } from './argument';
4
- import { ForbiddenDuplicateName } from './types';
4
+ import { ForbiddenDuplicateName, ForbiddenInvalidIdentifier } from './types';
5
5
  import * as DCommon from "@duplojs/lang/common";
6
6
  import type * as DKind from "@duplojs/lang/kind";
7
7
  declare const commandKind: DKind.Handler<DKind.Definition<"@DuplojsServerCommand/command", unknown>>;
@@ -42,6 +42,6 @@ export type CreateCommandExecuteParams<GenericOptions extends DCommon.AnyTuple<O
42
42
  readonly [GenericArgument in GenericArguments[number] as GenericArgument["name"]]: Exclude<Awaited<ReturnType<GenericArgument["execute"]>>, SymbolCommandError>;
43
43
  };
44
44
  }));
45
- export declare function create<GenericName extends string>(name: GenericName, execute: () => void): Command<GenericName>;
46
- export declare function create<GenericName extends string, const GenericOptions extends DCommon.AnyTuple<Option> = never, GenericSubjects extends Subjects = never>(name: GenericName, params: CreateCommandParams<GenericOptions, GenericSubjects>, execute: (params: CreateCommandExecuteParams<GenericOptions, Extract<GenericSubjects, DCommon.AnyTuple<Argument>>>) => DCommon.MaybePromise<void>): Command<GenericName>;
45
+ export declare function create<GenericName extends string>(name: GenericName & ForbiddenInvalidIdentifier<GenericName>, execute: () => void): Command<GenericName>;
46
+ export declare function create<GenericName extends string, const GenericOptions extends DCommon.AnyTuple<Option> = never, GenericSubjects extends Subjects = never>(name: GenericName & ForbiddenInvalidIdentifier<GenericName>, params: CreateCommandParams<GenericOptions, GenericSubjects>, execute: (params: CreateCommandExecuteParams<GenericOptions, Extract<GenericSubjects, DCommon.AnyTuple<Argument>>>) => DCommon.MaybePromise<void>): Command<GenericName>;
47
47
  export {};
@@ -1,5 +1,6 @@
1
1
  import { createKind } from "./kind.mjs";
2
2
  import { SymbolCommandError } from "./error.mjs";
3
+ import { isOptionToken } from "./options/base.mjs";
3
4
  import { helpOption, logCommandHelp } from "./help.mjs";
4
5
  import * as DCommon from "@duplojs/lang/common";
5
6
  import * as DObject from "@duplojs/lang/object";
@@ -46,19 +47,23 @@ function create(...args) {
46
47
  }
47
48
  const commandOptions = await DGenerator.asyncReduce(self.options, DGenerator.reduceFrom({
48
49
  options: {},
49
- restArgs: args
50
- }), async ({ item: option, lastValue, next, exit }) => {
50
+ restArgs: args,
51
+ hasError: false
52
+ }), async ({ item: option, lastValue, next }) => {
51
53
  const optionResult = await option.execute(lastValue.restArgs, error);
52
- if (optionResult === SymbolCommandError) return exit(SymbolCommandError);
54
+ if (optionResult === SymbolCommandError) return next(DObject.override(lastValue, { hasError: true }));
53
55
  return next({
54
56
  options: DObject.override(lastValue.options, { [option.name]: optionResult.result }),
55
- restArgs: optionResult.argumentRest
57
+ restArgs: optionResult.argumentRest,
58
+ hasError: lastValue.hasError
56
59
  });
57
60
  });
58
- if (commandOptions === SymbolCommandError) return SymbolCommandError;
61
+ if (commandOptions.hasError === true) return SymbolCommandError;
62
+ const unknownOptions = DArray.filter(commandOptions.restArgs, isOptionToken);
63
+ if (unknownOptions.length > 0) return error.addUnknownOptionIssue(unknownOptions);
59
64
  if (self.subject?.type === "argument") {
60
- if (self.subject.args.length !== commandOptions.restArgs.length) return error.addTooMuchCommandArgumentIssue(self.subject.args.length, commandOptions.restArgs.length);
61
- const commandArguments = await DGenerator.asyncReduce(self.subject.args, DGenerator.reduceFrom({
65
+ if (self.subject.args.length < commandOptions.restArgs.length) return error.addTooMuchCommandArgumentIssue(self.subject.args.length, commandOptions.restArgs.length);
66
+ const commandArgs = await DGenerator.asyncReduce(self.subject.args, DGenerator.reduceFrom({
62
67
  args: {},
63
68
  restArgs: commandOptions.restArgs
64
69
  }), async ({ item: argument, lastValue, next, exit }) => {
@@ -70,13 +75,16 @@ function create(...args) {
70
75
  restArgs: DArray.shift(lastValue.restArgs)
71
76
  });
72
77
  });
73
- if (commandArguments === SymbolCommandError) return SymbolCommandError;
78
+ if (commandArgs === SymbolCommandError) return SymbolCommandError;
74
79
  await execute({
75
80
  options: commandOptions.options,
76
- args: commandArguments.args
81
+ args: commandArgs.args
77
82
  });
78
83
  } else {
79
- if (commandOptions.restArgs.length > 0) return error.addTooMuchCommandArgumentIssue(0, commandOptions.restArgs.length);
84
+ if (commandOptions.restArgs.length > 0) {
85
+ if (self.subject?.type === "subCommand") return error.addUnknownSubCommandIssue(commandOptions.restArgs[0]);
86
+ return error.addTooMuchCommandArgumentIssue(0, commandOptions.restArgs.length);
87
+ }
80
88
  await execute({ options: commandOptions.options });
81
89
  }
82
90
  },
@@ -2,12 +2,12 @@ const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
2
2
  const require_defaultInterpreter = require("../dataStructure/common/error/defaultInterpreter.cjs");
3
3
  let _duplojs_lang_common = require("@duplojs/lang/common");
4
4
  _duplojs_lang_common = require_runtime.__toESM(_duplojs_lang_common, 1);
5
+ let _duplojs_lang_pattern = require("@duplojs/lang/pattern");
6
+ _duplojs_lang_pattern = require_runtime.__toESM(_duplojs_lang_pattern, 1);
5
7
  let _duplojs_lang_dataStructure = require("@duplojs/lang/dataStructure");
6
8
  _duplojs_lang_dataStructure = require_runtime.__toESM(_duplojs_lang_dataStructure, 1);
7
9
  let _duplojs_lang_array = require("@duplojs/lang/array");
8
10
  _duplojs_lang_array = require_runtime.__toESM(_duplojs_lang_array, 1);
9
- let _duplojs_lang_pattern = require("@duplojs/lang/pattern");
10
- _duplojs_lang_pattern = require_runtime.__toESM(_duplojs_lang_pattern, 1);
11
11
  let _duplojs_lang_string = require("@duplojs/lang/string");
12
12
  _duplojs_lang_string = require_runtime.__toESM(_duplojs_lang_string, 1);
13
13
  let _duplojs_lang_printer = require("@duplojs/lang/printer");
@@ -23,6 +23,20 @@ function createError(commandName) {
23
23
  issues,
24
24
  currentPath,
25
25
  pushPath: (path) => void currentPath.push(path),
26
+ addUnknownOptionIssue: (optionTokens) => {
27
+ issues.push(_duplojs_lang_modeling.taggedObject("UnknownOptionIssue", {
28
+ optionTokens,
29
+ path: _duplojs_lang_string.join(currentPath, ".")
30
+ }));
31
+ return SymbolCommandError;
32
+ },
33
+ addUnknownSubCommandIssue: (subCommandName) => {
34
+ issues.push(_duplojs_lang_modeling.taggedObject("UnknownSubCommandIssue", {
35
+ subCommandName,
36
+ path: _duplojs_lang_string.join(currentPath, ".")
37
+ }));
38
+ return SymbolCommandError;
39
+ },
26
40
  addRequiredOptionIssue: (optionName) => {
27
41
  issues.push(_duplojs_lang_modeling.taggedObject("RequiredOptionIssue", {
28
42
  optionName,
@@ -94,6 +108,16 @@ function interpretDataStructureError(error, dataStructureErrorInterpreter) {
94
108
  }
95
109
  function interpretErrorIssues(issues, dataStructureErrorInterpreter) {
96
110
  return _duplojs_lang_printer.renderParagraph([_duplojs_lang_array.map(issues, _duplojs_lang_pattern.matchWithTaggedObject({
111
+ UnknownOptionIssue: ({ optionTokens }) => [_duplojs_lang_printer.render([
112
+ _duplojs_lang_printer.indent(1),
113
+ _duplojs_lang_printer.colorizedBold("OPTION: ", "blue"),
114
+ _duplojs_lang_string.join(optionTokens, ", ")
115
+ ], ""), `${_duplojs_lang_printer.indent(1)}↳ Unknown Option`],
116
+ UnknownSubCommandIssue: ({ subCommandName }) => [_duplojs_lang_printer.render([
117
+ _duplojs_lang_printer.indent(1),
118
+ _duplojs_lang_printer.colorizedBold("SUB-COMMAND: ", "cyan"),
119
+ subCommandName
120
+ ], ""), `${_duplojs_lang_printer.indent(1)}↳ Unknown Sub-command`],
97
121
  DataStructureArgumentIssue: ({ argumentName, dataStructureError }) => [_duplojs_lang_printer.render([
98
122
  _duplojs_lang_printer.indent(1),
99
123
  _duplojs_lang_printer.colorizedBold("ARGUMENT: ", "magenta"),
@@ -27,17 +27,25 @@ export interface DataStructureArgumentIssue extends ArgumentIssueBase, DModeling
27
27
  export interface CommandArgumentIssueBase {
28
28
  readonly path: string;
29
29
  }
30
+ export interface UnknownOptionIssue extends CommandArgumentIssueBase, DModeling.ObjectTag<"UnknownOptionIssue"> {
31
+ readonly optionTokens: readonly string[];
32
+ }
33
+ export interface UnknownSubCommandIssue extends CommandArgumentIssueBase, DModeling.ObjectTag<"UnknownSubCommandIssue"> {
34
+ readonly subCommandName: string;
35
+ }
30
36
  export interface TooMuchCommandArgumentIssue extends CommandArgumentIssueBase, DModeling.ObjectTag<"TooMuchCommandArgumentIssue"> {
31
37
  readonly expect: number;
32
38
  readonly receive: number;
33
39
  }
34
- export type Issues = (RequiredOptionIssue | RequiredOptionValueIssue | UnexpectedOptionValueIssue | DataStructureOptionIssue | RequiredArgumentIssue | DataStructureArgumentIssue | TooMuchCommandArgumentIssue);
40
+ export type Issues = (RequiredOptionIssue | RequiredOptionValueIssue | UnexpectedOptionValueIssue | DataStructureOptionIssue | RequiredArgumentIssue | DataStructureArgumentIssue | TooMuchCommandArgumentIssue | UnknownOptionIssue | UnknownSubCommandIssue);
35
41
  export declare const SymbolCommandError: unique symbol;
36
42
  export type SymbolCommandError = typeof SymbolCommandError;
37
43
  export interface Error {
38
44
  readonly issues: readonly Issues[];
39
45
  readonly currentPath: readonly string[];
40
46
  pushPath(path: string): void;
47
+ addUnknownOptionIssue(optionTokens: readonly string[]): SymbolCommandError;
48
+ addUnknownSubCommandIssue(subCommandName: string): SymbolCommandError;
41
49
  addRequiredOptionIssue(optionName: string): SymbolCommandError;
42
50
  addRequiredOptionValueIssue(optionName: string): SymbolCommandError;
43
51
  addUnexpectedOptionValueIssue(optionName: string, data: unknown): SymbolCommandError;
@@ -1,8 +1,8 @@
1
1
  import { defaultErrorInterpreterCodecDictionary, defaultErrorInterpreterDataStructureDictionary } from "../dataStructure/common/error/defaultInterpreter.mjs";
2
2
  import * as DCommon from "@duplojs/lang/common";
3
+ import * as DPattern from "@duplojs/lang/pattern";
3
4
  import * as DDataStructure from "@duplojs/lang/dataStructure";
4
5
  import * as DArray from "@duplojs/lang/array";
5
- import * as DPattern from "@duplojs/lang/pattern";
6
6
  import * as DString from "@duplojs/lang/string";
7
7
  import * as DPrinter from "@duplojs/lang/printer";
8
8
  import * as DModeling from "@duplojs/lang/modeling";
@@ -15,6 +15,20 @@ function createError(commandName) {
15
15
  issues,
16
16
  currentPath,
17
17
  pushPath: (path) => void currentPath.push(path),
18
+ addUnknownOptionIssue: (optionTokens) => {
19
+ issues.push(DModeling.taggedObject("UnknownOptionIssue", {
20
+ optionTokens,
21
+ path: DString.join(currentPath, ".")
22
+ }));
23
+ return SymbolCommandError;
24
+ },
25
+ addUnknownSubCommandIssue: (subCommandName) => {
26
+ issues.push(DModeling.taggedObject("UnknownSubCommandIssue", {
27
+ subCommandName,
28
+ path: DString.join(currentPath, ".")
29
+ }));
30
+ return SymbolCommandError;
31
+ },
18
32
  addRequiredOptionIssue: (optionName) => {
19
33
  issues.push(DModeling.taggedObject("RequiredOptionIssue", {
20
34
  optionName,
@@ -86,6 +100,16 @@ function interpretDataStructureError(error, dataStructureErrorInterpreter) {
86
100
  }
87
101
  function interpretErrorIssues(issues, dataStructureErrorInterpreter) {
88
102
  return DPrinter.renderParagraph([DArray.map(issues, DPattern.matchWithTaggedObject({
103
+ UnknownOptionIssue: ({ optionTokens }) => [DPrinter.render([
104
+ DPrinter.indent(1),
105
+ DPrinter.colorizedBold("OPTION: ", "blue"),
106
+ DString.join(optionTokens, ", ")
107
+ ], ""), `${DPrinter.indent(1)}↳ Unknown Option`],
108
+ UnknownSubCommandIssue: ({ subCommandName }) => [DPrinter.render([
109
+ DPrinter.indent(1),
110
+ DPrinter.colorizedBold("SUB-COMMAND: ", "cyan"),
111
+ subCommandName
112
+ ], ""), `${DPrinter.indent(1)}↳ Unknown Sub-command`],
89
113
  DataStructureArgumentIssue: ({ argumentName, dataStructureError }) => [DPrinter.render([
90
114
  DPrinter.indent(1),
91
115
  DPrinter.colorizedBold("ARGUMENT: ", "magenta"),
@@ -2,12 +2,13 @@ import { CreateCommandExecuteParams, CreateCommandParams, Subjects } from './cre
2
2
  import { Error } from './error';
3
3
  import { Option } from './options';
4
4
  import { Argument } from './argument';
5
+ import { ForbiddenInvalidIdentifier } from './types';
5
6
  import type * as DCommon from "@duplojs/lang/common";
6
7
  import * as DEither from "@duplojs/lang/either";
7
8
  import type * as DDataStructure from "@duplojs/lang/dataStructure";
8
- export interface ExecCommandParams<GenericOptions extends DCommon.AnyTuple<Option> = DCommon.AnyTuple<Option>, GenericSubjects extends Subjects = Subjects> extends CreateCommandParams<GenericOptions, GenericSubjects> {
9
- displayName?: string;
9
+ export interface ExecCommandParams<GenericOptions extends DCommon.AnyTuple<Option> = DCommon.AnyTuple<Option>, GenericSubjects extends Subjects = Subjects, GenericDisplayName extends string = string> extends CreateCommandParams<GenericOptions, GenericSubjects> {
10
+ displayName?: GenericDisplayName & ForbiddenInvalidIdentifier<GenericDisplayName>;
10
11
  dataStructureErrorInterpreter?: DDataStructure.ErrorInterpreter;
11
12
  }
12
13
  export declare function exec(execute: () => void): Promise<DEither.Ok | DEither.Error<Error>>;
13
- export declare function exec<const GenericOptions extends DCommon.AnyTuple<Option> = never, GenericSubjects extends Subjects = never>(params: ExecCommandParams<GenericOptions, GenericSubjects>, execute: (params: CreateCommandExecuteParams<GenericOptions, Extract<GenericSubjects, DCommon.AnyTuple<Argument>>>) => DCommon.MaybePromise<void>): Promise<DEither.Ok | DEither.Error<Error>>;
14
+ export declare function exec<const GenericOptions extends DCommon.AnyTuple<Option> = never, GenericSubjects extends Subjects = never, const GenericDisplayName extends string = string>(params: ExecCommandParams<GenericOptions, GenericSubjects, GenericDisplayName>, execute: (params: CreateCommandExecuteParams<GenericOptions, Extract<GenericSubjects, DCommon.AnyTuple<Argument>>>) => DCommon.MaybePromise<void>): Promise<DEither.Ok | DEither.Error<Error>>;
@@ -1,19 +1,21 @@
1
1
  const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
2
- const require_exist = require("../dataStructure/constraint/exist.cjs");
2
+ const require_fileExist = require("../dataStructure/constraint/fileExist.cjs");
3
+ const require_folderExist = require("../dataStructure/constraint/folderExist.cjs");
3
4
  const require_mimeType = require("../dataStructure/constraint/mimeType.cjs");
4
5
  const require_size = require("../dataStructure/constraint/size.cjs");
5
6
  const require_file = require("../dataStructure/type/file.cjs");
7
+ const require_folder = require("../dataStructure/type/folder.cjs");
6
8
  const require_array = require("./options/defaults/array.cjs");
7
9
  const require_boolean = require("./options/defaults/boolean.cjs");
8
10
  const require_simple = require("./options/defaults/simple.cjs");
9
11
  let _duplojs_lang_common = require("@duplojs/lang/common");
10
12
  _duplojs_lang_common = require_runtime.__toESM(_duplojs_lang_common, 1);
13
+ let _duplojs_lang_pattern = require("@duplojs/lang/pattern");
14
+ _duplojs_lang_pattern = require_runtime.__toESM(_duplojs_lang_pattern, 1);
11
15
  let _duplojs_lang_dataStructure = require("@duplojs/lang/dataStructure");
12
16
  _duplojs_lang_dataStructure = require_runtime.__toESM(_duplojs_lang_dataStructure, 1);
13
17
  let _duplojs_lang_array = require("@duplojs/lang/array");
14
18
  _duplojs_lang_array = require_runtime.__toESM(_duplojs_lang_array, 1);
15
- let _duplojs_lang_pattern = require("@duplojs/lang/pattern");
16
- _duplojs_lang_pattern = require_runtime.__toESM(_duplojs_lang_pattern, 1);
17
19
  let _duplojs_lang_string = require("@duplojs/lang/string");
18
20
  _duplojs_lang_string = require_runtime.__toESM(_duplojs_lang_string, 1);
19
21
  let _duplojs_lang_printer = require("@duplojs/lang/printer");
@@ -53,7 +55,7 @@ function formatBytes(value) {
53
55
  return `${Number.isInteger(size) ? size : size.toFixed(1)} ${units[index]}`;
54
56
  }
55
57
  function renderType(type) {
56
- return _duplojs_lang_pattern.match(type).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.stringLiteralTypeKind), ({ definition }) => [literal(formatLiteral(definition.value))]).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.numberLiteralTypeKind), ({ definition }) => [literal(formatLiteral(definition.value))]).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.bigintLiteralTypeKind), ({ definition }) => [literal(formatLiteral(definition.value))]).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.booleanLiteralTypeKind), ({ definition }) => [literal(formatLiteral(definition.value))]).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.nullTypeKind), _duplojs_lang_common.justReturn([literal("null")])).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.undefinedTypeKind), _duplojs_lang_common.justReturn([literal("undefined")])).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.stringTypeKind), _duplojs_lang_common.justReturn([typeLabel("string")])).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.numberTypeKind), _duplojs_lang_common.justReturn([typeLabel("number")])).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.bigintTypeKind), _duplojs_lang_common.justReturn([typeLabel("bigint")])).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.booleanTypeKind), _duplojs_lang_common.justReturn([typeLabel("boolean")])).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.dateTypeKind), _duplojs_lang_common.justReturn([typeLabel("date")])).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.timeTypeKind), _duplojs_lang_common.justReturn([typeLabel("time")])).when(_duplojs_lang_dataStructure.typeIdentifier(require_file.fileTypeKind), _duplojs_lang_common.justReturn([typeLabel("file")])).otherwise(_duplojs_lang_common.justReturn([typeLabel("unknown")]));
58
+ return _duplojs_lang_pattern.match(type).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.stringLiteralTypeKind), ({ definition }) => [literal(formatLiteral(definition.value))]).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.numberLiteralTypeKind), ({ definition }) => [literal(formatLiteral(definition.value))]).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.bigintLiteralTypeKind), ({ definition }) => [literal(formatLiteral(definition.value))]).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.booleanLiteralTypeKind), ({ definition }) => [literal(formatLiteral(definition.value))]).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.nullTypeKind), _duplojs_lang_common.justReturn([literal("null")])).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.undefinedTypeKind), _duplojs_lang_common.justReturn([literal("undefined")])).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.stringTypeKind), _duplojs_lang_common.justReturn([typeLabel("string")])).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.numberTypeKind), _duplojs_lang_common.justReturn([typeLabel("number")])).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.bigintTypeKind), _duplojs_lang_common.justReturn([typeLabel("bigint")])).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.booleanTypeKind), _duplojs_lang_common.justReturn([typeLabel("boolean")])).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.dateTypeKind), _duplojs_lang_common.justReturn([typeLabel("date")])).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.timeTypeKind), _duplojs_lang_common.justReturn([typeLabel("time")])).when(_duplojs_lang_dataStructure.typeIdentifier(require_file.fileTypeKind), _duplojs_lang_common.justReturn([typeLabel("file")])).when(_duplojs_lang_dataStructure.typeIdentifier(require_folder.folderTypeKind), _duplojs_lang_common.justReturn([typeLabel("folder")])).otherwise(_duplojs_lang_common.justReturn([typeLabel("unknown")]));
57
59
  }
58
60
  function renderStringLength(constraints) {
59
61
  const equal = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.stringLengthEqualConstraintKind));
@@ -83,7 +85,7 @@ function renderNumberBounds(constraints) {
83
85
  return _duplojs_lang_array.filter([greaterThan ? [constraintLabel("> "), literal(String(greaterThan.definition.threshold))] : greaterThanOrEqual ? [constraintLabel("min "), literal(String(greaterThanOrEqual.definition.threshold))] : null, lessThan ? [constraintLabel("< "), literal(String(lessThan.definition.threshold))] : lessThanOrEqual ? [constraintLabel("max "), literal(String(lessThanOrEqual.definition.threshold))] : null], _duplojs_lang_common.truthy);
84
86
  }
85
87
  function renderSimpleConstraint(constraint) {
86
- return _duplojs_lang_pattern.match(constraint).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.emailConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("email")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.urlConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("url")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.uuidConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("uuid")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.integerConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("integer")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.trimmedConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("trimmed")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.notEmptyConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("not empty")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.numberInStringConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("number in string")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.evenConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("even")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.oddConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("odd")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.positiveConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("positive")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.negativeConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("negative")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.notZeroConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("not zero")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.safeConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("safe number")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.pathConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("path")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.absolutePathConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("absolute path")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.segmentPathConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("path segment")])).when(_duplojs_lang_dataStructure.constraintIdentifier(require_exist.existConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("exists")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.strictPositiveConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("> "), literal("0")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.strictNegativeConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("< "), literal("0")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.betweenThanConstraintKind), ({ definition }) => [
88
+ return _duplojs_lang_pattern.match(constraint).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.emailConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("email")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.urlConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("url")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.uuidConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("uuid")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.integerConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("integer")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.trimmedConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("trimmed")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.notEmptyConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("not empty")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.numberInStringConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("number in string")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.evenConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("even")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.oddConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("odd")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.positiveConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("positive")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.negativeConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("negative")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.notZeroConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("not zero")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.safeConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("safe number")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.pathConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("path")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.absolutePathConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("absolute path")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.segmentPathConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("path segment")])).when(_duplojs_lang_dataStructure.constraintIdentifier(require_fileExist.fileExistConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("exists")])).when(_duplojs_lang_dataStructure.constraintIdentifier(require_folderExist.folderExistConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("exists")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.strictPositiveConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("> "), literal("0")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.strictNegativeConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("< "), literal("0")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.betweenThanConstraintKind), ({ definition }) => [
87
89
  constraintLabel("> "),
88
90
  literal(String(definition.greater)),
89
91
  secondary(" and "),
@@ -192,8 +194,8 @@ function renderOptionDetails(option, depth) {
192
194
  const help = renderDataStructure(option.dataStructure);
193
195
  return _duplojs_lang_array.filter([
194
196
  renderInline([_duplojs_lang_printer.indent(depth), renderMetadata(help, option.required ? "required" : "optional")]),
195
- renderDescriptionLine(option.description, depth),
196
- ...renderConstraintLines(help.constraints, depth)
197
+ ...renderConstraintLines(help.constraints, depth),
198
+ renderDescriptionLine(option.description, depth)
197
199
  ], _duplojs_lang_common.truthy);
198
200
  }
199
201
  if (require_boolean.booleanOptionKind.has(option)) return _duplojs_lang_array.filter([renderInline([_duplojs_lang_printer.indent(depth), typeLabel("boolean")]), renderDescriptionLine(option.description, depth)], _duplojs_lang_common.truthy);
@@ -211,8 +213,8 @@ function renderArgumentsHelp(args, depth) {
211
213
  name(argument.name.padEnd(12)),
212
214
  renderMetadata(help, argument.optional ? "optional" : "required")
213
215
  ]),
214
- renderDescriptionLine(argument.description, depth + 2),
215
- renderConstraintLines(help.constraints, depth + 2)
216
+ renderConstraintLines(help.constraints, depth + 2),
217
+ renderDescriptionLine(argument.description, depth + 2)
216
218
  ]);
217
219
  })]);
218
220
  }
@@ -1,7 +1,7 @@
1
1
  import { Command } from './create';
2
2
  import { Argument } from './argument';
3
3
  import { Options } from './options';
4
- export declare const helpOption: NoInfer<import('./options').BooleanOption<"help">>;
4
+ export declare const helpOption: import('./options').BooleanOption<"help">;
5
5
  export declare function renderOptionsHelp(options: readonly Options[], depth: number): string;
6
6
  export declare function renderArgumentsHelp(args: readonly Argument[], depth: number): string;
7
7
  export declare function renderCommandHelp(command: Command, depth: number): string[];
@@ -1,14 +1,16 @@
1
- import { existConstraintKind } from "../dataStructure/constraint/exist.mjs";
1
+ import { fileExistConstraintKind } from "../dataStructure/constraint/fileExist.mjs";
2
+ import { folderExistConstraintKind } from "../dataStructure/constraint/folderExist.mjs";
2
3
  import { mimeTypeConstraintKind } from "../dataStructure/constraint/mimeType.mjs";
3
4
  import { sizeConstraintKind } from "../dataStructure/constraint/size.mjs";
4
5
  import { fileTypeKind } from "../dataStructure/type/file.mjs";
6
+ import { folderTypeKind } from "../dataStructure/type/folder.mjs";
5
7
  import { arrayOptionKind } from "./options/defaults/array.mjs";
6
8
  import { booleanOptionKind, createBooleanOption } from "./options/defaults/boolean.mjs";
7
9
  import { simpleOptionKind } from "./options/defaults/simple.mjs";
8
10
  import * as DCommon from "@duplojs/lang/common";
11
+ import * as DPattern from "@duplojs/lang/pattern";
9
12
  import * as DDataStructure from "@duplojs/lang/dataStructure";
10
13
  import * as DArray from "@duplojs/lang/array";
11
- import * as DPattern from "@duplojs/lang/pattern";
12
14
  import * as DString from "@duplojs/lang/string";
13
15
  import * as DPrinter from "@duplojs/lang/printer";
14
16
  //#region scripts/command/help.ts
@@ -46,7 +48,7 @@ function formatBytes(value) {
46
48
  return `${Number.isInteger(size) ? size : size.toFixed(1)} ${units[index]}`;
47
49
  }
48
50
  function renderType(type) {
49
- return DPattern.match(type).when(DDataStructure.typeIdentifier(DDataStructure.stringLiteralTypeKind), ({ definition }) => [literal(formatLiteral(definition.value))]).when(DDataStructure.typeIdentifier(DDataStructure.numberLiteralTypeKind), ({ definition }) => [literal(formatLiteral(definition.value))]).when(DDataStructure.typeIdentifier(DDataStructure.bigintLiteralTypeKind), ({ definition }) => [literal(formatLiteral(definition.value))]).when(DDataStructure.typeIdentifier(DDataStructure.booleanLiteralTypeKind), ({ definition }) => [literal(formatLiteral(definition.value))]).when(DDataStructure.typeIdentifier(DDataStructure.nullTypeKind), DCommon.justReturn([literal("null")])).when(DDataStructure.typeIdentifier(DDataStructure.undefinedTypeKind), DCommon.justReturn([literal("undefined")])).when(DDataStructure.typeIdentifier(DDataStructure.stringTypeKind), DCommon.justReturn([typeLabel("string")])).when(DDataStructure.typeIdentifier(DDataStructure.numberTypeKind), DCommon.justReturn([typeLabel("number")])).when(DDataStructure.typeIdentifier(DDataStructure.bigintTypeKind), DCommon.justReturn([typeLabel("bigint")])).when(DDataStructure.typeIdentifier(DDataStructure.booleanTypeKind), DCommon.justReturn([typeLabel("boolean")])).when(DDataStructure.typeIdentifier(DDataStructure.dateTypeKind), DCommon.justReturn([typeLabel("date")])).when(DDataStructure.typeIdentifier(DDataStructure.timeTypeKind), DCommon.justReturn([typeLabel("time")])).when(DDataStructure.typeIdentifier(fileTypeKind), DCommon.justReturn([typeLabel("file")])).otherwise(DCommon.justReturn([typeLabel("unknown")]));
51
+ return DPattern.match(type).when(DDataStructure.typeIdentifier(DDataStructure.stringLiteralTypeKind), ({ definition }) => [literal(formatLiteral(definition.value))]).when(DDataStructure.typeIdentifier(DDataStructure.numberLiteralTypeKind), ({ definition }) => [literal(formatLiteral(definition.value))]).when(DDataStructure.typeIdentifier(DDataStructure.bigintLiteralTypeKind), ({ definition }) => [literal(formatLiteral(definition.value))]).when(DDataStructure.typeIdentifier(DDataStructure.booleanLiteralTypeKind), ({ definition }) => [literal(formatLiteral(definition.value))]).when(DDataStructure.typeIdentifier(DDataStructure.nullTypeKind), DCommon.justReturn([literal("null")])).when(DDataStructure.typeIdentifier(DDataStructure.undefinedTypeKind), DCommon.justReturn([literal("undefined")])).when(DDataStructure.typeIdentifier(DDataStructure.stringTypeKind), DCommon.justReturn([typeLabel("string")])).when(DDataStructure.typeIdentifier(DDataStructure.numberTypeKind), DCommon.justReturn([typeLabel("number")])).when(DDataStructure.typeIdentifier(DDataStructure.bigintTypeKind), DCommon.justReturn([typeLabel("bigint")])).when(DDataStructure.typeIdentifier(DDataStructure.booleanTypeKind), DCommon.justReturn([typeLabel("boolean")])).when(DDataStructure.typeIdentifier(DDataStructure.dateTypeKind), DCommon.justReturn([typeLabel("date")])).when(DDataStructure.typeIdentifier(DDataStructure.timeTypeKind), DCommon.justReturn([typeLabel("time")])).when(DDataStructure.typeIdentifier(fileTypeKind), DCommon.justReturn([typeLabel("file")])).when(DDataStructure.typeIdentifier(folderTypeKind), DCommon.justReturn([typeLabel("folder")])).otherwise(DCommon.justReturn([typeLabel("unknown")]));
50
52
  }
51
53
  function renderStringLength(constraints) {
52
54
  const equal = DArray.find(constraints, DDataStructure.constraintIdentifier(DDataStructure.stringLengthEqualConstraintKind));
@@ -76,7 +78,7 @@ function renderNumberBounds(constraints) {
76
78
  return DArray.filter([greaterThan ? [constraintLabel("> "), literal(String(greaterThan.definition.threshold))] : greaterThanOrEqual ? [constraintLabel("min "), literal(String(greaterThanOrEqual.definition.threshold))] : null, lessThan ? [constraintLabel("< "), literal(String(lessThan.definition.threshold))] : lessThanOrEqual ? [constraintLabel("max "), literal(String(lessThanOrEqual.definition.threshold))] : null], DCommon.truthy);
77
79
  }
78
80
  function renderSimpleConstraint(constraint) {
79
- return DPattern.match(constraint).when(DDataStructure.constraintIdentifier(DDataStructure.emailConstraintKind), DCommon.justReturn([constraintLabel("email")])).when(DDataStructure.constraintIdentifier(DDataStructure.urlConstraintKind), DCommon.justReturn([constraintLabel("url")])).when(DDataStructure.constraintIdentifier(DDataStructure.uuidConstraintKind), DCommon.justReturn([constraintLabel("uuid")])).when(DDataStructure.constraintIdentifier(DDataStructure.integerConstraintKind), DCommon.justReturn([constraintLabel("integer")])).when(DDataStructure.constraintIdentifier(DDataStructure.trimmedConstraintKind), DCommon.justReturn([constraintLabel("trimmed")])).when(DDataStructure.constraintIdentifier(DDataStructure.notEmptyConstraintKind), DCommon.justReturn([constraintLabel("not empty")])).when(DDataStructure.constraintIdentifier(DDataStructure.numberInStringConstraintKind), DCommon.justReturn([constraintLabel("number in string")])).when(DDataStructure.constraintIdentifier(DDataStructure.evenConstraintKind), DCommon.justReturn([constraintLabel("even")])).when(DDataStructure.constraintIdentifier(DDataStructure.oddConstraintKind), DCommon.justReturn([constraintLabel("odd")])).when(DDataStructure.constraintIdentifier(DDataStructure.positiveConstraintKind), DCommon.justReturn([constraintLabel("positive")])).when(DDataStructure.constraintIdentifier(DDataStructure.negativeConstraintKind), DCommon.justReturn([constraintLabel("negative")])).when(DDataStructure.constraintIdentifier(DDataStructure.notZeroConstraintKind), DCommon.justReturn([constraintLabel("not zero")])).when(DDataStructure.constraintIdentifier(DDataStructure.safeConstraintKind), DCommon.justReturn([constraintLabel("safe number")])).when(DDataStructure.constraintIdentifier(DDataStructure.pathConstraintKind), DCommon.justReturn([constraintLabel("path")])).when(DDataStructure.constraintIdentifier(DDataStructure.absolutePathConstraintKind), DCommon.justReturn([constraintLabel("absolute path")])).when(DDataStructure.constraintIdentifier(DDataStructure.segmentPathConstraintKind), DCommon.justReturn([constraintLabel("path segment")])).when(DDataStructure.constraintIdentifier(existConstraintKind), DCommon.justReturn([constraintLabel("exists")])).when(DDataStructure.constraintIdentifier(DDataStructure.strictPositiveConstraintKind), DCommon.justReturn([constraintLabel("> "), literal("0")])).when(DDataStructure.constraintIdentifier(DDataStructure.strictNegativeConstraintKind), DCommon.justReturn([constraintLabel("< "), literal("0")])).when(DDataStructure.constraintIdentifier(DDataStructure.betweenThanConstraintKind), ({ definition }) => [
81
+ return DPattern.match(constraint).when(DDataStructure.constraintIdentifier(DDataStructure.emailConstraintKind), DCommon.justReturn([constraintLabel("email")])).when(DDataStructure.constraintIdentifier(DDataStructure.urlConstraintKind), DCommon.justReturn([constraintLabel("url")])).when(DDataStructure.constraintIdentifier(DDataStructure.uuidConstraintKind), DCommon.justReturn([constraintLabel("uuid")])).when(DDataStructure.constraintIdentifier(DDataStructure.integerConstraintKind), DCommon.justReturn([constraintLabel("integer")])).when(DDataStructure.constraintIdentifier(DDataStructure.trimmedConstraintKind), DCommon.justReturn([constraintLabel("trimmed")])).when(DDataStructure.constraintIdentifier(DDataStructure.notEmptyConstraintKind), DCommon.justReturn([constraintLabel("not empty")])).when(DDataStructure.constraintIdentifier(DDataStructure.numberInStringConstraintKind), DCommon.justReturn([constraintLabel("number in string")])).when(DDataStructure.constraintIdentifier(DDataStructure.evenConstraintKind), DCommon.justReturn([constraintLabel("even")])).when(DDataStructure.constraintIdentifier(DDataStructure.oddConstraintKind), DCommon.justReturn([constraintLabel("odd")])).when(DDataStructure.constraintIdentifier(DDataStructure.positiveConstraintKind), DCommon.justReturn([constraintLabel("positive")])).when(DDataStructure.constraintIdentifier(DDataStructure.negativeConstraintKind), DCommon.justReturn([constraintLabel("negative")])).when(DDataStructure.constraintIdentifier(DDataStructure.notZeroConstraintKind), DCommon.justReturn([constraintLabel("not zero")])).when(DDataStructure.constraintIdentifier(DDataStructure.safeConstraintKind), DCommon.justReturn([constraintLabel("safe number")])).when(DDataStructure.constraintIdentifier(DDataStructure.pathConstraintKind), DCommon.justReturn([constraintLabel("path")])).when(DDataStructure.constraintIdentifier(DDataStructure.absolutePathConstraintKind), DCommon.justReturn([constraintLabel("absolute path")])).when(DDataStructure.constraintIdentifier(DDataStructure.segmentPathConstraintKind), DCommon.justReturn([constraintLabel("path segment")])).when(DDataStructure.constraintIdentifier(fileExistConstraintKind), DCommon.justReturn([constraintLabel("exists")])).when(DDataStructure.constraintIdentifier(folderExistConstraintKind), DCommon.justReturn([constraintLabel("exists")])).when(DDataStructure.constraintIdentifier(DDataStructure.strictPositiveConstraintKind), DCommon.justReturn([constraintLabel("> "), literal("0")])).when(DDataStructure.constraintIdentifier(DDataStructure.strictNegativeConstraintKind), DCommon.justReturn([constraintLabel("< "), literal("0")])).when(DDataStructure.constraintIdentifier(DDataStructure.betweenThanConstraintKind), ({ definition }) => [
80
82
  constraintLabel("> "),
81
83
  literal(String(definition.greater)),
82
84
  secondary(" and "),
@@ -185,8 +187,8 @@ function renderOptionDetails(option, depth) {
185
187
  const help = renderDataStructure(option.dataStructure);
186
188
  return DArray.filter([
187
189
  renderInline([DPrinter.indent(depth), renderMetadata(help, option.required ? "required" : "optional")]),
188
- renderDescriptionLine(option.description, depth),
189
- ...renderConstraintLines(help.constraints, depth)
190
+ ...renderConstraintLines(help.constraints, depth),
191
+ renderDescriptionLine(option.description, depth)
190
192
  ], DCommon.truthy);
191
193
  }
192
194
  if (booleanOptionKind.has(option)) return DArray.filter([renderInline([DPrinter.indent(depth), typeLabel("boolean")]), renderDescriptionLine(option.description, depth)], DCommon.truthy);
@@ -204,8 +206,8 @@ function renderArgumentsHelp(args, depth) {
204
206
  name(argument.name.padEnd(12)),
205
207
  renderMetadata(help, argument.optional ? "optional" : "required")
206
208
  ]),
207
- renderDescriptionLine(argument.description, depth + 2),
208
- renderConstraintLines(help.constraints, depth + 2)
209
+ renderConstraintLines(help.constraints, depth + 2),
210
+ renderDescriptionLine(argument.description, depth + 2)
209
211
  ]);
210
212
  })]);
211
213
  }
@@ -25,12 +25,14 @@ var command_exports = /* @__PURE__ */ require_runtime.__exportAll({
25
25
  createOption: () => require_simple.createOption,
26
26
  exec: () => require_exec.exec,
27
27
  execOptions: () => require_execOptions.execOptions,
28
+ findOptionToken: () => require_base.findOptionToken,
28
29
  helpOption: () => require_help.helpOption,
29
30
  interpretDataStructureError: () => require_error.interpretDataStructureError,
30
31
  interpretErrorIssues: () => require_error.interpretErrorIssues,
31
32
  interpretExecCommandError: () => require_error.interpretExecCommandError,
32
33
  interpretExecOptionsError: () => require_error.interpretExecOptionsError,
33
34
  isCommands: () => require_create.isCommands,
35
+ isOptionToken: () => require_base.isOptionToken,
34
36
  logCommandHelp: () => require_help.logCommandHelp,
35
37
  logExecOptionHelp: () => require_help.logExecOptionHelp,
36
38
  optionIdentifier: () => require_identifier.optionIdentifier,
@@ -61,12 +63,14 @@ exports.createError = require_error.createError;
61
63
  exports.createOption = require_simple.createOption;
62
64
  exports.exec = require_exec.exec;
63
65
  exports.execOptions = require_execOptions.execOptions;
66
+ exports.findOptionToken = require_base.findOptionToken;
64
67
  exports.helpOption = require_help.helpOption;
65
68
  exports.interpretDataStructureError = require_error.interpretDataStructureError;
66
69
  exports.interpretErrorIssues = require_error.interpretErrorIssues;
67
70
  exports.interpretExecCommandError = require_error.interpretExecCommandError;
68
71
  exports.interpretExecOptionsError = require_error.interpretExecOptionsError;
69
72
  exports.isCommands = require_create.isCommands;
73
+ exports.isOptionToken = require_base.isOptionToken;
70
74
  exports.logCommandHelp = require_help.logCommandHelp;
71
75
  exports.logExecOptionHelp = require_help.logExecOptionHelp;
72
76
  exports.optionIdentifier = require_identifier.optionIdentifier;
@@ -1,7 +1,7 @@
1
1
  import { __exportAll } from "../_virtual/_rolldown/runtime.mjs";
2
2
  import { argumentKind, createArgument } from "./argument.mjs";
3
3
  import { SymbolCommandError, createError, interpretDataStructureError, interpretErrorIssues, interpretExecCommandError, interpretExecOptionsError } from "./error.mjs";
4
- import { constructOption, optionKind } from "./options/base.mjs";
4
+ import { constructOption, findOptionToken, isOptionToken, optionKind } from "./options/base.mjs";
5
5
  import { arrayOptionKind, createArrayOption } from "./options/defaults/array.mjs";
6
6
  import { booleanOptionKind, createBooleanOption } from "./options/defaults/boolean.mjs";
7
7
  import { createOption, simpleOptionKind } from "./options/defaults/simple.mjs";
@@ -25,12 +25,14 @@ var command_exports = /* @__PURE__ */ __exportAll({
25
25
  createOption: () => createOption,
26
26
  exec: () => exec,
27
27
  execOptions: () => execOptions,
28
+ findOptionToken: () => findOptionToken,
28
29
  helpOption: () => helpOption,
29
30
  interpretDataStructureError: () => interpretDataStructureError,
30
31
  interpretErrorIssues: () => interpretErrorIssues,
31
32
  interpretExecCommandError: () => interpretExecCommandError,
32
33
  interpretExecOptionsError: () => interpretExecOptionsError,
33
34
  isCommands: () => isCommands,
35
+ isOptionToken: () => isOptionToken,
34
36
  logCommandHelp: () => logCommandHelp,
35
37
  logExecOptionHelp: () => logExecOptionHelp,
36
38
  optionIdentifier: () => optionIdentifier,
@@ -42,4 +44,4 @@ var command_exports = /* @__PURE__ */ __exportAll({
42
44
  simpleOptionKind: () => simpleOptionKind
43
45
  });
44
46
  //#endregion
45
- export { SymbolCommandError, argumentKind, arrayOptionKind, booleanOptionKind, command_exports, constructOption, create, createArgument, createArrayOption, createBooleanOption, createError, createOption, exec, execOptions, helpOption, interpretDataStructureError, interpretErrorIssues, interpretExecCommandError, interpretExecOptionsError, isCommands, logCommandHelp, logExecOptionHelp, optionIdentifier, optionKind, renderArgumentsHelp, renderCommandHelp, renderExecOptionHelp, renderOptionsHelp, simpleOptionKind };
47
+ export { SymbolCommandError, argumentKind, arrayOptionKind, booleanOptionKind, command_exports, constructOption, create, createArgument, createArrayOption, createBooleanOption, createError, createOption, exec, execOptions, findOptionToken, helpOption, interpretDataStructureError, interpretErrorIssues, interpretExecCommandError, interpretExecOptionsError, isCommands, isOptionToken, logCommandHelp, logExecOptionHelp, optionIdentifier, optionKind, renderArgumentsHelp, renderCommandHelp, renderExecOptionHelp, renderOptionsHelp, simpleOptionKind };
@@ -9,24 +9,30 @@ let _duplojs_lang_string = require("@duplojs/lang/string");
9
9
  _duplojs_lang_string = require_runtime.__toESM(_duplojs_lang_string, 1);
10
10
  //#region scripts/command/options/base.ts
11
11
  const optionKind = require_kind.createKind("command-option");
12
- const regexOption = /^(?<dashes>-{1,2})(?<key>[A-Za-z0-9][A-Za-z0-9_-]*)(?:=(?<value>.*))?$/;
12
+ const regexOption = /^(?<dashes>-{1,2})(?<key>(?![0-9]+(?:=|$))[A-Za-z0-9][A-Za-z0-9_-]*)(?:=(?<value>.*))?$/;
13
+ function isOptionToken(input) {
14
+ return _duplojs_lang_string.test(input, regexOption);
15
+ }
16
+ function findOptionToken(args, option) {
17
+ return _duplojs_lang_array.reduce(args, _duplojs_lang_array.reduceFrom(null), ({ element, next, exit, index }) => {
18
+ const extractResult = _duplojs_lang_string.extract(element, regexOption);
19
+ if (!extractResult) return next(null);
20
+ const key = extractResult.namedGroups.key;
21
+ if (option.name !== key && (!_duplojs_lang_array.includes(option.aliases, key) || extractResult.namedGroups?.dashes !== "-")) return next(null);
22
+ return exit({
23
+ key,
24
+ value: extractResult.namedGroups?.value,
25
+ index
26
+ });
27
+ });
28
+ }
13
29
  function constructOption(kindHandler, createConstructor) {
14
30
  return createConstructor({ init: (name, execute, params, ...rest) => {
15
31
  const self = {
16
32
  ...Object.fromEntries(Object.entries(rest[0] ?? {}).map(([key, prop]) => typeof prop === "function" ? [key, (...args) => prop(self, ...args)] : [key, prop])),
17
33
  name,
18
34
  execute: async (args, error) => {
19
- const result = _duplojs_lang_array.reduce(args, _duplojs_lang_array.reduceFrom(null), ({ element, next, exit, index }) => {
20
- const extractResult = _duplojs_lang_string.extract(element, regexOption);
21
- if (!extractResult) return next(null);
22
- const result = {
23
- key: extractResult.namedGroups.key,
24
- value: extractResult.namedGroups?.value,
25
- index
26
- };
27
- if (self.name !== result.key && (!_duplojs_lang_array.includes(self.aliases, result.key) || extractResult.namedGroups?.dashes !== "-")) return next(null);
28
- return exit(result);
29
- });
35
+ const result = findOptionToken(args, self);
30
36
  const { value, argumentRest } = _duplojs_lang_common.justExec(() => {
31
37
  if (!result) return {
32
38
  value: null,
@@ -34,7 +40,7 @@ function constructOption(kindHandler, createConstructor) {
34
40
  };
35
41
  if (result.value === void 0) {
36
42
  const nextArg = args[result.index + 1];
37
- if (nextArg === void 0 || _duplojs_lang_string.test(nextArg, regexOption)) return {
43
+ if (nextArg === void 0 || isOptionToken(nextArg)) return {
38
44
  value: void 0,
39
45
  argumentRest: _duplojs_lang_array.spliceDelete(args, result.index, 1)
40
46
  };
@@ -65,4 +71,6 @@ function constructOption(kindHandler, createConstructor) {
65
71
  }
66
72
  //#endregion
67
73
  exports.constructOption = constructOption;
74
+ exports.findOptionToken = findOptionToken;
75
+ exports.isOptionToken = isOptionToken;
68
76
  exports.optionKind = optionKind;
@@ -2,6 +2,12 @@ import { Error, SymbolCommandError } from '../error';
2
2
  import * as DCommon from "@duplojs/lang/common";
3
3
  import type * as DKind from "@duplojs/lang/kind";
4
4
  export declare const optionKind: DKind.Handler<DKind.Definition<"@DuplojsServerCommand/command-option", unknown>>;
5
+ export declare function isOptionToken(input: string): boolean;
6
+ export declare function findOptionToken(args: readonly string[], option: Pick<Option, "name" | "aliases">): {
7
+ key: string;
8
+ value: string | undefined;
9
+ index: number;
10
+ } | null;
5
11
  export interface Option<GenericName extends string = string, GenericValue extends unknown = unknown> extends DKind.Kind<typeof optionKind> {
6
12
  readonly name: GenericName;
7
13
  readonly description: string | null;