@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,140 @@
1
+ import { defaultErrorInterpreterCodecDictionary, defaultErrorInterpreterDataStructureDictionary } from "../dataStructure/common/error/defaultInterpreter.mjs";
2
+ import * as DCommon from "@duplojs/lang/common";
3
+ import * as DDataStructure from "@duplojs/lang/dataStructure";
4
+ import * as DArray from "@duplojs/lang/array";
5
+ import * as DPattern from "@duplojs/lang/pattern";
6
+ import * as DString from "@duplojs/lang/string";
7
+ import * as DPrinter from "@duplojs/lang/printer";
8
+ import * as DModeling from "@duplojs/lang/modeling";
9
+ //#region scripts/command/error.ts
10
+ const SymbolCommandError = Symbol.for("SymbolCommandError");
11
+ function createError(commandName) {
12
+ const issues = [];
13
+ const currentPath = [commandName];
14
+ return {
15
+ issues,
16
+ currentPath,
17
+ pushPath: (path) => void currentPath.push(path),
18
+ addRequiredOptionIssue: (optionName) => {
19
+ issues.push(DModeling.taggedObject("RequiredOptionIssue", {
20
+ optionName,
21
+ data: void 0,
22
+ path: currentPath.join(".")
23
+ }));
24
+ return SymbolCommandError;
25
+ },
26
+ addRequiredOptionValueIssue: (optionName) => {
27
+ issues.push(DModeling.taggedObject("RequiredOptionValueIssue", {
28
+ optionName,
29
+ data: void 0,
30
+ path: currentPath.join(".")
31
+ }));
32
+ return SymbolCommandError;
33
+ },
34
+ addUnexpectedOptionValueIssue: (optionName, data) => {
35
+ issues.push(DModeling.taggedObject("UnexpectedOptionValueIssue", {
36
+ optionName,
37
+ data,
38
+ path: currentPath.join(".")
39
+ }));
40
+ return SymbolCommandError;
41
+ },
42
+ addDataStructureOptionIssue: (optionName, data, dataStructureError) => {
43
+ issues.push(DModeling.taggedObject("DataStructureOptionIssue", {
44
+ optionName,
45
+ data,
46
+ dataStructureError,
47
+ path: currentPath.join(".")
48
+ }));
49
+ return SymbolCommandError;
50
+ },
51
+ addRequiredArgumentIssue: (argumentName) => {
52
+ issues.push(DModeling.taggedObject("RequiredArgumentIssue", {
53
+ argumentName,
54
+ data: void 0,
55
+ path: currentPath.join(".")
56
+ }));
57
+ return SymbolCommandError;
58
+ },
59
+ addDataStructureArgumentIssue: (argumentName, data, dataStructureError) => {
60
+ issues.push(DModeling.taggedObject("DataStructureArgumentIssue", {
61
+ argumentName,
62
+ data,
63
+ dataStructureError,
64
+ path: currentPath.join(".")
65
+ }));
66
+ return SymbolCommandError;
67
+ },
68
+ addTooMuchCommandArgumentIssue: (expect, receive) => {
69
+ issues.push(DModeling.taggedObject("TooMuchCommandArgumentIssue", {
70
+ expect,
71
+ receive,
72
+ path: currentPath.join(".")
73
+ }));
74
+ return SymbolCommandError;
75
+ }
76
+ };
77
+ }
78
+ function interpretDataStructureError(error, dataStructureErrorInterpreter) {
79
+ return DCommon.pipe(dataStructureErrorInterpreter(error), DArray.map(({ interpretedMessage, path }) => DPrinter.render([
80
+ DPrinter.indent(1),
81
+ "↳ ",
82
+ DPrinter.colorizedBold(path || "<value>", "cyan"),
83
+ " : ",
84
+ DPrinter.colorizedBold(interpretedMessage.subSource ?? interpretedMessage.interpretedSubSource ?? interpretedMessage.source ?? interpretedMessage.interpretedSource ?? "unknown data structure error.", "red")
85
+ ], "")));
86
+ }
87
+ function interpretErrorIssues(issues, dataStructureErrorInterpreter) {
88
+ return DPrinter.renderParagraph([DArray.map(issues, DPattern.matchWithTaggedObject({
89
+ DataStructureArgumentIssue: ({ argumentName, dataStructureError }) => [DPrinter.render([
90
+ DPrinter.indent(1),
91
+ DPrinter.colorizedBold("ARGUMENT: ", "magenta"),
92
+ `--${argumentName}`
93
+ ], ""), interpretDataStructureError(dataStructureError, dataStructureErrorInterpreter)],
94
+ RequiredArgumentIssue: ({ argumentName }) => [DPrinter.render([
95
+ DPrinter.indent(1),
96
+ DPrinter.colorizedBold("ARGUMENT: ", "magenta"),
97
+ argumentName
98
+ ], ""), `${DPrinter.indent(1)}↳ Missing Argument`],
99
+ DataStructureOptionIssue: ({ optionName, dataStructureError }) => [DPrinter.render([
100
+ DPrinter.indent(1),
101
+ DPrinter.colorizedBold("OPTION: ", "blue"),
102
+ `--${optionName}`
103
+ ], ""), interpretDataStructureError(dataStructureError, dataStructureErrorInterpreter)],
104
+ RequiredOptionIssue: ({ optionName }) => [DPrinter.render([
105
+ DPrinter.indent(1),
106
+ DPrinter.colorizedBold("OPTION: ", "blue"),
107
+ `--${optionName}`
108
+ ], ""), `${DPrinter.indent(1)}↳ Missing Option`],
109
+ RequiredOptionValueIssue: ({ optionName }) => [DPrinter.render([
110
+ DPrinter.indent(1),
111
+ DPrinter.colorizedBold("OPTION: ", "blue"),
112
+ `--${optionName}`
113
+ ], ""), `${DPrinter.indent(1)}↳ Missing Option Value`],
114
+ UnexpectedOptionValueIssue: ({ optionName }) => [DPrinter.render([
115
+ DPrinter.indent(1),
116
+ DPrinter.colorizedBold("OPTION: ", "blue"),
117
+ `--${optionName}`
118
+ ], ""), `${DPrinter.indent(1)}↳ Unexpected Value At This Option`],
119
+ TooMuchCommandArgumentIssue: ({ expect, receive }) => [`${DPrinter.indent(1)} Too Much Arguments`, `${DPrinter.indent(1)} expect: ${expect} receive: ${receive}`]
120
+ })), issues.length === 0 && "No issue found"]);
121
+ }
122
+ const defaultDataStructureErrorInterpreter = DDataStructure.createErrorInterpreter(defaultErrorInterpreterDataStructureDictionary, defaultErrorInterpreterCodecDictionary);
123
+ function interpretExecCommandError(error, dataStructureErrorInterpreter) {
124
+ return DPrinter.renderParagraph([DPrinter.render([
125
+ DPrinter.colorizedBold("Command failed", "red"),
126
+ DPrinter.back,
127
+ DPrinter.indent(1),
128
+ DPrinter.colorizedBold("COMMAND: ", "cyan"),
129
+ DString.join(error.currentPath, " ")
130
+ ], ""), interpretErrorIssues(error.issues, dataStructureErrorInterpreter ?? defaultDataStructureErrorInterpreter)]);
131
+ }
132
+ function interpretExecOptionsError(error, dataStructureErrorInterpreter) {
133
+ return DPrinter.renderParagraph([
134
+ DPrinter.colorizedBold("Invalid options", "red"),
135
+ DPrinter.back,
136
+ interpretErrorIssues(error.issues, dataStructureErrorInterpreter ?? defaultDataStructureErrorInterpreter)
137
+ ]);
138
+ }
139
+ //#endregion
140
+ export { SymbolCommandError, createError, interpretDataStructureError, interpretErrorIssues, interpretExecCommandError, interpretExecOptionsError };
@@ -0,0 +1,19 @@
1
+ const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
2
+ const require_getProcessArguments = require("../common/getProcessArguments.cjs");
3
+ const require_error = require("./error.cjs");
4
+ const require_create = require("./create.cjs");
5
+ let _duplojs_lang_either = require("@duplojs/lang/either");
6
+ _duplojs_lang_either = require_runtime.__toESM(_duplojs_lang_either, 1);
7
+ //#region scripts/command/exec.ts
8
+ async function exec(...args) {
9
+ const [params, execute] = args.length === 1 ? [{}, args[0]] : args;
10
+ const displayName = params.displayName ?? "root";
11
+ const error = require_error.createError(displayName);
12
+ if (await require_create.create(displayName, params, execute).execute(require_getProcessArguments.getProcessArguments(), error) === require_error.SymbolCommandError) {
13
+ console.error(require_error.interpretExecCommandError(error, params?.dataStructureErrorInterpreter));
14
+ return _duplojs_lang_either.error(error);
15
+ }
16
+ return _duplojs_lang_either.ok();
17
+ }
18
+ //#endregion
19
+ exports.exec = exec;
@@ -0,0 +1,13 @@
1
+ import { CreateCommandExecuteParams, CreateCommandParams, Subjects } from './create';
2
+ import { Error } from './error';
3
+ import { Option } from './options';
4
+ import { Argument } from './argument';
5
+ import type * as DCommon from "@duplojs/lang/common";
6
+ import * as DEither from "@duplojs/lang/either";
7
+ 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;
10
+ dataStructureErrorInterpreter?: DDataStructure.ErrorInterpreter;
11
+ }
12
+ 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>>;
@@ -0,0 +1,17 @@
1
+ import { getProcessArguments } from "../common/getProcessArguments.mjs";
2
+ import { SymbolCommandError, createError, interpretExecCommandError } from "./error.mjs";
3
+ import { create } from "./create.mjs";
4
+ import * as DEither from "@duplojs/lang/either";
5
+ //#region scripts/command/exec.ts
6
+ async function exec(...args) {
7
+ const [params, execute] = args.length === 1 ? [{}, args[0]] : args;
8
+ const displayName = params.displayName ?? "root";
9
+ const error = createError(displayName);
10
+ if (await create(displayName, params, execute).execute(getProcessArguments(), error) === SymbolCommandError) {
11
+ console.error(interpretExecCommandError(error, params?.dataStructureErrorInterpreter));
12
+ return DEither.error(error);
13
+ }
14
+ return DEither.ok();
15
+ }
16
+ //#endregion
17
+ export { exec };
@@ -0,0 +1,41 @@
1
+ const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
2
+ const require_getProcessArguments = require("../common/getProcessArguments.cjs");
3
+ const require_error = require("./error.cjs");
4
+ const require_help = require("./help.cjs");
5
+ let _duplojs_lang_either = require("@duplojs/lang/either");
6
+ _duplojs_lang_either = require_runtime.__toESM(_duplojs_lang_either, 1);
7
+ let _duplojs_lang_object = require("@duplojs/lang/object");
8
+ _duplojs_lang_object = require_runtime.__toESM(_duplojs_lang_object, 1);
9
+ let _duplojs_lang_generator = require("@duplojs/lang/generator");
10
+ _duplojs_lang_generator = require_runtime.__toESM(_duplojs_lang_generator, 1);
11
+ //#region scripts/command/execOptions.ts
12
+ async function execOptions(options, params) {
13
+ const processArguments = require_getProcessArguments.getProcessArguments();
14
+ const error = require_error.createError("root");
15
+ const help = await require_help.helpOption.execute(processArguments, error);
16
+ if (help === require_error.SymbolCommandError) {
17
+ console.error(require_error.interpretExecOptionsError(error, params?.dataStructureErrorInterpreter));
18
+ return _duplojs_lang_either.error(error);
19
+ } else if (help.result) {
20
+ require_help.logExecOptionHelp(options);
21
+ return _duplojs_lang_either.right("log-help");
22
+ }
23
+ const result = await _duplojs_lang_generator.asyncReduce(options, _duplojs_lang_generator.reduceFrom({
24
+ options: {},
25
+ restArgs: processArguments
26
+ }), async ({ item: option, lastValue, next, exit }) => {
27
+ const optionResult = await option.execute(lastValue.restArgs, error);
28
+ if (optionResult === require_error.SymbolCommandError) return exit(require_error.SymbolCommandError);
29
+ return next({
30
+ options: _duplojs_lang_object.override(lastValue.options, { [option.name]: optionResult.result }),
31
+ restArgs: optionResult.argumentRest
32
+ });
33
+ });
34
+ if (result === require_error.SymbolCommandError) {
35
+ console.error(require_error.interpretExecOptionsError(error, params?.dataStructureErrorInterpreter));
36
+ return _duplojs_lang_either.error(error);
37
+ }
38
+ return _duplojs_lang_either.success(result.options);
39
+ }
40
+ //#endregion
41
+ exports.execOptions = execOptions;
@@ -0,0 +1,14 @@
1
+ import { Error } from './error';
2
+ import { Option } from './options';
3
+ import { ForbiddenDuplicateName } from './types';
4
+ import type * as DCommon from "@duplojs/lang/common";
5
+ import * as DEither from "@duplojs/lang/either";
6
+ import type * as DDataStructure from "@duplojs/lang/dataStructure";
7
+ type ComputeResult<GenericOptions extends DCommon.AnyTuple<Option>> = DCommon.SimplifyTopLevel<{
8
+ readonly [GenericOption in GenericOptions[number] as GenericOption extends Option<infer GenericName, unknown> ? GenericName : never]: GenericOption extends Option<string, infer GenericResult> ? GenericResult : never;
9
+ }>;
10
+ export interface ExecOptionsParams {
11
+ dataStructureErrorInterpreter?: DDataStructure.ErrorInterpreter;
12
+ }
13
+ export declare function execOptions<GenericOptions extends DCommon.AnyTuple<Option>>(options: GenericOptions & ForbiddenDuplicateName<GenericOptions, "option">, params?: ExecOptionsParams): Promise<DEither.Success<Extract<ComputeResult<GenericOptions>, any>> | DEither.Right<"log-help"> | DEither.Error<Error>>;
14
+ export {};
@@ -0,0 +1,37 @@
1
+ import { getProcessArguments } from "../common/getProcessArguments.mjs";
2
+ import { SymbolCommandError, createError, interpretExecOptionsError } from "./error.mjs";
3
+ import { helpOption, logExecOptionHelp } from "./help.mjs";
4
+ import * as DEither from "@duplojs/lang/either";
5
+ import * as DObject from "@duplojs/lang/object";
6
+ import * as DGenerator from "@duplojs/lang/generator";
7
+ //#region scripts/command/execOptions.ts
8
+ async function execOptions(options, params) {
9
+ const processArguments = getProcessArguments();
10
+ const error = createError("root");
11
+ const help = await helpOption.execute(processArguments, error);
12
+ if (help === SymbolCommandError) {
13
+ console.error(interpretExecOptionsError(error, params?.dataStructureErrorInterpreter));
14
+ return DEither.error(error);
15
+ } else if (help.result) {
16
+ logExecOptionHelp(options);
17
+ return DEither.right("log-help");
18
+ }
19
+ const result = await DGenerator.asyncReduce(options, DGenerator.reduceFrom({
20
+ options: {},
21
+ restArgs: processArguments
22
+ }), async ({ item: option, lastValue, next, exit }) => {
23
+ const optionResult = await option.execute(lastValue.restArgs, error);
24
+ if (optionResult === SymbolCommandError) return exit(SymbolCommandError);
25
+ return next({
26
+ options: DObject.override(lastValue.options, { [option.name]: optionResult.result }),
27
+ restArgs: optionResult.argumentRest
28
+ });
29
+ });
30
+ if (result === SymbolCommandError) {
31
+ console.error(interpretExecOptionsError(error, params?.dataStructureErrorInterpreter));
32
+ return DEither.error(error);
33
+ }
34
+ return DEither.success(result.options);
35
+ }
36
+ //#endregion
37
+ export { execOptions };
@@ -0,0 +1,257 @@
1
+ const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
2
+ const require_exist = require("../dataStructure/constraint/exist.cjs");
3
+ const require_mimeType = require("../dataStructure/constraint/mimeType.cjs");
4
+ const require_size = require("../dataStructure/constraint/size.cjs");
5
+ const require_file = require("../dataStructure/type/file.cjs");
6
+ const require_array = require("./options/defaults/array.cjs");
7
+ const require_boolean = require("./options/defaults/boolean.cjs");
8
+ const require_simple = require("./options/defaults/simple.cjs");
9
+ let _duplojs_lang_common = require("@duplojs/lang/common");
10
+ _duplojs_lang_common = require_runtime.__toESM(_duplojs_lang_common, 1);
11
+ let _duplojs_lang_dataStructure = require("@duplojs/lang/dataStructure");
12
+ _duplojs_lang_dataStructure = require_runtime.__toESM(_duplojs_lang_dataStructure, 1);
13
+ let _duplojs_lang_array = require("@duplojs/lang/array");
14
+ _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
+ let _duplojs_lang_string = require("@duplojs/lang/string");
18
+ _duplojs_lang_string = require_runtime.__toESM(_duplojs_lang_string, 1);
19
+ let _duplojs_lang_printer = require("@duplojs/lang/printer");
20
+ _duplojs_lang_printer = require_runtime.__toESM(_duplojs_lang_printer, 1);
21
+ //#region scripts/command/help.ts
22
+ const helpOption = require_boolean.createBooleanOption("help", { aliases: ["h"] });
23
+ const syntax = (input) => _duplojs_lang_printer.colorized(input, "gray");
24
+ const section = (input, color) => _duplojs_lang_printer.colorizedBold(input, color);
25
+ const name = (input) => _duplojs_lang_printer.colorizedBold(input, "cyan");
26
+ const typeLabel = (input) => _duplojs_lang_printer.colorized(input, "blue");
27
+ const literal = (input) => _duplojs_lang_printer.colorized(input, "yellow");
28
+ const marker = (input) => _duplojs_lang_printer.colorized(input, "yellow");
29
+ const secondary = (input) => _duplojs_lang_printer.colorized(input, "gray");
30
+ const constraintLabel = (input) => _duplojs_lang_printer.colorized(input, "magenta");
31
+ function renderInline(input) {
32
+ return _duplojs_lang_printer.render(input, "");
33
+ }
34
+ function formatLiteral(value) {
35
+ if (typeof value === "string") return JSON.stringify(value);
36
+ if (typeof value === "bigint") return `${value.toString()}n`;
37
+ return String(value);
38
+ }
39
+ function formatBytes(value) {
40
+ const units = [
41
+ "B",
42
+ "KB",
43
+ "MB",
44
+ "GB",
45
+ "TB"
46
+ ];
47
+ let size = value;
48
+ let index = 0;
49
+ while (size >= 1024 && index < units.length - 1) {
50
+ size = size / 1024;
51
+ index++;
52
+ }
53
+ return `${Number.isInteger(size) ? size : size.toFixed(1)} ${units[index]}`;
54
+ }
55
+ 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")]));
57
+ }
58
+ function renderStringLength(constraints) {
59
+ const equal = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.stringLengthEqualConstraintKind));
60
+ const min = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.minCharactersConstraintKind));
61
+ const max = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.maxCharactersConstraintKind));
62
+ if (equal) return [constraintLabel("length "), literal(String(equal.definition.length))];
63
+ if (min && max) return [constraintLabel("length "), literal(`${min.definition.min}..${max.definition.max}`)];
64
+ if (min) return [constraintLabel("min length "), literal(String(min.definition.min))];
65
+ if (max) return [constraintLabel("max length "), literal(String(max.definition.max))];
66
+ return null;
67
+ }
68
+ function renderArrayLength(constraints) {
69
+ const equal = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.arrayLengthEqualConstraintKind));
70
+ const min = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.minElementsConstraintKind));
71
+ const max = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.maxElementsConstraintKind));
72
+ if (equal) return [constraintLabel("items "), literal(String(equal.definition.length))];
73
+ if (min && max) return [constraintLabel("items "), literal(`${min.definition.min}..${max.definition.max}`)];
74
+ if (min) return [constraintLabel("min items "), literal(String(min.definition.min))];
75
+ if (max) return [constraintLabel("max items "), literal(String(max.definition.max))];
76
+ return null;
77
+ }
78
+ function renderNumberBounds(constraints) {
79
+ const greaterThan = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.greaterThanConstraintKind));
80
+ const greaterThanOrEqual = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.greaterThanOrEqualConstraintKind));
81
+ const lessThan = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.lessThanConstraintKind));
82
+ const lessThanOrEqual = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.lessThanOrEqualConstraintKind));
83
+ 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
+ }
85
+ 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 }) => [
87
+ constraintLabel("> "),
88
+ literal(String(definition.greater)),
89
+ secondary(" and "),
90
+ constraintLabel("< "),
91
+ literal(String(definition.less))
92
+ ]).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.betweenThanOrEqualConstraintKind), ({ definition }) => [constraintLabel("range "), literal(`${definition.greater}..${definition.less}`)]).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.multipleOfConstraintKind), ({ definition }) => [constraintLabel("multiple of "), literal(String(definition.multiple))]).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.regexConstraintKind), ({ definition }) => [constraintLabel("pattern "), literal(definition.regex.toString())]).when(_duplojs_lang_dataStructure.constraintIdentifier(require_mimeType.mimeTypeConstraintKind), ({ definition }) => [constraintLabel("mime "), literal(definition.regex.toString())]).when(_duplojs_lang_dataStructure.constraintIdentifier(require_size.sizeConstraintKind), (constraint) => {
93
+ const { min, max } = constraint.definition;
94
+ if (min && max) return [constraintLabel("size "), literal(`${formatBytes(min)}..${formatBytes(max)}`)];
95
+ if (min) return [constraintLabel("min size "), literal(formatBytes(min))];
96
+ if (max) return [constraintLabel("max size "), literal(formatBytes(max))];
97
+ return null;
98
+ }).otherwise(_duplojs_lang_common.justReturn(null));
99
+ }
100
+ function renderConstraints(constraints) {
101
+ return _duplojs_lang_array.filter([
102
+ renderStringLength(constraints),
103
+ renderArrayLength(constraints),
104
+ ...renderNumberBounds(constraints),
105
+ ..._duplojs_lang_array.map(constraints, renderSimpleConstraint)
106
+ ], _duplojs_lang_common.truthy);
107
+ }
108
+ function renderDataStructure(dataStructure) {
109
+ const constraints = renderConstraints(dataStructure.definition.constraints);
110
+ if (_duplojs_lang_dataStructure.structureIdentifier(dataStructure, _duplojs_lang_dataStructure.lazyStructureKind)) {
111
+ const inner = renderDataStructure(dataStructure.definition.getter.value);
112
+ return {
113
+ main: inner.main,
114
+ constraints: [...inner.constraints, ...constraints]
115
+ };
116
+ }
117
+ if (_duplojs_lang_dataStructure.structureIdentifier(dataStructure, _duplojs_lang_dataStructure.typeStructureKind)) return {
118
+ main: renderType(dataStructure.definition.type),
119
+ constraints
120
+ };
121
+ if (_duplojs_lang_dataStructure.structureIdentifier(dataStructure, _duplojs_lang_dataStructure.arrayStructureKind)) {
122
+ const element = renderDataStructure(dataStructure.definition.element);
123
+ return {
124
+ main: [...element.main, typeLabel("[]")],
125
+ constraints: [..._duplojs_lang_array.map(element.constraints, (constraint) => [constraintLabel("item "), constraint]), ...constraints]
126
+ };
127
+ }
128
+ if (_duplojs_lang_dataStructure.structureIdentifier(dataStructure, _duplojs_lang_dataStructure.unionStructureKind)) {
129
+ const values = _duplojs_lang_common.pipe(dataStructure.definition.values.value, _duplojs_lang_array.filter((structure) => !_duplojs_lang_dataStructure.isUndefinedStructure(structure)), _duplojs_lang_array.map(renderDataStructure));
130
+ if (values.length === 0) return {
131
+ main: [literal("undefined")],
132
+ constraints
133
+ };
134
+ if (values.length === 1) return {
135
+ main: values[0].main,
136
+ constraints: [...values[0].constraints, ...constraints]
137
+ };
138
+ return {
139
+ main: _duplojs_lang_array.reduce(_duplojs_lang_array.map(values, ({ main }) => main), _duplojs_lang_array.reduceFrom([]), ({ element, index, lastValue, next }) => next([
140
+ ...lastValue,
141
+ index === 0 ? null : [secondary(" | ")],
142
+ element
143
+ ])),
144
+ constraints
145
+ };
146
+ }
147
+ return {
148
+ main: [typeLabel("unknown")],
149
+ constraints
150
+ };
151
+ }
152
+ function renderMetadata(help, markerValue) {
153
+ return renderInline([
154
+ ...help.main,
155
+ secondary(" · "),
156
+ markerValue === "required" ? marker(markerValue) : secondary(markerValue)
157
+ ]);
158
+ }
159
+ function renderConstraintLines(constraints, depth) {
160
+ return _duplojs_lang_array.map(constraints, (constraint) => renderInline([
161
+ _duplojs_lang_printer.indent(depth),
162
+ secondary("↳ "),
163
+ constraint
164
+ ]));
165
+ }
166
+ function renderDescriptionLine(description, depth) {
167
+ return description ? renderInline([_duplojs_lang_printer.indent(depth), secondary(description)]) : null;
168
+ }
169
+ function renderUsage(command) {
170
+ const args = command.subject?.type === "argument" ? _duplojs_lang_array.map(command.subject.args, (argument) => argument.optional ? `[${argument.name}]` : `<${argument.name}>`) : command.subject?.type === "subCommand" ? ["<command>"] : [];
171
+ return _duplojs_lang_common.pipe([
172
+ command.name,
173
+ ...args,
174
+ command.options.length > 0 ? "[options]" : null
175
+ ], _duplojs_lang_array.filter(_duplojs_lang_common.truthy), _duplojs_lang_string.join(" "));
176
+ }
177
+ function renderOptionSignature(option) {
178
+ return [
179
+ _duplojs_lang_array.map(option.aliases, (alias) => [
180
+ syntax("-"),
181
+ name(alias),
182
+ syntax(", ")
183
+ ]),
184
+ syntax("--"),
185
+ name(option.name),
186
+ require_simple.simpleOptionKind.has(option) ? syntax(" <value>") : null,
187
+ require_array.arrayOptionKind.has(option) ? syntax(" <value...>") : null
188
+ ];
189
+ }
190
+ function renderOptionDetails(option, depth) {
191
+ if (require_simple.simpleOptionKind.has(option) || require_array.arrayOptionKind.has(option)) {
192
+ const help = renderDataStructure(option.dataStructure);
193
+ return _duplojs_lang_array.filter([
194
+ renderInline([_duplojs_lang_printer.indent(depth), renderMetadata(help, option.required ? "required" : "optional")]),
195
+ renderDescriptionLine(option.description, depth),
196
+ ...renderConstraintLines(help.constraints, depth)
197
+ ], _duplojs_lang_common.truthy);
198
+ }
199
+ 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);
200
+ return _duplojs_lang_array.filter([renderDescriptionLine(option.description, depth)], _duplojs_lang_common.truthy);
201
+ }
202
+ function renderOptionsHelp(options, depth) {
203
+ return _duplojs_lang_printer.renderParagraph([renderInline([_duplojs_lang_printer.indent(depth), section("OPTIONS", "magenta")]), _duplojs_lang_array.map(options, (option) => _duplojs_lang_printer.renderParagraph([renderInline([_duplojs_lang_printer.indent(depth + 1), renderOptionSignature(option)]), renderOptionDetails(option, depth + 2)]))]);
204
+ }
205
+ function renderArgumentsHelp(args, depth) {
206
+ return _duplojs_lang_printer.renderParagraph([renderInline([_duplojs_lang_printer.indent(depth), section("ARGUMENTS", "cyan")]), _duplojs_lang_array.map(args, (argument) => {
207
+ const help = renderDataStructure(argument.dataStructure);
208
+ return _duplojs_lang_printer.renderParagraph([
209
+ renderInline([
210
+ _duplojs_lang_printer.indent(depth + 1),
211
+ name(argument.name.padEnd(12)),
212
+ renderMetadata(help, argument.optional ? "optional" : "required")
213
+ ]),
214
+ renderDescriptionLine(argument.description, depth + 2),
215
+ renderConstraintLines(help.constraints, depth + 2)
216
+ ]);
217
+ })]);
218
+ }
219
+ function renderSubCommandsHelp(commands, depth) {
220
+ return _duplojs_lang_printer.renderParagraph([renderInline([_duplojs_lang_printer.indent(depth), section("COMMANDS", "green")]), _duplojs_lang_array.map(commands, (command) => renderInline([
221
+ _duplojs_lang_printer.indent(depth + 1),
222
+ name(command.name.padEnd(16)),
223
+ command.description ? secondary(command.description) : null
224
+ ]))]);
225
+ }
226
+ function renderCommandHelp(command, depth) {
227
+ return [..._duplojs_lang_array.filter([
228
+ renderInline([
229
+ _duplojs_lang_printer.indent(depth),
230
+ section("COMMAND", "green"),
231
+ " ",
232
+ _duplojs_lang_printer.colorizedBold(command.name, "cyan")
233
+ ]),
234
+ renderDescriptionLine(command.description, depth + 1),
235
+ _duplojs_lang_printer.renderParagraph([renderInline([_duplojs_lang_printer.indent(depth), section("USAGE", "blue")]), renderInline([_duplojs_lang_printer.indent(depth + 1), syntax(renderUsage(command))])]),
236
+ command.subject?.type === "argument" ? renderArgumentsHelp(command.subject.args, depth) : null,
237
+ command.subject?.type === "subCommand" ? renderSubCommandsHelp(command.subject.subCommands, depth) : null,
238
+ _duplojs_lang_array.minElements(command.options, 1) ? renderOptionsHelp(command.options, depth) : null
239
+ ], _duplojs_lang_common.truthy)];
240
+ }
241
+ function logCommandHelp(command) {
242
+ console.log(_duplojs_lang_printer.renderParagraph(renderCommandHelp(command, 0)));
243
+ }
244
+ function renderExecOptionHelp(options, depth) {
245
+ return [renderInline([_duplojs_lang_printer.indent(depth), section("EXEC OPTIONS", "green")]), renderOptionsHelp(options, depth)];
246
+ }
247
+ function logExecOptionHelp(options) {
248
+ console.log(_duplojs_lang_printer.renderParagraph(renderExecOptionHelp(options, 0)));
249
+ }
250
+ //#endregion
251
+ exports.helpOption = helpOption;
252
+ exports.logCommandHelp = logCommandHelp;
253
+ exports.logExecOptionHelp = logExecOptionHelp;
254
+ exports.renderArgumentsHelp = renderArgumentsHelp;
255
+ exports.renderCommandHelp = renderCommandHelp;
256
+ exports.renderExecOptionHelp = renderExecOptionHelp;
257
+ exports.renderOptionsHelp = renderOptionsHelp;
@@ -0,0 +1,10 @@
1
+ import { Command } from './create';
2
+ import { Argument } from './argument';
3
+ import { Options } from './options';
4
+ export declare const helpOption: NoInfer<import('./options').BooleanOption<"help">>;
5
+ export declare function renderOptionsHelp(options: readonly Options[], depth: number): string;
6
+ export declare function renderArgumentsHelp(args: readonly Argument[], depth: number): string;
7
+ export declare function renderCommandHelp(command: Command, depth: number): string[];
8
+ export declare function logCommandHelp(command: Command): void;
9
+ export declare function renderExecOptionHelp(options: readonly Options[], depth: number): string[];
10
+ export declare function logExecOptionHelp(options: readonly Options[]): void;