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

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 (280) hide show
  1. package/README.md +8 -2
  2. package/dist/_virtual/_rolldown/runtime.cjs +33 -0
  3. package/dist/_virtual/_rolldown/runtime.mjs +17 -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 +102 -0
  8. package/dist/command/create.d.ts +47 -0
  9. package/dist/command/create.mjs +96 -0
  10. package/dist/command/error.cjs +206 -0
  11. package/dist/command/error.d.ts +61 -0
  12. package/dist/command/error.mjs +193 -0
  13. package/dist/command/exec.cjs +19 -0
  14. package/dist/command/exec.d.ts +14 -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 +250 -0
  20. package/dist/command/help.d.ts +10 -0
  21. package/dist/command/help.mjs +237 -0
  22. package/dist/command/index.cjs +82 -0
  23. package/dist/command/index.d.ts +8 -0
  24. package/dist/command/index.mjs +47 -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 +76 -0
  29. package/dist/command/options/base.d.ts +30 -0
  30. package/dist/command/options/base.mjs +69 -0
  31. package/dist/command/options/defaults/array.cjs +35 -0
  32. package/dist/command/options/defaults/array.d.ts +26 -0
  33. package/dist/command/options/defaults/array.mjs +29 -0
  34. package/dist/command/options/defaults/boolean.cjs +28 -0
  35. package/dist/command/options/defaults/boolean.d.ts +14 -0
  36. package/dist/command/options/defaults/boolean.mjs +25 -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 +18 -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/forbiddenInvalidIdentifier.d.ts +6 -0
  50. package/dist/command/types/index.d.ts +3 -0
  51. package/dist/common/environmentVariable/expandEnvironmentVariables.cjs +27 -0
  52. package/dist/common/environmentVariable/expandEnvironmentVariables.d.ts +2 -0
  53. package/dist/common/environmentVariable/expandEnvironmentVariables.mjs +22 -0
  54. package/dist/common/environmentVariable/index.cjs +47 -0
  55. package/dist/common/environmentVariable/index.d.ts +16 -0
  56. package/dist/common/environmentVariable/index.mjs +41 -0
  57. package/dist/common/environmentVariable/overrideEnvironmentVariables.cjs +13 -0
  58. package/dist/common/environmentVariable/overrideEnvironmentVariables.d.ts +3 -0
  59. package/dist/common/environmentVariable/overrideEnvironmentVariables.mjs +9 -0
  60. package/dist/common/environmentVariable/parseEnvironmentFiles.cjs +32 -0
  61. package/dist/common/environmentVariable/parseEnvironmentFiles.d.ts +5 -0
  62. package/dist/common/environmentVariable/parseEnvironmentFiles.mjs +26 -0
  63. package/dist/common/environmentVariableOrThrow.cjs +23 -0
  64. package/dist/common/environmentVariableOrThrow.d.ts +12 -0
  65. package/dist/common/environmentVariableOrThrow.mjs +19 -0
  66. package/dist/common/exitProcess.cjs +7 -0
  67. package/dist/common/exitProcess.d.ts +6 -0
  68. package/dist/common/exitProcess.mjs +8 -0
  69. package/dist/common/getCurrentWorkDirectory.cjs +15 -0
  70. package/dist/common/getCurrentWorkDirectory.d.ts +8 -0
  71. package/dist/common/getCurrentWorkDirectory.mjs +11 -0
  72. package/dist/common/getCurrentWorkDirectoryOrThrow.cjs +25 -0
  73. package/dist/common/getCurrentWorkDirectoryOrThrow.d.ts +8 -0
  74. package/dist/common/getCurrentWorkDirectoryOrThrow.mjs +20 -0
  75. package/dist/common/getProcessArguments.cjs +18 -0
  76. package/dist/common/getProcessArguments.d.ts +6 -0
  77. package/dist/common/getProcessArguments.mjs +18 -0
  78. package/dist/common/index.cjs +44 -0
  79. package/dist/common/index.d.ts +9 -0
  80. package/dist/common/index.mjs +27 -0
  81. package/dist/common/meta/getCurrentDirectoryName.cjs +10 -0
  82. package/dist/common/meta/getCurrentDirectoryName.d.ts +7 -0
  83. package/dist/common/meta/getCurrentDirectoryName.mjs +7 -0
  84. package/dist/common/meta/index.d.ts +7 -0
  85. package/dist/common/setCurrentWorkingDirectory.cjs +11 -0
  86. package/dist/common/setCurrentWorkingDirectory.d.ts +8 -0
  87. package/dist/common/setCurrentWorkingDirectory.mjs +9 -0
  88. package/dist/common/setCurrentWorkingDirectoryOrThrow.cjs +23 -0
  89. package/dist/common/setCurrentWorkingDirectoryOrThrow.d.ts +8 -0
  90. package/dist/common/setCurrentWorkingDirectoryOrThrow.mjs +18 -0
  91. package/dist/dataStructure/common/codec/defaults/index.d.ts +2 -0
  92. package/dist/dataStructure/common/codec/defaults/json.cjs +25 -0
  93. package/dist/dataStructure/common/codec/defaults/json.d.ts +9 -0
  94. package/dist/dataStructure/common/codec/defaults/json.mjs +22 -0
  95. package/dist/dataStructure/common/codec/defaults/string.cjs +25 -0
  96. package/dist/dataStructure/common/codec/defaults/string.d.ts +13 -0
  97. package/dist/dataStructure/common/codec/defaults/string.mjs +22 -0
  98. package/dist/dataStructure/common/codec/index.d.ts +1 -0
  99. package/dist/dataStructure/common/error/defaultInterpreter.cjs +29 -0
  100. package/dist/dataStructure/common/error/defaultInterpreter.d.ts +69 -0
  101. package/dist/dataStructure/common/error/defaultInterpreter.mjs +26 -0
  102. package/dist/dataStructure/common/error/index.d.ts +1 -0
  103. package/dist/dataStructure/common/index.d.ts +2 -0
  104. package/dist/dataStructure/constraint/fileExist.cjs +19 -0
  105. package/dist/dataStructure/constraint/fileExist.d.ts +10 -0
  106. package/dist/dataStructure/constraint/fileExist.mjs +15 -0
  107. package/dist/dataStructure/constraint/folderExist.cjs +19 -0
  108. package/dist/dataStructure/constraint/folderExist.d.ts +10 -0
  109. package/dist/dataStructure/constraint/folderExist.mjs +15 -0
  110. package/dist/dataStructure/constraint/index.d.ts +5 -0
  111. package/dist/dataStructure/constraint/mimeType.cjs +18 -0
  112. package/dist/dataStructure/constraint/mimeType.d.ts +11 -0
  113. package/dist/dataStructure/constraint/mimeType.mjs +14 -0
  114. package/dist/dataStructure/constraint/size.cjs +29 -0
  115. package/dist/dataStructure/constraint/size.d.ts +16 -0
  116. package/dist/dataStructure/constraint/size.mjs +24 -0
  117. package/dist/dataStructure/constraint/types/constraints.d.ts +12 -0
  118. package/dist/dataStructure/constraint/types/index.d.ts +1 -0
  119. package/dist/dataStructure/fundamentalType/file.cjs +11 -0
  120. package/dist/dataStructure/fundamentalType/file.d.ts +8 -0
  121. package/dist/dataStructure/fundamentalType/file.mjs +8 -0
  122. package/dist/dataStructure/fundamentalType/folder.cjs +11 -0
  123. package/dist/dataStructure/fundamentalType/folder.d.ts +8 -0
  124. package/dist/dataStructure/fundamentalType/folder.mjs +8 -0
  125. package/dist/dataStructure/fundamentalType/index.d.ts +3 -0
  126. package/dist/dataStructure/fundamentalType/types/fundamentalTypes.d.ts +8 -0
  127. package/dist/dataStructure/fundamentalType/types/index.d.ts +1 -0
  128. package/dist/dataStructure/helper/file.cjs +10 -0
  129. package/dist/dataStructure/helper/file.d.ts +3 -0
  130. package/dist/dataStructure/helper/file.mjs +8 -0
  131. package/dist/dataStructure/helper/fileExist.cjs +7 -0
  132. package/dist/dataStructure/helper/fileExist.d.ts +2 -0
  133. package/dist/dataStructure/helper/fileExist.mjs +7 -0
  134. package/dist/dataStructure/helper/folder.cjs +10 -0
  135. package/dist/dataStructure/helper/folder.d.ts +3 -0
  136. package/dist/dataStructure/helper/folder.mjs +8 -0
  137. package/dist/dataStructure/helper/folderExist.cjs +7 -0
  138. package/dist/dataStructure/helper/folderExist.d.ts +2 -0
  139. package/dist/dataStructure/helper/folderExist.mjs +7 -0
  140. package/dist/dataStructure/helper/index.d.ts +6 -0
  141. package/dist/dataStructure/helper/mimeType.cjs +7 -0
  142. package/dist/dataStructure/helper/mimeType.d.ts +2 -0
  143. package/dist/dataStructure/helper/mimeType.mjs +7 -0
  144. package/dist/dataStructure/helper/size.cjs +7 -0
  145. package/dist/dataStructure/helper/size.d.ts +2 -0
  146. package/dist/dataStructure/helper/size.mjs +7 -0
  147. package/dist/dataStructure/index.cjs +83 -0
  148. package/dist/dataStructure/index.d.ts +6 -0
  149. package/dist/dataStructure/index.mjs +51 -0
  150. package/dist/dataStructure/kind.cjs +7 -0
  151. package/dist/dataStructure/kind.d.ts +2 -0
  152. package/dist/dataStructure/kind.mjs +5 -0
  153. package/dist/dataStructure/type/file.cjs +14 -0
  154. package/dist/dataStructure/type/file.d.ts +11 -0
  155. package/dist/dataStructure/type/file.mjs +11 -0
  156. package/dist/dataStructure/type/folder.cjs +14 -0
  157. package/dist/dataStructure/type/folder.d.ts +11 -0
  158. package/dist/dataStructure/type/folder.mjs +11 -0
  159. package/dist/dataStructure/type/index.d.ts +3 -0
  160. package/dist/dataStructure/type/types/index.d.ts +1 -0
  161. package/dist/dataStructure/type/types/types.d.ts +8 -0
  162. package/dist/file/appendFile.cjs +67 -0
  163. package/dist/file/appendFile.d.ts +43 -0
  164. package/dist/file/appendFile.mjs +54 -0
  165. package/dist/file/appendTextFile.cjs +67 -0
  166. package/dist/file/appendTextFile.d.ts +43 -0
  167. package/dist/file/appendTextFile.mjs +54 -0
  168. package/dist/file/copy.cjs +53 -0
  169. package/dist/file/copy.d.ts +43 -0
  170. package/dist/file/copy.mjs +40 -0
  171. package/dist/file/createEntryInterface.cjs +19 -0
  172. package/dist/file/createEntryInterface.d.ts +3 -0
  173. package/dist/file/createEntryInterface.mjs +15 -0
  174. package/dist/file/ensureDirectory.cjs +52 -0
  175. package/dist/file/ensureDirectory.d.ts +36 -0
  176. package/dist/file/ensureDirectory.mjs +41 -0
  177. package/dist/file/ensureFile.cjs +60 -0
  178. package/dist/file/ensureFile.d.ts +39 -0
  179. package/dist/file/ensureFile.mjs +48 -0
  180. package/dist/file/exists.cjs +43 -0
  181. package/dist/file/exists.d.ts +27 -0
  182. package/dist/file/exists.mjs +35 -0
  183. package/dist/file/fileInterface.cjs +76 -0
  184. package/dist/file/fileInterface.d.ts +31 -0
  185. package/dist/file/fileInterface.mjs +70 -0
  186. package/dist/file/folderInterface.cjs +76 -0
  187. package/dist/file/folderInterface.d.ts +33 -0
  188. package/dist/file/folderInterface.mjs +70 -0
  189. package/dist/file/index.cjs +634 -0
  190. package/dist/file/index.d.ts +35 -0
  191. package/dist/file/index.mjs +335 -0
  192. package/dist/file/link.cjs +70 -0
  193. package/dist/file/link.d.ts +46 -0
  194. package/dist/file/link.mjs +56 -0
  195. package/dist/file/linkStat.cjs +98 -0
  196. package/dist/file/linkStat.d.ts +31 -0
  197. package/dist/file/linkStat.mjs +88 -0
  198. package/dist/file/makeDirectory.cjs +60 -0
  199. package/dist/file/makeDirectory.d.ts +45 -0
  200. package/dist/file/makeDirectory.mjs +47 -0
  201. package/dist/file/makeTemporaryDirectory.cjs +48 -0
  202. package/dist/file/makeTemporaryDirectory.d.ts +32 -0
  203. package/dist/file/makeTemporaryDirectory.mjs +38 -0
  204. package/dist/file/makeTemporaryFile.cjs +62 -0
  205. package/dist/file/makeTemporaryFile.d.ts +36 -0
  206. package/dist/file/makeTemporaryFile.mjs +50 -0
  207. package/dist/file/move.cjs +71 -0
  208. package/dist/file/move.d.ts +46 -0
  209. package/dist/file/move.mjs +57 -0
  210. package/dist/file/readDirectory.cjs +44 -0
  211. package/dist/file/readDirectory.d.ts +35 -0
  212. package/dist/file/readDirectory.mjs +33 -0
  213. package/dist/file/readFile.cjs +51 -0
  214. package/dist/file/readFile.d.ts +33 -0
  215. package/dist/file/readFile.mjs +41 -0
  216. package/dist/file/readJsonFile.cjs +51 -0
  217. package/dist/file/readJsonFile.d.ts +33 -0
  218. package/dist/file/readJsonFile.mjs +41 -0
  219. package/dist/file/readLink.cjs +46 -0
  220. package/dist/file/readLink.d.ts +30 -0
  221. package/dist/file/readLink.mjs +37 -0
  222. package/dist/file/readTextFile.cjs +51 -0
  223. package/dist/file/readTextFile.d.ts +33 -0
  224. package/dist/file/readTextFile.mjs +41 -0
  225. package/dist/file/realPath.cjs +42 -0
  226. package/dist/file/realPath.d.ts +27 -0
  227. package/dist/file/realPath.mjs +34 -0
  228. package/dist/file/relocate.cjs +83 -0
  229. package/dist/file/relocate.d.ts +46 -0
  230. package/dist/file/relocate.mjs +68 -0
  231. package/dist/file/remove.cjs +60 -0
  232. package/dist/file/remove.d.ts +42 -0
  233. package/dist/file/remove.mjs +48 -0
  234. package/dist/file/rename.cjs +83 -0
  235. package/dist/file/rename.d.ts +46 -0
  236. package/dist/file/rename.mjs +68 -0
  237. package/dist/file/setMode.cjs +65 -0
  238. package/dist/file/setMode.d.ts +45 -0
  239. package/dist/file/setMode.mjs +56 -0
  240. package/dist/file/setOwner.cjs +53 -0
  241. package/dist/file/setOwner.d.ts +35 -0
  242. package/dist/file/setOwner.mjs +44 -0
  243. package/dist/file/setTime.cjs +55 -0
  244. package/dist/file/setTime.d.ts +36 -0
  245. package/dist/file/setTime.mjs +45 -0
  246. package/dist/file/stat.cjs +99 -0
  247. package/dist/file/stat.d.ts +62 -0
  248. package/dist/file/stat.mjs +89 -0
  249. package/dist/file/symlink.cjs +64 -0
  250. package/dist/file/symlink.d.ts +48 -0
  251. package/dist/file/symlink.mjs +52 -0
  252. package/dist/file/truncate.cjs +60 -0
  253. package/dist/file/truncate.d.ts +42 -0
  254. package/dist/file/truncate.mjs +47 -0
  255. package/dist/file/unknownEntryInterface.cjs +40 -0
  256. package/dist/file/unknownEntryInterface.d.ts +17 -0
  257. package/dist/file/unknownEntryInterface.mjs +35 -0
  258. package/dist/file/walkDirectory.cjs +57 -0
  259. package/dist/file/walkDirectory.d.ts +37 -0
  260. package/dist/file/walkDirectory.mjs +45 -0
  261. package/dist/file/writeFile.cjs +68 -0
  262. package/dist/file/writeFile.d.ts +43 -0
  263. package/dist/file/writeFile.mjs +55 -0
  264. package/dist/file/writeJsonFile.cjs +77 -0
  265. package/dist/file/writeJsonFile.d.ts +46 -0
  266. package/dist/file/writeJsonFile.mjs +64 -0
  267. package/dist/file/writeTextFile.cjs +68 -0
  268. package/dist/file/writeTextFile.d.ts +43 -0
  269. package/dist/file/writeTextFile.mjs +55 -0
  270. package/dist/implementor.cjs +67 -0
  271. package/dist/implementor.d.ts +35 -0
  272. package/dist/implementor.mjs +55 -0
  273. package/dist/index.cjs +76 -0
  274. package/dist/index.d.ts +9 -0
  275. package/dist/index.mjs +15 -0
  276. package/dist/kind.cjs +7 -0
  277. package/dist/kind.d.ts +2 -0
  278. package/dist/kind.mjs +5 -0
  279. package/dist/override.d.ts +8 -0
  280. package/package.json +81 -3
@@ -0,0 +1,193 @@
1
+ import { defaultErrorInterpreterCodecDictionary, defaultErrorInterpreterDataStructureDictionary } from "../dataStructure/common/error/defaultInterpreter.mjs";
2
+ import * as DCommon from "@duplojs/lang/common";
3
+ import * as DPattern from "@duplojs/lang/pattern";
4
+ import * as DDataStructure from "@duplojs/lang/dataStructure";
5
+ import * as DArray from "@duplojs/lang/array";
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
+ addUnknownOptionIssue: (optionTokens) => {
19
+ issues.push(DModeling.taggedObject("UnknownOptionIssue", {
20
+ optionTokens,
21
+ path: DString.join(currentPath, ".")
22
+ }));
23
+ return SymbolCommandError;
24
+ },
25
+ addUnknownSubCommandIssue: (subCommandName) => {
26
+ issues.push(DModeling.taggedObject("UnknownSubCommandIssue", {
27
+ subCommandName,
28
+ path: DString.join(currentPath, ".")
29
+ }));
30
+ return SymbolCommandError;
31
+ },
32
+ addRequiredOptionIssue: (optionName) => {
33
+ issues.push(DModeling.taggedObject("RequiredOptionIssue", {
34
+ optionName,
35
+ data: void 0,
36
+ path: currentPath.join(".")
37
+ }));
38
+ return SymbolCommandError;
39
+ },
40
+ addRequiredOptionValueIssue: (optionName) => {
41
+ issues.push(DModeling.taggedObject("RequiredOptionValueIssue", {
42
+ optionName,
43
+ data: void 0,
44
+ path: currentPath.join(".")
45
+ }));
46
+ return SymbolCommandError;
47
+ },
48
+ addUnexpectedOptionValueIssue: (optionName, data) => {
49
+ issues.push(DModeling.taggedObject("UnexpectedOptionValueIssue", {
50
+ optionName,
51
+ data,
52
+ path: currentPath.join(".")
53
+ }));
54
+ return SymbolCommandError;
55
+ },
56
+ addDataStructureOptionIssue: (optionName, data, dataStructureError) => {
57
+ issues.push(DModeling.taggedObject("DataStructureOptionIssue", {
58
+ optionName,
59
+ data,
60
+ dataStructureError,
61
+ path: currentPath.join(".")
62
+ }));
63
+ return SymbolCommandError;
64
+ },
65
+ addRequiredArgumentIssue: (argumentName) => {
66
+ issues.push(DModeling.taggedObject("RequiredArgumentIssue", {
67
+ argumentName,
68
+ data: void 0,
69
+ path: currentPath.join(".")
70
+ }));
71
+ return SymbolCommandError;
72
+ },
73
+ addDataStructureArgumentIssue: (argumentName, data, dataStructureError) => {
74
+ issues.push(DModeling.taggedObject("DataStructureArgumentIssue", {
75
+ argumentName,
76
+ data,
77
+ dataStructureError,
78
+ path: currentPath.join(".")
79
+ }));
80
+ return SymbolCommandError;
81
+ },
82
+ addTooMuchCommandArgumentIssue: (expect, receive) => {
83
+ issues.push(DModeling.taggedObject("TooMuchCommandArgumentIssue", {
84
+ expect,
85
+ receive,
86
+ path: currentPath.join(".")
87
+ }));
88
+ return SymbolCommandError;
89
+ }
90
+ };
91
+ }
92
+ function interpretDataStructureError(error, dataStructureErrorInterpreter) {
93
+ return DCommon.pipe(dataStructureErrorInterpreter(error), DArray.map(({ interpretedMessage, path }) => DPrinter.renderLine([
94
+ "↳ ",
95
+ DPrinter.colorizedBold(path || "<value>", "cyan"),
96
+ " : ",
97
+ DPrinter.colorizedBold(interpretedMessage.subSource ?? interpretedMessage.interpretedSubSource ?? interpretedMessage.source ?? interpretedMessage.interpretedSource ?? "unknown data structure error.", "red")
98
+ ], {
99
+ joinCharacter: "",
100
+ indent: DPrinter.Indent.tab,
101
+ indentLevel: 1
102
+ })));
103
+ }
104
+ function interpretErrorIssues(issues, dataStructureErrorInterpreter) {
105
+ return DPrinter.renderParagraph([DArray.map(issues, DPattern.matchWithTaggedObject({
106
+ UnknownOptionIssue: ({ optionTokens }) => [DPrinter.renderLine([DPrinter.colorizedBold("OPTION: ", "blue"), DString.join(optionTokens, ", ")], {
107
+ joinCharacter: "",
108
+ indent: DPrinter.Indent.tab,
109
+ indentLevel: 1
110
+ }), DPrinter.renderLine(["↳ Unknown Option"], {
111
+ indent: DPrinter.Indent.tab,
112
+ indentLevel: 1
113
+ })],
114
+ UnknownSubCommandIssue: ({ subCommandName }) => [DPrinter.renderLine([DPrinter.colorizedBold("SUB-COMMAND: ", "cyan"), subCommandName], {
115
+ joinCharacter: "",
116
+ indent: DPrinter.Indent.tab,
117
+ indentLevel: 1
118
+ }), DPrinter.renderLine(["↳ Unknown Sub-command"], {
119
+ indent: DPrinter.Indent.tab,
120
+ indentLevel: 1
121
+ })],
122
+ DataStructureArgumentIssue: ({ argumentName, dataStructureError }) => [DPrinter.renderLine([DPrinter.colorizedBold("ARGUMENT: ", "magenta"), `--${argumentName}`], {
123
+ joinCharacter: "",
124
+ indent: DPrinter.Indent.tab,
125
+ indentLevel: 1
126
+ }), interpretDataStructureError(dataStructureError, dataStructureErrorInterpreter)],
127
+ RequiredArgumentIssue: ({ argumentName }) => [DPrinter.renderLine([DPrinter.colorizedBold("ARGUMENT: ", "magenta"), argumentName], {
128
+ joinCharacter: "",
129
+ indent: DPrinter.Indent.tab,
130
+ indentLevel: 1
131
+ }), DPrinter.renderLine(["↳ Missing Argument"], {
132
+ indent: DPrinter.Indent.tab,
133
+ indentLevel: 1
134
+ })],
135
+ DataStructureOptionIssue: ({ optionName, dataStructureError }) => [DPrinter.renderLine([DPrinter.colorizedBold("OPTION: ", "blue"), `--${optionName}`], {
136
+ joinCharacter: "",
137
+ indent: DPrinter.Indent.tab,
138
+ indentLevel: 1
139
+ }), interpretDataStructureError(dataStructureError, dataStructureErrorInterpreter)],
140
+ RequiredOptionIssue: ({ optionName }) => [DPrinter.renderLine([DPrinter.colorizedBold("OPTION: ", "blue"), `--${optionName}`], {
141
+ joinCharacter: "",
142
+ indent: DPrinter.Indent.tab,
143
+ indentLevel: 1
144
+ }), DPrinter.renderLine(["↳ Missing Option"], {
145
+ indent: DPrinter.Indent.tab,
146
+ indentLevel: 1
147
+ })],
148
+ RequiredOptionValueIssue: ({ optionName }) => [DPrinter.renderLine([DPrinter.colorizedBold("OPTION: ", "blue"), `--${optionName}`], {
149
+ joinCharacter: "",
150
+ indent: DPrinter.Indent.tab,
151
+ indentLevel: 1
152
+ }), DPrinter.renderLine(["↳ Missing Option Value"], {
153
+ indent: DPrinter.Indent.tab,
154
+ indentLevel: 1
155
+ })],
156
+ UnexpectedOptionValueIssue: ({ optionName }) => [DPrinter.renderLine([DPrinter.colorizedBold("OPTION: ", "blue"), `--${optionName}`], {
157
+ joinCharacter: "",
158
+ indent: DPrinter.Indent.tab,
159
+ indentLevel: 1
160
+ }), DPrinter.renderLine(["↳ Unexpected Value At This Option"], {
161
+ indent: DPrinter.Indent.tab,
162
+ indentLevel: 1
163
+ })],
164
+ TooMuchCommandArgumentIssue: ({ expect, receive }) => [DPrinter.renderLine([" Too Much Arguments"], {
165
+ indent: DPrinter.Indent.tab,
166
+ indentLevel: 1
167
+ }), DPrinter.renderLine([` expect: ${expect} receive: ${receive}`], {
168
+ indent: DPrinter.Indent.tab,
169
+ indentLevel: 1
170
+ })]
171
+ })), issues.length === 0 && "No issue found"]);
172
+ }
173
+ const defaultDataStructureErrorInterpreter = DDataStructure.createErrorInterpreter(defaultErrorInterpreterDataStructureDictionary, defaultErrorInterpreterCodecDictionary);
174
+ function interpretExecCommandError(error, dataStructureErrorInterpreter) {
175
+ return DPrinter.renderParagraph([
176
+ DPrinter.colorizedBold("Command failed", "red"),
177
+ DPrinter.renderLine([DPrinter.colorizedBold("COMMAND: ", "cyan"), DString.join(error.currentPath, " ")], {
178
+ joinCharacter: "",
179
+ indent: DPrinter.Indent.tab,
180
+ indentLevel: 1
181
+ }),
182
+ interpretErrorIssues(error.issues, dataStructureErrorInterpreter ?? defaultDataStructureErrorInterpreter)
183
+ ]);
184
+ }
185
+ function interpretExecOptionsError(error, dataStructureErrorInterpreter) {
186
+ return DPrinter.renderParagraph([
187
+ DPrinter.colorizedBold("Invalid options", "red"),
188
+ ["", ""],
189
+ interpretErrorIssues(error.issues, dataStructureErrorInterpreter ?? defaultDataStructureErrorInterpreter)
190
+ ]);
191
+ }
192
+ //#endregion
193
+ 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,14 @@
1
+ import { CreateCommandExecuteParams, CreateCommandParams, Subjects } from './create';
2
+ import { Error } from './error';
3
+ import { Option } from './options';
4
+ import { Argument } from './argument';
5
+ import { ForbiddenInvalidIdentifier } from './types';
6
+ import type * as DCommon from "@duplojs/lang/common";
7
+ import * as DEither from "@duplojs/lang/either";
8
+ import type * as DDataStructure from "@duplojs/lang/dataStructure";
9
+ export interface ExecCommandParams<GenericOptions extends DCommon.AnyTuple<Option> = DCommon.AnyTuple<Option>, GenericSubjects extends Subjects = Subjects, GenericDisplayName extends string = string> extends CreateCommandParams<GenericOptions, GenericSubjects> {
10
+ displayName?: GenericDisplayName & ForbiddenInvalidIdentifier<GenericDisplayName>;
11
+ dataStructureErrorInterpreter?: DDataStructure.ErrorInterpreter;
12
+ }
13
+ export declare function exec(execute: () => void): Promise<DEither.Ok | DEither.Error<Error>>;
14
+ export declare function exec<const GenericOptions extends DCommon.AnyTuple<Option> = never, GenericSubjects extends Subjects = never, const GenericDisplayName extends string = string>(params: ExecCommandParams<GenericOptions, GenericSubjects, GenericDisplayName>, execute: (params: CreateCommandExecuteParams<GenericOptions, Extract<GenericSubjects, DCommon.AnyTuple<Argument>>>) => DCommon.MaybePromise<void>): Promise<DEither.Ok | DEither.Error<Error>>;
@@ -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,250 @@
1
+ const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
2
+ const require_fileExist = require("../dataStructure/constraint/fileExist.cjs");
3
+ const require_folderExist = require("../dataStructure/constraint/folderExist.cjs");
4
+ const require_mimeType = require("../dataStructure/constraint/mimeType.cjs");
5
+ const require_size = require("../dataStructure/constraint/size.cjs");
6
+ const require_file = require("../dataStructure/type/file.cjs");
7
+ const require_folder = require("../dataStructure/type/folder.cjs");
8
+ const require_array = require("./options/defaults/array.cjs");
9
+ const require_boolean = require("./options/defaults/boolean.cjs");
10
+ const require_simple = require("./options/defaults/simple.cjs");
11
+ let _duplojs_lang_common = require("@duplojs/lang/common");
12
+ _duplojs_lang_common = require_runtime.__toESM(_duplojs_lang_common, 1);
13
+ let _duplojs_lang_pattern = require("@duplojs/lang/pattern");
14
+ _duplojs_lang_pattern = require_runtime.__toESM(_duplojs_lang_pattern, 1);
15
+ let _duplojs_lang_dataStructure = require("@duplojs/lang/dataStructure");
16
+ _duplojs_lang_dataStructure = require_runtime.__toESM(_duplojs_lang_dataStructure, 1);
17
+ let _duplojs_lang_array = require("@duplojs/lang/array");
18
+ _duplojs_lang_array = require_runtime.__toESM(_duplojs_lang_array, 1);
19
+ let _duplojs_lang_string = require("@duplojs/lang/string");
20
+ _duplojs_lang_string = require_runtime.__toESM(_duplojs_lang_string, 1);
21
+ let _duplojs_lang_printer = require("@duplojs/lang/printer");
22
+ _duplojs_lang_printer = require_runtime.__toESM(_duplojs_lang_printer, 1);
23
+ //#region scripts/command/help.ts
24
+ const helpOption = require_boolean.createBooleanOption("help", { aliases: ["h"] });
25
+ const syntax = (input) => _duplojs_lang_printer.colorized(input, "gray");
26
+ const section = (input, color) => _duplojs_lang_printer.colorizedBold(input, color);
27
+ const name = (input) => _duplojs_lang_printer.colorizedBold(input, "cyan");
28
+ const typeLabel = (input) => _duplojs_lang_printer.colorized(input, "blue");
29
+ const literal = (input) => _duplojs_lang_printer.colorized(input, "yellow");
30
+ const marker = (input) => _duplojs_lang_printer.colorized(input, "yellow");
31
+ const secondary = (input) => _duplojs_lang_printer.colorized(input, "gray");
32
+ const constraintLabel = (input) => _duplojs_lang_printer.colorized(input, "magenta");
33
+ function renderInline(input, depth = 0) {
34
+ return _duplojs_lang_printer.renderLine(input, {
35
+ joinCharacter: "",
36
+ indent: _duplojs_lang_printer.Indent.tab,
37
+ indentLevel: depth
38
+ });
39
+ }
40
+ function formatLiteral(value) {
41
+ if (typeof value === "string") return JSON.stringify(value);
42
+ if (typeof value === "bigint") return `${value.toString()}n`;
43
+ return String(value);
44
+ }
45
+ function formatBytes(value) {
46
+ const units = [
47
+ "B",
48
+ "KB",
49
+ "MB",
50
+ "GB",
51
+ "TB"
52
+ ];
53
+ let size = value;
54
+ let index = 0;
55
+ while (size >= 1024 && index < units.length - 1) {
56
+ size = size / 1024;
57
+ index++;
58
+ }
59
+ return `${Number.isInteger(size) ? size : size.toFixed(1)} ${units[index]}`;
60
+ }
61
+ function renderType(type) {
62
+ return _duplojs_lang_pattern.match(type).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.stringLiteralTypeKind), ({ definition }) => [literal(formatLiteral(definition.value))]).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.numberLiteralTypeKind), ({ definition }) => [literal(formatLiteral(definition.value))]).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.bigintLiteralTypeKind), ({ definition }) => [literal(formatLiteral(definition.value))]).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.booleanLiteralTypeKind), ({ definition }) => [literal(formatLiteral(definition.value))]).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.nullTypeKind), _duplojs_lang_common.justReturn([literal("null")])).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.undefinedTypeKind), _duplojs_lang_common.justReturn([literal("undefined")])).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.stringTypeKind), _duplojs_lang_common.justReturn([typeLabel("string")])).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.numberTypeKind), _duplojs_lang_common.justReturn([typeLabel("number")])).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.bigintTypeKind), _duplojs_lang_common.justReturn([typeLabel("bigint")])).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.booleanTypeKind), _duplojs_lang_common.justReturn([typeLabel("boolean")])).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.dateTypeKind), _duplojs_lang_common.justReturn([typeLabel("date")])).when(_duplojs_lang_dataStructure.typeIdentifier(_duplojs_lang_dataStructure.timeTypeKind), _duplojs_lang_common.justReturn([typeLabel("time")])).when(_duplojs_lang_dataStructure.typeIdentifier(require_file.fileTypeKind), _duplojs_lang_common.justReturn([typeLabel("file")])).when(_duplojs_lang_dataStructure.typeIdentifier(require_folder.folderTypeKind), _duplojs_lang_common.justReturn([typeLabel("folder")])).otherwise(_duplojs_lang_common.justReturn([typeLabel("unknown")]));
63
+ }
64
+ function renderStringLength(constraints) {
65
+ const equal = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.stringLengthEqualConstraintKind));
66
+ const min = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.minCharactersConstraintKind));
67
+ const max = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.maxCharactersConstraintKind));
68
+ if (equal) return [constraintLabel("length "), literal(String(equal.definition.length))];
69
+ if (min && max) return [constraintLabel("length "), literal(`${min.definition.min}..${max.definition.max}`)];
70
+ if (min) return [constraintLabel("min length "), literal(String(min.definition.min))];
71
+ if (max) return [constraintLabel("max length "), literal(String(max.definition.max))];
72
+ return null;
73
+ }
74
+ function renderArrayLength(constraints) {
75
+ const equal = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.arrayLengthEqualConstraintKind));
76
+ const min = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.minElementsConstraintKind));
77
+ const max = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.maxElementsConstraintKind));
78
+ if (equal) return [constraintLabel("items "), literal(String(equal.definition.length))];
79
+ if (min && max) return [constraintLabel("items "), literal(`${min.definition.min}..${max.definition.max}`)];
80
+ if (min) return [constraintLabel("min items "), literal(String(min.definition.min))];
81
+ if (max) return [constraintLabel("max items "), literal(String(max.definition.max))];
82
+ return null;
83
+ }
84
+ function renderNumberBounds(constraints) {
85
+ const greaterThan = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.greaterThanConstraintKind));
86
+ const greaterThanOrEqual = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.greaterThanOrEqualConstraintKind));
87
+ const lessThan = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.lessThanConstraintKind));
88
+ const lessThanOrEqual = _duplojs_lang_array.find(constraints, _duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.lessThanOrEqualConstraintKind));
89
+ 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);
90
+ }
91
+ function renderSimpleConstraint(constraint) {
92
+ return _duplojs_lang_pattern.match(constraint).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.emailConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("email")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.urlConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("url")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.uuidConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("uuid")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.integerConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("integer")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.trimmedConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("trimmed")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.notEmptyConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("not empty")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.numberInStringConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("number in string")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.evenConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("even")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.oddConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("odd")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.positiveConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("positive")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.negativeConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("negative")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.notZeroConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("not zero")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.safeConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("safe number")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.pathConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("path")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.absolutePathConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("absolute path")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.segmentPathConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("path segment")])).when(_duplojs_lang_dataStructure.constraintIdentifier(require_fileExist.fileExistConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("exists")])).when(_duplojs_lang_dataStructure.constraintIdentifier(require_folderExist.folderExistConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("exists")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.strictPositiveConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("> "), literal("0")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.strictNegativeConstraintKind), _duplojs_lang_common.justReturn([constraintLabel("< "), literal("0")])).when(_duplojs_lang_dataStructure.constraintIdentifier(_duplojs_lang_dataStructure.betweenThanConstraintKind), ({ definition }) => [
93
+ constraintLabel("> "),
94
+ literal(String(definition.greater)),
95
+ secondary(" and "),
96
+ constraintLabel("< "),
97
+ literal(String(definition.less))
98
+ ]).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) => {
99
+ const { min, max } = constraint.definition;
100
+ if (min && max) return [constraintLabel("size "), literal(`${formatBytes(min)}..${formatBytes(max)}`)];
101
+ if (min) return [constraintLabel("min size "), literal(formatBytes(min))];
102
+ if (max) return [constraintLabel("max size "), literal(formatBytes(max))];
103
+ return null;
104
+ }).otherwise(_duplojs_lang_common.justReturn(null));
105
+ }
106
+ function renderConstraints(constraints) {
107
+ return _duplojs_lang_array.filter([
108
+ renderStringLength(constraints),
109
+ renderArrayLength(constraints),
110
+ ...renderNumberBounds(constraints),
111
+ ..._duplojs_lang_array.map(constraints, renderSimpleConstraint)
112
+ ], _duplojs_lang_common.truthy);
113
+ }
114
+ function renderDataStructure(dataStructure) {
115
+ const constraints = renderConstraints(dataStructure.definition.constraints);
116
+ if (_duplojs_lang_dataStructure.structureIdentifier(dataStructure, _duplojs_lang_dataStructure.lazyStructureKind)) {
117
+ const inner = renderDataStructure(dataStructure.definition.getter.value);
118
+ return {
119
+ main: inner.main,
120
+ constraints: [...inner.constraints, ...constraints]
121
+ };
122
+ }
123
+ if (_duplojs_lang_dataStructure.structureIdentifier(dataStructure, _duplojs_lang_dataStructure.typeStructureKind)) return {
124
+ main: renderType(dataStructure.definition.type),
125
+ constraints
126
+ };
127
+ if (_duplojs_lang_dataStructure.structureIdentifier(dataStructure, _duplojs_lang_dataStructure.arrayStructureKind)) {
128
+ const element = renderDataStructure(dataStructure.definition.element);
129
+ return {
130
+ main: [...element.main, typeLabel("[]")],
131
+ constraints: [..._duplojs_lang_array.map(element.constraints, (constraint) => [constraintLabel("item "), constraint]), ...constraints]
132
+ };
133
+ }
134
+ if (_duplojs_lang_dataStructure.structureIdentifier(dataStructure, _duplojs_lang_dataStructure.unionStructureKind)) {
135
+ 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));
136
+ if (values.length === 0) return {
137
+ main: [literal("undefined")],
138
+ constraints
139
+ };
140
+ if (values.length === 1) return {
141
+ main: values[0].main,
142
+ constraints: [...values[0].constraints, ...constraints]
143
+ };
144
+ return {
145
+ main: _duplojs_lang_array.reduce(_duplojs_lang_array.map(values, ({ main }) => main), _duplojs_lang_array.reduceFrom([]), ({ element, index, lastValue, next }) => next([
146
+ ...lastValue,
147
+ index === 0 ? null : [secondary(" | ")],
148
+ element
149
+ ])),
150
+ constraints
151
+ };
152
+ }
153
+ return {
154
+ main: [typeLabel("unknown")],
155
+ constraints
156
+ };
157
+ }
158
+ function renderMetadata(help, markerValue) {
159
+ return renderInline([
160
+ ...help.main,
161
+ secondary(" · "),
162
+ markerValue === "required" ? marker(markerValue) : secondary(markerValue)
163
+ ]);
164
+ }
165
+ function renderConstraintLines(constraints, depth) {
166
+ return _duplojs_lang_array.map(constraints, (constraint) => renderInline([secondary("↳ "), constraint], depth));
167
+ }
168
+ function renderDescriptionLine(description, depth) {
169
+ return description ? renderInline([secondary(description)], depth) : null;
170
+ }
171
+ function renderUsage(command) {
172
+ 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>"] : [];
173
+ return _duplojs_lang_common.pipe([
174
+ command.name,
175
+ ...args,
176
+ command.options.length > 0 ? "[options]" : null
177
+ ], _duplojs_lang_array.filter(_duplojs_lang_common.truthy), _duplojs_lang_string.join(" "));
178
+ }
179
+ function renderOptionSignature(option) {
180
+ return [
181
+ _duplojs_lang_array.map(option.aliases, (alias) => [
182
+ syntax("-"),
183
+ name(alias),
184
+ syntax(", ")
185
+ ]),
186
+ syntax("--"),
187
+ name(option.name),
188
+ require_simple.simpleOptionKind.has(option) ? syntax(" <value>") : null,
189
+ require_array.arrayOptionKind.has(option) ? syntax(" <value...>") : null
190
+ ];
191
+ }
192
+ function renderOptionDetails(option, depth) {
193
+ if (require_simple.simpleOptionKind.has(option) || require_array.arrayOptionKind.has(option)) {
194
+ const help = renderDataStructure(option.dataStructure);
195
+ return _duplojs_lang_array.filter([
196
+ renderInline([renderMetadata(help, option.required ? "required" : "optional")], depth),
197
+ ...renderConstraintLines(help.constraints, depth),
198
+ renderDescriptionLine(option.description, depth)
199
+ ], _duplojs_lang_common.truthy);
200
+ }
201
+ if (require_boolean.booleanOptionKind.has(option)) return _duplojs_lang_array.filter([renderInline([typeLabel("boolean")], depth), renderDescriptionLine(option.description, depth)], _duplojs_lang_common.truthy);
202
+ return _duplojs_lang_array.filter([renderDescriptionLine(option.description, depth)], _duplojs_lang_common.truthy);
203
+ }
204
+ function renderOptionsHelp(options, depth) {
205
+ return _duplojs_lang_printer.renderParagraph([renderInline([section("OPTIONS", "magenta")], depth), _duplojs_lang_array.map(options, (option) => _duplojs_lang_printer.renderParagraph([renderInline([renderOptionSignature(option)], depth + 1), renderOptionDetails(option, depth + 2)]))]);
206
+ }
207
+ function renderArgumentsHelp(args, depth) {
208
+ return _duplojs_lang_printer.renderParagraph([renderInline([section("ARGUMENTS", "cyan")], depth), _duplojs_lang_array.map(args, (argument) => {
209
+ const help = renderDataStructure(argument.dataStructure);
210
+ return _duplojs_lang_printer.renderParagraph([
211
+ renderInline([name(argument.name.padEnd(12)), renderMetadata(help, argument.optional ? "optional" : "required")], depth + 1),
212
+ renderConstraintLines(help.constraints, depth + 2),
213
+ renderDescriptionLine(argument.description, depth + 2)
214
+ ]);
215
+ })]);
216
+ }
217
+ function renderSubCommandsHelp(commands, depth) {
218
+ return _duplojs_lang_printer.renderParagraph([renderInline([section("COMMANDS", "green")], depth), _duplojs_lang_array.map(commands, (command) => renderInline([name(command.name.padEnd(16)), command.description ? secondary(command.description) : null], depth + 1))]);
219
+ }
220
+ function renderCommandHelp(command, depth) {
221
+ return [..._duplojs_lang_array.filter([
222
+ renderInline([
223
+ section("COMMAND", "green"),
224
+ " ",
225
+ _duplojs_lang_printer.colorizedBold(command.name, "cyan")
226
+ ], depth),
227
+ renderDescriptionLine(command.description, depth + 1),
228
+ _duplojs_lang_printer.renderParagraph([renderInline([section("USAGE", "blue")], depth), renderInline([syntax(renderUsage(command))], depth + 1)]),
229
+ command.subject?.type === "argument" ? renderArgumentsHelp(command.subject.args, depth) : null,
230
+ command.subject?.type === "subCommand" ? renderSubCommandsHelp(command.subject.subCommands, depth) : null,
231
+ _duplojs_lang_array.minElements(command.options, 1) ? renderOptionsHelp(command.options, depth) : null
232
+ ], _duplojs_lang_common.truthy)];
233
+ }
234
+ function logCommandHelp(command) {
235
+ console.log(_duplojs_lang_printer.renderParagraph(renderCommandHelp(command, 0)));
236
+ }
237
+ function renderExecOptionHelp(options, depth) {
238
+ return [renderInline([section("EXEC OPTIONS", "green")], depth), renderOptionsHelp(options, depth)];
239
+ }
240
+ function logExecOptionHelp(options) {
241
+ console.log(_duplojs_lang_printer.renderParagraph(renderExecOptionHelp(options, 0)));
242
+ }
243
+ //#endregion
244
+ exports.helpOption = helpOption;
245
+ exports.logCommandHelp = logCommandHelp;
246
+ exports.logExecOptionHelp = logExecOptionHelp;
247
+ exports.renderArgumentsHelp = renderArgumentsHelp;
248
+ exports.renderCommandHelp = renderCommandHelp;
249
+ exports.renderExecOptionHelp = renderExecOptionHelp;
250
+ 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: 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;