zod-args-parser 2.0.0-alpha.0 → 2.0.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 (510) hide show
  1. package/README.md +525 -588
  2. package/lib/cjs/autocomplete-scripts/bash-autocomplete-script.cjs +2 -0
  3. package/lib/cjs/autocomplete-scripts/bash-autocomplete-script.cjs.map +1 -0
  4. package/lib/cjs/autocomplete-scripts/powershell-autocomplete-script.cjs +2 -0
  5. package/lib/cjs/autocomplete-scripts/powershell-autocomplete-script.cjs.map +1 -0
  6. package/lib/cjs/autocomplete-scripts/zsh-autocomplete-script.cjs +42 -0
  7. package/lib/cjs/autocomplete-scripts/zsh-autocomplete-script.cjs.map +1 -0
  8. package/lib/cjs/coerce/coerce-methods.cjs +2 -0
  9. package/lib/cjs/coerce/coerce-methods.cjs.map +1 -0
  10. package/lib/cjs/coerce/string-to-array.cjs +2 -0
  11. package/lib/cjs/coerce/string-to-array.cjs.map +1 -0
  12. package/lib/cjs/coerce/string-to-primitive.cjs +2 -0
  13. package/lib/cjs/coerce/string-to-primitive.cjs.map +1 -0
  14. package/lib/cjs/coerce/string-to-set.cjs +2 -0
  15. package/lib/cjs/coerce/string-to-set.cjs.map +1 -0
  16. package/lib/cjs/definitions/define-arguments.cjs +2 -0
  17. package/lib/cjs/definitions/define-arguments.cjs.map +1 -0
  18. package/lib/cjs/definitions/define-cli.cjs +2 -0
  19. package/lib/cjs/definitions/define-cli.cjs.map +1 -0
  20. package/lib/cjs/definitions/define-options.cjs +2 -0
  21. package/lib/cjs/definitions/define-options.cjs.map +1 -0
  22. package/lib/cjs/definitions/define-subcommand.cjs +2 -0
  23. package/lib/cjs/definitions/define-subcommand.cjs.map +1 -0
  24. package/lib/cjs/definitions/validate-cli-definition.cjs +2 -0
  25. package/lib/cjs/definitions/validate-cli-definition.cjs.map +1 -0
  26. package/lib/cjs/help-message/format-arguments.cjs +2 -0
  27. package/lib/cjs/help-message/format-arguments.cjs.map +1 -0
  28. package/lib/cjs/help-message/format-options.cjs +2 -0
  29. package/lib/cjs/help-message/format-options.cjs.map +1 -0
  30. package/lib/cjs/help-message/format-subcommands.cjs +2 -0
  31. package/lib/cjs/help-message/format-subcommands.cjs.map +1 -0
  32. package/lib/cjs/help-message/generate-for-cli.cjs +2 -0
  33. package/lib/cjs/help-message/generate-for-cli.cjs.map +1 -0
  34. package/lib/cjs/help-message/generate-for-subcommand.cjs +2 -0
  35. package/lib/cjs/help-message/generate-for-subcommand.cjs.map +1 -0
  36. package/lib/cjs/help-message/print-help.cjs +2 -0
  37. package/lib/cjs/help-message/print-help.cjs.map +1 -0
  38. package/lib/cjs/help-message/set-defaults.cjs +2 -0
  39. package/lib/cjs/help-message/set-defaults.cjs.map +1 -0
  40. package/lib/cjs/help-message/styles.cjs +2 -0
  41. package/lib/cjs/help-message/styles.cjs.map +1 -0
  42. package/lib/cjs/help-message/terminal-markdown.cjs +2 -0
  43. package/lib/cjs/help-message/terminal-markdown.cjs.map +1 -0
  44. package/lib/cjs/index.cjs +2 -0
  45. package/lib/cjs/index.cjs.map +1 -0
  46. package/lib/cjs/markdown/generate-markdown.cjs +2 -0
  47. package/lib/cjs/markdown/generate-markdown.cjs.map +1 -0
  48. package/lib/cjs/metadata/arguments-metadata.cjs +2 -0
  49. package/lib/cjs/metadata/arguments-metadata.cjs.map +1 -0
  50. package/lib/cjs/metadata/cli-metadata.cjs +2 -0
  51. package/lib/cjs/metadata/cli-metadata.cjs.map +1 -0
  52. package/lib/cjs/metadata/options-metadata.cjs +2 -0
  53. package/lib/cjs/metadata/options-metadata.cjs.map +1 -0
  54. package/lib/cjs/metadata/subcommands-metadata.cjs +2 -0
  55. package/lib/cjs/metadata/subcommands-metadata.cjs.map +1 -0
  56. package/lib/cjs/parse/context/cli-context-builder.cjs +2 -0
  57. package/lib/cjs/parse/context/cli-context-builder.cjs.map +1 -0
  58. package/lib/cjs/parse/context/object-context-builder.cjs +2 -0
  59. package/lib/cjs/parse/context/object-context-builder.cjs.map +1 -0
  60. package/lib/cjs/parse/parser-utilities.cjs +2 -0
  61. package/lib/cjs/parse/parser-utilities.cjs.map +1 -0
  62. package/lib/cjs/parse/safe-parse.cjs +2 -0
  63. package/lib/cjs/parse/safe-parse.cjs.map +1 -0
  64. package/lib/cjs/parse/validation/validate-context.cjs +2 -0
  65. package/lib/cjs/parse/validation/validate-context.cjs.map +1 -0
  66. package/lib/cjs/parse/validation/validators/arguments.cjs +2 -0
  67. package/lib/cjs/parse/validation/validators/arguments.cjs.map +1 -0
  68. package/lib/cjs/parse/validation/validators/conflict.cjs +2 -0
  69. package/lib/cjs/parse/validation/validators/conflict.cjs.map +1 -0
  70. package/lib/cjs/parse/validation/validators/exclusive.cjs +2 -0
  71. package/lib/cjs/parse/validation/validators/exclusive.cjs.map +1 -0
  72. package/lib/cjs/parse/validation/validators/explicitly-passed.cjs +2 -0
  73. package/lib/cjs/parse/validation/validators/explicitly-passed.cjs.map +1 -0
  74. package/lib/cjs/parse/validation/validators/options.cjs +2 -0
  75. package/lib/cjs/parse/validation/validators/options.cjs.map +1 -0
  76. package/lib/cjs/parse/validation/validators/requires.cjs +2 -0
  77. package/lib/cjs/parse/validation/validators/requires.cjs.map +1 -0
  78. package/lib/cjs/utilities.cjs +2 -0
  79. package/lib/cjs/utilities.cjs.map +1 -0
  80. package/lib/esm/autocomplete-scripts/bash-autocomplete-script.js +2 -0
  81. package/lib/esm/autocomplete-scripts/bash-autocomplete-script.js.map +1 -0
  82. package/lib/esm/autocomplete-scripts/powershell-autocomplete-script.js +2 -0
  83. package/lib/esm/autocomplete-scripts/powershell-autocomplete-script.js.map +1 -0
  84. package/lib/esm/autocomplete-scripts/zsh-autocomplete-script.js +42 -0
  85. package/lib/esm/autocomplete-scripts/zsh-autocomplete-script.js.map +1 -0
  86. package/lib/esm/coerce/coerce-methods.js +2 -0
  87. package/lib/esm/coerce/coerce-methods.js.map +1 -0
  88. package/lib/esm/coerce/string-to-array.js +2 -0
  89. package/lib/esm/coerce/string-to-array.js.map +1 -0
  90. package/lib/esm/coerce/string-to-primitive.js +2 -0
  91. package/lib/esm/coerce/string-to-primitive.js.map +1 -0
  92. package/lib/esm/coerce/string-to-set.js +2 -0
  93. package/lib/esm/coerce/string-to-set.js.map +1 -0
  94. package/lib/esm/definitions/define-arguments.js +2 -0
  95. package/lib/esm/definitions/define-arguments.js.map +1 -0
  96. package/lib/esm/definitions/define-cli.js +2 -0
  97. package/lib/esm/definitions/define-cli.js.map +1 -0
  98. package/lib/esm/definitions/define-options.js +2 -0
  99. package/lib/esm/definitions/define-options.js.map +1 -0
  100. package/lib/esm/definitions/define-subcommand.js +2 -0
  101. package/lib/esm/definitions/define-subcommand.js.map +1 -0
  102. package/lib/esm/definitions/validate-cli-definition.js +2 -0
  103. package/lib/esm/definitions/validate-cli-definition.js.map +1 -0
  104. package/lib/esm/help-message/format-arguments.js +2 -0
  105. package/lib/esm/help-message/format-arguments.js.map +1 -0
  106. package/lib/esm/help-message/format-options.js +2 -0
  107. package/lib/esm/help-message/format-options.js.map +1 -0
  108. package/lib/esm/help-message/format-subcommands.js +2 -0
  109. package/lib/esm/help-message/format-subcommands.js.map +1 -0
  110. package/lib/esm/help-message/generate-for-cli.js +2 -0
  111. package/lib/esm/help-message/generate-for-cli.js.map +1 -0
  112. package/lib/esm/help-message/generate-for-subcommand.js +2 -0
  113. package/lib/esm/help-message/generate-for-subcommand.js.map +1 -0
  114. package/lib/esm/help-message/print-help.js +2 -0
  115. package/lib/esm/help-message/print-help.js.map +1 -0
  116. package/lib/esm/help-message/set-defaults.js +2 -0
  117. package/lib/esm/help-message/set-defaults.js.map +1 -0
  118. package/lib/esm/help-message/styles.js +2 -0
  119. package/lib/esm/help-message/styles.js.map +1 -0
  120. package/lib/esm/help-message/terminal-markdown.js +2 -0
  121. package/lib/esm/help-message/terminal-markdown.js.map +1 -0
  122. package/lib/esm/index.js +2 -0
  123. package/lib/esm/index.js.map +1 -0
  124. package/lib/esm/markdown/generate-markdown.js +2 -0
  125. package/lib/esm/markdown/generate-markdown.js.map +1 -0
  126. package/lib/esm/metadata/arguments-metadata.js +2 -0
  127. package/lib/esm/metadata/arguments-metadata.js.map +1 -0
  128. package/lib/esm/metadata/cli-metadata.js +2 -0
  129. package/lib/esm/metadata/cli-metadata.js.map +1 -0
  130. package/lib/esm/metadata/options-metadata.js +2 -0
  131. package/lib/esm/metadata/options-metadata.js.map +1 -0
  132. package/lib/esm/metadata/subcommands-metadata.js +2 -0
  133. package/lib/esm/metadata/subcommands-metadata.js.map +1 -0
  134. package/lib/esm/parse/context/cli-context-builder.js +2 -0
  135. package/lib/esm/parse/context/cli-context-builder.js.map +1 -0
  136. package/lib/esm/parse/context/object-context-builder.js +2 -0
  137. package/lib/esm/parse/context/object-context-builder.js.map +1 -0
  138. package/lib/esm/parse/parser-utilities.js +2 -0
  139. package/lib/esm/parse/parser-utilities.js.map +1 -0
  140. package/lib/esm/parse/safe-parse.js +2 -0
  141. package/lib/esm/parse/safe-parse.js.map +1 -0
  142. package/lib/esm/parse/validation/validate-context.js +2 -0
  143. package/lib/esm/parse/validation/validate-context.js.map +1 -0
  144. package/lib/esm/parse/validation/validators/arguments.js +2 -0
  145. package/lib/esm/parse/validation/validators/arguments.js.map +1 -0
  146. package/lib/esm/parse/validation/validators/conflict.js +2 -0
  147. package/lib/esm/parse/validation/validators/conflict.js.map +1 -0
  148. package/lib/esm/parse/validation/validators/exclusive.js +2 -0
  149. package/lib/esm/parse/validation/validators/exclusive.js.map +1 -0
  150. package/lib/esm/parse/validation/validators/explicitly-passed.js +2 -0
  151. package/lib/esm/parse/validation/validators/explicitly-passed.js.map +1 -0
  152. package/lib/esm/parse/validation/validators/options.js +2 -0
  153. package/lib/esm/parse/validation/validators/options.js.map +1 -0
  154. package/lib/esm/parse/validation/validators/requires.js +2 -0
  155. package/lib/esm/parse/validation/validators/requires.js.map +1 -0
  156. package/lib/esm/utilities.js +2 -0
  157. package/lib/esm/utilities.js.map +1 -0
  158. package/lib/iife/index.js +2 -0
  159. package/lib/iife/index.js.map +1 -0
  160. package/lib/mjs/autocomplete-scripts/bash-autocomplete-script.mjs +2 -0
  161. package/lib/mjs/autocomplete-scripts/bash-autocomplete-script.mjs.map +1 -0
  162. package/lib/mjs/autocomplete-scripts/powershell-autocomplete-script.mjs +2 -0
  163. package/lib/mjs/autocomplete-scripts/powershell-autocomplete-script.mjs.map +1 -0
  164. package/lib/mjs/autocomplete-scripts/zsh-autocomplete-script.mjs +42 -0
  165. package/lib/mjs/autocomplete-scripts/zsh-autocomplete-script.mjs.map +1 -0
  166. package/lib/mjs/coerce/coerce-methods.mjs +2 -0
  167. package/lib/mjs/coerce/coerce-methods.mjs.map +1 -0
  168. package/lib/mjs/coerce/string-to-array.mjs +2 -0
  169. package/lib/mjs/coerce/string-to-array.mjs.map +1 -0
  170. package/lib/mjs/coerce/string-to-primitive.mjs +2 -0
  171. package/lib/mjs/coerce/string-to-primitive.mjs.map +1 -0
  172. package/lib/mjs/coerce/string-to-set.mjs +2 -0
  173. package/lib/mjs/coerce/string-to-set.mjs.map +1 -0
  174. package/lib/mjs/definitions/define-arguments.mjs +2 -0
  175. package/lib/mjs/definitions/define-arguments.mjs.map +1 -0
  176. package/lib/mjs/definitions/define-cli.mjs +2 -0
  177. package/lib/mjs/definitions/define-cli.mjs.map +1 -0
  178. package/lib/mjs/definitions/define-options.mjs +2 -0
  179. package/lib/mjs/definitions/define-options.mjs.map +1 -0
  180. package/lib/mjs/definitions/define-subcommand.mjs +2 -0
  181. package/lib/mjs/definitions/define-subcommand.mjs.map +1 -0
  182. package/lib/mjs/definitions/validate-cli-definition.mjs +2 -0
  183. package/lib/mjs/definitions/validate-cli-definition.mjs.map +1 -0
  184. package/lib/mjs/help-message/format-arguments.mjs +2 -0
  185. package/lib/mjs/help-message/format-arguments.mjs.map +1 -0
  186. package/lib/mjs/help-message/format-options.mjs +2 -0
  187. package/lib/mjs/help-message/format-options.mjs.map +1 -0
  188. package/lib/mjs/help-message/format-subcommands.mjs +2 -0
  189. package/lib/mjs/help-message/format-subcommands.mjs.map +1 -0
  190. package/lib/mjs/help-message/generate-for-cli.mjs +2 -0
  191. package/lib/mjs/help-message/generate-for-cli.mjs.map +1 -0
  192. package/lib/mjs/help-message/generate-for-subcommand.mjs +2 -0
  193. package/lib/mjs/help-message/generate-for-subcommand.mjs.map +1 -0
  194. package/lib/mjs/help-message/print-help.mjs +2 -0
  195. package/lib/mjs/help-message/print-help.mjs.map +1 -0
  196. package/lib/mjs/help-message/set-defaults.mjs +2 -0
  197. package/lib/mjs/help-message/set-defaults.mjs.map +1 -0
  198. package/lib/mjs/help-message/styles.mjs +2 -0
  199. package/lib/mjs/help-message/styles.mjs.map +1 -0
  200. package/lib/mjs/help-message/terminal-markdown.mjs +2 -0
  201. package/lib/mjs/help-message/terminal-markdown.mjs.map +1 -0
  202. package/lib/mjs/index.mjs +2 -0
  203. package/lib/mjs/index.mjs.map +1 -0
  204. package/lib/mjs/markdown/generate-markdown.mjs +2 -0
  205. package/lib/mjs/markdown/generate-markdown.mjs.map +1 -0
  206. package/lib/mjs/metadata/arguments-metadata.mjs +2 -0
  207. package/lib/mjs/metadata/arguments-metadata.mjs.map +1 -0
  208. package/lib/mjs/metadata/cli-metadata.mjs +2 -0
  209. package/lib/mjs/metadata/cli-metadata.mjs.map +1 -0
  210. package/lib/mjs/metadata/options-metadata.mjs +2 -0
  211. package/lib/mjs/metadata/options-metadata.mjs.map +1 -0
  212. package/lib/mjs/metadata/subcommands-metadata.mjs +2 -0
  213. package/lib/mjs/metadata/subcommands-metadata.mjs.map +1 -0
  214. package/lib/mjs/parse/context/cli-context-builder.mjs +2 -0
  215. package/lib/mjs/parse/context/cli-context-builder.mjs.map +1 -0
  216. package/lib/mjs/parse/context/object-context-builder.mjs +2 -0
  217. package/lib/mjs/parse/context/object-context-builder.mjs.map +1 -0
  218. package/lib/mjs/parse/parser-utilities.mjs +2 -0
  219. package/lib/mjs/parse/parser-utilities.mjs.map +1 -0
  220. package/lib/mjs/parse/safe-parse.mjs +2 -0
  221. package/lib/mjs/parse/safe-parse.mjs.map +1 -0
  222. package/lib/mjs/parse/validation/validate-context.mjs +2 -0
  223. package/lib/mjs/parse/validation/validate-context.mjs.map +1 -0
  224. package/lib/mjs/parse/validation/validators/arguments.mjs +2 -0
  225. package/lib/mjs/parse/validation/validators/arguments.mjs.map +1 -0
  226. package/lib/mjs/parse/validation/validators/conflict.mjs +2 -0
  227. package/lib/mjs/parse/validation/validators/conflict.mjs.map +1 -0
  228. package/lib/mjs/parse/validation/validators/exclusive.mjs +2 -0
  229. package/lib/mjs/parse/validation/validators/exclusive.mjs.map +1 -0
  230. package/lib/mjs/parse/validation/validators/explicitly-passed.mjs +2 -0
  231. package/lib/mjs/parse/validation/validators/explicitly-passed.mjs.map +1 -0
  232. package/lib/mjs/parse/validation/validators/options.mjs +2 -0
  233. package/lib/mjs/parse/validation/validators/options.mjs.map +1 -0
  234. package/lib/mjs/parse/validation/validators/requires.mjs +2 -0
  235. package/lib/mjs/parse/validation/validators/requires.mjs.map +1 -0
  236. package/lib/mjs/utilities.mjs +2 -0
  237. package/lib/mjs/utilities.mjs.map +1 -0
  238. package/lib/typescript/autocomplete-scripts/bash-autocomplete-script.d.ts +2 -2
  239. package/lib/typescript/autocomplete-scripts/bash-autocomplete-script.d.ts.map +1 -1
  240. package/lib/typescript/autocomplete-scripts/powershell-autocomplete-script.d.ts +2 -2
  241. package/lib/typescript/autocomplete-scripts/powershell-autocomplete-script.d.ts.map +1 -1
  242. package/lib/typescript/autocomplete-scripts/zsh-autocomplete-script.d.ts +2 -2
  243. package/lib/typescript/autocomplete-scripts/zsh-autocomplete-script.d.ts.map +1 -1
  244. package/lib/typescript/coerce/coerce-methods.d.ts +20 -0
  245. package/lib/typescript/coerce/coerce-methods.d.ts.map +1 -0
  246. package/lib/typescript/coerce/string-to-array.d.ts +6 -0
  247. package/lib/typescript/coerce/string-to-array.d.ts.map +1 -0
  248. package/lib/typescript/coerce/string-to-primitive.d.ts +5 -0
  249. package/lib/typescript/coerce/string-to-primitive.d.ts.map +1 -0
  250. package/lib/typescript/coerce/string-to-set.d.ts +6 -0
  251. package/lib/typescript/coerce/string-to-set.d.ts.map +1 -0
  252. package/lib/typescript/definitions/define-arguments.d.ts +7 -0
  253. package/lib/typescript/definitions/define-arguments.d.ts.map +1 -0
  254. package/lib/typescript/definitions/define-cli.d.ts +24 -0
  255. package/lib/typescript/definitions/define-cli.d.ts.map +1 -0
  256. package/lib/typescript/definitions/define-options.d.ts +7 -0
  257. package/lib/typescript/definitions/define-options.d.ts.map +1 -0
  258. package/lib/typescript/definitions/define-subcommand.d.ts +17 -0
  259. package/lib/typescript/definitions/define-subcommand.d.ts.map +1 -0
  260. package/lib/typescript/definitions/validate-cli-definition.d.ts +4 -0
  261. package/lib/typescript/definitions/validate-cli-definition.d.ts.map +1 -0
  262. package/lib/typescript/help-message/format-arguments.d.ts +3 -3
  263. package/lib/typescript/help-message/format-arguments.d.ts.map +1 -1
  264. package/lib/typescript/help-message/format-options.d.ts +3 -3
  265. package/lib/typescript/help-message/format-options.d.ts.map +1 -1
  266. package/lib/typescript/help-message/format-subcommands.d.ts +3 -3
  267. package/lib/typescript/help-message/format-subcommands.d.ts.map +1 -1
  268. package/lib/typescript/help-message/generate-for-cli.d.ts +8 -0
  269. package/lib/typescript/help-message/generate-for-cli.d.ts.map +1 -0
  270. package/lib/typescript/help-message/generate-for-subcommand.d.ts +4 -0
  271. package/lib/typescript/help-message/generate-for-subcommand.d.ts.map +1 -0
  272. package/lib/typescript/help-message/print-help.d.ts +5 -0
  273. package/lib/typescript/help-message/print-help.d.ts.map +1 -0
  274. package/lib/typescript/help-message/set-defaults.d.ts +4 -0
  275. package/lib/typescript/help-message/set-defaults.d.ts.map +1 -0
  276. package/lib/typescript/help-message/styles.d.ts +30 -106
  277. package/lib/typescript/help-message/styles.d.ts.map +1 -1
  278. package/lib/typescript/help-message/terminal-markdown.d.ts +3 -0
  279. package/lib/typescript/help-message/terminal-markdown.d.ts.map +1 -0
  280. package/lib/typescript/index.d.ts +23 -35
  281. package/lib/typescript/index.d.ts.map +1 -1
  282. package/lib/typescript/markdown/generate-markdown.d.ts +2 -2
  283. package/lib/typescript/markdown/generate-markdown.d.ts.map +1 -1
  284. package/lib/typescript/metadata/arguments-metadata.d.ts +4 -0
  285. package/lib/typescript/metadata/arguments-metadata.d.ts.map +1 -0
  286. package/lib/typescript/metadata/cli-metadata.d.ts +4 -0
  287. package/lib/typescript/metadata/cli-metadata.d.ts.map +1 -0
  288. package/lib/typescript/metadata/options-metadata.d.ts +4 -0
  289. package/lib/typescript/metadata/options-metadata.d.ts.map +1 -0
  290. package/lib/typescript/metadata/subcommands-metadata.d.ts +4 -0
  291. package/lib/typescript/metadata/subcommands-metadata.d.ts.map +1 -0
  292. package/lib/typescript/parse/context/cli-context-builder.d.ts +9 -0
  293. package/lib/typescript/parse/context/cli-context-builder.d.ts.map +1 -0
  294. package/lib/typescript/parse/context/object-context-builder.d.ts +6 -0
  295. package/lib/typescript/parse/context/object-context-builder.d.ts.map +1 -0
  296. package/lib/typescript/{parser/parse/parser-helpers.d.ts → parse/parser-utilities.d.ts} +18 -9
  297. package/lib/typescript/parse/parser-utilities.d.ts.map +1 -0
  298. package/lib/typescript/parse/safe-parse.d.ts +5 -0
  299. package/lib/typescript/parse/safe-parse.d.ts.map +1 -0
  300. package/lib/typescript/parse/validation/validate-context.d.ts +6 -0
  301. package/lib/typescript/parse/validation/validate-context.d.ts.map +1 -0
  302. package/lib/typescript/parse/validation/validators/arguments.d.ts +12 -0
  303. package/lib/typescript/parse/validation/validators/arguments.d.ts.map +1 -0
  304. package/lib/typescript/parse/validation/validators/conflict.d.ts +16 -0
  305. package/lib/typescript/parse/validation/validators/conflict.d.ts.map +1 -0
  306. package/lib/typescript/parse/validation/validators/exclusive.d.ts +16 -0
  307. package/lib/typescript/parse/validation/validators/exclusive.d.ts.map +1 -0
  308. package/lib/typescript/parse/validation/validators/explicitly-passed.d.ts +5 -0
  309. package/lib/typescript/parse/validation/validators/explicitly-passed.d.ts.map +1 -0
  310. package/lib/typescript/parse/validation/validators/options.d.ts +12 -0
  311. package/lib/typescript/parse/validation/validators/options.d.ts.map +1 -0
  312. package/lib/typescript/parse/validation/validators/requires.d.ts +18 -0
  313. package/lib/typescript/parse/validation/validators/requires.d.ts.map +1 -0
  314. package/lib/typescript/types/context-types.d.ts +135 -0
  315. package/lib/typescript/types/context-types.d.ts.map +1 -0
  316. package/lib/typescript/types/definitions-types.d.ts +294 -0
  317. package/lib/typescript/types/definitions-types.d.ts.map +1 -0
  318. package/lib/typescript/types/help-message-types.d.ts +134 -0
  319. package/lib/typescript/types/help-message-types.d.ts.map +1 -0
  320. package/lib/typescript/types/io-types.d.ts +96 -0
  321. package/lib/typescript/types/io-types.d.ts.map +1 -0
  322. package/lib/typescript/types/metadata-types.d.ts +75 -0
  323. package/lib/typescript/types/metadata-types.d.ts.map +1 -0
  324. package/lib/typescript/types/schema-types.d.ts +6 -0
  325. package/lib/typescript/types/schema-types.d.ts.map +1 -0
  326. package/lib/typescript/types/types.d.ts +61 -0
  327. package/lib/typescript/types/types.d.ts.map +1 -0
  328. package/lib/typescript/types/utilities-types.d.ts +17 -0
  329. package/lib/typescript/types/utilities-types.d.ts.map +1 -0
  330. package/lib/typescript/utilities.d.ts +24 -10
  331. package/lib/typescript/utilities.d.ts.map +1 -1
  332. package/package.json +29 -26
  333. package/src/autocomplete-scripts/bash-autocomplete-script.ts +13 -9
  334. package/src/autocomplete-scripts/powershell-autocomplete-script.ts +21 -13
  335. package/src/autocomplete-scripts/zsh-autocomplete-script.ts +27 -23
  336. package/src/coerce/coerce-methods.ts +75 -0
  337. package/src/coerce/string-to-array.ts +18 -0
  338. package/src/coerce/string-to-primitive.ts +31 -0
  339. package/src/coerce/string-to-set.ts +15 -0
  340. package/src/definitions/define-arguments.ts +10 -0
  341. package/src/definitions/define-cli.ts +105 -0
  342. package/src/definitions/define-options.ts +12 -0
  343. package/src/definitions/define-subcommand.ts +57 -0
  344. package/src/definitions/validate-cli-definition.ts +331 -0
  345. package/src/help-message/format-arguments.ts +57 -33
  346. package/src/help-message/format-options.ts +59 -34
  347. package/src/help-message/format-subcommands.ts +43 -21
  348. package/src/help-message/generate-for-cli.ts +114 -0
  349. package/src/help-message/generate-for-subcommand.ts +32 -0
  350. package/src/help-message/print-help.ts +13 -0
  351. package/src/help-message/set-defaults.ts +34 -0
  352. package/src/help-message/styles.ts +148 -103
  353. package/src/help-message/terminal-markdown.ts +147 -0
  354. package/src/index.ts +28 -97
  355. package/src/markdown/generate-markdown.ts +47 -58
  356. package/src/metadata/arguments-metadata.ts +28 -0
  357. package/src/metadata/cli-metadata.ts +26 -0
  358. package/src/metadata/options-metadata.ts +38 -0
  359. package/src/metadata/subcommands-metadata.ts +35 -0
  360. package/src/parse/context/cli-context-builder.ts +246 -0
  361. package/src/parse/context/object-context-builder.ts +63 -0
  362. package/src/{parser/parse/parser-helpers.ts → parse/parser-utilities.ts} +46 -25
  363. package/src/parse/safe-parse.ts +76 -0
  364. package/src/parse/validation/validate-context.ts +23 -0
  365. package/src/parse/validation/validators/arguments.ts +59 -0
  366. package/src/parse/validation/validators/conflict.ts +68 -0
  367. package/src/parse/validation/validators/exclusive.ts +70 -0
  368. package/src/parse/validation/validators/explicitly-passed.ts +15 -0
  369. package/src/parse/validation/validators/options.ts +59 -0
  370. package/src/parse/validation/validators/requires.ts +82 -0
  371. package/src/types/context-types.ts +171 -0
  372. package/src/types/definitions-types.ts +340 -0
  373. package/src/types/help-message-types.ts +153 -0
  374. package/src/types/io-types.ts +131 -0
  375. package/src/types/metadata-types.ts +104 -0
  376. package/src/types/schema-types.ts +9 -0
  377. package/src/types/types.ts +72 -0
  378. package/src/types/utilities-types.ts +26 -0
  379. package/src/utilities.ts +200 -23
  380. package/lib/commonjs/autocomplete-scripts/bash-autocomplete-script.cjs +0 -42
  381. package/lib/commonjs/autocomplete-scripts/bash-autocomplete-script.cjs.map +0 -1
  382. package/lib/commonjs/autocomplete-scripts/powershell-autocomplete-script.cjs +0 -31
  383. package/lib/commonjs/autocomplete-scripts/powershell-autocomplete-script.cjs.map +0 -1
  384. package/lib/commonjs/autocomplete-scripts/zsh-autocomplete-script.cjs +0 -41
  385. package/lib/commonjs/autocomplete-scripts/zsh-autocomplete-script.cjs.map +0 -1
  386. package/lib/commonjs/help-message/format-arguments.cjs +0 -1
  387. package/lib/commonjs/help-message/format-arguments.cjs.map +0 -1
  388. package/lib/commonjs/help-message/format-cli.cjs +0 -1
  389. package/lib/commonjs/help-message/format-cli.cjs.map +0 -1
  390. package/lib/commonjs/help-message/format-options.cjs +0 -1
  391. package/lib/commonjs/help-message/format-options.cjs.map +0 -1
  392. package/lib/commonjs/help-message/format-subcommands.cjs +0 -1
  393. package/lib/commonjs/help-message/format-subcommands.cjs.map +0 -1
  394. package/lib/commonjs/help-message/styles.cjs +0 -1
  395. package/lib/commonjs/help-message/styles.cjs.map +0 -1
  396. package/lib/commonjs/index.cjs +0 -1
  397. package/lib/commonjs/index.cjs.map +0 -1
  398. package/lib/commonjs/markdown/generate-markdown.cjs +0 -1
  399. package/lib/commonjs/markdown/generate-markdown.cjs.map +0 -1
  400. package/lib/commonjs/metadata/get-arguments-metadata.cjs +0 -1
  401. package/lib/commonjs/metadata/get-arguments-metadata.cjs.map +0 -1
  402. package/lib/commonjs/metadata/get-cli-metadata.cjs +0 -1
  403. package/lib/commonjs/metadata/get-cli-metadata.cjs.map +0 -1
  404. package/lib/commonjs/metadata/get-options-metadata.cjs +0 -1
  405. package/lib/commonjs/metadata/get-options-metadata.cjs.map +0 -1
  406. package/lib/commonjs/metadata/get-subcommands-metadata.cjs +0 -1
  407. package/lib/commonjs/metadata/get-subcommands-metadata.cjs.map +0 -1
  408. package/lib/commonjs/parser/parse/parse.cjs +0 -1
  409. package/lib/commonjs/parser/parse/parse.cjs.map +0 -1
  410. package/lib/commonjs/parser/parse/parser-helpers.cjs +0 -1
  411. package/lib/commonjs/parser/parse/parser-helpers.cjs.map +0 -1
  412. package/lib/commonjs/parser/safe-parse.cjs +0 -1
  413. package/lib/commonjs/parser/safe-parse.cjs.map +0 -1
  414. package/lib/commonjs/parser/unsafe-parse.cjs +0 -1
  415. package/lib/commonjs/parser/unsafe-parse.cjs.map +0 -1
  416. package/lib/commonjs/parser/validate/validate-type.cjs +0 -1
  417. package/lib/commonjs/parser/validate/validate-type.cjs.map +0 -1
  418. package/lib/commonjs/parser/validate/validate.cjs +0 -1
  419. package/lib/commonjs/parser/validate/validate.cjs.map +0 -1
  420. package/lib/commonjs/utilities.cjs +0 -1
  421. package/lib/commonjs/utilities.cjs.map +0 -1
  422. package/lib/commonjs/zod-utilities.cjs +0 -1
  423. package/lib/commonjs/zod-utilities.cjs.map +0 -1
  424. package/lib/module/autocomplete-scripts/bash-autocomplete-script.mjs +0 -42
  425. package/lib/module/autocomplete-scripts/bash-autocomplete-script.mjs.map +0 -1
  426. package/lib/module/autocomplete-scripts/powershell-autocomplete-script.mjs +0 -31
  427. package/lib/module/autocomplete-scripts/powershell-autocomplete-script.mjs.map +0 -1
  428. package/lib/module/autocomplete-scripts/zsh-autocomplete-script.mjs +0 -41
  429. package/lib/module/autocomplete-scripts/zsh-autocomplete-script.mjs.map +0 -1
  430. package/lib/module/help-message/format-arguments.mjs +0 -1
  431. package/lib/module/help-message/format-arguments.mjs.map +0 -1
  432. package/lib/module/help-message/format-cli.mjs +0 -1
  433. package/lib/module/help-message/format-cli.mjs.map +0 -1
  434. package/lib/module/help-message/format-options.mjs +0 -1
  435. package/lib/module/help-message/format-options.mjs.map +0 -1
  436. package/lib/module/help-message/format-subcommands.mjs +0 -1
  437. package/lib/module/help-message/format-subcommands.mjs.map +0 -1
  438. package/lib/module/help-message/styles.mjs +0 -1
  439. package/lib/module/help-message/styles.mjs.map +0 -1
  440. package/lib/module/index.mjs +0 -1
  441. package/lib/module/index.mjs.map +0 -1
  442. package/lib/module/markdown/generate-markdown.mjs +0 -1
  443. package/lib/module/markdown/generate-markdown.mjs.map +0 -1
  444. package/lib/module/metadata/get-arguments-metadata.mjs +0 -1
  445. package/lib/module/metadata/get-arguments-metadata.mjs.map +0 -1
  446. package/lib/module/metadata/get-cli-metadata.mjs +0 -1
  447. package/lib/module/metadata/get-cli-metadata.mjs.map +0 -1
  448. package/lib/module/metadata/get-options-metadata.mjs +0 -1
  449. package/lib/module/metadata/get-options-metadata.mjs.map +0 -1
  450. package/lib/module/metadata/get-subcommands-metadata.mjs +0 -1
  451. package/lib/module/metadata/get-subcommands-metadata.mjs.map +0 -1
  452. package/lib/module/parser/parse/parse.mjs +0 -1
  453. package/lib/module/parser/parse/parse.mjs.map +0 -1
  454. package/lib/module/parser/parse/parser-helpers.mjs +0 -1
  455. package/lib/module/parser/parse/parser-helpers.mjs.map +0 -1
  456. package/lib/module/parser/safe-parse.mjs +0 -1
  457. package/lib/module/parser/safe-parse.mjs.map +0 -1
  458. package/lib/module/parser/unsafe-parse.mjs +0 -1
  459. package/lib/module/parser/unsafe-parse.mjs.map +0 -1
  460. package/lib/module/parser/validate/validate-type.mjs +0 -1
  461. package/lib/module/parser/validate/validate-type.mjs.map +0 -1
  462. package/lib/module/parser/validate/validate.mjs +0 -1
  463. package/lib/module/parser/validate/validate.mjs.map +0 -1
  464. package/lib/module/utilities.mjs +0 -1
  465. package/lib/module/utilities.mjs.map +0 -1
  466. package/lib/module/zod-utilities.mjs +0 -1
  467. package/lib/module/zod-utilities.mjs.map +0 -1
  468. package/lib/typescript/help-message/format-cli.d.ts +0 -6
  469. package/lib/typescript/help-message/format-cli.d.ts.map +0 -1
  470. package/lib/typescript/metadata/get-arguments-metadata.d.ts +0 -4
  471. package/lib/typescript/metadata/get-arguments-metadata.d.ts.map +0 -1
  472. package/lib/typescript/metadata/get-cli-metadata.d.ts +0 -4
  473. package/lib/typescript/metadata/get-cli-metadata.d.ts.map +0 -1
  474. package/lib/typescript/metadata/get-options-metadata.d.ts +0 -4
  475. package/lib/typescript/metadata/get-options-metadata.d.ts.map +0 -1
  476. package/lib/typescript/metadata/get-subcommands-metadata.d.ts +0 -4
  477. package/lib/typescript/metadata/get-subcommands-metadata.d.ts.map +0 -1
  478. package/lib/typescript/metadata/metadata-types.d.ts +0 -80
  479. package/lib/typescript/metadata/metadata-types.d.ts.map +0 -1
  480. package/lib/typescript/parser/parse/parse-types.d.ts +0 -85
  481. package/lib/typescript/parser/parse/parse-types.d.ts.map +0 -1
  482. package/lib/typescript/parser/parse/parse.d.ts +0 -4
  483. package/lib/typescript/parser/parse/parse.d.ts.map +0 -1
  484. package/lib/typescript/parser/parse/parser-helpers.d.ts.map +0 -1
  485. package/lib/typescript/parser/safe-parse.d.ts +0 -4
  486. package/lib/typescript/parser/safe-parse.d.ts.map +0 -1
  487. package/lib/typescript/parser/unsafe-parse.d.ts +0 -4
  488. package/lib/typescript/parser/unsafe-parse.d.ts.map +0 -1
  489. package/lib/typescript/parser/validate/validate-type.d.ts +0 -23
  490. package/lib/typescript/parser/validate/validate-type.d.ts.map +0 -1
  491. package/lib/typescript/parser/validate/validate.d.ts +0 -12
  492. package/lib/typescript/parser/validate/validate.d.ts.map +0 -1
  493. package/lib/typescript/types.d.ts +0 -294
  494. package/lib/typescript/types.d.ts.map +0 -1
  495. package/lib/typescript/zod-utilities.d.ts +0 -28
  496. package/lib/typescript/zod-utilities.d.ts.map +0 -1
  497. package/src/help-message/format-cli.ts +0 -141
  498. package/src/metadata/get-arguments-metadata.ts +0 -25
  499. package/src/metadata/get-cli-metadata.ts +0 -23
  500. package/src/metadata/get-options-metadata.ts +0 -35
  501. package/src/metadata/get-subcommands-metadata.ts +0 -32
  502. package/src/metadata/metadata-types.ts +0 -114
  503. package/src/parser/parse/parse-types.ts +0 -89
  504. package/src/parser/parse/parse.ts +0 -235
  505. package/src/parser/safe-parse.ts +0 -103
  506. package/src/parser/unsafe-parse.ts +0 -98
  507. package/src/parser/validate/validate-type.ts +0 -20
  508. package/src/parser/validate/validate.ts +0 -71
  509. package/src/types.ts +0 -365
  510. package/src/zod-utilities.ts +0 -214
@@ -1,46 +1,70 @@
1
- import { concat, indent, insertAtEndOfFirstLine, ln } from "../utilities.js";
1
+ import { indent, indentLines, insertAtEndOfFirstLine, ln, toKebabCase } from "../utilities.ts";
2
+ import { terminalMarkdown } from "./terminal-markdown.ts";
2
3
 
3
- import type { ArgumentMetadata } from "../metadata/metadata-types.js";
4
- import type { HelpMessageStyle } from "../types.js";
4
+ import type { ArgumentMetadata } from "../types/metadata-types.ts";
5
+ import type { FormatOptions } from "./generate-for-cli.ts";
5
6
 
6
- export function formatHelpMessageArguments(
7
- argumentsMetadata: ArgumentMetadata[],
8
- c: HelpMessageStyle,
9
- longest: number,
10
- ): string {
7
+ export function formatHelpMessageArguments(argumentsMetadata: ArgumentMetadata[], options: FormatOptions): string {
11
8
  if (argumentsMetadata.length === 0) return "";
12
9
 
13
- let message = c.title(" ARGUMENTS") + ln(1);
10
+ const {
11
+ style,
12
+ indentBeforeName,
13
+ indentAfterName,
14
+ indentBeforePlaceholder,
15
+ newLineIndent,
16
+ longest,
17
+ argumentsTitle,
18
+ defaultKeyword,
19
+ optionalKeyword,
20
+ exampleKeyword,
21
+ emptyLines,
22
+ emptyLinesBeforeTitle,
23
+ emptyLinesAfterTitle,
24
+ markdownRenderer,
25
+ kebabCaseArgumentName,
26
+ } = options;
27
+
28
+ let message = ln(emptyLinesBeforeTitle) + indent(1) + style.title(argumentsTitle) + ln(1 + emptyLinesAfterTitle);
29
+
30
+ // the space from the beginning to the start of the next column.
31
+ const totalSpacing = longest + indentBeforeName + indentAfterName + indentBeforePlaceholder + newLineIndent;
14
32
 
15
33
  for (const metadata of argumentsMetadata) {
16
- const defaultString = metadata.defaultValue === undefined ? "" : `(default: ${metadata.defaultValueAsString})`;
17
-
18
- const spacing = longest + 2 - metadata.name.length;
19
- const normalizeDesc = metadata.description.replace(/\n+/g, "\n" + indent(longest + 6) + c.punctuation("└"));
20
- const defaultOrOptional = defaultString
21
- ? c.default(defaultString)
22
- : metadata.optional
23
- ? c.optional("(optional)")
24
- : "";
25
-
26
- message += concat(
27
- indent(2) + c.argument(metadata.name),
28
- indent(spacing),
29
- insertAtEndOfFirstLine(c.description(normalizeDesc), defaultOrOptional),
30
- ln(1),
31
- );
34
+ if (metadata.hidden) continue;
35
+
36
+ let description = metadata.description
37
+ ? style.description(metadata.description)
38
+ : terminalMarkdown(metadata.descriptionMarkdown, markdownRenderer, style.description);
39
+
40
+ description = indentLines(description, totalSpacing);
41
+
42
+ let defaultOrOptional = "";
43
+
44
+ if (metadata.defaultValueAsString) {
45
+ defaultOrOptional = style.default(defaultKeyword.replace("{{ value }}", metadata.defaultValueAsString));
46
+ }
47
+
48
+ if (metadata.optional && !defaultOrOptional) {
49
+ defaultOrOptional = style.optional(optionalKeyword);
50
+ }
51
+
52
+ const spacing = longest - metadata.name.length;
53
+
54
+ message +=
55
+ indent(indentBeforeName) +
56
+ style.argument(kebabCaseArgumentName ? toKebabCase(metadata.name) : metadata.name) +
57
+ indent(indentBeforePlaceholder + indentAfterName) +
58
+ indent(spacing) +
59
+ insertAtEndOfFirstLine(description, defaultOrOptional) +
60
+ ln(1 + emptyLines);
32
61
 
33
62
  if (metadata.example) {
34
- const normalizeExample = metadata.example.replace(/\n+/g, "\n" + indent(longest + 16));
35
- message += concat(
36
- indent(longest + 5),
37
- c.punctuation("└") + c.exampleTitle("Example:"),
38
- c.example(normalizeExample) + ln(1),
39
- );
63
+ const normalizeExample = indentLines(metadata.example, totalSpacing + exampleKeyword.length + 1); // +1 for the space after the keyword
64
+ message +=
65
+ indent(totalSpacing) + style.exampleTitle(exampleKeyword) + indent(1) + style.example(normalizeExample) + ln(1);
40
66
  }
41
67
  }
42
68
 
43
- message += ln(1);
44
-
45
69
  return message;
46
70
  }
@@ -1,51 +1,76 @@
1
- import { concat, indent, insertAtEndOfFirstLine, ln } from "../utilities.js";
1
+ import { indent, indentLines, insertAtEndOfFirstLine, ln } from "../utilities.ts";
2
+ import { terminalMarkdown } from "./terminal-markdown.ts";
2
3
 
3
- import type { OptionMetadata } from "../metadata/metadata-types.js";
4
- import type { HelpMessageStyle } from "../types.js";
4
+ import type { OptionMetadata } from "../types/metadata-types.ts";
5
+ import type { FormatOptions } from "./generate-for-cli.ts";
5
6
 
6
- export function formatHelpMessageOptions(
7
- optionsMetadata: OptionMetadata[],
8
- c: HelpMessageStyle,
9
- longest: number,
10
- ): string {
7
+ export function formatHelpMessageOptions(optionsMetadata: OptionMetadata[], options: FormatOptions): string {
11
8
  if (optionsMetadata.length === 0) return "";
12
9
 
13
- let message = c.title(" OPTIONS") + ln(1);
10
+ const {
11
+ style,
12
+ indentBeforeName,
13
+ indentAfterName,
14
+ indentBeforePlaceholder,
15
+ newLineIndent,
16
+ emptyLines,
17
+ longest,
18
+ exampleKeyword,
19
+ optionalKeyword,
20
+ defaultKeyword,
21
+ optionsTitle,
22
+ emptyLinesBeforeTitle,
23
+ emptyLinesAfterTitle,
24
+ markdownRenderer,
25
+ } = options;
26
+
27
+ let message = ln(emptyLinesBeforeTitle) + indent(1) + style.title(optionsTitle) + ln(1 + emptyLinesAfterTitle);
28
+
29
+ // the space from the beginning to the start of the next column.
30
+ const totalSpacing = longest + indentBeforeName + indentAfterName + indentBeforePlaceholder + newLineIndent;
14
31
 
15
32
  for (const metadata of optionsMetadata) {
16
- const names = metadata.aliasesAsArgs.concat([metadata.nameAsArg]);
17
- const normalizeDesc = metadata.description.replace(/\n+/g, "\n" + indent(longest + 6) + c.punctuation("└"));
18
- const defaultString = metadata.defaultValue === undefined ? "" : `(default: ${metadata.defaultValueAsString})`;
33
+ if (metadata.hidden) continue;
19
34
 
20
- const optLength = names.join(", ").length + metadata.placeholder.length;
21
- const spacing = longest + 1 - optLength;
35
+ const names = [...metadata.aliasesAsArgs, metadata.nameAsArg];
36
+ const coloredNames = names.map(name => style.option(name)).join(style.punctuation(", "));
22
37
 
23
- const coloredNames = names.map(name => c.option(name)).join(c.punctuation(", "));
38
+ let description = metadata.description
39
+ ? style.description(metadata.description)
40
+ : terminalMarkdown(metadata.descriptionMarkdown, markdownRenderer, style.description);
24
41
 
25
- const defaultOrOptional = defaultString
26
- ? c.default(defaultString)
27
- : metadata.optional
28
- ? c.optional("(optional)")
29
- : "";
42
+ description = indentLines(description, totalSpacing);
30
43
 
31
- message += concat(
32
- indent(2) + coloredNames,
33
- c.placeholder(metadata.placeholder),
34
- indent(spacing),
35
- insertAtEndOfFirstLine(c.description(normalizeDesc), defaultOrOptional),
36
- ln(1),
37
- );
44
+ let defaultOrOptional = "";
45
+
46
+ if (metadata.defaultValueAsString) {
47
+ defaultOrOptional = style.default(defaultKeyword.replace("{{ value }}", metadata.defaultValueAsString));
48
+ }
49
+
50
+ if (metadata.optional && !defaultOrOptional) {
51
+ defaultOrOptional = style.optional(optionalKeyword);
52
+ }
53
+
54
+ // space between the option and the description
55
+ const optLength = names.join(", ").length + metadata.placeholder.length;
56
+ const spacing = longest - optLength;
57
+
58
+ message +=
59
+ indent(indentBeforeName) +
60
+ coloredNames +
61
+ indent(indentBeforePlaceholder) +
62
+ style.placeholder(metadata.placeholder) +
63
+ indent(indentAfterName) +
64
+ indent(spacing) +
65
+ insertAtEndOfFirstLine(description, defaultOrOptional) +
66
+ ln(1 + emptyLines);
38
67
 
39
68
  if (metadata.example) {
40
- const normalizeExample = metadata.example.replace(/\n+/g, "\n" + indent(longest + 16));
41
- message += concat(
42
- indent(longest + 6) + c.punctuation("└") + c.exampleTitle("Example:"),
43
- c.example(normalizeExample) + ln(1),
44
- );
69
+ const normalizeExample = indentLines(metadata.example, totalSpacing + exampleKeyword.length + 1); // + 1 for the space after the keyword
70
+ message +=
71
+ indent(totalSpacing) + style.exampleTitle(exampleKeyword) + indent(1) + style.example(normalizeExample) + ln(1);
45
72
  }
46
73
  }
47
74
 
48
- message += ln(1);
49
-
50
75
  return message;
51
76
  }
@@ -1,36 +1,58 @@
1
- import { concat, indent, ln, subcommandPlaceholder } from "../utilities.js";
1
+ import { indent, indentLines, ln, subcommandPlaceholder } from "../utilities.ts";
2
+ import { terminalMarkdown } from "./terminal-markdown.ts";
2
3
 
3
- import type { SubcommandMetadata } from "../metadata/metadata-types.js";
4
- import type { HelpMessageStyle } from "../types.js";
4
+ import type { SubcommandMetadata } from "../types/metadata-types.ts";
5
+ import type { FormatOptions } from "./generate-for-cli.ts";
5
6
 
6
- export function formatHelpMessageCommands(
7
- subcommandsMetadata: SubcommandMetadata[],
8
- c: HelpMessageStyle,
9
- longest: number,
10
- ): string {
7
+ export function formatHelpMessageCommands(subcommandsMetadata: SubcommandMetadata[], options: FormatOptions): string {
11
8
  if (subcommandsMetadata.length === 0) return "";
12
9
 
13
- let message = c.title(" COMMANDS") + ln(1);
10
+ const {
11
+ style,
12
+ indentBeforeName,
13
+ indentAfterName,
14
+ indentBeforePlaceholder,
15
+ newLineIndent,
16
+ longest,
17
+ commandsTitle,
18
+ emptyLines,
19
+ emptyLinesBeforeTitle,
20
+ emptyLinesAfterTitle,
21
+ markdownRenderer,
22
+ } = options;
23
+
24
+ let message = ln(emptyLinesBeforeTitle) + indent(1) + style.title(commandsTitle) + ln(1 + emptyLinesAfterTitle);
25
+
26
+ // the space from the beginning to the start of the next column.
27
+ const totalSpacing = longest + indentBeforeName + indentAfterName + indentBeforePlaceholder + newLineIndent;
14
28
 
15
29
  for (const metadata of subcommandsMetadata) {
30
+ if (metadata.hidden) continue;
31
+
16
32
  const names = metadata.aliases.concat([metadata.name]);
17
33
  const placeholder = subcommandPlaceholder(metadata);
18
- const normalizeDesc = metadata.description.replace(/\n+/g, "\n" + indent(longest + 6) + c.punctuation("└"));
19
34
 
20
- const optLength = names.join(", ").length + placeholder.length;
21
- const spacing = longest + 1 - optLength;
35
+ let description = metadata.description
36
+ ? style.description(metadata.description)
37
+ : terminalMarkdown(metadata.descriptionMarkdown, markdownRenderer, style.description);
22
38
 
23
- const coloredNames = names.map(name => c.command(name)).join(c.punctuation(", "));
39
+ description = indentLines(description, totalSpacing);
24
40
 
25
- message += concat(
26
- indent(2) + coloredNames,
27
- c.placeholder(placeholder),
28
- indent(spacing),
29
- c.description(normalizeDesc) + ln(1),
30
- );
41
+ const optLength = names.join(", ").length + placeholder.length;
42
+ const spacing = longest - optLength;
43
+
44
+ const coloredNames = names.map(name => style.command(name)).join(style.punctuation(", "));
45
+
46
+ message +=
47
+ indent(indentBeforeName) +
48
+ coloredNames +
49
+ indent(indentBeforePlaceholder) +
50
+ style.placeholder(placeholder) +
51
+ indent(indentAfterName) +
52
+ indent(spacing) +
53
+ description +
54
+ ln(1 + emptyLines);
31
55
  }
32
56
 
33
- message += ln(1);
34
-
35
57
  return message;
36
58
  }
@@ -0,0 +1,114 @@
1
+ import { getCliMetadata } from "../metadata/cli-metadata.ts";
2
+ import { indent, indentLines, ln, subcommandPlaceholder } from "../utilities.ts";
3
+ import { formatHelpMessageArguments } from "./format-arguments.ts";
4
+ import { formatHelpMessageOptions } from "./format-options.ts";
5
+ import { formatHelpMessageCommands } from "./format-subcommands.ts";
6
+ import { setPrintHelpOptionsDefaults } from "./set-defaults.ts";
7
+ import { helpMessageStyles } from "./styles.ts";
8
+ import { terminalMarkdown } from "./terminal-markdown.ts";
9
+
10
+ import type { Cli } from "../types/definitions-types.ts";
11
+ import type { HelpMessageStyleImpl, PrintHelpOptions } from "../types/help-message-types.ts";
12
+
13
+ export interface FormatOptions extends Required<PrintHelpOptions> {
14
+ style: HelpMessageStyleImpl;
15
+ longest: number;
16
+ }
17
+
18
+ export function generateCliHelpMessage(cliDefinition: Cli, printOptions: PrintHelpOptions = {}): string {
19
+ const options = setPrintHelpOptionsDefaults(printOptions);
20
+
21
+ const style = { ...helpMessageStyles.default, ...options.style };
22
+
23
+ const metadata = getCliMetadata(cliDefinition);
24
+
25
+ const formatTitle = (title: string) => indent(1) + style.title(title);
26
+
27
+ let message = "";
28
+
29
+ // CLI usage
30
+ let usage = metadata.usage;
31
+ if (!usage) {
32
+ usage = style.punctuation("$");
33
+ usage += metadata.name ? style.description("", metadata.name) : "";
34
+ usage += metadata.subcommands.length > 0 ? style.command("", "[command]") : "";
35
+ usage += metadata.options.length > 0 ? style.option("", "[options]") : "";
36
+ usage += metadata.arguments.length > 0 ? style.argument("", "<arguments>") : "";
37
+ usage += metadata.allowPositionals ? style.argument("", "<positionals>") : "";
38
+ }
39
+
40
+ message += formatTitle(options.usageTitle) + ln(1 + options.emptyLinesAfterTitle);
41
+ message += indent(options.indentBeforeName) + usage + ln(1);
42
+
43
+ // CLI description
44
+ if (metadata.description || metadata.descriptionMarkdown) {
45
+ message +=
46
+ ln(options.emptyLinesBeforeTitle) + formatTitle(options.descriptionTitle) + ln(1 + options.emptyLinesAfterTitle);
47
+
48
+ let description = metadata.description
49
+ ? style.description(metadata.description)
50
+ : terminalMarkdown(metadata.descriptionMarkdown, options.markdownRenderer, style.description);
51
+
52
+ description = indentLines(description, options.indentBeforeName);
53
+
54
+ message += indent(options.indentBeforeName) + description + ln(1);
55
+ }
56
+
57
+ let longest = 0;
58
+
59
+ // Prepare CLI options
60
+ const optionsMetadata = metadata.options;
61
+
62
+ let longestOptionTitle = 0;
63
+ for (const metadata of optionsMetadata) {
64
+ const names = [...metadata.aliasesAsArgs, metadata.nameAsArg].join(", ");
65
+ const optLength = names.length + metadata.placeholder.length;
66
+ longestOptionTitle = Math.max(optLength, longestOptionTitle);
67
+ }
68
+
69
+ longest = Math.max(longestOptionTitle, longest);
70
+
71
+ // Prepare CLI commands
72
+ const subcommandsMetadata = metadata.subcommands;
73
+
74
+ let longestSubcommandTitle = 0;
75
+ for (const metadata of subcommandsMetadata) {
76
+ const names = [...metadata.aliases, metadata.name].join(", ");
77
+ const placeholder = subcommandPlaceholder(metadata);
78
+ const optLength = names.length + placeholder.length;
79
+ longestSubcommandTitle = Math.max(optLength, longestSubcommandTitle);
80
+ }
81
+
82
+ longest = Math.max(longestSubcommandTitle, longest);
83
+
84
+ // Prepare CLI arguments
85
+ const argumentsMetadata = metadata.arguments;
86
+
87
+ let longestArgumentTitle = 0;
88
+ for (const argument of argumentsMetadata) {
89
+ longestArgumentTitle = Math.max(argument.name.length, longestArgumentTitle);
90
+ }
91
+
92
+ longest = Math.max(longestArgumentTitle, longest);
93
+
94
+ const formatOptions = Object.assign({ ...options }, { style, longest }) as FormatOptions;
95
+
96
+ // CLI options
97
+ message += formatHelpMessageOptions(optionsMetadata, formatOptions);
98
+
99
+ // CLI commands
100
+ message += formatHelpMessageCommands(subcommandsMetadata, formatOptions);
101
+
102
+ // CLI arguments
103
+ message += formatHelpMessageArguments(argumentsMetadata, formatOptions);
104
+
105
+ // CLI example
106
+ if (metadata.example) {
107
+ message +=
108
+ ln(options.emptyLinesBeforeTitle) + formatTitle(options.exampleTitle) + ln(1 + options.emptyLinesAfterTitle);
109
+ const normalizeExample = indentLines(metadata.example, options.indentBeforeName);
110
+ message += indent(options.indentBeforeName) + style.example(normalizeExample);
111
+ }
112
+
113
+ return message;
114
+ }
@@ -0,0 +1,32 @@
1
+ import { generateCliHelpMessage } from "./generate-for-cli.ts";
2
+ import { setPrintHelpOptionsDefaults } from "./set-defaults.ts";
3
+ import { helpMessageStyles } from "./styles.ts";
4
+
5
+ import type { Cli, Subcommand } from "../types/definitions-types.ts";
6
+ import type { PrintHelpOptions } from "../types/help-message-types.ts";
7
+
8
+ export function generateSubcommandHelpMessage(
9
+ commandDefinition: Subcommand,
10
+ options: PrintHelpOptions = {},
11
+ cliName = "",
12
+ ): string {
13
+ setPrintHelpOptionsDefaults(options);
14
+
15
+ const style = { ...helpMessageStyles.default, ...options.style };
16
+
17
+ const meta = commandDefinition.meta ?? {};
18
+
19
+ let usage = meta.usage;
20
+ if (!usage) {
21
+ usage = style.punctuation("$");
22
+ usage += cliName ? ` ${cliName}` : "";
23
+ usage += style.command("", commandDefinition.name);
24
+ usage += commandDefinition.options ? style.option(" [options]") : "";
25
+ usage += commandDefinition.arguments || commandDefinition.allowPositionals ? style.argument(" <arguments>") : "";
26
+ }
27
+
28
+ // convert to cli object without subcommands
29
+ const asCliDefinition: Cli = { ...commandDefinition, cliName: commandDefinition.name, meta: { usage, ...meta } };
30
+
31
+ return generateCliHelpMessage(asCliDefinition, options);
32
+ }
@@ -0,0 +1,13 @@
1
+ import { generateCliHelpMessage } from "./generate-for-cli.ts";
2
+ import { generateSubcommandHelpMessage } from "./generate-for-subcommand.ts";
3
+
4
+ import type { Cli, Subcommand } from "../types/definitions-types.ts";
5
+ import type { PrintHelpOptions } from "../types/help-message-types.ts";
6
+
7
+ export function printCliHelp(cliDefinition: Cli, options: PrintHelpOptions = {}) {
8
+ console.log(generateCliHelpMessage(cliDefinition, options));
9
+ }
10
+
11
+ export function printSubcommandHelp(commandDefinition: Subcommand, options: PrintHelpOptions = {}, cliName = "") {
12
+ console.log(generateSubcommandHelpMessage(commandDefinition, options, cliName));
13
+ }
@@ -0,0 +1,34 @@
1
+ import { helpMessageStyles } from "./styles.ts";
2
+
3
+ import type { PrintHelpOptions } from "../types/help-message-types.ts";
4
+ import type { FormatOptions } from "./generate-for-cli.ts";
5
+
6
+ export function setPrintHelpOptionsDefaults(options: PrintHelpOptions) {
7
+ const clone = { ...options };
8
+
9
+ clone.style ??= helpMessageStyles.default;
10
+ clone.markdownRenderer ??= "terminal";
11
+ clone.kebabCaseArgumentName ??= true;
12
+
13
+ clone.indentBeforeName ??= 2;
14
+ clone.indentAfterName ??= 4;
15
+ clone.indentBeforePlaceholder ??= 1;
16
+ clone.newLineIndent ??= 0;
17
+
18
+ clone.emptyLines ??= 0;
19
+ clone.emptyLinesBeforeTitle ??= 1;
20
+ clone.emptyLinesAfterTitle ??= 0;
21
+
22
+ clone.exampleKeyword ??= "Example";
23
+ clone.optionalKeyword ??= "(optional)";
24
+ clone.defaultKeyword ??= "(default: {{ value }})";
25
+
26
+ clone.usageTitle ??= "USAGE";
27
+ clone.descriptionTitle ??= "DESCRIPTION";
28
+ clone.commandsTitle ??= "COMMANDS";
29
+ clone.optionsTitle ??= "OPTIONS";
30
+ clone.argumentsTitle ??= "ARGUMENTS";
31
+ clone.exampleTitle ??= "EXAMPLE";
32
+
33
+ return clone as Required<FormatOptions>;
34
+ }