@duplojs/server 0.0.0-stage → 0.1.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (262) hide show
  1. package/README +9 -0
  2. package/dist/_virtual/_rolldown/runtime.cjs +33 -0
  3. package/dist/_virtual/_rolldown/runtime.mjs +13 -0
  4. package/dist/command/argument.cjs +27 -0
  5. package/dist/command/argument.d.ts +18 -0
  6. package/dist/command/argument.mjs +24 -0
  7. package/dist/command/create.cjs +94 -0
  8. package/dist/command/create.d.ts +47 -0
  9. package/dist/command/create.mjs +88 -0
  10. package/dist/command/error.cjs +153 -0
  11. package/dist/command/error.d.ts +53 -0
  12. package/dist/command/error.mjs +140 -0
  13. package/dist/command/exec.cjs +19 -0
  14. package/dist/command/exec.d.ts +13 -0
  15. package/dist/command/exec.mjs +17 -0
  16. package/dist/command/execOptions.cjs +41 -0
  17. package/dist/command/execOptions.d.ts +14 -0
  18. package/dist/command/execOptions.mjs +37 -0
  19. package/dist/command/help.cjs +257 -0
  20. package/dist/command/help.d.ts +10 -0
  21. package/dist/command/help.mjs +244 -0
  22. package/dist/command/index.cjs +78 -0
  23. package/dist/command/index.d.ts +8 -0
  24. package/dist/command/index.mjs +45 -0
  25. package/dist/command/kind.cjs +7 -0
  26. package/dist/command/kind.d.ts +2 -0
  27. package/dist/command/kind.mjs +5 -0
  28. package/dist/command/options/base.cjs +68 -0
  29. package/dist/command/options/base.d.ts +24 -0
  30. package/dist/command/options/base.mjs +63 -0
  31. package/dist/command/options/defaults/array.cjs +35 -0
  32. package/dist/command/options/defaults/array.d.ts +24 -0
  33. package/dist/command/options/defaults/array.mjs +29 -0
  34. package/dist/command/options/defaults/boolean.cjs +14 -0
  35. package/dist/command/options/defaults/boolean.d.ts +11 -0
  36. package/dist/command/options/defaults/boolean.mjs +13 -0
  37. package/dist/command/options/defaults/index.d.ts +3 -0
  38. package/dist/command/options/defaults/simple.cjs +25 -0
  39. package/dist/command/options/defaults/simple.d.ts +16 -0
  40. package/dist/command/options/defaults/simple.mjs +22 -0
  41. package/dist/command/options/identifier.cjs +7 -0
  42. package/dist/command/options/identifier.d.ts +4 -0
  43. package/dist/command/options/identifier.mjs +5 -0
  44. package/dist/command/options/index.d.ts +4 -0
  45. package/dist/command/options/types/index.d.ts +1 -0
  46. package/dist/command/options/types/options.d.ts +9 -0
  47. package/dist/command/types/eligibleType.d.ts +4 -0
  48. package/dist/command/types/forbiddenDuplicateName.d.ts +11 -0
  49. package/dist/command/types/index.d.ts +2 -0
  50. package/dist/common/environmentVariable/expandEnvironmentVariables.cjs +27 -0
  51. package/dist/common/environmentVariable/expandEnvironmentVariables.d.ts +2 -0
  52. package/dist/common/environmentVariable/expandEnvironmentVariables.mjs +22 -0
  53. package/dist/common/environmentVariable/index.cjs +47 -0
  54. package/dist/common/environmentVariable/index.d.ts +16 -0
  55. package/dist/common/environmentVariable/index.mjs +41 -0
  56. package/dist/common/environmentVariable/overrideEnvironmentVariables.cjs +13 -0
  57. package/dist/common/environmentVariable/overrideEnvironmentVariables.d.ts +3 -0
  58. package/dist/common/environmentVariable/overrideEnvironmentVariables.mjs +9 -0
  59. package/dist/common/environmentVariable/parseEnvironmentFiles.cjs +32 -0
  60. package/dist/common/environmentVariable/parseEnvironmentFiles.d.ts +4 -0
  61. package/dist/common/environmentVariable/parseEnvironmentFiles.mjs +26 -0
  62. package/dist/common/environmentVariableOrThrow.cjs +23 -0
  63. package/dist/common/environmentVariableOrThrow.d.ts +12 -0
  64. package/dist/common/environmentVariableOrThrow.mjs +19 -0
  65. package/dist/common/exitProcess.cjs +7 -0
  66. package/dist/common/exitProcess.d.ts +6 -0
  67. package/dist/common/exitProcess.mjs +8 -0
  68. package/dist/common/getCurrentWorkDirectory.cjs +15 -0
  69. package/dist/common/getCurrentWorkDirectory.d.ts +8 -0
  70. package/dist/common/getCurrentWorkDirectory.mjs +11 -0
  71. package/dist/common/getCurrentWorkDirectoryOrThrow.cjs +25 -0
  72. package/dist/common/getCurrentWorkDirectoryOrThrow.d.ts +8 -0
  73. package/dist/common/getCurrentWorkDirectoryOrThrow.mjs +20 -0
  74. package/dist/common/getProcessArguments.cjs +18 -0
  75. package/dist/common/getProcessArguments.d.ts +6 -0
  76. package/dist/common/getProcessArguments.mjs +18 -0
  77. package/dist/common/index.cjs +41 -0
  78. package/dist/common/index.d.ts +8 -0
  79. package/dist/common/index.mjs +25 -0
  80. package/dist/common/setCurrentWorkingDirectory.cjs +11 -0
  81. package/dist/common/setCurrentWorkingDirectory.d.ts +8 -0
  82. package/dist/common/setCurrentWorkingDirectory.mjs +9 -0
  83. package/dist/common/setCurrentWorkingDirectoryOrThrow.cjs +23 -0
  84. package/dist/common/setCurrentWorkingDirectoryOrThrow.d.ts +8 -0
  85. package/dist/common/setCurrentWorkingDirectoryOrThrow.mjs +18 -0
  86. package/dist/dataStructure/common/codec/defaults/index.d.ts +2 -0
  87. package/dist/dataStructure/common/codec/defaults/json.cjs +14 -0
  88. package/dist/dataStructure/common/codec/defaults/json.d.ts +9 -0
  89. package/dist/dataStructure/common/codec/defaults/json.mjs +11 -0
  90. package/dist/dataStructure/common/codec/defaults/string.cjs +14 -0
  91. package/dist/dataStructure/common/codec/defaults/string.d.ts +13 -0
  92. package/dist/dataStructure/common/codec/defaults/string.mjs +11 -0
  93. package/dist/dataStructure/common/codec/index.d.ts +1 -0
  94. package/dist/dataStructure/common/error/defaultInterpreter.cjs +27 -0
  95. package/dist/dataStructure/common/error/defaultInterpreter.d.ts +64 -0
  96. package/dist/dataStructure/common/error/defaultInterpreter.mjs +24 -0
  97. package/dist/dataStructure/common/error/index.d.ts +1 -0
  98. package/dist/dataStructure/common/index.d.ts +2 -0
  99. package/dist/dataStructure/constraint/exist.cjs +19 -0
  100. package/dist/dataStructure/constraint/exist.d.ts +10 -0
  101. package/dist/dataStructure/constraint/exist.mjs +15 -0
  102. package/dist/dataStructure/constraint/index.d.ts +4 -0
  103. package/dist/dataStructure/constraint/mimeType.cjs +18 -0
  104. package/dist/dataStructure/constraint/mimeType.d.ts +11 -0
  105. package/dist/dataStructure/constraint/mimeType.mjs +14 -0
  106. package/dist/dataStructure/constraint/size.cjs +29 -0
  107. package/dist/dataStructure/constraint/size.d.ts +16 -0
  108. package/dist/dataStructure/constraint/size.mjs +24 -0
  109. package/dist/dataStructure/constraint/types/constraints.d.ts +10 -0
  110. package/dist/dataStructure/constraint/types/index.d.ts +1 -0
  111. package/dist/dataStructure/fundamentalType/file.cjs +11 -0
  112. package/dist/dataStructure/fundamentalType/file.d.ts +8 -0
  113. package/dist/dataStructure/fundamentalType/file.mjs +8 -0
  114. package/dist/dataStructure/fundamentalType/index.d.ts +2 -0
  115. package/dist/dataStructure/fundamentalType/types/fundamentalTypes.d.ts +6 -0
  116. package/dist/dataStructure/fundamentalType/types/index.d.ts +1 -0
  117. package/dist/dataStructure/helper/exist.cjs +7 -0
  118. package/dist/dataStructure/helper/exist.d.ts +2 -0
  119. package/dist/dataStructure/helper/exist.mjs +7 -0
  120. package/dist/dataStructure/helper/file.cjs +10 -0
  121. package/dist/dataStructure/helper/file.d.ts +3 -0
  122. package/dist/dataStructure/helper/file.mjs +8 -0
  123. package/dist/dataStructure/helper/index.d.ts +4 -0
  124. package/dist/dataStructure/helper/mimeType.cjs +7 -0
  125. package/dist/dataStructure/helper/mimeType.d.ts +2 -0
  126. package/dist/dataStructure/helper/mimeType.mjs +7 -0
  127. package/dist/dataStructure/helper/size.cjs +7 -0
  128. package/dist/dataStructure/helper/size.d.ts +2 -0
  129. package/dist/dataStructure/helper/size.mjs +7 -0
  130. package/dist/dataStructure/index.cjs +62 -0
  131. package/dist/dataStructure/index.d.ts +6 -0
  132. package/dist/dataStructure/index.mjs +38 -0
  133. package/dist/dataStructure/kind.cjs +7 -0
  134. package/dist/dataStructure/kind.d.ts +2 -0
  135. package/dist/dataStructure/kind.mjs +5 -0
  136. package/dist/dataStructure/type/file.cjs +14 -0
  137. package/dist/dataStructure/type/file.d.ts +11 -0
  138. package/dist/dataStructure/type/file.mjs +11 -0
  139. package/dist/dataStructure/type/index.d.ts +2 -0
  140. package/dist/dataStructure/type/types/index.d.ts +1 -0
  141. package/dist/dataStructure/type/types/types.d.ts +6 -0
  142. package/dist/file/appendFile.cjs +43 -0
  143. package/dist/file/appendFile.d.ts +11 -0
  144. package/dist/file/appendFile.mjs +41 -0
  145. package/dist/file/appendTextFile.cjs +43 -0
  146. package/dist/file/appendTextFile.d.ts +11 -0
  147. package/dist/file/appendTextFile.mjs +41 -0
  148. package/dist/file/copy.cjs +31 -0
  149. package/dist/file/copy.d.ts +11 -0
  150. package/dist/file/copy.mjs +29 -0
  151. package/dist/file/createEntryInterface.cjs +16 -0
  152. package/dist/file/createEntryInterface.d.ts +3 -0
  153. package/dist/file/createEntryInterface.mjs +13 -0
  154. package/dist/file/ensureDirectory.cjs +32 -0
  155. package/dist/file/ensureDirectory.d.ts +10 -0
  156. package/dist/file/ensureDirectory.mjs +30 -0
  157. package/dist/file/ensureFile.cjs +38 -0
  158. package/dist/file/ensureFile.d.ts +10 -0
  159. package/dist/file/ensureFile.mjs +36 -0
  160. package/dist/file/exists.cjs +29 -0
  161. package/dist/file/exists.d.ts +10 -0
  162. package/dist/file/exists.mjs +27 -0
  163. package/dist/file/fileInterface.cjs +74 -0
  164. package/dist/file/fileInterface.d.ts +30 -0
  165. package/dist/file/fileInterface.mjs +69 -0
  166. package/dist/file/folderInterface.cjs +74 -0
  167. package/dist/file/folderInterface.d.ts +32 -0
  168. package/dist/file/folderInterface.mjs +69 -0
  169. package/dist/file/index.cjs +122 -0
  170. package/dist/file/index.d.ts +36 -0
  171. package/dist/file/index.mjs +79 -0
  172. package/dist/file/link.cjs +44 -0
  173. package/dist/file/link.d.ts +11 -0
  174. package/dist/file/link.mjs +42 -0
  175. package/dist/file/linkStat.cjs +84 -0
  176. package/dist/file/linkStat.d.ts +11 -0
  177. package/dist/file/linkStat.mjs +80 -0
  178. package/dist/file/makeDirectory.cjs +36 -0
  179. package/dist/file/makeDirectory.d.ts +14 -0
  180. package/dist/file/makeDirectory.mjs +34 -0
  181. package/dist/file/makeTemporaryDirectory.cjs +30 -0
  182. package/dist/file/makeTemporaryDirectory.d.ts +9 -0
  183. package/dist/file/makeTemporaryDirectory.mjs +28 -0
  184. package/dist/file/makeTemporaryFile.cjs +45 -0
  185. package/dist/file/makeTemporaryFile.d.ts +10 -0
  186. package/dist/file/makeTemporaryFile.mjs +41 -0
  187. package/dist/file/move.cjs +45 -0
  188. package/dist/file/move.d.ts +11 -0
  189. package/dist/file/move.mjs +43 -0
  190. package/dist/file/readDirectory.cjs +20 -0
  191. package/dist/file/readDirectory.d.ts +14 -0
  192. package/dist/file/readDirectory.mjs +18 -0
  193. package/dist/file/readFile.cjs +33 -0
  194. package/dist/file/readFile.d.ts +10 -0
  195. package/dist/file/readFile.mjs +31 -0
  196. package/dist/file/readJsonFile.cjs +33 -0
  197. package/dist/file/readJsonFile.d.ts +11 -0
  198. package/dist/file/readJsonFile.mjs +31 -0
  199. package/dist/file/readLink.cjs +30 -0
  200. package/dist/file/readLink.d.ts +10 -0
  201. package/dist/file/readLink.mjs +28 -0
  202. package/dist/file/readTextFile.cjs +33 -0
  203. package/dist/file/readTextFile.d.ts +10 -0
  204. package/dist/file/readTextFile.mjs +31 -0
  205. package/dist/file/realPath.cjs +28 -0
  206. package/dist/file/realPath.d.ts +10 -0
  207. package/dist/file/realPath.mjs +26 -0
  208. package/dist/file/relocate.cjs +56 -0
  209. package/dist/file/relocate.d.ts +11 -0
  210. package/dist/file/relocate.mjs +53 -0
  211. package/dist/file/remove.cjs +38 -0
  212. package/dist/file/remove.d.ts +14 -0
  213. package/dist/file/remove.mjs +36 -0
  214. package/dist/file/rename.cjs +56 -0
  215. package/dist/file/rename.d.ts +11 -0
  216. package/dist/file/rename.mjs +53 -0
  217. package/dist/file/setMode.cjs +51 -0
  218. package/dist/file/setMode.d.ts +26 -0
  219. package/dist/file/setMode.mjs +48 -0
  220. package/dist/file/setOwner.cjs +37 -0
  221. package/dist/file/setOwner.d.ts +15 -0
  222. package/dist/file/setOwner.mjs +35 -0
  223. package/dist/file/setTime.cjs +39 -0
  224. package/dist/file/setTime.d.ts +17 -0
  225. package/dist/file/setTime.mjs +36 -0
  226. package/dist/file/stat.cjs +85 -0
  227. package/dist/file/stat.d.ts +42 -0
  228. package/dist/file/stat.mjs +81 -0
  229. package/dist/file/symlink.cjs +42 -0
  230. package/dist/file/symlink.d.ts +19 -0
  231. package/dist/file/symlink.mjs +40 -0
  232. package/dist/file/truncate.cjs +38 -0
  233. package/dist/file/truncate.d.ts +10 -0
  234. package/dist/file/truncate.mjs +35 -0
  235. package/dist/file/types/fileSystemEither.d.ts +2 -0
  236. package/dist/file/types/index.d.ts +1 -0
  237. package/dist/file/unknownEntryInterface.cjs +36 -0
  238. package/dist/file/unknownEntryInterface.d.ts +15 -0
  239. package/dist/file/unknownEntryInterface.mjs +33 -0
  240. package/dist/file/walkDirectory.cjs +34 -0
  241. package/dist/file/walkDirectory.d.ts +16 -0
  242. package/dist/file/walkDirectory.mjs +28 -0
  243. package/dist/file/writeFile.cjs +44 -0
  244. package/dist/file/writeFile.d.ts +11 -0
  245. package/dist/file/writeFile.mjs +42 -0
  246. package/dist/file/writeJsonFile.cjs +56 -0
  247. package/dist/file/writeJsonFile.d.ts +15 -0
  248. package/dist/file/writeJsonFile.mjs +53 -0
  249. package/dist/file/writeTextFile.cjs +44 -0
  250. package/dist/file/writeTextFile.d.ts +11 -0
  251. package/dist/file/writeTextFile.mjs +42 -0
  252. package/dist/implementor.cjs +64 -0
  253. package/dist/implementor.d.ts +35 -0
  254. package/dist/implementor.mjs +52 -0
  255. package/dist/index.cjs +74 -0
  256. package/dist/index.d.ts +9 -0
  257. package/dist/index.mjs +14 -0
  258. package/dist/kind.cjs +7 -0
  259. package/dist/kind.d.ts +2 -0
  260. package/dist/kind.mjs +5 -0
  261. package/package.json +81 -3
  262. package/README.md +0 -3
@@ -0,0 +1,244 @@
1
+ import { existConstraintKind } from "../dataStructure/constraint/exist.mjs";
2
+ import { mimeTypeConstraintKind } from "../dataStructure/constraint/mimeType.mjs";
3
+ import { sizeConstraintKind } from "../dataStructure/constraint/size.mjs";
4
+ import { fileTypeKind } from "../dataStructure/type/file.mjs";
5
+ import { arrayOptionKind } from "./options/defaults/array.mjs";
6
+ import { booleanOptionKind, createBooleanOption } from "./options/defaults/boolean.mjs";
7
+ import { simpleOptionKind } from "./options/defaults/simple.mjs";
8
+ import * as DCommon from "@duplojs/lang/common";
9
+ import * as DDataStructure from "@duplojs/lang/dataStructure";
10
+ import * as DArray from "@duplojs/lang/array";
11
+ import * as DPattern from "@duplojs/lang/pattern";
12
+ import * as DString from "@duplojs/lang/string";
13
+ import * as DPrinter from "@duplojs/lang/printer";
14
+ //#region scripts/command/help.ts
15
+ const helpOption = createBooleanOption("help", { aliases: ["h"] });
16
+ const syntax = (input) => DPrinter.colorized(input, "gray");
17
+ const section = (input, color) => DPrinter.colorizedBold(input, color);
18
+ const name = (input) => DPrinter.colorizedBold(input, "cyan");
19
+ const typeLabel = (input) => DPrinter.colorized(input, "blue");
20
+ const literal = (input) => DPrinter.colorized(input, "yellow");
21
+ const marker = (input) => DPrinter.colorized(input, "yellow");
22
+ const secondary = (input) => DPrinter.colorized(input, "gray");
23
+ const constraintLabel = (input) => DPrinter.colorized(input, "magenta");
24
+ function renderInline(input) {
25
+ return DPrinter.render(input, "");
26
+ }
27
+ function formatLiteral(value) {
28
+ if (typeof value === "string") return JSON.stringify(value);
29
+ if (typeof value === "bigint") return `${value.toString()}n`;
30
+ return String(value);
31
+ }
32
+ function formatBytes(value) {
33
+ const units = [
34
+ "B",
35
+ "KB",
36
+ "MB",
37
+ "GB",
38
+ "TB"
39
+ ];
40
+ let size = value;
41
+ let index = 0;
42
+ while (size >= 1024 && index < units.length - 1) {
43
+ size = size / 1024;
44
+ index++;
45
+ }
46
+ return `${Number.isInteger(size) ? size : size.toFixed(1)} ${units[index]}`;
47
+ }
48
+ 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")]));
50
+ }
51
+ function renderStringLength(constraints) {
52
+ const equal = DArray.find(constraints, DDataStructure.constraintIdentifier(DDataStructure.stringLengthEqualConstraintKind));
53
+ const min = DArray.find(constraints, DDataStructure.constraintIdentifier(DDataStructure.minCharactersConstraintKind));
54
+ const max = DArray.find(constraints, DDataStructure.constraintIdentifier(DDataStructure.maxCharactersConstraintKind));
55
+ if (equal) return [constraintLabel("length "), literal(String(equal.definition.length))];
56
+ if (min && max) return [constraintLabel("length "), literal(`${min.definition.min}..${max.definition.max}`)];
57
+ if (min) return [constraintLabel("min length "), literal(String(min.definition.min))];
58
+ if (max) return [constraintLabel("max length "), literal(String(max.definition.max))];
59
+ return null;
60
+ }
61
+ function renderArrayLength(constraints) {
62
+ const equal = DArray.find(constraints, DDataStructure.constraintIdentifier(DDataStructure.arrayLengthEqualConstraintKind));
63
+ const min = DArray.find(constraints, DDataStructure.constraintIdentifier(DDataStructure.minElementsConstraintKind));
64
+ const max = DArray.find(constraints, DDataStructure.constraintIdentifier(DDataStructure.maxElementsConstraintKind));
65
+ if (equal) return [constraintLabel("items "), literal(String(equal.definition.length))];
66
+ if (min && max) return [constraintLabel("items "), literal(`${min.definition.min}..${max.definition.max}`)];
67
+ if (min) return [constraintLabel("min items "), literal(String(min.definition.min))];
68
+ if (max) return [constraintLabel("max items "), literal(String(max.definition.max))];
69
+ return null;
70
+ }
71
+ function renderNumberBounds(constraints) {
72
+ const greaterThan = DArray.find(constraints, DDataStructure.constraintIdentifier(DDataStructure.greaterThanConstraintKind));
73
+ const greaterThanOrEqual = DArray.find(constraints, DDataStructure.constraintIdentifier(DDataStructure.greaterThanOrEqualConstraintKind));
74
+ const lessThan = DArray.find(constraints, DDataStructure.constraintIdentifier(DDataStructure.lessThanConstraintKind));
75
+ const lessThanOrEqual = DArray.find(constraints, DDataStructure.constraintIdentifier(DDataStructure.lessThanOrEqualConstraintKind));
76
+ 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
+ }
78
+ 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 }) => [
80
+ constraintLabel("> "),
81
+ literal(String(definition.greater)),
82
+ secondary(" and "),
83
+ constraintLabel("< "),
84
+ literal(String(definition.less))
85
+ ]).when(DDataStructure.constraintIdentifier(DDataStructure.betweenThanOrEqualConstraintKind), ({ definition }) => [constraintLabel("range "), literal(`${definition.greater}..${definition.less}`)]).when(DDataStructure.constraintIdentifier(DDataStructure.multipleOfConstraintKind), ({ definition }) => [constraintLabel("multiple of "), literal(String(definition.multiple))]).when(DDataStructure.constraintIdentifier(DDataStructure.regexConstraintKind), ({ definition }) => [constraintLabel("pattern "), literal(definition.regex.toString())]).when(DDataStructure.constraintIdentifier(mimeTypeConstraintKind), ({ definition }) => [constraintLabel("mime "), literal(definition.regex.toString())]).when(DDataStructure.constraintIdentifier(sizeConstraintKind), (constraint) => {
86
+ const { min, max } = constraint.definition;
87
+ if (min && max) return [constraintLabel("size "), literal(`${formatBytes(min)}..${formatBytes(max)}`)];
88
+ if (min) return [constraintLabel("min size "), literal(formatBytes(min))];
89
+ if (max) return [constraintLabel("max size "), literal(formatBytes(max))];
90
+ return null;
91
+ }).otherwise(DCommon.justReturn(null));
92
+ }
93
+ function renderConstraints(constraints) {
94
+ return DArray.filter([
95
+ renderStringLength(constraints),
96
+ renderArrayLength(constraints),
97
+ ...renderNumberBounds(constraints),
98
+ ...DArray.map(constraints, renderSimpleConstraint)
99
+ ], DCommon.truthy);
100
+ }
101
+ function renderDataStructure(dataStructure) {
102
+ const constraints = renderConstraints(dataStructure.definition.constraints);
103
+ if (DDataStructure.structureIdentifier(dataStructure, DDataStructure.lazyStructureKind)) {
104
+ const inner = renderDataStructure(dataStructure.definition.getter.value);
105
+ return {
106
+ main: inner.main,
107
+ constraints: [...inner.constraints, ...constraints]
108
+ };
109
+ }
110
+ if (DDataStructure.structureIdentifier(dataStructure, DDataStructure.typeStructureKind)) return {
111
+ main: renderType(dataStructure.definition.type),
112
+ constraints
113
+ };
114
+ if (DDataStructure.structureIdentifier(dataStructure, DDataStructure.arrayStructureKind)) {
115
+ const element = renderDataStructure(dataStructure.definition.element);
116
+ return {
117
+ main: [...element.main, typeLabel("[]")],
118
+ constraints: [...DArray.map(element.constraints, (constraint) => [constraintLabel("item "), constraint]), ...constraints]
119
+ };
120
+ }
121
+ if (DDataStructure.structureIdentifier(dataStructure, DDataStructure.unionStructureKind)) {
122
+ const values = DCommon.pipe(dataStructure.definition.values.value, DArray.filter((structure) => !DDataStructure.isUndefinedStructure(structure)), DArray.map(renderDataStructure));
123
+ if (values.length === 0) return {
124
+ main: [literal("undefined")],
125
+ constraints
126
+ };
127
+ if (values.length === 1) return {
128
+ main: values[0].main,
129
+ constraints: [...values[0].constraints, ...constraints]
130
+ };
131
+ return {
132
+ main: DArray.reduce(DArray.map(values, ({ main }) => main), DArray.reduceFrom([]), ({ element, index, lastValue, next }) => next([
133
+ ...lastValue,
134
+ index === 0 ? null : [secondary(" | ")],
135
+ element
136
+ ])),
137
+ constraints
138
+ };
139
+ }
140
+ return {
141
+ main: [typeLabel("unknown")],
142
+ constraints
143
+ };
144
+ }
145
+ function renderMetadata(help, markerValue) {
146
+ return renderInline([
147
+ ...help.main,
148
+ secondary(" · "),
149
+ markerValue === "required" ? marker(markerValue) : secondary(markerValue)
150
+ ]);
151
+ }
152
+ function renderConstraintLines(constraints, depth) {
153
+ return DArray.map(constraints, (constraint) => renderInline([
154
+ DPrinter.indent(depth),
155
+ secondary("↳ "),
156
+ constraint
157
+ ]));
158
+ }
159
+ function renderDescriptionLine(description, depth) {
160
+ return description ? renderInline([DPrinter.indent(depth), secondary(description)]) : null;
161
+ }
162
+ function renderUsage(command) {
163
+ const args = command.subject?.type === "argument" ? DArray.map(command.subject.args, (argument) => argument.optional ? `[${argument.name}]` : `<${argument.name}>`) : command.subject?.type === "subCommand" ? ["<command>"] : [];
164
+ return DCommon.pipe([
165
+ command.name,
166
+ ...args,
167
+ command.options.length > 0 ? "[options]" : null
168
+ ], DArray.filter(DCommon.truthy), DString.join(" "));
169
+ }
170
+ function renderOptionSignature(option) {
171
+ return [
172
+ DArray.map(option.aliases, (alias) => [
173
+ syntax("-"),
174
+ name(alias),
175
+ syntax(", ")
176
+ ]),
177
+ syntax("--"),
178
+ name(option.name),
179
+ simpleOptionKind.has(option) ? syntax(" <value>") : null,
180
+ arrayOptionKind.has(option) ? syntax(" <value...>") : null
181
+ ];
182
+ }
183
+ function renderOptionDetails(option, depth) {
184
+ if (simpleOptionKind.has(option) || arrayOptionKind.has(option)) {
185
+ const help = renderDataStructure(option.dataStructure);
186
+ return DArray.filter([
187
+ renderInline([DPrinter.indent(depth), renderMetadata(help, option.required ? "required" : "optional")]),
188
+ renderDescriptionLine(option.description, depth),
189
+ ...renderConstraintLines(help.constraints, depth)
190
+ ], DCommon.truthy);
191
+ }
192
+ if (booleanOptionKind.has(option)) return DArray.filter([renderInline([DPrinter.indent(depth), typeLabel("boolean")]), renderDescriptionLine(option.description, depth)], DCommon.truthy);
193
+ return DArray.filter([renderDescriptionLine(option.description, depth)], DCommon.truthy);
194
+ }
195
+ function renderOptionsHelp(options, depth) {
196
+ return DPrinter.renderParagraph([renderInline([DPrinter.indent(depth), section("OPTIONS", "magenta")]), DArray.map(options, (option) => DPrinter.renderParagraph([renderInline([DPrinter.indent(depth + 1), renderOptionSignature(option)]), renderOptionDetails(option, depth + 2)]))]);
197
+ }
198
+ function renderArgumentsHelp(args, depth) {
199
+ return DPrinter.renderParagraph([renderInline([DPrinter.indent(depth), section("ARGUMENTS", "cyan")]), DArray.map(args, (argument) => {
200
+ const help = renderDataStructure(argument.dataStructure);
201
+ return DPrinter.renderParagraph([
202
+ renderInline([
203
+ DPrinter.indent(depth + 1),
204
+ name(argument.name.padEnd(12)),
205
+ renderMetadata(help, argument.optional ? "optional" : "required")
206
+ ]),
207
+ renderDescriptionLine(argument.description, depth + 2),
208
+ renderConstraintLines(help.constraints, depth + 2)
209
+ ]);
210
+ })]);
211
+ }
212
+ function renderSubCommandsHelp(commands, depth) {
213
+ return DPrinter.renderParagraph([renderInline([DPrinter.indent(depth), section("COMMANDS", "green")]), DArray.map(commands, (command) => renderInline([
214
+ DPrinter.indent(depth + 1),
215
+ name(command.name.padEnd(16)),
216
+ command.description ? secondary(command.description) : null
217
+ ]))]);
218
+ }
219
+ function renderCommandHelp(command, depth) {
220
+ return [...DArray.filter([
221
+ renderInline([
222
+ DPrinter.indent(depth),
223
+ section("COMMAND", "green"),
224
+ " ",
225
+ DPrinter.colorizedBold(command.name, "cyan")
226
+ ]),
227
+ renderDescriptionLine(command.description, depth + 1),
228
+ DPrinter.renderParagraph([renderInline([DPrinter.indent(depth), section("USAGE", "blue")]), renderInline([DPrinter.indent(depth + 1), syntax(renderUsage(command))])]),
229
+ command.subject?.type === "argument" ? renderArgumentsHelp(command.subject.args, depth) : null,
230
+ command.subject?.type === "subCommand" ? renderSubCommandsHelp(command.subject.subCommands, depth) : null,
231
+ DArray.minElements(command.options, 1) ? renderOptionsHelp(command.options, depth) : null
232
+ ], DCommon.truthy)];
233
+ }
234
+ function logCommandHelp(command) {
235
+ console.log(DPrinter.renderParagraph(renderCommandHelp(command, 0)));
236
+ }
237
+ function renderExecOptionHelp(options, depth) {
238
+ return [renderInline([DPrinter.indent(depth), section("EXEC OPTIONS", "green")]), renderOptionsHelp(options, depth)];
239
+ }
240
+ function logExecOptionHelp(options) {
241
+ console.log(DPrinter.renderParagraph(renderExecOptionHelp(options, 0)));
242
+ }
243
+ //#endregion
244
+ export { helpOption, logCommandHelp, logExecOptionHelp, renderArgumentsHelp, renderCommandHelp, renderExecOptionHelp, renderOptionsHelp };
@@ -0,0 +1,78 @@
1
+ const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
2
+ const require_argument = require("./argument.cjs");
3
+ const require_error = require("./error.cjs");
4
+ const require_base = require("./options/base.cjs");
5
+ const require_array = require("./options/defaults/array.cjs");
6
+ const require_boolean = require("./options/defaults/boolean.cjs");
7
+ const require_simple = require("./options/defaults/simple.cjs");
8
+ const require_identifier = require("./options/identifier.cjs");
9
+ const require_help = require("./help.cjs");
10
+ const require_create = require("./create.cjs");
11
+ const require_exec = require("./exec.cjs");
12
+ const require_execOptions = require("./execOptions.cjs");
13
+ //#region scripts/command/index.ts
14
+ var command_exports = /* @__PURE__ */ require_runtime.__exportAll({
15
+ SymbolCommandError: () => require_error.SymbolCommandError,
16
+ argumentKind: () => require_argument.argumentKind,
17
+ arrayOptionKind: () => require_array.arrayOptionKind,
18
+ booleanOptionKind: () => require_boolean.booleanOptionKind,
19
+ constructOption: () => require_base.constructOption,
20
+ create: () => require_create.create,
21
+ createArgument: () => require_argument.createArgument,
22
+ createArrayOption: () => require_array.createArrayOption,
23
+ createBooleanOption: () => require_boolean.createBooleanOption,
24
+ createError: () => require_error.createError,
25
+ createOption: () => require_simple.createOption,
26
+ exec: () => require_exec.exec,
27
+ execOptions: () => require_execOptions.execOptions,
28
+ helpOption: () => require_help.helpOption,
29
+ interpretDataStructureError: () => require_error.interpretDataStructureError,
30
+ interpretErrorIssues: () => require_error.interpretErrorIssues,
31
+ interpretExecCommandError: () => require_error.interpretExecCommandError,
32
+ interpretExecOptionsError: () => require_error.interpretExecOptionsError,
33
+ isCommands: () => require_create.isCommands,
34
+ logCommandHelp: () => require_help.logCommandHelp,
35
+ logExecOptionHelp: () => require_help.logExecOptionHelp,
36
+ optionIdentifier: () => require_identifier.optionIdentifier,
37
+ optionKind: () => require_base.optionKind,
38
+ renderArgumentsHelp: () => require_help.renderArgumentsHelp,
39
+ renderCommandHelp: () => require_help.renderCommandHelp,
40
+ renderExecOptionHelp: () => require_help.renderExecOptionHelp,
41
+ renderOptionsHelp: () => require_help.renderOptionsHelp,
42
+ simpleOptionKind: () => require_simple.simpleOptionKind
43
+ });
44
+ //#endregion
45
+ exports.SymbolCommandError = require_error.SymbolCommandError;
46
+ exports.argumentKind = require_argument.argumentKind;
47
+ exports.arrayOptionKind = require_array.arrayOptionKind;
48
+ exports.booleanOptionKind = require_boolean.booleanOptionKind;
49
+ Object.defineProperty(exports, "command_exports", {
50
+ enumerable: true,
51
+ get: function() {
52
+ return command_exports;
53
+ }
54
+ });
55
+ exports.constructOption = require_base.constructOption;
56
+ exports.create = require_create.create;
57
+ exports.createArgument = require_argument.createArgument;
58
+ exports.createArrayOption = require_array.createArrayOption;
59
+ exports.createBooleanOption = require_boolean.createBooleanOption;
60
+ exports.createError = require_error.createError;
61
+ exports.createOption = require_simple.createOption;
62
+ exports.exec = require_exec.exec;
63
+ exports.execOptions = require_execOptions.execOptions;
64
+ exports.helpOption = require_help.helpOption;
65
+ exports.interpretDataStructureError = require_error.interpretDataStructureError;
66
+ exports.interpretErrorIssues = require_error.interpretErrorIssues;
67
+ exports.interpretExecCommandError = require_error.interpretExecCommandError;
68
+ exports.interpretExecOptionsError = require_error.interpretExecOptionsError;
69
+ exports.isCommands = require_create.isCommands;
70
+ exports.logCommandHelp = require_help.logCommandHelp;
71
+ exports.logExecOptionHelp = require_help.logExecOptionHelp;
72
+ exports.optionIdentifier = require_identifier.optionIdentifier;
73
+ exports.optionKind = require_base.optionKind;
74
+ exports.renderArgumentsHelp = require_help.renderArgumentsHelp;
75
+ exports.renderCommandHelp = require_help.renderCommandHelp;
76
+ exports.renderExecOptionHelp = require_help.renderExecOptionHelp;
77
+ exports.renderOptionsHelp = require_help.renderOptionsHelp;
78
+ exports.simpleOptionKind = require_simple.simpleOptionKind;
@@ -0,0 +1,8 @@
1
+ export type * from './types';
2
+ export * from './argument';
3
+ export * from './options';
4
+ export * from './create';
5
+ export * from './exec';
6
+ export * from './execOptions';
7
+ export * from './error';
8
+ export * from './help';
@@ -0,0 +1,45 @@
1
+ import { __exportAll } from "../_virtual/_rolldown/runtime.mjs";
2
+ import { argumentKind, createArgument } from "./argument.mjs";
3
+ import { SymbolCommandError, createError, interpretDataStructureError, interpretErrorIssues, interpretExecCommandError, interpretExecOptionsError } from "./error.mjs";
4
+ import { constructOption, optionKind } from "./options/base.mjs";
5
+ import { arrayOptionKind, createArrayOption } from "./options/defaults/array.mjs";
6
+ import { booleanOptionKind, createBooleanOption } from "./options/defaults/boolean.mjs";
7
+ import { createOption, simpleOptionKind } from "./options/defaults/simple.mjs";
8
+ import { optionIdentifier } from "./options/identifier.mjs";
9
+ import { helpOption, logCommandHelp, logExecOptionHelp, renderArgumentsHelp, renderCommandHelp, renderExecOptionHelp, renderOptionsHelp } from "./help.mjs";
10
+ import { create, isCommands } from "./create.mjs";
11
+ import { exec } from "./exec.mjs";
12
+ import { execOptions } from "./execOptions.mjs";
13
+ //#region scripts/command/index.ts
14
+ var command_exports = /* @__PURE__ */ __exportAll({
15
+ SymbolCommandError: () => SymbolCommandError,
16
+ argumentKind: () => argumentKind,
17
+ arrayOptionKind: () => arrayOptionKind,
18
+ booleanOptionKind: () => booleanOptionKind,
19
+ constructOption: () => constructOption,
20
+ create: () => create,
21
+ createArgument: () => createArgument,
22
+ createArrayOption: () => createArrayOption,
23
+ createBooleanOption: () => createBooleanOption,
24
+ createError: () => createError,
25
+ createOption: () => createOption,
26
+ exec: () => exec,
27
+ execOptions: () => execOptions,
28
+ helpOption: () => helpOption,
29
+ interpretDataStructureError: () => interpretDataStructureError,
30
+ interpretErrorIssues: () => interpretErrorIssues,
31
+ interpretExecCommandError: () => interpretExecCommandError,
32
+ interpretExecOptionsError: () => interpretExecOptionsError,
33
+ isCommands: () => isCommands,
34
+ logCommandHelp: () => logCommandHelp,
35
+ logExecOptionHelp: () => logExecOptionHelp,
36
+ optionIdentifier: () => optionIdentifier,
37
+ optionKind: () => optionKind,
38
+ renderArgumentsHelp: () => renderArgumentsHelp,
39
+ renderCommandHelp: () => renderCommandHelp,
40
+ renderExecOptionHelp: () => renderExecOptionHelp,
41
+ renderOptionsHelp: () => renderOptionsHelp,
42
+ simpleOptionKind: () => simpleOptionKind
43
+ });
44
+ //#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 };
@@ -0,0 +1,7 @@
1
+ const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
2
+ let _duplojs_lang_kind = require("@duplojs/lang/kind");
3
+ _duplojs_lang_kind = require_runtime.__toESM(_duplojs_lang_kind, 1);
4
+ //#region scripts/command/kind.ts
5
+ const createKind = _duplojs_lang_kind.createNamespace("DuplojsServerCommand");
6
+ //#endregion
7
+ exports.createKind = createKind;
@@ -0,0 +1,2 @@
1
+ import * as DKind from "@duplojs/lang/kind";
2
+ export declare const createKind: <GenericName extends string, GenericKindValue extends unknown = unknown>(name: GenericName & import('@duplojs/lang/string').ForbiddenContain<GenericName, DKind.ForbiddenKindNameCharacter>) => DKind.Handler<DKind.Definition<`@DuplojsServerCommand/${GenericName}`, GenericKindValue>>;
@@ -0,0 +1,5 @@
1
+ import * as DKind from "@duplojs/lang/kind";
2
+ //#region scripts/command/kind.ts
3
+ const createKind = DKind.createNamespace("DuplojsServerCommand");
4
+ //#endregion
5
+ export { createKind };
@@ -0,0 +1,68 @@
1
+ const require_runtime = require("../../_virtual/_rolldown/runtime.cjs");
2
+ const require_kind = require("../kind.cjs");
3
+ const require_error = require("../error.cjs");
4
+ let _duplojs_lang_common = require("@duplojs/lang/common");
5
+ _duplojs_lang_common = require_runtime.__toESM(_duplojs_lang_common, 1);
6
+ let _duplojs_lang_array = require("@duplojs/lang/array");
7
+ _duplojs_lang_array = require_runtime.__toESM(_duplojs_lang_array, 1);
8
+ let _duplojs_lang_string = require("@duplojs/lang/string");
9
+ _duplojs_lang_string = require_runtime.__toESM(_duplojs_lang_string, 1);
10
+ //#region scripts/command/options/base.ts
11
+ const optionKind = require_kind.createKind("command-option");
12
+ const regexOption = /^(?<dashes>-{1,2})(?<key>[A-Za-z0-9][A-Za-z0-9_-]*)(?:=(?<value>.*))?$/;
13
+ function constructOption(kindHandler, createConstructor) {
14
+ return createConstructor({ init: (name, execute, params, ...rest) => {
15
+ const self = {
16
+ ...Object.fromEntries(Object.entries(rest[0] ?? {}).map(([key, prop]) => typeof prop === "function" ? [key, (...args) => prop(self, ...args)] : [key, prop])),
17
+ name,
18
+ 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
+ });
30
+ const { value, argumentRest } = _duplojs_lang_common.justExec(() => {
31
+ if (!result) return {
32
+ value: null,
33
+ argumentRest: args
34
+ };
35
+ if (result.value === void 0) {
36
+ const nextArg = args[result.index + 1];
37
+ if (nextArg === void 0 || _duplojs_lang_string.test(nextArg, regexOption)) return {
38
+ value: void 0,
39
+ argumentRest: _duplojs_lang_array.spliceDelete(args, result.index, 1)
40
+ };
41
+ return {
42
+ value: nextArg,
43
+ argumentRest: _duplojs_lang_array.spliceDelete(args, result.index, 2)
44
+ };
45
+ }
46
+ return {
47
+ value: result.value,
48
+ argumentRest: _duplojs_lang_array.spliceDelete(args, result.index, 1)
49
+ };
50
+ });
51
+ const executeResult = await execute(self, value, error);
52
+ if (executeResult === require_error.SymbolCommandError) return require_error.SymbolCommandError;
53
+ return {
54
+ result: executeResult,
55
+ argumentRest
56
+ };
57
+ },
58
+ aliases: params?.aliases ?? [],
59
+ description: params?.description ?? null,
60
+ [optionKind.runTimeKey]: null,
61
+ [kindHandler.runTimeKey]: null
62
+ };
63
+ return self;
64
+ } });
65
+ }
66
+ //#endregion
67
+ exports.constructOption = constructOption;
68
+ exports.optionKind = optionKind;
@@ -0,0 +1,24 @@
1
+ import { Error, SymbolCommandError } from '../error';
2
+ import * as DCommon from "@duplojs/lang/common";
3
+ import type * as DKind from "@duplojs/lang/kind";
4
+ export declare const optionKind: DKind.Handler<DKind.Definition<"@DuplojsServerCommand/command-option", unknown>>;
5
+ export interface Option<GenericName extends string = string, GenericValue extends unknown = unknown> extends DKind.Kind<typeof optionKind> {
6
+ readonly name: GenericName;
7
+ readonly description: string | null;
8
+ readonly aliases: readonly string[];
9
+ execute(args: readonly string[], error: Error): Promise<{
10
+ result: GenericValue;
11
+ argumentRest: readonly string[];
12
+ } | SymbolCommandError>;
13
+ }
14
+ export interface CreateOptionInitParams {
15
+ description: string | null;
16
+ aliases: readonly string[];
17
+ }
18
+ export type CreateOptionInitRest<GenericOption extends Option = Option> = {
19
+ [Prop in Exclude<keyof GenericOption, keyof Option>]: GenericOption[Prop] extends DCommon.AnyFunction ? (self: GenericOption, ...args: Parameters<GenericOption[Prop]>) => ReturnType<GenericOption[Prop]> : GenericOption[Prop];
20
+ };
21
+ export interface CreateOptionConstructorParams<GenericKindHandler extends DKind.Handler = DKind.Handler> {
22
+ init<GenericOption extends (Option & DKind.Kind<GenericKindHandler>)>(name: GenericOption["name"], execute: (self: GenericOption, value: string | undefined | null, error: Error) => DCommon.MaybePromise<Extract<Awaited<ReturnType<GenericOption["execute"]>>, object>["result"] | SymbolCommandError>, params: CreateOptionInitParams, ...args: DCommon.IsNever<Exclude<keyof GenericOption, keyof Option>> extends true ? [] : [rest: CreateOptionInitRest<GenericOption>]): NoInfer<GenericOption>;
23
+ }
24
+ export declare function constructOption<GenericKindHandler extends DKind.Handler, GenericConstructor extends ((...args: any[]) => (Option & DKind.Kind<GenericKindHandler>))>(kindHandler: GenericKindHandler, createConstructor: (params: CreateOptionConstructorParams<GenericKindHandler>) => GenericConstructor): GenericConstructor;
@@ -0,0 +1,63 @@
1
+ import { createKind } from "../kind.mjs";
2
+ import { SymbolCommandError } from "../error.mjs";
3
+ import * as DCommon from "@duplojs/lang/common";
4
+ import * as DArray from "@duplojs/lang/array";
5
+ import * as DString from "@duplojs/lang/string";
6
+ //#region scripts/command/options/base.ts
7
+ const optionKind = createKind("command-option");
8
+ const regexOption = /^(?<dashes>-{1,2})(?<key>[A-Za-z0-9][A-Za-z0-9_-]*)(?:=(?<value>.*))?$/;
9
+ function constructOption(kindHandler, createConstructor) {
10
+ return createConstructor({ init: (name, execute, params, ...rest) => {
11
+ const self = {
12
+ ...Object.fromEntries(Object.entries(rest[0] ?? {}).map(([key, prop]) => typeof prop === "function" ? [key, (...args) => prop(self, ...args)] : [key, prop])),
13
+ name,
14
+ execute: async (args, error) => {
15
+ const result = DArray.reduce(args, DArray.reduceFrom(null), ({ element, next, exit, index }) => {
16
+ const extractResult = DString.extract(element, regexOption);
17
+ if (!extractResult) return next(null);
18
+ const result = {
19
+ key: extractResult.namedGroups.key,
20
+ value: extractResult.namedGroups?.value,
21
+ index
22
+ };
23
+ if (self.name !== result.key && (!DArray.includes(self.aliases, result.key) || extractResult.namedGroups?.dashes !== "-")) return next(null);
24
+ return exit(result);
25
+ });
26
+ const { value, argumentRest } = DCommon.justExec(() => {
27
+ if (!result) return {
28
+ value: null,
29
+ argumentRest: args
30
+ };
31
+ if (result.value === void 0) {
32
+ const nextArg = args[result.index + 1];
33
+ if (nextArg === void 0 || DString.test(nextArg, regexOption)) return {
34
+ value: void 0,
35
+ argumentRest: DArray.spliceDelete(args, result.index, 1)
36
+ };
37
+ return {
38
+ value: nextArg,
39
+ argumentRest: DArray.spliceDelete(args, result.index, 2)
40
+ };
41
+ }
42
+ return {
43
+ value: result.value,
44
+ argumentRest: DArray.spliceDelete(args, result.index, 1)
45
+ };
46
+ });
47
+ const executeResult = await execute(self, value, error);
48
+ if (executeResult === SymbolCommandError) return SymbolCommandError;
49
+ return {
50
+ result: executeResult,
51
+ argumentRest
52
+ };
53
+ },
54
+ aliases: params?.aliases ?? [],
55
+ description: params?.description ?? null,
56
+ [optionKind.runTimeKey]: null,
57
+ [kindHandler.runTimeKey]: null
58
+ };
59
+ return self;
60
+ } });
61
+ }
62
+ //#endregion
63
+ export { constructOption, optionKind };
@@ -0,0 +1,35 @@
1
+ const require_runtime = require("../../../_virtual/_rolldown/runtime.cjs");
2
+ const require_string = require("../../../dataStructure/common/codec/defaults/string.cjs");
3
+ const require_kind = require("../../kind.cjs");
4
+ const require_base = require("../base.cjs");
5
+ let _duplojs_lang_common = require("@duplojs/lang/common");
6
+ _duplojs_lang_common = require_runtime.__toESM(_duplojs_lang_common, 1);
7
+ let _duplojs_lang_either = require("@duplojs/lang/either");
8
+ _duplojs_lang_either = require_runtime.__toESM(_duplojs_lang_either, 1);
9
+ let _duplojs_lang_dataStructure = require("@duplojs/lang/dataStructure");
10
+ _duplojs_lang_dataStructure = require_runtime.__toESM(_duplojs_lang_dataStructure, 1);
11
+ let _duplojs_lang_string = require("@duplojs/lang/string");
12
+ _duplojs_lang_string = require_runtime.__toESM(_duplojs_lang_string, 1);
13
+ //#region scripts/command/options/defaults/array.ts
14
+ const defaultSeparator = ",";
15
+ const arrayOptionKind = require_kind.createKind("command-array-option");
16
+ const createArrayOption = require_base.constructOption(arrayOptionKind, ({ init }) => (name, dataStructure, params) => init(name, async (self, value, error) => {
17
+ if (value === null && self.required === true) return error.addRequiredOptionIssue(self.name);
18
+ if (value === null) return;
19
+ if (value === void 0) return error.addRequiredOptionValueIssue(self.name);
20
+ const result = await self.dataStructure.asyncDecode(require_string.codecsString, _duplojs_lang_string.split(value, self.separator));
21
+ if (_duplojs_lang_either.isLeft(result)) return error.addDataStructureOptionIssue(self.name, value, _duplojs_lang_either.unwrapLeft(result));
22
+ return _duplojs_lang_either.unwrapRight(result);
23
+ }, {
24
+ description: params?.description ?? null,
25
+ aliases: params?.aliases ?? []
26
+ }, {
27
+ dataStructure: _duplojs_lang_common.justExec(() => _duplojs_lang_common.pipe(dataStructure, _duplojs_lang_dataStructure.array, (dataStructure) => params?.min !== void 0 ? dataStructure.addConstraint(_duplojs_lang_dataStructure.minElements(params.min)) : dataStructure, (dataStructure) => params?.max !== void 0 ? dataStructure.addConstraint(_duplojs_lang_dataStructure.maxElements(params.max)) : dataStructure)),
28
+ required: params?.required ?? false,
29
+ min: params?.min,
30
+ max: params?.max,
31
+ separator: params?.separator ?? defaultSeparator
32
+ }));
33
+ //#endregion
34
+ exports.arrayOptionKind = arrayOptionKind;
35
+ exports.createArrayOption = createArrayOption;
@@ -0,0 +1,24 @@
1
+ import { Option } from '../base';
2
+ import { EligibleType } from '../../types';
3
+ import * as DCommon from "@duplojs/lang/common";
4
+ import type * as DKind from "@duplojs/lang/kind";
5
+ import * as DDataStructure from "@duplojs/lang/dataStructure";
6
+ import type * as DNumber from "@duplojs/lang/number";
7
+ import type * as DArray from "@duplojs/lang/array";
8
+ export declare const arrayOptionKind: DKind.Handler<DKind.Definition<"@DuplojsServerCommand/command-array-option", unknown>>;
9
+ export interface ArrayOption<GenericName extends string = string, GenericValue extends (readonly EligibleType[] | undefined) = (readonly EligibleType[] | undefined)> extends DCommon.Forward<Option<GenericName, GenericValue> & DKind.Kind<typeof arrayOptionKind>> {
10
+ readonly dataStructure: DDataStructure.Structure<GenericValue>;
11
+ readonly required: boolean;
12
+ readonly separator: string;
13
+ readonly min?: number;
14
+ readonly max?: number;
15
+ }
16
+ export interface CreateArrayOptionParams {
17
+ description?: string;
18
+ aliases?: readonly string[];
19
+ min?: number;
20
+ max?: number;
21
+ required?: boolean;
22
+ separator?: string;
23
+ }
24
+ export declare const createArrayOption: <GenericName extends string, GenericStructure extends DDataStructure.Structure<EligibleType>, GenericValue extends DDataStructure.StructureValue<GenericStructure>, const GenericParams extends CreateArrayOptionParams = {}>(name: GenericName, dataStructure: GenericStructure, params?: GenericParams & CreateArrayOptionParams) => ArrayOption<GenericName, ((readonly GenericValue[] & (DNumber.IsLiteral<Extract<GenericParams["min"], number>> extends true ? DArray.MinElements<Extract<GenericParams["min"], number>> : unknown) & (DNumber.IsLiteral<Extract<GenericParams["max"], number>> extends true ? DArray.MaxElements<Extract<GenericParams["max"], number>> : unknown)) | (DCommon.IsEqual<GenericParams["required"], true> extends true ? never : undefined))>;