zod-args-parser 2.0.0-beta.0 → 2.0.0-beta.2

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 (475) hide show
  1. package/LICENSE +1 -0
  2. package/README.md +230 -289
  3. package/lib/esm/autocomplete-scripts/bash-autocomplete-script.js +74 -2
  4. package/lib/esm/autocomplete-scripts/bash-autocomplete-script.js.map +7 -1
  5. package/lib/esm/autocomplete-scripts/powershell-autocomplete-script.js +90 -2
  6. package/lib/esm/autocomplete-scripts/powershell-autocomplete-script.js.map +7 -1
  7. package/lib/esm/autocomplete-scripts/zsh-autocomplete-script.js +39 -13
  8. package/lib/esm/autocomplete-scripts/zsh-autocomplete-script.js.map +7 -1
  9. package/lib/esm/cli-error/cli-error.js +38 -0
  10. package/lib/esm/cli-error/cli-error.js.map +7 -0
  11. package/lib/esm/cli-error/error-cause.js +12 -0
  12. package/lib/esm/cli-error/error-cause.js.map +7 -0
  13. package/lib/esm/cli-error/error-code/definition-error-code.js +23 -0
  14. package/lib/esm/cli-error/error-code/definition-error-code.js.map +7 -0
  15. package/lib/esm/cli-error/error-code/internal-error-code.js +10 -0
  16. package/lib/esm/cli-error/error-code/internal-error-code.js.map +7 -0
  17. package/lib/esm/cli-error/error-code/parse-error-code.js +18 -0
  18. package/lib/esm/cli-error/error-code/parse-error-code.js.map +7 -0
  19. package/lib/esm/cli-error/error-code/validation-error-code.js +17 -0
  20. package/lib/esm/cli-error/error-code/validation-error-code.js.map +7 -0
  21. package/lib/esm/cli-error/error-message/definition-error-message.js +70 -0
  22. package/lib/esm/cli-error/error-message/definition-error-message.js.map +7 -0
  23. package/lib/esm/cli-error/error-message/internal-error-message.js +16 -0
  24. package/lib/esm/cli-error/error-message/internal-error-message.js.map +7 -0
  25. package/lib/esm/cli-error/error-message/parse-error-message.js +40 -0
  26. package/lib/esm/cli-error/error-message/parse-error-message.js.map +7 -0
  27. package/lib/esm/cli-error/error-message/validation-error-message.js +60 -0
  28. package/lib/esm/cli-error/error-message/validation-error-message.js.map +7 -0
  29. package/lib/esm/coerce/coerce-methods.js +197 -2
  30. package/lib/esm/coerce/coerce-methods.js.map +7 -1
  31. package/lib/esm/coerce/string-to-array.js +17 -2
  32. package/lib/esm/coerce/string-to-array.js.map +7 -1
  33. package/lib/esm/coerce/string-to-primitive.js +73 -2
  34. package/lib/esm/coerce/string-to-primitive.js.map +7 -1
  35. package/lib/esm/coerce/string-to-set.js +17 -2
  36. package/lib/esm/coerce/string-to-set.js.map +7 -1
  37. package/lib/esm/definitions/define-arguments.js +10 -2
  38. package/lib/esm/definitions/define-arguments.js.map +7 -1
  39. package/lib/esm/definitions/define-cli.js +89 -2
  40. package/lib/esm/definitions/define-cli.js.map +7 -1
  41. package/lib/esm/definitions/define-options.js +10 -2
  42. package/lib/esm/definitions/define-options.js.map +7 -1
  43. package/lib/esm/definitions/define-subcommand.js +56 -2
  44. package/lib/esm/definitions/define-subcommand.js.map +7 -1
  45. package/lib/esm/definitions/validate-cli-definition.js +360 -2
  46. package/lib/esm/definitions/validate-cli-definition.js.map +7 -1
  47. package/lib/esm/help-message/format-arguments.js +48 -2
  48. package/lib/esm/help-message/format-arguments.js.map +7 -1
  49. package/lib/esm/help-message/format-options.js +50 -2
  50. package/lib/esm/help-message/format-options.js.map +7 -1
  51. package/lib/esm/help-message/format-subcommands.js +37 -2
  52. package/lib/esm/help-message/format-subcommands.js.map +7 -1
  53. package/lib/esm/help-message/generate-for-cli.js +71 -2
  54. package/lib/esm/help-message/generate-for-cli.js.map +7 -1
  55. package/lib/esm/help-message/generate-for-subcommand.js +23 -2
  56. package/lib/esm/help-message/generate-for-subcommand.js.map +7 -1
  57. package/lib/esm/help-message/print-help.js +14 -2
  58. package/lib/esm/help-message/print-help.js.map +7 -1
  59. package/lib/esm/help-message/set-defaults.js +29 -2
  60. package/lib/esm/help-message/set-defaults.js.map +7 -1
  61. package/lib/esm/help-message/styles.js +154 -2
  62. package/lib/esm/help-message/styles.js.map +7 -1
  63. package/lib/esm/help-message/terminal-markdown.js +121 -2
  64. package/lib/esm/help-message/terminal-markdown.js.map +7 -1
  65. package/lib/esm/index.js +52 -2
  66. package/lib/esm/index.js.map +7 -1
  67. package/lib/esm/markdown/generate-markdown.js +153 -2
  68. package/lib/esm/markdown/generate-markdown.js.map +7 -1
  69. package/lib/esm/metadata/arguments-metadata.js +26 -2
  70. package/lib/esm/metadata/arguments-metadata.js.map +7 -1
  71. package/lib/esm/metadata/cli-metadata.js +24 -2
  72. package/lib/esm/metadata/cli-metadata.js.map +7 -1
  73. package/lib/esm/metadata/options-metadata.js +35 -2
  74. package/lib/esm/metadata/options-metadata.js.map +7 -1
  75. package/lib/esm/metadata/subcommands-metadata.js +32 -2
  76. package/lib/esm/metadata/subcommands-metadata.js.map +7 -1
  77. package/lib/esm/parse/context/cli-context-builder.js +283 -2
  78. package/lib/esm/parse/context/cli-context-builder.js.map +7 -1
  79. package/lib/esm/parse/context/object-context-builder.js +62 -2
  80. package/lib/esm/parse/context/object-context-builder.js.map +7 -1
  81. package/lib/esm/parse/parser-utilities.js +108 -2
  82. package/lib/esm/parse/parser-utilities.js.map +7 -1
  83. package/lib/esm/parse/safe-parse.js +57 -2
  84. package/lib/esm/parse/safe-parse.js.map +7 -1
  85. package/lib/esm/parse/validation/validate-context.js +17 -2
  86. package/lib/esm/parse/validation/validate-context.js.map +7 -1
  87. package/lib/esm/parse/validation/validators/arguments.js +67 -2
  88. package/lib/esm/parse/validation/validators/arguments.js.map +7 -1
  89. package/lib/esm/parse/validation/validators/conflict.js +38 -2
  90. package/lib/esm/parse/validation/validators/conflict.js.map +7 -1
  91. package/lib/esm/parse/validation/validators/exclusive.js +39 -2
  92. package/lib/esm/parse/validation/validators/exclusive.js.map +7 -1
  93. package/lib/esm/parse/validation/validators/explicitly-passed.js +18 -2
  94. package/lib/esm/parse/validation/validators/explicitly-passed.js.map +7 -1
  95. package/lib/esm/parse/validation/validators/options.js +67 -2
  96. package/lib/esm/parse/validation/validators/options.js.map +7 -1
  97. package/lib/esm/parse/validation/validators/requires.js +43 -2
  98. package/lib/esm/parse/validation/validators/requires.js.map +7 -1
  99. package/lib/esm/utilities/parse-argv.js +61 -0
  100. package/lib/esm/utilities/parse-argv.js.map +7 -0
  101. package/lib/esm/utilities/schema-utilities.js +57 -0
  102. package/lib/esm/utilities/schema-utilities.js.map +7 -0
  103. package/lib/esm/utilities/utilities.js +122 -0
  104. package/lib/esm/utilities/utilities.js.map +7 -0
  105. package/lib/iife/index.js +1 -1
  106. package/lib/iife/index.js.map +1 -1
  107. package/lib/mjs/autocomplete-scripts/bash-autocomplete-script.mjs +74 -2
  108. package/lib/mjs/autocomplete-scripts/bash-autocomplete-script.mjs.map +7 -1
  109. package/lib/mjs/autocomplete-scripts/powershell-autocomplete-script.mjs +90 -2
  110. package/lib/mjs/autocomplete-scripts/powershell-autocomplete-script.mjs.map +7 -1
  111. package/lib/mjs/autocomplete-scripts/zsh-autocomplete-script.mjs +39 -13
  112. package/lib/mjs/autocomplete-scripts/zsh-autocomplete-script.mjs.map +7 -1
  113. package/lib/mjs/cli-error/cli-error.mjs +38 -0
  114. package/lib/mjs/cli-error/cli-error.mjs.map +7 -0
  115. package/lib/mjs/cli-error/error-cause.mjs +12 -0
  116. package/lib/mjs/cli-error/error-cause.mjs.map +7 -0
  117. package/lib/mjs/cli-error/error-code/definition-error-code.mjs +23 -0
  118. package/lib/mjs/cli-error/error-code/definition-error-code.mjs.map +7 -0
  119. package/lib/mjs/cli-error/error-code/internal-error-code.mjs +10 -0
  120. package/lib/mjs/cli-error/error-code/internal-error-code.mjs.map +7 -0
  121. package/lib/mjs/cli-error/error-code/parse-error-code.mjs +18 -0
  122. package/lib/mjs/cli-error/error-code/parse-error-code.mjs.map +7 -0
  123. package/lib/mjs/cli-error/error-code/validation-error-code.mjs +17 -0
  124. package/lib/mjs/cli-error/error-code/validation-error-code.mjs.map +7 -0
  125. package/lib/mjs/cli-error/error-message/definition-error-message.mjs +70 -0
  126. package/lib/mjs/cli-error/error-message/definition-error-message.mjs.map +7 -0
  127. package/lib/mjs/cli-error/error-message/internal-error-message.mjs +16 -0
  128. package/lib/mjs/cli-error/error-message/internal-error-message.mjs.map +7 -0
  129. package/lib/mjs/cli-error/error-message/parse-error-message.mjs +40 -0
  130. package/lib/mjs/cli-error/error-message/parse-error-message.mjs.map +7 -0
  131. package/lib/mjs/cli-error/error-message/validation-error-message.mjs +60 -0
  132. package/lib/mjs/cli-error/error-message/validation-error-message.mjs.map +7 -0
  133. package/lib/mjs/coerce/coerce-methods.mjs +197 -2
  134. package/lib/mjs/coerce/coerce-methods.mjs.map +7 -1
  135. package/lib/mjs/coerce/string-to-array.mjs +17 -2
  136. package/lib/mjs/coerce/string-to-array.mjs.map +7 -1
  137. package/lib/mjs/coerce/string-to-primitive.mjs +73 -2
  138. package/lib/mjs/coerce/string-to-primitive.mjs.map +7 -1
  139. package/lib/mjs/coerce/string-to-set.mjs +17 -2
  140. package/lib/mjs/coerce/string-to-set.mjs.map +7 -1
  141. package/lib/mjs/definitions/define-arguments.mjs +10 -2
  142. package/lib/mjs/definitions/define-arguments.mjs.map +7 -1
  143. package/lib/mjs/definitions/define-cli.mjs +89 -2
  144. package/lib/mjs/definitions/define-cli.mjs.map +7 -1
  145. package/lib/mjs/definitions/define-options.mjs +10 -2
  146. package/lib/mjs/definitions/define-options.mjs.map +7 -1
  147. package/lib/mjs/definitions/define-subcommand.mjs +56 -2
  148. package/lib/mjs/definitions/define-subcommand.mjs.map +7 -1
  149. package/lib/mjs/definitions/validate-cli-definition.mjs +360 -2
  150. package/lib/mjs/definitions/validate-cli-definition.mjs.map +7 -1
  151. package/lib/mjs/help-message/format-arguments.mjs +48 -2
  152. package/lib/mjs/help-message/format-arguments.mjs.map +7 -1
  153. package/lib/mjs/help-message/format-options.mjs +50 -2
  154. package/lib/mjs/help-message/format-options.mjs.map +7 -1
  155. package/lib/mjs/help-message/format-subcommands.mjs +37 -2
  156. package/lib/mjs/help-message/format-subcommands.mjs.map +7 -1
  157. package/lib/mjs/help-message/generate-for-cli.mjs +71 -2
  158. package/lib/mjs/help-message/generate-for-cli.mjs.map +7 -1
  159. package/lib/mjs/help-message/generate-for-subcommand.mjs +23 -2
  160. package/lib/mjs/help-message/generate-for-subcommand.mjs.map +7 -1
  161. package/lib/mjs/help-message/print-help.mjs +14 -2
  162. package/lib/mjs/help-message/print-help.mjs.map +7 -1
  163. package/lib/mjs/help-message/set-defaults.mjs +29 -2
  164. package/lib/mjs/help-message/set-defaults.mjs.map +7 -1
  165. package/lib/mjs/help-message/styles.mjs +154 -2
  166. package/lib/mjs/help-message/styles.mjs.map +7 -1
  167. package/lib/mjs/help-message/terminal-markdown.mjs +121 -2
  168. package/lib/mjs/help-message/terminal-markdown.mjs.map +7 -1
  169. package/lib/mjs/index.mjs +52 -2
  170. package/lib/mjs/index.mjs.map +7 -1
  171. package/lib/mjs/markdown/generate-markdown.mjs +153 -2
  172. package/lib/mjs/markdown/generate-markdown.mjs.map +7 -1
  173. package/lib/mjs/metadata/arguments-metadata.mjs +26 -2
  174. package/lib/mjs/metadata/arguments-metadata.mjs.map +7 -1
  175. package/lib/mjs/metadata/cli-metadata.mjs +24 -2
  176. package/lib/mjs/metadata/cli-metadata.mjs.map +7 -1
  177. package/lib/mjs/metadata/options-metadata.mjs +35 -2
  178. package/lib/mjs/metadata/options-metadata.mjs.map +7 -1
  179. package/lib/mjs/metadata/subcommands-metadata.mjs +32 -2
  180. package/lib/mjs/metadata/subcommands-metadata.mjs.map +7 -1
  181. package/lib/mjs/parse/context/cli-context-builder.mjs +283 -2
  182. package/lib/mjs/parse/context/cli-context-builder.mjs.map +7 -1
  183. package/lib/mjs/parse/context/object-context-builder.mjs +62 -2
  184. package/lib/mjs/parse/context/object-context-builder.mjs.map +7 -1
  185. package/lib/mjs/parse/parser-utilities.mjs +108 -2
  186. package/lib/mjs/parse/parser-utilities.mjs.map +7 -1
  187. package/lib/mjs/parse/safe-parse.mjs +57 -2
  188. package/lib/mjs/parse/safe-parse.mjs.map +7 -1
  189. package/lib/mjs/parse/validation/validate-context.mjs +17 -2
  190. package/lib/mjs/parse/validation/validate-context.mjs.map +7 -1
  191. package/lib/mjs/parse/validation/validators/arguments.mjs +67 -2
  192. package/lib/mjs/parse/validation/validators/arguments.mjs.map +7 -1
  193. package/lib/mjs/parse/validation/validators/conflict.mjs +38 -2
  194. package/lib/mjs/parse/validation/validators/conflict.mjs.map +7 -1
  195. package/lib/mjs/parse/validation/validators/exclusive.mjs +39 -2
  196. package/lib/mjs/parse/validation/validators/exclusive.mjs.map +7 -1
  197. package/lib/mjs/parse/validation/validators/explicitly-passed.mjs +18 -2
  198. package/lib/mjs/parse/validation/validators/explicitly-passed.mjs.map +7 -1
  199. package/lib/mjs/parse/validation/validators/options.mjs +67 -2
  200. package/lib/mjs/parse/validation/validators/options.mjs.map +7 -1
  201. package/lib/mjs/parse/validation/validators/requires.mjs +43 -2
  202. package/lib/mjs/parse/validation/validators/requires.mjs.map +7 -1
  203. package/lib/mjs/utilities/parse-argv.mjs +61 -0
  204. package/lib/mjs/utilities/parse-argv.mjs.map +7 -0
  205. package/lib/mjs/utilities/schema-utilities.mjs +57 -0
  206. package/lib/mjs/utilities/schema-utilities.mjs.map +7 -0
  207. package/lib/mjs/utilities/utilities.mjs +122 -0
  208. package/lib/mjs/utilities/utilities.mjs.map +7 -0
  209. package/lib/{typescript → types}/autocomplete-scripts/bash-autocomplete-script.d.ts.map +1 -1
  210. package/lib/types/autocomplete-scripts/powershell-autocomplete-script.d.ts +15 -0
  211. package/lib/{typescript → types}/autocomplete-scripts/powershell-autocomplete-script.d.ts.map +1 -1
  212. package/lib/types/autocomplete-scripts/zsh-autocomplete-script.d.ts +4 -0
  213. package/lib/{typescript → types}/autocomplete-scripts/zsh-autocomplete-script.d.ts.map +1 -1
  214. package/lib/types/cli-error/cli-error.d.ts +152 -0
  215. package/lib/types/cli-error/cli-error.d.ts.map +1 -0
  216. package/lib/types/cli-error/error-cause.d.ts +5 -0
  217. package/lib/types/cli-error/error-cause.d.ts.map +1 -0
  218. package/lib/types/cli-error/error-code/definition-error-code.d.ts +5 -0
  219. package/lib/types/cli-error/error-code/definition-error-code.d.ts.map +1 -0
  220. package/lib/types/cli-error/error-code/internal-error-code.d.ts +5 -0
  221. package/lib/types/cli-error/error-code/internal-error-code.d.ts.map +1 -0
  222. package/lib/types/cli-error/error-code/parse-error-code.d.ts +5 -0
  223. package/lib/types/cli-error/error-code/parse-error-code.d.ts.map +1 -0
  224. package/lib/types/cli-error/error-code/validation-error-code.d.ts +5 -0
  225. package/lib/types/cli-error/error-code/validation-error-code.d.ts.map +1 -0
  226. package/lib/types/cli-error/error-message/definition-error-message.d.ts +3 -0
  227. package/lib/types/cli-error/error-message/definition-error-message.d.ts.map +1 -0
  228. package/lib/types/cli-error/error-message/internal-error-message.d.ts +3 -0
  229. package/lib/types/cli-error/error-message/internal-error-message.d.ts.map +1 -0
  230. package/lib/types/cli-error/error-message/parse-error-message.d.ts +3 -0
  231. package/lib/types/cli-error/error-message/parse-error-message.d.ts.map +1 -0
  232. package/lib/types/cli-error/error-message/validation-error-message.d.ts +3 -0
  233. package/lib/types/cli-error/error-message/validation-error-message.d.ts.map +1 -0
  234. package/lib/types/coerce/coerce-methods.d.ts +122 -0
  235. package/lib/types/coerce/coerce-methods.d.ts.map +1 -0
  236. package/lib/{typescript → types}/coerce/string-to-array.d.ts +2 -2
  237. package/lib/types/coerce/string-to-array.d.ts.map +1 -0
  238. package/lib/types/coerce/string-to-primitive.d.ts +21 -0
  239. package/lib/types/coerce/string-to-primitive.d.ts.map +1 -0
  240. package/lib/{typescript → types}/coerce/string-to-set.d.ts +2 -2
  241. package/lib/{typescript → types}/coerce/string-to-set.d.ts.map +1 -1
  242. package/lib/{typescript → types}/definitions/define-cli.d.ts +2 -6
  243. package/lib/types/definitions/define-cli.d.ts.map +1 -0
  244. package/lib/{typescript → types}/definitions/define-subcommand.d.ts +2 -4
  245. package/lib/types/definitions/define-subcommand.d.ts.map +1 -0
  246. package/lib/{typescript → types}/definitions/validate-cli-definition.d.ts +1 -1
  247. package/lib/types/definitions/validate-cli-definition.d.ts.map +1 -0
  248. package/lib/{typescript → types}/help-message/terminal-markdown.d.ts.map +1 -1
  249. package/lib/{typescript → types}/index.d.ts +7 -0
  250. package/lib/{typescript → types}/index.d.ts.map +1 -1
  251. package/lib/{typescript → types}/metadata/arguments-metadata.d.ts.map +1 -1
  252. package/lib/{typescript → types}/metadata/options-metadata.d.ts.map +1 -1
  253. package/lib/{typescript → types}/parse/context/cli-context-builder.d.ts +1 -1
  254. package/lib/{typescript → types}/parse/context/cli-context-builder.d.ts.map +1 -1
  255. package/lib/{typescript → types}/parse/context/object-context-builder.d.ts +1 -1
  256. package/lib/types/parse/context/object-context-builder.d.ts.map +1 -0
  257. package/lib/{typescript → types}/parse/parser-utilities.d.ts +9 -0
  258. package/lib/{typescript → types}/parse/parser-utilities.d.ts.map +1 -1
  259. package/lib/{typescript → types}/parse/safe-parse.d.ts.map +1 -1
  260. package/lib/{typescript → types}/parse/validation/validate-context.d.ts +1 -1
  261. package/lib/{typescript → types}/parse/validation/validate-context.d.ts.map +1 -1
  262. package/lib/{typescript → types}/parse/validation/validators/arguments.d.ts +1 -1
  263. package/lib/{typescript → types}/parse/validation/validators/arguments.d.ts.map +1 -1
  264. package/lib/{typescript → types}/parse/validation/validators/conflict.d.ts +3 -3
  265. package/lib/{typescript → types}/parse/validation/validators/conflict.d.ts.map +1 -1
  266. package/lib/{typescript → types}/parse/validation/validators/exclusive.d.ts +3 -3
  267. package/lib/{typescript → types}/parse/validation/validators/exclusive.d.ts.map +1 -1
  268. package/lib/{typescript → types}/parse/validation/validators/options.d.ts +1 -1
  269. package/lib/{typescript → types}/parse/validation/validators/options.d.ts.map +1 -1
  270. package/lib/{typescript → types}/parse/validation/validators/requires.d.ts +3 -3
  271. package/lib/{typescript → types}/parse/validation/validators/requires.d.ts.map +1 -1
  272. package/lib/{typescript → types}/types/definitions-types.d.ts +35 -4
  273. package/lib/types/types/definitions-types.d.ts.map +1 -0
  274. package/lib/types/types/error-types.d.ts +275 -0
  275. package/lib/types/types/error-types.d.ts.map +1 -0
  276. package/lib/{typescript → types}/types/io-types.d.ts +1 -1
  277. package/lib/types/types/types.d.ts +146 -0
  278. package/lib/types/types/types.d.ts.map +1 -0
  279. package/lib/{typescript → types}/types/utilities-types.d.ts +0 -2
  280. package/lib/{typescript → types}/types/utilities-types.d.ts.map +1 -1
  281. package/lib/types/utilities/parse-argv.d.ts +3 -0
  282. package/lib/types/utilities/parse-argv.d.ts.map +1 -0
  283. package/lib/types/utilities/schema-utilities.d.ts +15 -0
  284. package/lib/types/utilities/schema-utilities.d.ts.map +1 -0
  285. package/lib/{typescript → types/utilities}/utilities.d.ts +12 -15
  286. package/lib/types/utilities/utilities.d.ts.map +1 -0
  287. package/package.json +7 -7
  288. package/src/autocomplete-scripts/bash-autocomplete-script.ts +14 -12
  289. package/src/autocomplete-scripts/powershell-autocomplete-script.ts +67 -33
  290. package/src/autocomplete-scripts/zsh-autocomplete-script.ts +39 -31
  291. package/src/cli-error/cli-error.ts +44 -0
  292. package/src/cli-error/error-cause.ts +10 -0
  293. package/src/cli-error/error-code/definition-error-code.ts +21 -0
  294. package/src/cli-error/error-code/internal-error-code.ts +8 -0
  295. package/src/cli-error/error-code/parse-error-code.ts +16 -0
  296. package/src/cli-error/error-code/validation-error-code.ts +15 -0
  297. package/src/cli-error/error-message/definition-error-message.ts +144 -0
  298. package/src/cli-error/error-message/internal-error-message.ts +19 -0
  299. package/src/cli-error/error-message/parse-error-message.ts +76 -0
  300. package/src/cli-error/error-message/validation-error-message.ts +104 -0
  301. package/src/coerce/coerce-methods.ts +194 -39
  302. package/src/coerce/string-to-array.ts +2 -2
  303. package/src/coerce/string-to-primitive.ts +72 -13
  304. package/src/coerce/string-to-set.ts +2 -2
  305. package/src/definitions/define-arguments.ts +1 -1
  306. package/src/definitions/define-cli.ts +65 -30
  307. package/src/definitions/define-options.ts +1 -1
  308. package/src/definitions/define-subcommand.ts +47 -17
  309. package/src/definitions/validate-cli-definition.ts +287 -172
  310. package/src/help-message/format-arguments.ts +1 -1
  311. package/src/help-message/format-options.ts +1 -1
  312. package/src/help-message/format-subcommands.ts +1 -1
  313. package/src/help-message/generate-for-cli.ts +1 -1
  314. package/src/help-message/terminal-markdown.ts +3 -4
  315. package/src/index.ts +16 -0
  316. package/src/markdown/generate-markdown.ts +5 -4
  317. package/src/metadata/arguments-metadata.ts +2 -1
  318. package/src/metadata/options-metadata.ts +2 -1
  319. package/src/parse/context/cli-context-builder.ts +166 -39
  320. package/src/parse/context/object-context-builder.ts +37 -11
  321. package/src/parse/parser-utilities.ts +24 -10
  322. package/src/parse/safe-parse.ts +3 -6
  323. package/src/parse/validation/validate-context.ts +1 -1
  324. package/src/parse/validation/validators/arguments.ts +42 -14
  325. package/src/parse/validation/validators/conflict.ts +11 -20
  326. package/src/parse/validation/validators/exclusive.ts +16 -25
  327. package/src/parse/validation/validators/options.ts +40 -12
  328. package/src/parse/validation/validators/requires.ts +11 -20
  329. package/src/types/definitions-types.ts +36 -8
  330. package/src/types/error-types.ts +326 -0
  331. package/src/types/io-types.ts +1 -1
  332. package/src/types/types.ts +100 -7
  333. package/src/types/utilities-types.ts +0 -10
  334. package/src/utilities/parse-argv.ts +79 -0
  335. package/src/utilities/schema-utilities.ts +72 -0
  336. package/src/{utilities.ts → utilities/utilities.ts} +25 -138
  337. package/lib/cjs/autocomplete-scripts/bash-autocomplete-script.cjs +0 -2
  338. package/lib/cjs/autocomplete-scripts/bash-autocomplete-script.cjs.map +0 -1
  339. package/lib/cjs/autocomplete-scripts/powershell-autocomplete-script.cjs +0 -2
  340. package/lib/cjs/autocomplete-scripts/powershell-autocomplete-script.cjs.map +0 -1
  341. package/lib/cjs/autocomplete-scripts/zsh-autocomplete-script.cjs +0 -42
  342. package/lib/cjs/autocomplete-scripts/zsh-autocomplete-script.cjs.map +0 -1
  343. package/lib/cjs/coerce/coerce-methods.cjs +0 -2
  344. package/lib/cjs/coerce/coerce-methods.cjs.map +0 -1
  345. package/lib/cjs/coerce/string-to-array.cjs +0 -2
  346. package/lib/cjs/coerce/string-to-array.cjs.map +0 -1
  347. package/lib/cjs/coerce/string-to-primitive.cjs +0 -2
  348. package/lib/cjs/coerce/string-to-primitive.cjs.map +0 -1
  349. package/lib/cjs/coerce/string-to-set.cjs +0 -2
  350. package/lib/cjs/coerce/string-to-set.cjs.map +0 -1
  351. package/lib/cjs/definitions/define-arguments.cjs +0 -2
  352. package/lib/cjs/definitions/define-arguments.cjs.map +0 -1
  353. package/lib/cjs/definitions/define-cli.cjs +0 -2
  354. package/lib/cjs/definitions/define-cli.cjs.map +0 -1
  355. package/lib/cjs/definitions/define-options.cjs +0 -2
  356. package/lib/cjs/definitions/define-options.cjs.map +0 -1
  357. package/lib/cjs/definitions/define-subcommand.cjs +0 -2
  358. package/lib/cjs/definitions/define-subcommand.cjs.map +0 -1
  359. package/lib/cjs/definitions/validate-cli-definition.cjs +0 -2
  360. package/lib/cjs/definitions/validate-cli-definition.cjs.map +0 -1
  361. package/lib/cjs/help-message/format-arguments.cjs +0 -2
  362. package/lib/cjs/help-message/format-arguments.cjs.map +0 -1
  363. package/lib/cjs/help-message/format-options.cjs +0 -2
  364. package/lib/cjs/help-message/format-options.cjs.map +0 -1
  365. package/lib/cjs/help-message/format-subcommands.cjs +0 -2
  366. package/lib/cjs/help-message/format-subcommands.cjs.map +0 -1
  367. package/lib/cjs/help-message/generate-for-cli.cjs +0 -2
  368. package/lib/cjs/help-message/generate-for-cli.cjs.map +0 -1
  369. package/lib/cjs/help-message/generate-for-subcommand.cjs +0 -2
  370. package/lib/cjs/help-message/generate-for-subcommand.cjs.map +0 -1
  371. package/lib/cjs/help-message/print-help.cjs +0 -2
  372. package/lib/cjs/help-message/print-help.cjs.map +0 -1
  373. package/lib/cjs/help-message/set-defaults.cjs +0 -2
  374. package/lib/cjs/help-message/set-defaults.cjs.map +0 -1
  375. package/lib/cjs/help-message/styles.cjs +0 -2
  376. package/lib/cjs/help-message/styles.cjs.map +0 -1
  377. package/lib/cjs/help-message/terminal-markdown.cjs +0 -2
  378. package/lib/cjs/help-message/terminal-markdown.cjs.map +0 -1
  379. package/lib/cjs/index.cjs +0 -2
  380. package/lib/cjs/index.cjs.map +0 -1
  381. package/lib/cjs/markdown/generate-markdown.cjs +0 -2
  382. package/lib/cjs/markdown/generate-markdown.cjs.map +0 -1
  383. package/lib/cjs/metadata/arguments-metadata.cjs +0 -2
  384. package/lib/cjs/metadata/arguments-metadata.cjs.map +0 -1
  385. package/lib/cjs/metadata/cli-metadata.cjs +0 -2
  386. package/lib/cjs/metadata/cli-metadata.cjs.map +0 -1
  387. package/lib/cjs/metadata/options-metadata.cjs +0 -2
  388. package/lib/cjs/metadata/options-metadata.cjs.map +0 -1
  389. package/lib/cjs/metadata/subcommands-metadata.cjs +0 -2
  390. package/lib/cjs/metadata/subcommands-metadata.cjs.map +0 -1
  391. package/lib/cjs/parse/context/cli-context-builder.cjs +0 -2
  392. package/lib/cjs/parse/context/cli-context-builder.cjs.map +0 -1
  393. package/lib/cjs/parse/context/object-context-builder.cjs +0 -2
  394. package/lib/cjs/parse/context/object-context-builder.cjs.map +0 -1
  395. package/lib/cjs/parse/parser-utilities.cjs +0 -2
  396. package/lib/cjs/parse/parser-utilities.cjs.map +0 -1
  397. package/lib/cjs/parse/safe-parse.cjs +0 -2
  398. package/lib/cjs/parse/safe-parse.cjs.map +0 -1
  399. package/lib/cjs/parse/validation/validate-context.cjs +0 -2
  400. package/lib/cjs/parse/validation/validate-context.cjs.map +0 -1
  401. package/lib/cjs/parse/validation/validators/arguments.cjs +0 -2
  402. package/lib/cjs/parse/validation/validators/arguments.cjs.map +0 -1
  403. package/lib/cjs/parse/validation/validators/conflict.cjs +0 -2
  404. package/lib/cjs/parse/validation/validators/conflict.cjs.map +0 -1
  405. package/lib/cjs/parse/validation/validators/exclusive.cjs +0 -2
  406. package/lib/cjs/parse/validation/validators/exclusive.cjs.map +0 -1
  407. package/lib/cjs/parse/validation/validators/explicitly-passed.cjs +0 -2
  408. package/lib/cjs/parse/validation/validators/explicitly-passed.cjs.map +0 -1
  409. package/lib/cjs/parse/validation/validators/options.cjs +0 -2
  410. package/lib/cjs/parse/validation/validators/options.cjs.map +0 -1
  411. package/lib/cjs/parse/validation/validators/requires.cjs +0 -2
  412. package/lib/cjs/parse/validation/validators/requires.cjs.map +0 -1
  413. package/lib/cjs/utilities.cjs +0 -2
  414. package/lib/cjs/utilities.cjs.map +0 -1
  415. package/lib/esm/utilities.js +0 -2
  416. package/lib/esm/utilities.js.map +0 -1
  417. package/lib/mjs/utilities.mjs +0 -2
  418. package/lib/mjs/utilities.mjs.map +0 -1
  419. package/lib/typescript/autocomplete-scripts/powershell-autocomplete-script.d.ts +0 -14
  420. package/lib/typescript/autocomplete-scripts/zsh-autocomplete-script.d.ts +0 -11
  421. package/lib/typescript/coerce/coerce-methods.d.ts +0 -20
  422. package/lib/typescript/coerce/coerce-methods.d.ts.map +0 -1
  423. package/lib/typescript/coerce/string-to-array.d.ts.map +0 -1
  424. package/lib/typescript/coerce/string-to-primitive.d.ts +0 -5
  425. package/lib/typescript/coerce/string-to-primitive.d.ts.map +0 -1
  426. package/lib/typescript/definitions/define-cli.d.ts.map +0 -1
  427. package/lib/typescript/definitions/define-subcommand.d.ts.map +0 -1
  428. package/lib/typescript/definitions/validate-cli-definition.d.ts.map +0 -1
  429. package/lib/typescript/parse/context/object-context-builder.d.ts.map +0 -1
  430. package/lib/typescript/types/definitions-types.d.ts.map +0 -1
  431. package/lib/typescript/types/types.d.ts +0 -61
  432. package/lib/typescript/types/types.d.ts.map +0 -1
  433. package/lib/typescript/utilities.d.ts.map +0 -1
  434. /package/lib/{typescript → types}/autocomplete-scripts/bash-autocomplete-script.d.ts +0 -0
  435. /package/lib/{typescript → types}/definitions/define-arguments.d.ts +0 -0
  436. /package/lib/{typescript → types}/definitions/define-arguments.d.ts.map +0 -0
  437. /package/lib/{typescript → types}/definitions/define-options.d.ts +0 -0
  438. /package/lib/{typescript → types}/definitions/define-options.d.ts.map +0 -0
  439. /package/lib/{typescript → types}/help-message/format-arguments.d.ts +0 -0
  440. /package/lib/{typescript → types}/help-message/format-arguments.d.ts.map +0 -0
  441. /package/lib/{typescript → types}/help-message/format-options.d.ts +0 -0
  442. /package/lib/{typescript → types}/help-message/format-options.d.ts.map +0 -0
  443. /package/lib/{typescript → types}/help-message/format-subcommands.d.ts +0 -0
  444. /package/lib/{typescript → types}/help-message/format-subcommands.d.ts.map +0 -0
  445. /package/lib/{typescript → types}/help-message/generate-for-cli.d.ts +0 -0
  446. /package/lib/{typescript → types}/help-message/generate-for-cli.d.ts.map +0 -0
  447. /package/lib/{typescript → types}/help-message/generate-for-subcommand.d.ts +0 -0
  448. /package/lib/{typescript → types}/help-message/generate-for-subcommand.d.ts.map +0 -0
  449. /package/lib/{typescript → types}/help-message/print-help.d.ts +0 -0
  450. /package/lib/{typescript → types}/help-message/print-help.d.ts.map +0 -0
  451. /package/lib/{typescript → types}/help-message/set-defaults.d.ts +0 -0
  452. /package/lib/{typescript → types}/help-message/set-defaults.d.ts.map +0 -0
  453. /package/lib/{typescript → types}/help-message/styles.d.ts +0 -0
  454. /package/lib/{typescript → types}/help-message/styles.d.ts.map +0 -0
  455. /package/lib/{typescript → types}/help-message/terminal-markdown.d.ts +0 -0
  456. /package/lib/{typescript → types}/markdown/generate-markdown.d.ts +0 -0
  457. /package/lib/{typescript → types}/markdown/generate-markdown.d.ts.map +0 -0
  458. /package/lib/{typescript → types}/metadata/arguments-metadata.d.ts +0 -0
  459. /package/lib/{typescript → types}/metadata/cli-metadata.d.ts +0 -0
  460. /package/lib/{typescript → types}/metadata/cli-metadata.d.ts.map +0 -0
  461. /package/lib/{typescript → types}/metadata/options-metadata.d.ts +0 -0
  462. /package/lib/{typescript → types}/metadata/subcommands-metadata.d.ts +0 -0
  463. /package/lib/{typescript → types}/metadata/subcommands-metadata.d.ts.map +0 -0
  464. /package/lib/{typescript → types}/parse/safe-parse.d.ts +0 -0
  465. /package/lib/{typescript → types}/parse/validation/validators/explicitly-passed.d.ts +0 -0
  466. /package/lib/{typescript → types}/parse/validation/validators/explicitly-passed.d.ts.map +0 -0
  467. /package/lib/{typescript → types}/types/context-types.d.ts +0 -0
  468. /package/lib/{typescript → types}/types/context-types.d.ts.map +0 -0
  469. /package/lib/{typescript → types}/types/help-message-types.d.ts +0 -0
  470. /package/lib/{typescript → types}/types/help-message-types.d.ts.map +0 -0
  471. /package/lib/{typescript → types}/types/io-types.d.ts.map +0 -0
  472. /package/lib/{typescript → types}/types/metadata-types.d.ts +0 -0
  473. /package/lib/{typescript → types}/types/metadata-types.d.ts.map +0 -0
  474. /package/lib/{typescript → types}/types/schema-types.d.ts +0 -0
  475. /package/lib/{typescript → types}/types/schema-types.d.ts.map +0 -0
@@ -1 +1,7 @@
1
- {"version":3,"names":["transformOptionToArgument","findDuplicateStrings","validateCliDefinition","cliDefinition","cliName","Error","validateOptions","validateArguments","subcommands","length","commandsNames","map","c","name","some","commandsNamesDuplicates","join","subcommand","aliases","aliasesDuplicates","alias","includes","aliasConflicts","filter","commandDefinition","options","isCli","createError","message","optionsDefinitionEntries","Object","entries","option","schema","_preparedType","isNegatedOptionName","arguments","findConflict","find","n","d","requires","duplicateRequires","required","conflictWith","conflict","requiresSet","Set","conflictsSet","intersection","intersectionArray","Array","from","s","argumentsDefinitionEntries","index","argument","test","optional","allowPositionals","startsWith"],"sources":["../../../src/definitions/validate-cli-definition.ts"],"sourcesContent":["import { transformOptionToArgument } from \"../parse/parser-utilities.ts\";\nimport { findDuplicateStrings } from \"../utilities.ts\";\n\nimport type { Cli, Subcommand } from \"../types/definitions-types.ts\";\n\n/** @throws {Error} If validation fails. */\nexport function validateCliDefinition(cliDefinition: Cli) {\n if (!cliDefinition.cliName) {\n throw new Error(`invalid cli definition: \"cliName\" property is required.`);\n }\n\n // validate cli options\n validateOptions(cliDefinition);\n\n // validate cli arguments\n validateArguments(cliDefinition);\n\n const subcommands = cliDefinition.subcommands;\n if (!subcommands) return; // ok\n\n // no empty subcommands array\n if (subcommands.length === 0) {\n throw new Error(\n `invalid cli definition \"${cliDefinition.cliName}\": \"subcommands\" property is optional but cannot be empty.`,\n );\n }\n\n const commandsNames = subcommands.map(c => c.name);\n\n // required subcommand name\n if (commandsNames.some(c => !c)) {\n throw new Error(`invalid subcommand definition: subcommand's \"name\" property is required.`);\n }\n\n // no duplicate subcommand names\n const commandsNamesDuplicates = findDuplicateStrings(commandsNames).map(c => `\"${c}\"`);\n if (commandsNamesDuplicates.length > 0) {\n throw new Error(\n `invalid cli definition \"${cliDefinition.cliName}\" has duplicated subcommands: ${commandsNamesDuplicates.join(\", \")}.`,\n );\n }\n\n for (const subcommand of subcommands) {\n // command aliases check\n if (subcommand.aliases) {\n // no duplicated aliases\n const aliasesDuplicates = findDuplicateStrings(subcommand.aliases).map(c => `\"${c}\"`);\n if (aliasesDuplicates.length > 0) {\n throw new Error(`subcommand \"${subcommand.name}\" has duplicated aliases: ${aliasesDuplicates.join(\", \")}.`);\n }\n\n for (const alias of subcommand.aliases) {\n // no empty alias\n if (alias === \"\") {\n throw new Error(`subcommand \"${subcommand.name}\" has an empty string alias.`);\n }\n\n // no conflict with subcommand name\n if (commandsNames.includes(alias)) {\n throw new Error(`subcommand \"${subcommand.name}\" alias \"${alias}\" conflicts with another subcommand name.`);\n }\n\n // no conflict with another alias\n const aliasConflicts = subcommands.filter(c => c.name !== subcommand.name && c.aliases?.includes(alias));\n if (aliasConflicts.length > 0) {\n throw new Error(\n `subcommand \"${subcommand.name}\" alias \"${alias}\" conflicts with another subcommand alias: \"${aliasConflicts[0].name}\".`,\n );\n }\n }\n }\n\n // validate subcommand options\n validateOptions(subcommand);\n\n // validate subcommand arguments\n validateArguments(subcommand);\n }\n}\n\nfunction validateOptions(commandDefinition: Cli | Subcommand) {\n if (!commandDefinition.options) return; // ok\n\n const isCli = \"cliName\" in commandDefinition;\n const name = isCli ? commandDefinition.cliName : commandDefinition.name;\n\n const createError = (message: string) => {\n return new Error(`invalid ${isCli ? \"cli\" : \"subcommand\"} definition \"${name}\": ${message}`);\n };\n\n const optionsDefinitionEntries = Object.entries(commandDefinition.options);\n\n // no empty options\n if (optionsDefinitionEntries.length === 0) {\n throw createError(`\"options\" property is optional but cannot be empty.`);\n }\n\n for (const [name, option] of optionsDefinitionEntries) {\n // required type\n if (!option.schema) {\n throw createError(`the option \"${name}\" missing a required property: \"schema\".`);\n }\n\n // should not happen\n if (!option._preparedType) {\n throw createError(`internal error: missing prepared type for option \"${name}\".`);\n }\n\n // no negated option name for boolean options\n if (isNegatedOptionName(name)) {\n throw createError(`the option \"${name}\" is a negated option name.`);\n }\n\n // no conflict with argument name\n if (commandDefinition.arguments && name in commandDefinition.arguments) {\n throw createError(`the option \"${name}\" name conflicts with an argument name.`);\n }\n\n if (option.aliases) {\n // no duplicate aliases\n const aliasesDuplicates = findDuplicateStrings(option.aliases);\n if (aliasesDuplicates.length > 0) {\n throw createError(`the option \"${name}\" has duplicated aliases: ${aliasesDuplicates.join(\", \")}.`);\n }\n\n for (const alias of option.aliases) {\n // no empty string aliases\n if (alias === \"\") {\n throw createError(`the option \"${name}\" has an empty string alias.`);\n }\n\n // no negated alias name for boolean options\n if (isNegatedOptionName(alias)) {\n throw createError(`the alias \"${alias}\" of the option \"${name}\" is a negated option name.`);\n }\n\n // no alias name should conflict with any option name\n if (commandDefinition.options[alias]) {\n throw createError(`the alias \"${alias}\" of the option \"${name}\" conflicts with another option name.`);\n }\n\n // no alias name should conflict with any argument name\n if (commandDefinition.arguments && alias in commandDefinition.arguments) {\n throw createError(`the alias \"${alias}\" of the option \"${name}\" conflicts with an argument name.`);\n }\n\n // no alias name should conflict with any other alias name\n const findConflict = optionsDefinitionEntries.find(([n, d]) => n !== name && d.aliases?.includes(alias));\n if (findConflict) {\n throw createError(\n `the alias \"${alias}\" of the option \"${name}\" conflicts with another alias name of the option \"${findConflict[0]}\".`,\n );\n }\n }\n }\n\n if (option.requires) {\n // no self require\n if (option.requires.includes(name)) {\n throw createError(`the option \"${name}\" cannot require itself.`);\n }\n\n // no duplicate requires\n const duplicateRequires = findDuplicateStrings(option.requires).map(required => `\"${required}\"`);\n if (duplicateRequires.length > 0) {\n throw createError(`the option \"${name}\" has duplicate requires: ${duplicateRequires.join(\", \")}.`);\n }\n\n // no unknown required name\n for (const required of option.requires) {\n const exits = required in commandDefinition.options || required in (commandDefinition.arguments ?? []);\n if (!exits) {\n throw createError(`the option \"${name}\" requires \"${required}\", but it does not exist.`);\n }\n }\n }\n\n if (option.conflictWith) {\n // no self conflict\n if (option.conflictWith.includes(name)) {\n throw createError(`the option \"${name}\" cannot conflict itself.`);\n }\n\n // no duplicate conflicts\n const duplicateRequires = findDuplicateStrings(option.conflictWith).map(conflict => `\"${conflict}\"`);\n if (duplicateRequires.length > 0) {\n throw createError(`the option \"${name}\" has duplicate conflicts: ${duplicateRequires.join(\", \")}.`);\n }\n\n // no unknown conflict name\n for (const required of option.conflictWith) {\n const exits = required in commandDefinition.options || required in (commandDefinition.arguments ?? []);\n if (!exits) {\n throw createError(`the option \"${name}\" conflict with \"${required}\", but it does not exist.`);\n }\n }\n }\n\n // no intersection between requires and conflicts\n if (option.requires && option.conflictWith) {\n const requiresSet = new Set(option.requires);\n const conflictsSet = new Set(option.conflictWith);\n\n const intersection = requiresSet.intersection(conflictsSet);\n const intersectionArray = Array.from(intersection).map(name => `\"${name}\"`);\n\n if (intersectionArray.length > 0) {\n const s = intersectionArray.length > 1 ? \"s\" : \"\";\n throw createError(\n `the option \"${name}\" cannot require and conflict with the same name${s}: ${intersectionArray.join(\", \")}.`,\n );\n }\n }\n }\n}\n\nfunction validateArguments(commandDefinition: Cli | Subcommand) {\n if (!commandDefinition.arguments) return; // ok\n\n const isCli = \"cliName\" in commandDefinition;\n const name = isCli ? commandDefinition.cliName : commandDefinition.name;\n\n const createError = (message: string) => {\n return new Error(`invalid ${isCli ? \"cli\" : \"subcommand\"} definition \"${name}\": ${message}`);\n };\n\n if (commandDefinition.arguments) {\n const argumentsDefinitionEntries = Object.entries(commandDefinition.arguments);\n\n // no empty arguments record\n if (argumentsDefinitionEntries.length === 0) {\n throw createError(`\"arguments\" property is optional but cannot be empty.`);\n }\n\n for (const [index, [name, argument]] of argumentsDefinitionEntries.entries()) {\n // no number key name\n if (/^\\d+$/.test(name)) {\n throw createError(`the argument \"${name}\" name cannot be a number.`);\n }\n\n // should not happen\n if (!argument._preparedType) {\n throw createError(`internal error: missing prepared type for argument \"${name}\".`);\n }\n\n // no missing type\n if (!argument.schema) {\n throw createError(`the argument \"${name}\" missing a required property: \"schema\".`);\n }\n\n // no conflicting option\n if (commandDefinition.options && name in commandDefinition.options) {\n throw createError(`the argument \"${name}\" name conflicts with an option name.`);\n }\n\n if (!argument._preparedType.optional) continue; // ok\n\n // no optional argument when \"allowPositionals\" is enabled\n if (commandDefinition.allowPositionals) {\n throw createError(`the argument \"${name}\" cannot be optional when \"allowPositionals\" is enabled.`);\n }\n\n // only last argument can be optional\n if (index !== argumentsDefinitionEntries.length - 1) {\n throw createError(`the argument \"${name}\" cannot be optional unless it is the last argument.`);\n }\n\n if (argument.requires) {\n // no self require\n if (argument.requires.includes(name)) {\n throw createError(`the argument \"${name}\" cannot require itself.`);\n }\n\n // no duplicate requires\n const duplicateRequires = findDuplicateStrings(argument.requires).map(required => `\"${required}\"`);\n if (duplicateRequires.length > 0) {\n throw createError(`the argument \"${name}\" has duplicate requires: ${duplicateRequires.join(\", \")}.`);\n }\n\n // no unknown require\n for (const required of argument.requires) {\n const exits = required in (commandDefinition.options ?? {}) || required in commandDefinition.arguments;\n if (!exits) {\n throw createError(`the argument \"${name}\" requires \"${required}\", but it does not exist.`);\n }\n }\n }\n\n if (argument.conflictWith) {\n // no self conflict\n if (argument.conflictWith.includes(name)) {\n throw createError(`the argument \"${name}\" cannot conflict itself.`);\n }\n\n // no duplicate conflicts\n const duplicateRequires = findDuplicateStrings(argument.conflictWith).map(conflict => `\"${conflict}\"`);\n if (duplicateRequires.length > 0) {\n throw createError(`the argument \"${name}\" has duplicate conflicts: ${duplicateRequires.join(\", \")}.`);\n }\n\n // no unknown conflict\n for (const required of argument.conflictWith) {\n const exits = required in (commandDefinition.options ?? {}) || required in commandDefinition.arguments;\n if (!exits) {\n throw createError(`the argument \"${name}\" conflict with \"${required}\", but it does not exist.`);\n }\n }\n }\n\n // no intersection between requires and conflicts\n if (argument.requires && argument.conflictWith) {\n const requiresSet = new Set(argument.requires);\n const conflictsSet = new Set(argument.conflictWith);\n\n const intersection = requiresSet.intersection(conflictsSet);\n const intersectionArray = Array.from(intersection).map(name => `\"${name}\"`);\n\n if (intersectionArray.length > 0) {\n const s = intersectionArray.length > 1 ? \"s\" : \"\";\n throw createError(\n `the argument \"${name}\" cannot require and conflict with the same name${s}: ${intersectionArray.join(\", \")}.`,\n );\n }\n }\n }\n }\n}\n\nfunction isNegatedOptionName(name: string) {\n return transformOptionToArgument(name).startsWith(\"--no-\");\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/definitions/validate-cli-definition.ts"],
4
+ "sourcesContent": ["import { CliError } from \"../cli-error/cli-error.ts\";\nimport { ErrorCause } from \"../cli-error/error-cause.ts\";\nimport { DefinitionErrorCode } from \"../cli-error/error-code/definition-error-code.ts\";\nimport { InternalErrorCode } from \"../cli-error/error-code/internal-error-code.ts\";\nimport { transformOptionToArgument } from \"../parse/parser-utilities.ts\";\n\nimport type { Cli, Subcommand } from \"../types/definitions-types.ts\";\n\n/** @throws {CliError} If validation fails. */\nexport function validateCliDefinition(cliDefinition: Cli) {\n if (!cliDefinition.cliName) {\n throw new CliError({\n cause: ErrorCause.Definition,\n code: DefinitionErrorCode.MissingDefinitionName,\n context: { commandKind: \"command\" },\n });\n }\n\n // validate cli options\n validateOptions(cliDefinition);\n\n // validate cli arguments\n validateArguments(cliDefinition);\n\n const subcommands = cliDefinition.subcommands;\n if (!subcommands) return; // ok\n\n // no empty subcommands array\n if (subcommands.length === 0) {\n throw new CliError({\n cause: ErrorCause.Definition,\n code: DefinitionErrorCode.EmptyDefinitionGroup,\n context: { commandKind: \"command\", commandName: cliDefinition.cliName, kind: \"subcommands\" },\n });\n }\n\n const commandsNames = new Set(subcommands.map(c => c.name));\n\n const visitedSubcommandNames = new Set<string>();\n\n for (const subcommand of subcommands) {\n if (!subcommand.name) {\n throw new CliError({\n cause: ErrorCause.Definition,\n code: DefinitionErrorCode.MissingDefinitionName,\n context: { commandKind: \"subcommand\" },\n });\n }\n\n // no duplicate subcommand names\n if (visitedSubcommandNames.has(subcommand.name)) {\n throw new CliError({\n cause: ErrorCause.Definition,\n code: DefinitionErrorCode.DuplicateDefinitionName,\n context: {\n commandKind: \"command\",\n commandName: cliDefinition.cliName,\n kind: \"subcommand\",\n name: subcommand.name,\n foundInKind: \"subcommand\",\n },\n });\n }\n visitedSubcommandNames.add(subcommand.name);\n\n // command aliases check\n if (subcommand.aliases) {\n for (const alias of subcommand.aliases) {\n // no empty alias\n if (alias === \"\") {\n throw new CliError({\n cause: ErrorCause.Definition,\n code: DefinitionErrorCode.EmptyStringAliasName,\n context: { commandKind: \"subcommand\", commandName: subcommand.name },\n });\n }\n\n // no conflict with subcommand name\n if (commandsNames.has(alias)) {\n throw new CliError({\n cause: ErrorCause.Definition,\n code: DefinitionErrorCode.DuplicateDefinitionName,\n context: {\n commandKind: \"command\",\n commandName: cliDefinition.cliName,\n kind: \"subcommand\",\n name: subcommand.name,\n foundInKind: \"subcommand\",\n duplicatedAlias: alias,\n },\n });\n }\n\n // no conflict with another alias\n const aliasConflicts = subcommands.filter(c => c.name !== subcommand.name && c.aliases?.includes(alias));\n if (aliasConflicts.length > 0) {\n throw new CliError({\n cause: ErrorCause.Definition,\n code: DefinitionErrorCode.DuplicateDefinitionName,\n context: {\n commandKind: \"command\",\n commandName: cliDefinition.cliName,\n kind: \"subcommand\",\n name: subcommand.name,\n foundInKind: \"subcommand\",\n duplicatedAlias: alias,\n foundInName: aliasConflicts[0].name,\n },\n });\n }\n }\n }\n\n // validate subcommand options\n validateOptions(subcommand);\n\n // validate subcommand arguments\n validateArguments(subcommand);\n }\n}\n\nfunction validateOptions(commandDefinition: Cli | Subcommand) {\n if (!commandDefinition.options) return; // ok\n\n const isCli = \"cliName\" in commandDefinition;\n const commandName = isCli ? commandDefinition.cliName : commandDefinition.name;\n const commandKind = isCli ? \"command\" : \"subcommand\";\n\n const optionsDefinitionEntries = Object.entries(commandDefinition.options);\n\n // no empty options\n if (optionsDefinitionEntries.length === 0) {\n throw new CliError({\n cause: ErrorCause.Definition,\n code: DefinitionErrorCode.EmptyDefinitionGroup,\n context: { commandKind, commandName, kind: \"option\" },\n });\n }\n\n for (const [name, option] of optionsDefinitionEntries) {\n // required type\n if (!option.schema) {\n throw new CliError({\n cause: ErrorCause.Definition,\n code: DefinitionErrorCode.MissingSchema,\n context: { commandKind, commandName, kind: \"option\", name },\n });\n }\n\n // should not happen\n if (!option._preparedType) {\n throw new CliError({\n cause: ErrorCause.Internal,\n code: InternalErrorCode.MissingPreparedTypes,\n context: { commandKind, commandName, kind: \"option\", name },\n });\n }\n\n // no negated option name for boolean options\n if (isNegatedOptionName(name)) {\n throw new CliError({\n cause: ErrorCause.Definition,\n code: DefinitionErrorCode.InvalidDefinitionOptionName,\n context: { commandKind, commandName, optionName: name },\n });\n }\n\n // no conflict with argument name\n if (commandDefinition.arguments && name in commandDefinition.arguments) {\n throw new CliError({\n cause: ErrorCause.Definition,\n code: DefinitionErrorCode.DuplicateDefinitionName,\n context: { commandKind, commandName, kind: \"option\", name, foundInKind: \"argument\" },\n });\n }\n\n if (option.aliases) {\n for (const aliasName of option.aliases) {\n // no empty string aliases\n if (aliasName === \"\") {\n throw new CliError({\n cause: ErrorCause.Definition,\n code: DefinitionErrorCode.EmptyStringAliasName,\n context: { commandKind, commandName, optionName: name },\n });\n }\n\n // no negated alias name for boolean options\n if (isNegatedOptionName(aliasName)) {\n throw new CliError({\n cause: ErrorCause.Definition,\n code: DefinitionErrorCode.InvalidDefinitionOptionName,\n context: { commandKind, commandName, optionName: name, negatedAliasName: aliasName },\n });\n }\n\n // no alias name should conflict with any option name\n if (commandDefinition.options[aliasName]) {\n throw new CliError({\n cause: ErrorCause.Definition,\n code: DefinitionErrorCode.DuplicateDefinitionName,\n context: {\n commandKind,\n commandName,\n kind: \"option\",\n name,\n duplicatedAlias: aliasName,\n foundInKind: \"option\",\n },\n });\n }\n\n // no alias name should conflict with any argument name\n if (commandDefinition.arguments && aliasName in commandDefinition.arguments) {\n throw new CliError({\n cause: ErrorCause.Definition,\n code: DefinitionErrorCode.DuplicateDefinitionName,\n context: {\n commandKind,\n commandName,\n kind: \"option\",\n name,\n duplicatedAlias: aliasName,\n foundInKind: \"argument\",\n },\n });\n }\n\n // no alias name should conflict with any other alias name\n const findConflict = optionsDefinitionEntries.find(([n, d]) => n !== name && d.aliases?.includes(aliasName));\n if (findConflict) {\n throw new CliError({\n cause: ErrorCause.Definition,\n code: DefinitionErrorCode.DuplicateDefinitionName,\n context: {\n commandKind,\n commandName,\n kind: \"option\",\n name: aliasName,\n foundInKind: \"option\",\n foundInName: findConflict[0],\n },\n });\n }\n }\n }\n\n if (option.requires) {\n // no self require\n if (option.requires.includes(name)) {\n throw new CliError({\n cause: ErrorCause.Definition,\n code: DefinitionErrorCode.SelfRequire,\n context: { commandKind, commandName, kind: \"option\", name: name },\n });\n }\n\n // no unknown required name\n for (const requiredName of option.requires) {\n const exits = requiredName in commandDefinition.options || requiredName in (commandDefinition.arguments ?? []);\n if (!exits) {\n throw new CliError({\n cause: ErrorCause.Definition,\n code: DefinitionErrorCode.UnknownRequireName,\n context: { commandKind, commandName, kind: \"option\", name: name, requiredName },\n });\n }\n }\n }\n\n if (option.conflictWith) {\n // no self conflict\n if (option.conflictWith.includes(name)) {\n throw new CliError({\n cause: ErrorCause.Definition,\n code: DefinitionErrorCode.SelfConflict,\n context: { commandKind, commandName, kind: \"option\", name: name },\n });\n }\n\n // no unknown conflict name\n for (const requiredName of option.conflictWith) {\n const exits = requiredName in commandDefinition.options || requiredName in (commandDefinition.arguments ?? []);\n if (!exits) {\n throw new CliError({\n cause: ErrorCause.Definition,\n code: DefinitionErrorCode.UnknownConflictName,\n context: { commandKind, commandName, kind: \"option\", name: name, requiredName },\n });\n }\n }\n }\n\n // no intersection between requires and conflicts\n if (option.requires && option.conflictWith) {\n const requiresSet = new Set(option.requires);\n const conflictsSet = new Set(option.conflictWith);\n\n const intersection = requiresSet.intersection(conflictsSet);\n const intersectedNames = Array.from(intersection).map(name => `\"${name}\"`);\n\n if (intersectedNames.length > 0) {\n throw new CliError({\n cause: ErrorCause.Definition,\n code: DefinitionErrorCode.DefinitionRequiresConflictOverlap,\n context: { commandKind, commandName, kind: \"option\", name: name, intersectedNames },\n });\n }\n }\n }\n}\n\nfunction validateArguments(commandDefinition: Cli | Subcommand) {\n if (!commandDefinition.arguments) return; // ok\n\n const isCli = \"cliName\" in commandDefinition;\n const commandName = isCli ? commandDefinition.cliName : commandDefinition.name;\n const commandKind = isCli ? \"command\" : \"subcommand\";\n\n const argumentsDefinitionEntries = Object.entries(commandDefinition.arguments);\n\n // no empty arguments record\n if (argumentsDefinitionEntries.length === 0) {\n throw new CliError({\n cause: ErrorCause.Definition,\n code: DefinitionErrorCode.EmptyDefinitionGroup,\n context: { commandKind, commandName, kind: \"argument\" },\n });\n }\n\n for (const [index, [name, argument]] of argumentsDefinitionEntries.entries()) {\n // no number key name\n if (/^\\d+$/.test(name)) {\n throw new CliError({\n cause: ErrorCause.Definition,\n code: DefinitionErrorCode.InvalidDefinitionArgumentName,\n context: { commandKind, commandName, name },\n });\n }\n\n // should not happen\n if (!argument._preparedType) {\n throw new CliError({\n cause: ErrorCause.Internal,\n code: InternalErrorCode.MissingPreparedTypes,\n context: { commandKind, commandName, kind: \"argument\", name },\n });\n }\n\n // no missing schema\n if (!argument.schema) {\n throw new CliError({\n cause: ErrorCause.Definition,\n code: DefinitionErrorCode.MissingSchema,\n context: { commandKind, commandName, kind: \"argument\", name },\n });\n }\n\n if (!argument._preparedType.optional) continue; // ok\n\n // no optional argument when \"allowPositionals\" is enabled\n if (commandDefinition.allowPositionals) {\n throw new CliError({\n cause: ErrorCause.Definition,\n code: DefinitionErrorCode.InvalidOptionalArgumentDefinition,\n context: { commandKind, commandName, name, allowPositionals: true },\n });\n }\n\n // only last argument can be optional\n if (index !== argumentsDefinitionEntries.length - 1) {\n throw new CliError({\n cause: ErrorCause.Definition,\n code: DefinitionErrorCode.InvalidOptionalArgumentDefinition,\n context: { commandKind, commandName, name, allowPositionals: false },\n });\n }\n\n if (argument.requires) {\n // no self require\n if (argument.requires.includes(name)) {\n throw new CliError({\n cause: ErrorCause.Definition,\n code: DefinitionErrorCode.SelfRequire,\n context: { commandKind, commandName, kind: \"argument\", name },\n });\n }\n\n // no unknown require\n for (const requiredName of argument.requires) {\n const exits = requiredName in (commandDefinition.options ?? {}) || requiredName in commandDefinition.arguments;\n if (!exits) {\n throw new CliError({\n cause: ErrorCause.Definition,\n code: DefinitionErrorCode.UnknownRequireName,\n context: { commandKind, commandName, kind: \"argument\", name, requiredName },\n });\n }\n }\n }\n\n if (argument.conflictWith) {\n // no self conflict\n if (argument.conflictWith.includes(name)) {\n throw new CliError({\n cause: ErrorCause.Definition,\n code: DefinitionErrorCode.SelfConflict,\n context: { commandKind, commandName, kind: \"argument\", name },\n });\n }\n\n // no unknown conflict\n for (const requiredName of argument.conflictWith) {\n const exits = requiredName in (commandDefinition.options ?? {}) || requiredName in commandDefinition.arguments;\n if (!exits) {\n throw new CliError({\n cause: ErrorCause.Definition,\n code: DefinitionErrorCode.UnknownConflictName,\n context: { commandKind, commandName, kind: \"argument\", name, requiredName },\n });\n }\n }\n }\n\n // no intersection between requires and conflicts\n if (argument.requires && argument.conflictWith) {\n const requiresSet = new Set(argument.requires);\n const conflictsSet = new Set(argument.conflictWith);\n\n const intersection = requiresSet.intersection(conflictsSet);\n const intersectedNames = Array.from(intersection).map(name => `\"${name}\"`);\n\n if (intersectedNames.length > 0) {\n throw new CliError({\n cause: ErrorCause.Definition,\n code: DefinitionErrorCode.DefinitionRequiresConflictOverlap,\n context: { commandKind, commandName, kind: \"argument\", name, intersectedNames },\n });\n }\n }\n }\n}\n\nfunction isNegatedOptionName(name: string) {\n return transformOptionToArgument(name).startsWith(\"--no-\");\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["name"]
7
+ }
@@ -1,2 +1,48 @@
1
- import{indent,indentLines,insertAtEndOfFirstLine,ln,toKebabCase}from"../utilities.js";import{terminalMarkdown}from"./terminal-markdown.js";function formatHelpMessageArguments(e,n){if(0===e.length)return"";const{style:t,indentBeforeName:i,indentAfterName:r,indentBeforePlaceholder:a,newLineIndent:l,longest:o,argumentsTitle:d,defaultKeyword:s,optionalKeyword:m,exampleKeyword:p,emptyLines:f,emptyLinesBeforeTitle:u,emptyLinesAfterTitle:c,markdownRenderer:g,kebabCaseArgumentName:w}=n;let A=ln(u)+indent(1)+t.title(d)+ln(1+c);const L=o+i+r+a+l;for(const n of e){if(n.hidden)continue;let e=n.description?t.description(n.description):terminalMarkdown(n.descriptionMarkdown,g,t.description);e=indentLines(e,L);let l="";n.defaultValueAsString&&(l=t.default(s.replace("{{ value }}",n.defaultValueAsString))),n.optional&&!l&&(l=t.optional(m));const d=o-n.name.length;if(A+=indent(i)+t.argument(w?toKebabCase(n.name):n.name)+indent(a+r)+indent(d)+insertAtEndOfFirstLine(e,l)+ln(1+f),n.example){const e=indentLines(n.example,L+p.length+1);A+=indent(L)+t.exampleTitle(p)+indent(1)+t.example(e)+ln(1)}}return A}export{formatHelpMessageArguments};
2
- //# sourceMappingURL=format-arguments.js.map
1
+ // src/help-message/format-arguments.ts
2
+ import { indent, indentLines, insertAtEndOfFirstLine, ln, toKebabCase } from "../utilities/utilities.js";
3
+ import { terminalMarkdown } from "./terminal-markdown.js";
4
+ function formatHelpMessageArguments(argumentsMetadata, options) {
5
+ if (argumentsMetadata.length === 0) return "";
6
+ const {
7
+ style,
8
+ indentBeforeName,
9
+ indentAfterName,
10
+ indentBeforePlaceholder,
11
+ newLineIndent,
12
+ longest,
13
+ argumentsTitle,
14
+ defaultKeyword,
15
+ optionalKeyword,
16
+ exampleKeyword,
17
+ emptyLines,
18
+ emptyLinesBeforeTitle,
19
+ emptyLinesAfterTitle,
20
+ markdownRenderer,
21
+ kebabCaseArgumentName
22
+ } = options;
23
+ let message = ln(emptyLinesBeforeTitle) + indent(1) + style.title(argumentsTitle) + ln(1 + emptyLinesAfterTitle);
24
+ const totalSpacing = longest + indentBeforeName + indentAfterName + indentBeforePlaceholder + newLineIndent;
25
+ for (const metadata of argumentsMetadata) {
26
+ if (metadata.hidden) continue;
27
+ let description = metadata.description ? style.description(metadata.description) : terminalMarkdown(metadata.descriptionMarkdown, markdownRenderer, style.description);
28
+ description = indentLines(description, totalSpacing);
29
+ let defaultOrOptional = "";
30
+ if (metadata.defaultValueAsString) {
31
+ defaultOrOptional = style.default(defaultKeyword.replace("{{ value }}", metadata.defaultValueAsString));
32
+ }
33
+ if (metadata.optional && !defaultOrOptional) {
34
+ defaultOrOptional = style.optional(optionalKeyword);
35
+ }
36
+ const spacing = longest - metadata.name.length;
37
+ message += indent(indentBeforeName) + style.argument(kebabCaseArgumentName ? toKebabCase(metadata.name) : metadata.name) + indent(indentBeforePlaceholder + indentAfterName) + indent(spacing) + insertAtEndOfFirstLine(description, defaultOrOptional) + ln(1 + emptyLines);
38
+ if (metadata.example) {
39
+ const normalizeExample = indentLines(metadata.example, totalSpacing + exampleKeyword.length + 1);
40
+ message += indent(totalSpacing) + style.exampleTitle(exampleKeyword) + indent(1) + style.example(normalizeExample) + ln(1);
41
+ }
42
+ }
43
+ return message;
44
+ }
45
+ export {
46
+ formatHelpMessageArguments
47
+ };
48
+ //# sourceMappingURL=format-arguments.js.map
@@ -1 +1,7 @@
1
- {"version":3,"names":["indent","indentLines","insertAtEndOfFirstLine","ln","toKebabCase","terminalMarkdown","formatHelpMessageArguments","argumentsMetadata","options","length","style","indentBeforeName","indentAfterName","indentBeforePlaceholder","newLineIndent","longest","argumentsTitle","defaultKeyword","optionalKeyword","exampleKeyword","emptyLines","emptyLinesBeforeTitle","emptyLinesAfterTitle","markdownRenderer","kebabCaseArgumentName","message","title","totalSpacing","metadata","hidden","description","descriptionMarkdown","defaultOrOptional","defaultValueAsString","default","replace","optional","spacing","name","argument","example","normalizeExample","exampleTitle"],"sources":["../../../src/help-message/format-arguments.ts"],"sourcesContent":["import { indent, indentLines, insertAtEndOfFirstLine, ln, toKebabCase } from \"../utilities.ts\";\nimport { terminalMarkdown } from \"./terminal-markdown.ts\";\n\nimport type { ArgumentMetadata } from \"../types/metadata-types.ts\";\nimport type { FormatOptions } from \"./generate-for-cli.ts\";\n\nexport function formatHelpMessageArguments(argumentsMetadata: ArgumentMetadata[], options: FormatOptions): string {\n if (argumentsMetadata.length === 0) return \"\";\n\n const {\n style,\n indentBeforeName,\n indentAfterName,\n indentBeforePlaceholder,\n newLineIndent,\n longest,\n argumentsTitle,\n defaultKeyword,\n optionalKeyword,\n exampleKeyword,\n emptyLines,\n emptyLinesBeforeTitle,\n emptyLinesAfterTitle,\n markdownRenderer,\n kebabCaseArgumentName,\n } = options;\n\n let message = ln(emptyLinesBeforeTitle) + indent(1) + style.title(argumentsTitle) + ln(1 + emptyLinesAfterTitle);\n\n // the space from the beginning to the start of the next column.\n const totalSpacing = longest + indentBeforeName + indentAfterName + indentBeforePlaceholder + newLineIndent;\n\n for (const metadata of argumentsMetadata) {\n if (metadata.hidden) continue;\n\n let description = metadata.description\n ? style.description(metadata.description)\n : terminalMarkdown(metadata.descriptionMarkdown, markdownRenderer, style.description);\n\n description = indentLines(description, totalSpacing);\n\n let defaultOrOptional = \"\";\n\n if (metadata.defaultValueAsString) {\n defaultOrOptional = style.default(defaultKeyword.replace(\"{{ value }}\", metadata.defaultValueAsString));\n }\n\n if (metadata.optional && !defaultOrOptional) {\n defaultOrOptional = style.optional(optionalKeyword);\n }\n\n const spacing = longest - metadata.name.length;\n\n message +=\n indent(indentBeforeName) +\n style.argument(kebabCaseArgumentName ? toKebabCase(metadata.name) : metadata.name) +\n indent(indentBeforePlaceholder + indentAfterName) +\n indent(spacing) +\n insertAtEndOfFirstLine(description, defaultOrOptional) +\n ln(1 + emptyLines);\n\n if (metadata.example) {\n const normalizeExample = indentLines(metadata.example, totalSpacing + exampleKeyword.length + 1); // +1 for the space after the keyword\n message +=\n indent(totalSpacing) + style.exampleTitle(exampleKeyword) + indent(1) + style.example(normalizeExample) + ln(1);\n }\n }\n\n return message;\n}\n"],"mappings":"OAASA,OAAQC,YAAaC,uBAAwBC,GAAIC,gBAAmB,yBACpEC,qBAAwB,yBAK1B,SAASC,2BAA2BC,EAAuCC,GAChF,GAAiC,IAA7BD,EAAkBE,OAAc,MAAO,GAE3C,MAAMC,MACJA,EAAAC,iBACAA,EAAAC,gBACAA,EAAAC,wBACAA,EAAAC,cACAA,EAAAC,QACAA,EAAAC,eACAA,EAAAC,eACAA,EAAAC,gBACAA,EAAAC,eACAA,EAAAC,WACAA,EAAAC,sBACAA,EAAAC,qBACAA,EAAAC,iBACAA,EAAAC,sBACAA,GACEhB,EAEJ,IAAIiB,EAAUtB,GAAGkB,GAAyBrB,OAAO,GAAKU,EAAMgB,MAAMV,GAAkBb,GAAG,EAAImB,GAG3F,MAAMK,EAAeZ,EAAUJ,EAAmBC,EAAkBC,EAA0BC,EAE9F,UAAWc,KAAYrB,EAAmB,CACxC,GAAIqB,EAASC,OAAQ,SAErB,IAAIC,EAAcF,EAASE,YACvBpB,EAAMoB,YAAYF,EAASE,aAC3BzB,iBAAiBuB,EAASG,oBAAqBR,EAAkBb,EAAMoB,aAE3EA,EAAc7B,YAAY6B,EAAaH,GAEvC,IAAIK,EAAoB,GAEpBJ,EAASK,uBACXD,EAAoBtB,EAAMwB,QAAQjB,EAAekB,QAAQ,cAAeP,EAASK,wBAG/EL,EAASQ,WAAaJ,IACxBA,EAAoBtB,EAAM0B,SAASlB,IAGrC,MAAMmB,EAAUtB,EAAUa,EAASU,KAAK7B,OAUxC,GARAgB,GACEzB,OAAOW,GACPD,EAAM6B,SAASf,EAAwBpB,YAAYwB,EAASU,MAAQV,EAASU,MAC7EtC,OAAOa,EAA0BD,GACjCZ,OAAOqC,GACPnC,uBAAuB4B,EAAaE,GACpC7B,GAAG,EAAIiB,GAELQ,EAASY,QAAS,CACpB,MAAMC,EAAmBxC,YAAY2B,EAASY,QAASb,EAAeR,EAAeV,OAAS,GAC9FgB,GACEzB,OAAO2B,GAAgBjB,EAAMgC,aAAavB,GAAkBnB,OAAO,GAAKU,EAAM8B,QAAQC,GAAoBtC,GAAG,EACjH,CACF,CAEA,OAAOsB,CACT,Q","ignoreList":[]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/help-message/format-arguments.ts"],
4
+ "sourcesContent": ["import { indent, indentLines, insertAtEndOfFirstLine, ln, toKebabCase } from \"../utilities/utilities.ts\";\nimport { terminalMarkdown } from \"./terminal-markdown.ts\";\n\nimport type { ArgumentMetadata } from \"../types/metadata-types.ts\";\nimport type { FormatOptions } from \"./generate-for-cli.ts\";\n\nexport function formatHelpMessageArguments(argumentsMetadata: ArgumentMetadata[], options: FormatOptions): string {\n if (argumentsMetadata.length === 0) return \"\";\n\n const {\n style,\n indentBeforeName,\n indentAfterName,\n indentBeforePlaceholder,\n newLineIndent,\n longest,\n argumentsTitle,\n defaultKeyword,\n optionalKeyword,\n exampleKeyword,\n emptyLines,\n emptyLinesBeforeTitle,\n emptyLinesAfterTitle,\n markdownRenderer,\n kebabCaseArgumentName,\n } = options;\n\n let message = ln(emptyLinesBeforeTitle) + indent(1) + style.title(argumentsTitle) + ln(1 + emptyLinesAfterTitle);\n\n // the space from the beginning to the start of the next column.\n const totalSpacing = longest + indentBeforeName + indentAfterName + indentBeforePlaceholder + newLineIndent;\n\n for (const metadata of argumentsMetadata) {\n if (metadata.hidden) continue;\n\n let description = metadata.description\n ? style.description(metadata.description)\n : terminalMarkdown(metadata.descriptionMarkdown, markdownRenderer, style.description);\n\n description = indentLines(description, totalSpacing);\n\n let defaultOrOptional = \"\";\n\n if (metadata.defaultValueAsString) {\n defaultOrOptional = style.default(defaultKeyword.replace(\"{{ value }}\", metadata.defaultValueAsString));\n }\n\n if (metadata.optional && !defaultOrOptional) {\n defaultOrOptional = style.optional(optionalKeyword);\n }\n\n const spacing = longest - metadata.name.length;\n\n message +=\n indent(indentBeforeName) +\n style.argument(kebabCaseArgumentName ? toKebabCase(metadata.name) : metadata.name) +\n indent(indentBeforePlaceholder + indentAfterName) +\n indent(spacing) +\n insertAtEndOfFirstLine(description, defaultOrOptional) +\n ln(1 + emptyLines);\n\n if (metadata.example) {\n const normalizeExample = indentLines(metadata.example, totalSpacing + exampleKeyword.length + 1); // +1 for the space after the keyword\n message +=\n indent(totalSpacing) + style.exampleTitle(exampleKeyword) + indent(1) + style.example(normalizeExample) + ln(1);\n }\n }\n\n return message;\n}\n"],
5
+ "mappings": ";AAAA,SAAS,QAAQ,aAAa,wBAAwB,IAAI,mBAAmB;AAC7E,SAAS,wBAAwB;AAK1B,SAAS,2BAA2B,mBAAuC,SAAgC;AAChH,MAAI,kBAAkB,WAAW,EAAG,QAAO;AAE3C,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,MAAI,UAAU,GAAG,qBAAqB,IAAI,OAAO,CAAC,IAAI,MAAM,MAAM,cAAc,IAAI,GAAG,IAAI,oBAAoB;AAG/G,QAAM,eAAe,UAAU,mBAAmB,kBAAkB,0BAA0B;AAE9F,aAAW,YAAY,mBAAmB;AACxC,QAAI,SAAS,OAAQ;AAErB,QAAI,cAAc,SAAS,cACvB,MAAM,YAAY,SAAS,WAAW,IACtC,iBAAiB,SAAS,qBAAqB,kBAAkB,MAAM,WAAW;AAEtF,kBAAc,YAAY,aAAa,YAAY;AAEnD,QAAI,oBAAoB;AAExB,QAAI,SAAS,sBAAsB;AACjC,0BAAoB,MAAM,QAAQ,eAAe,QAAQ,eAAe,SAAS,oBAAoB,CAAC;AAAA,IACxG;AAEA,QAAI,SAAS,YAAY,CAAC,mBAAmB;AAC3C,0BAAoB,MAAM,SAAS,eAAe;AAAA,IACpD;AAEA,UAAM,UAAU,UAAU,SAAS,KAAK;AAExC,eACE,OAAO,gBAAgB,IACvB,MAAM,SAAS,wBAAwB,YAAY,SAAS,IAAI,IAAI,SAAS,IAAI,IACjF,OAAO,0BAA0B,eAAe,IAChD,OAAO,OAAO,IACd,uBAAuB,aAAa,iBAAiB,IACrD,GAAG,IAAI,UAAU;AAEnB,QAAI,SAAS,SAAS;AACpB,YAAM,mBAAmB,YAAY,SAAS,SAAS,eAAe,eAAe,SAAS,CAAC;AAC/F,iBACE,OAAO,YAAY,IAAI,MAAM,aAAa,cAAc,IAAI,OAAO,CAAC,IAAI,MAAM,QAAQ,gBAAgB,IAAI,GAAG,CAAC;AAAA,IAClH;AAAA,EACF;AAEA,SAAO;AACT;",
6
+ "names": []
7
+ }
@@ -1,2 +1,50 @@
1
- import{indent,indentLines,insertAtEndOfFirstLine,ln}from"../utilities.js";import{terminalMarkdown}from"./terminal-markdown.js";function formatHelpMessageOptions(e,n){if(0===e.length)return"";const{style:t,indentBeforeName:i,indentAfterName:o,indentBeforePlaceholder:l,newLineIndent:r,emptyLines:d,longest:s,exampleKeyword:a,optionalKeyword:p,defaultKeyword:m,optionsTitle:f,emptyLinesBeforeTitle:c,emptyLinesAfterTitle:u,markdownRenderer:g}=n;let A=ln(c)+indent(1)+t.title(f)+ln(1+u);const h=s+i+o+l+r;for(const n of e){if(n.hidden)continue;const e=[...n.aliasesAsArgs,n.nameAsArg],r=e.map(e=>t.option(e)).join(t.punctuation(", "));let f=n.description?t.description(n.description):terminalMarkdown(n.descriptionMarkdown,g,t.description);f=indentLines(f,h);let c="";n.defaultValueAsString&&(c=t.default(m.replace("{{ value }}",n.defaultValueAsString))),n.optional&&!c&&(c=t.optional(p));const u=s-(e.join(", ").length+n.placeholder.length);if(A+=indent(i)+r+indent(l)+t.placeholder(n.placeholder)+indent(o)+indent(u)+insertAtEndOfFirstLine(f,c)+ln(1+d),n.example){const e=indentLines(n.example,h+a.length+1);A+=indent(h)+t.exampleTitle(a)+indent(1)+t.example(e)+ln(1)}}return A}export{formatHelpMessageOptions};
2
- //# sourceMappingURL=format-options.js.map
1
+ // src/help-message/format-options.ts
2
+ import { indent, indentLines, insertAtEndOfFirstLine, ln } from "../utilities/utilities.js";
3
+ import { terminalMarkdown } from "./terminal-markdown.js";
4
+ function formatHelpMessageOptions(optionsMetadata, options) {
5
+ if (optionsMetadata.length === 0) return "";
6
+ const {
7
+ style,
8
+ indentBeforeName,
9
+ indentAfterName,
10
+ indentBeforePlaceholder,
11
+ newLineIndent,
12
+ emptyLines,
13
+ longest,
14
+ exampleKeyword,
15
+ optionalKeyword,
16
+ defaultKeyword,
17
+ optionsTitle,
18
+ emptyLinesBeforeTitle,
19
+ emptyLinesAfterTitle,
20
+ markdownRenderer
21
+ } = options;
22
+ let message = ln(emptyLinesBeforeTitle) + indent(1) + style.title(optionsTitle) + ln(1 + emptyLinesAfterTitle);
23
+ const totalSpacing = longest + indentBeforeName + indentAfterName + indentBeforePlaceholder + newLineIndent;
24
+ for (const metadata of optionsMetadata) {
25
+ if (metadata.hidden) continue;
26
+ const names = [...metadata.aliasesAsArgs, metadata.nameAsArg];
27
+ const coloredNames = names.map((name) => style.option(name)).join(style.punctuation(", "));
28
+ let description = metadata.description ? style.description(metadata.description) : terminalMarkdown(metadata.descriptionMarkdown, markdownRenderer, style.description);
29
+ description = indentLines(description, totalSpacing);
30
+ let defaultOrOptional = "";
31
+ if (metadata.defaultValueAsString) {
32
+ defaultOrOptional = style.default(defaultKeyword.replace("{{ value }}", metadata.defaultValueAsString));
33
+ }
34
+ if (metadata.optional && !defaultOrOptional) {
35
+ defaultOrOptional = style.optional(optionalKeyword);
36
+ }
37
+ const optLength = names.join(", ").length + metadata.placeholder.length;
38
+ const spacing = longest - optLength;
39
+ message += indent(indentBeforeName) + coloredNames + indent(indentBeforePlaceholder) + style.placeholder(metadata.placeholder) + indent(indentAfterName) + indent(spacing) + insertAtEndOfFirstLine(description, defaultOrOptional) + ln(1 + emptyLines);
40
+ if (metadata.example) {
41
+ const normalizeExample = indentLines(metadata.example, totalSpacing + exampleKeyword.length + 1);
42
+ message += indent(totalSpacing) + style.exampleTitle(exampleKeyword) + indent(1) + style.example(normalizeExample) + ln(1);
43
+ }
44
+ }
45
+ return message;
46
+ }
47
+ export {
48
+ formatHelpMessageOptions
49
+ };
50
+ //# sourceMappingURL=format-options.js.map
@@ -1 +1,7 @@
1
- {"version":3,"names":["indent","indentLines","insertAtEndOfFirstLine","ln","terminalMarkdown","formatHelpMessageOptions","optionsMetadata","options","length","style","indentBeforeName","indentAfterName","indentBeforePlaceholder","newLineIndent","emptyLines","longest","exampleKeyword","optionalKeyword","defaultKeyword","optionsTitle","emptyLinesBeforeTitle","emptyLinesAfterTitle","markdownRenderer","message","title","totalSpacing","metadata","hidden","names","aliasesAsArgs","nameAsArg","coloredNames","map","name","option","join","punctuation","description","descriptionMarkdown","defaultOrOptional","defaultValueAsString","default","replace","optional","spacing","placeholder","example","normalizeExample","exampleTitle"],"sources":["../../../src/help-message/format-options.ts"],"sourcesContent":["import { indent, indentLines, insertAtEndOfFirstLine, ln } from \"../utilities.ts\";\nimport { terminalMarkdown } from \"./terminal-markdown.ts\";\n\nimport type { OptionMetadata } from \"../types/metadata-types.ts\";\nimport type { FormatOptions } from \"./generate-for-cli.ts\";\n\nexport function formatHelpMessageOptions(optionsMetadata: OptionMetadata[], options: FormatOptions): string {\n if (optionsMetadata.length === 0) return \"\";\n\n const {\n style,\n indentBeforeName,\n indentAfterName,\n indentBeforePlaceholder,\n newLineIndent,\n emptyLines,\n longest,\n exampleKeyword,\n optionalKeyword,\n defaultKeyword,\n optionsTitle,\n emptyLinesBeforeTitle,\n emptyLinesAfterTitle,\n markdownRenderer,\n } = options;\n\n let message = ln(emptyLinesBeforeTitle) + indent(1) + style.title(optionsTitle) + ln(1 + emptyLinesAfterTitle);\n\n // the space from the beginning to the start of the next column.\n const totalSpacing = longest + indentBeforeName + indentAfterName + indentBeforePlaceholder + newLineIndent;\n\n for (const metadata of optionsMetadata) {\n if (metadata.hidden) continue;\n\n const names = [...metadata.aliasesAsArgs, metadata.nameAsArg];\n const coloredNames = names.map(name => style.option(name)).join(style.punctuation(\", \"));\n\n let description = metadata.description\n ? style.description(metadata.description)\n : terminalMarkdown(metadata.descriptionMarkdown, markdownRenderer, style.description);\n\n description = indentLines(description, totalSpacing);\n\n let defaultOrOptional = \"\";\n\n if (metadata.defaultValueAsString) {\n defaultOrOptional = style.default(defaultKeyword.replace(\"{{ value }}\", metadata.defaultValueAsString));\n }\n\n if (metadata.optional && !defaultOrOptional) {\n defaultOrOptional = style.optional(optionalKeyword);\n }\n\n // space between the option and the description\n const optLength = names.join(\", \").length + metadata.placeholder.length;\n const spacing = longest - optLength;\n\n message +=\n indent(indentBeforeName) +\n coloredNames +\n indent(indentBeforePlaceholder) +\n style.placeholder(metadata.placeholder) +\n indent(indentAfterName) +\n indent(spacing) +\n insertAtEndOfFirstLine(description, defaultOrOptional) +\n ln(1 + emptyLines);\n\n if (metadata.example) {\n const normalizeExample = indentLines(metadata.example, totalSpacing + exampleKeyword.length + 1); // + 1 for the space after the keyword\n message +=\n indent(totalSpacing) + style.exampleTitle(exampleKeyword) + indent(1) + style.example(normalizeExample) + ln(1);\n }\n }\n\n return message;\n}\n"],"mappings":"OAASA,OAAQC,YAAaC,uBAAwBC,OAAU,yBACvDC,qBAAwB,yBAK1B,SAASC,yBAAyBC,EAAmCC,GAC1E,GAA+B,IAA3BD,EAAgBE,OAAc,MAAO,GAEzC,MAAMC,MACJA,EAAAC,iBACAA,EAAAC,gBACAA,EAAAC,wBACAA,EAAAC,cACAA,EAAAC,WACAA,EAAAC,QACAA,EAAAC,eACAA,EAAAC,gBACAA,EAAAC,eACAA,EAAAC,aACAA,EAAAC,sBACAA,EAAAC,qBACAA,EAAAC,iBACAA,GACEf,EAEJ,IAAIgB,EAAUpB,GAAGiB,GAAyBpB,OAAO,GAAKS,EAAMe,MAAML,GAAgBhB,GAAG,EAAIkB,GAGzF,MAAMI,EAAeV,EAAUL,EAAmBC,EAAkBC,EAA0BC,EAE9F,UAAWa,KAAYpB,EAAiB,CACtC,GAAIoB,EAASC,OAAQ,SAErB,MAAMC,EAAQ,IAAIF,EAASG,cAAeH,EAASI,WAC7CC,EAAeH,EAAMI,IAAIC,GAAQxB,EAAMyB,OAAOD,IAAOE,KAAK1B,EAAM2B,YAAY,OAElF,IAAIC,EAAcX,EAASW,YACvB5B,EAAM4B,YAAYX,EAASW,aAC3BjC,iBAAiBsB,EAASY,oBAAqBhB,EAAkBb,EAAM4B,aAE3EA,EAAcpC,YAAYoC,EAAaZ,GAEvC,IAAIc,EAAoB,GAEpBb,EAASc,uBACXD,EAAoB9B,EAAMgC,QAAQvB,EAAewB,QAAQ,cAAehB,EAASc,wBAG/Ed,EAASiB,WAAaJ,IACxBA,EAAoB9B,EAAMkC,SAAS1B,IAIrC,MACM2B,EAAU7B,GADEa,EAAMO,KAAK,MAAM3B,OAASkB,EAASmB,YAAYrC,QAajE,GAVAe,GACEvB,OAAOU,GACPqB,EACA/B,OAAOY,GACPH,EAAMoC,YAAYnB,EAASmB,aAC3B7C,OAAOW,GACPX,OAAO4C,GACP1C,uBAAuBmC,EAAaE,GACpCpC,GAAG,EAAIW,GAELY,EAASoB,QAAS,CACpB,MAAMC,EAAmB9C,YAAYyB,EAASoB,QAASrB,EAAeT,EAAeR,OAAS,GAC9Fe,GACEvB,OAAOyB,GAAgBhB,EAAMuC,aAAahC,GAAkBhB,OAAO,GAAKS,EAAMqC,QAAQC,GAAoB5C,GAAG,EACjH,CACF,CAEA,OAAOoB,CACT,Q","ignoreList":[]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/help-message/format-options.ts"],
4
+ "sourcesContent": ["import { indent, indentLines, insertAtEndOfFirstLine, ln } from \"../utilities/utilities.ts\";\nimport { terminalMarkdown } from \"./terminal-markdown.ts\";\n\nimport type { OptionMetadata } from \"../types/metadata-types.ts\";\nimport type { FormatOptions } from \"./generate-for-cli.ts\";\n\nexport function formatHelpMessageOptions(optionsMetadata: OptionMetadata[], options: FormatOptions): string {\n if (optionsMetadata.length === 0) return \"\";\n\n const {\n style,\n indentBeforeName,\n indentAfterName,\n indentBeforePlaceholder,\n newLineIndent,\n emptyLines,\n longest,\n exampleKeyword,\n optionalKeyword,\n defaultKeyword,\n optionsTitle,\n emptyLinesBeforeTitle,\n emptyLinesAfterTitle,\n markdownRenderer,\n } = options;\n\n let message = ln(emptyLinesBeforeTitle) + indent(1) + style.title(optionsTitle) + ln(1 + emptyLinesAfterTitle);\n\n // the space from the beginning to the start of the next column.\n const totalSpacing = longest + indentBeforeName + indentAfterName + indentBeforePlaceholder + newLineIndent;\n\n for (const metadata of optionsMetadata) {\n if (metadata.hidden) continue;\n\n const names = [...metadata.aliasesAsArgs, metadata.nameAsArg];\n const coloredNames = names.map(name => style.option(name)).join(style.punctuation(\", \"));\n\n let description = metadata.description\n ? style.description(metadata.description)\n : terminalMarkdown(metadata.descriptionMarkdown, markdownRenderer, style.description);\n\n description = indentLines(description, totalSpacing);\n\n let defaultOrOptional = \"\";\n\n if (metadata.defaultValueAsString) {\n defaultOrOptional = style.default(defaultKeyword.replace(\"{{ value }}\", metadata.defaultValueAsString));\n }\n\n if (metadata.optional && !defaultOrOptional) {\n defaultOrOptional = style.optional(optionalKeyword);\n }\n\n // space between the option and the description\n const optLength = names.join(\", \").length + metadata.placeholder.length;\n const spacing = longest - optLength;\n\n message +=\n indent(indentBeforeName) +\n coloredNames +\n indent(indentBeforePlaceholder) +\n style.placeholder(metadata.placeholder) +\n indent(indentAfterName) +\n indent(spacing) +\n insertAtEndOfFirstLine(description, defaultOrOptional) +\n ln(1 + emptyLines);\n\n if (metadata.example) {\n const normalizeExample = indentLines(metadata.example, totalSpacing + exampleKeyword.length + 1); // + 1 for the space after the keyword\n message +=\n indent(totalSpacing) + style.exampleTitle(exampleKeyword) + indent(1) + style.example(normalizeExample) + ln(1);\n }\n }\n\n return message;\n}\n"],
5
+ "mappings": ";AAAA,SAAS,QAAQ,aAAa,wBAAwB,UAAU;AAChE,SAAS,wBAAwB;AAK1B,SAAS,yBAAyB,iBAAmC,SAAgC;AAC1G,MAAI,gBAAgB,WAAW,EAAG,QAAO;AAEzC,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,MAAI,UAAU,GAAG,qBAAqB,IAAI,OAAO,CAAC,IAAI,MAAM,MAAM,YAAY,IAAI,GAAG,IAAI,oBAAoB;AAG7G,QAAM,eAAe,UAAU,mBAAmB,kBAAkB,0BAA0B;AAE9F,aAAW,YAAY,iBAAiB;AACtC,QAAI,SAAS,OAAQ;AAErB,UAAM,QAAQ,CAAC,GAAG,SAAS,eAAe,SAAS,SAAS;AAC5D,UAAM,eAAe,MAAM,IAAI,UAAQ,MAAM,OAAO,IAAI,CAAC,EAAE,KAAK,MAAM,YAAY,IAAI,CAAC;AAEvF,QAAI,cAAc,SAAS,cACvB,MAAM,YAAY,SAAS,WAAW,IACtC,iBAAiB,SAAS,qBAAqB,kBAAkB,MAAM,WAAW;AAEtF,kBAAc,YAAY,aAAa,YAAY;AAEnD,QAAI,oBAAoB;AAExB,QAAI,SAAS,sBAAsB;AACjC,0BAAoB,MAAM,QAAQ,eAAe,QAAQ,eAAe,SAAS,oBAAoB,CAAC;AAAA,IACxG;AAEA,QAAI,SAAS,YAAY,CAAC,mBAAmB;AAC3C,0BAAoB,MAAM,SAAS,eAAe;AAAA,IACpD;AAGA,UAAM,YAAY,MAAM,KAAK,IAAI,EAAE,SAAS,SAAS,YAAY;AACjE,UAAM,UAAU,UAAU;AAE1B,eACE,OAAO,gBAAgB,IACvB,eACA,OAAO,uBAAuB,IAC9B,MAAM,YAAY,SAAS,WAAW,IACtC,OAAO,eAAe,IACtB,OAAO,OAAO,IACd,uBAAuB,aAAa,iBAAiB,IACrD,GAAG,IAAI,UAAU;AAEnB,QAAI,SAAS,SAAS;AACpB,YAAM,mBAAmB,YAAY,SAAS,SAAS,eAAe,eAAe,SAAS,CAAC;AAC/F,iBACE,OAAO,YAAY,IAAI,MAAM,aAAa,cAAc,IAAI,OAAO,CAAC,IAAI,MAAM,QAAQ,gBAAgB,IAAI,GAAG,CAAC;AAAA,IAClH;AAAA,EACF;AAEA,SAAO;AACT;",
6
+ "names": []
7
+ }
@@ -1,2 +1,37 @@
1
- import{indent,indentLines,ln,subcommandPlaceholder}from"../utilities.js";import{terminalMarkdown}from"./terminal-markdown.js";function formatHelpMessageCommands(n,e){if(0===n.length)return"";const{style:t,indentBeforeName:i,indentAfterName:o,indentBeforePlaceholder:r,newLineIndent:d,longest:s,commandsTitle:a,emptyLines:l,emptyLinesBeforeTitle:m,emptyLinesAfterTitle:c,markdownRenderer:p}=e;let f=ln(m)+indent(1)+t.title(a)+ln(1+c);const u=s+i+o+r+d;for(const e of n){if(e.hidden)continue;const n=e.aliases.concat([e.name]),d=subcommandPlaceholder(e);let a=e.description?t.description(e.description):terminalMarkdown(e.descriptionMarkdown,p,t.description);a=indentLines(a,u);const m=s-(n.join(", ").length+d.length),c=n.map(n=>t.command(n)).join(t.punctuation(", "));f+=indent(i)+c+indent(r)+t.placeholder(d)+indent(o)+indent(m)+a+ln(1+l)}return f}export{formatHelpMessageCommands};
2
- //# sourceMappingURL=format-subcommands.js.map
1
+ // src/help-message/format-subcommands.ts
2
+ import { indent, indentLines, ln, subcommandPlaceholder } from "../utilities/utilities.js";
3
+ import { terminalMarkdown } from "./terminal-markdown.js";
4
+ function formatHelpMessageCommands(subcommandsMetadata, options) {
5
+ if (subcommandsMetadata.length === 0) return "";
6
+ const {
7
+ style,
8
+ indentBeforeName,
9
+ indentAfterName,
10
+ indentBeforePlaceholder,
11
+ newLineIndent,
12
+ longest,
13
+ commandsTitle,
14
+ emptyLines,
15
+ emptyLinesBeforeTitle,
16
+ emptyLinesAfterTitle,
17
+ markdownRenderer
18
+ } = options;
19
+ let message = ln(emptyLinesBeforeTitle) + indent(1) + style.title(commandsTitle) + ln(1 + emptyLinesAfterTitle);
20
+ const totalSpacing = longest + indentBeforeName + indentAfterName + indentBeforePlaceholder + newLineIndent;
21
+ for (const metadata of subcommandsMetadata) {
22
+ if (metadata.hidden) continue;
23
+ const names = metadata.aliases.concat([metadata.name]);
24
+ const placeholder = subcommandPlaceholder(metadata);
25
+ let description = metadata.description ? style.description(metadata.description) : terminalMarkdown(metadata.descriptionMarkdown, markdownRenderer, style.description);
26
+ description = indentLines(description, totalSpacing);
27
+ const optLength = names.join(", ").length + placeholder.length;
28
+ const spacing = longest - optLength;
29
+ const coloredNames = names.map((name) => style.command(name)).join(style.punctuation(", "));
30
+ message += indent(indentBeforeName) + coloredNames + indent(indentBeforePlaceholder) + style.placeholder(placeholder) + indent(indentAfterName) + indent(spacing) + description + ln(1 + emptyLines);
31
+ }
32
+ return message;
33
+ }
34
+ export {
35
+ formatHelpMessageCommands
36
+ };
37
+ //# sourceMappingURL=format-subcommands.js.map
@@ -1 +1,7 @@
1
- {"version":3,"names":["indent","indentLines","ln","subcommandPlaceholder","terminalMarkdown","formatHelpMessageCommands","subcommandsMetadata","options","length","style","indentBeforeName","indentAfterName","indentBeforePlaceholder","newLineIndent","longest","commandsTitle","emptyLines","emptyLinesBeforeTitle","emptyLinesAfterTitle","markdownRenderer","message","title","totalSpacing","metadata","hidden","names","aliases","concat","name","placeholder","description","descriptionMarkdown","spacing","join","coloredNames","map","command","punctuation"],"sources":["../../../src/help-message/format-subcommands.ts"],"sourcesContent":["import { indent, indentLines, ln, subcommandPlaceholder } from \"../utilities.ts\";\nimport { terminalMarkdown } from \"./terminal-markdown.ts\";\n\nimport type { SubcommandMetadata } from \"../types/metadata-types.ts\";\nimport type { FormatOptions } from \"./generate-for-cli.ts\";\n\nexport function formatHelpMessageCommands(subcommandsMetadata: SubcommandMetadata[], options: FormatOptions): string {\n if (subcommandsMetadata.length === 0) return \"\";\n\n const {\n style,\n indentBeforeName,\n indentAfterName,\n indentBeforePlaceholder,\n newLineIndent,\n longest,\n commandsTitle,\n emptyLines,\n emptyLinesBeforeTitle,\n emptyLinesAfterTitle,\n markdownRenderer,\n } = options;\n\n let message = ln(emptyLinesBeforeTitle) + indent(1) + style.title(commandsTitle) + ln(1 + emptyLinesAfterTitle);\n\n // the space from the beginning to the start of the next column.\n const totalSpacing = longest + indentBeforeName + indentAfterName + indentBeforePlaceholder + newLineIndent;\n\n for (const metadata of subcommandsMetadata) {\n if (metadata.hidden) continue;\n\n const names = metadata.aliases.concat([metadata.name]);\n const placeholder = subcommandPlaceholder(metadata);\n\n let description = metadata.description\n ? style.description(metadata.description)\n : terminalMarkdown(metadata.descriptionMarkdown, markdownRenderer, style.description);\n\n description = indentLines(description, totalSpacing);\n\n const optLength = names.join(\", \").length + placeholder.length;\n const spacing = longest - optLength;\n\n const coloredNames = names.map(name => style.command(name)).join(style.punctuation(\", \"));\n\n message +=\n indent(indentBeforeName) +\n coloredNames +\n indent(indentBeforePlaceholder) +\n style.placeholder(placeholder) +\n indent(indentAfterName) +\n indent(spacing) +\n description +\n ln(1 + emptyLines);\n }\n\n return message;\n}\n"],"mappings":"OAASA,OAAQC,YAAaC,GAAIC,0BAA6B,yBACtDC,qBAAwB,yBAK1B,SAASC,0BAA0BC,EAA2CC,GACnF,GAAmC,IAA/BD,EAAoBE,OAAc,MAAO,GAE7C,MAAMC,MACJA,EAAAC,iBACAA,EAAAC,gBACAA,EAAAC,wBACAA,EAAAC,cACAA,EAAAC,QACAA,EAAAC,cACAA,EAAAC,WACAA,EAAAC,sBACAA,EAAAC,qBACAA,EAAAC,iBACAA,GACEZ,EAEJ,IAAIa,EAAUlB,GAAGe,GAAyBjB,OAAO,GAAKS,EAAMY,MAAMN,GAAiBb,GAAG,EAAIgB,GAG1F,MAAMI,EAAeR,EAAUJ,EAAmBC,EAAkBC,EAA0BC,EAE9F,UAAWU,KAAYjB,EAAqB,CAC1C,GAAIiB,EAASC,OAAQ,SAErB,MAAMC,EAAQF,EAASG,QAAQC,OAAO,CAACJ,EAASK,OAC1CC,EAAc1B,sBAAsBoB,GAE1C,IAAIO,EAAcP,EAASO,YACvBrB,EAAMqB,YAAYP,EAASO,aAC3B1B,iBAAiBmB,EAASQ,oBAAqBZ,EAAkBV,EAAMqB,aAE3EA,EAAc7B,YAAY6B,EAAaR,GAEvC,MACMU,EAAUlB,GADEW,EAAMQ,KAAK,MAAMzB,OAASqB,EAAYrB,QAGlD0B,EAAeT,EAAMU,IAAIP,GAAQnB,EAAM2B,QAAQR,IAAOK,KAAKxB,EAAM4B,YAAY,OAEnFjB,GACEpB,OAAOU,GACPwB,EACAlC,OAAOY,GACPH,EAAMoB,YAAYA,GAClB7B,OAAOW,GACPX,OAAOgC,GACPF,EACA5B,GAAG,EAAIc,EACX,CAEA,OAAOI,CACT,Q","ignoreList":[]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/help-message/format-subcommands.ts"],
4
+ "sourcesContent": ["import { indent, indentLines, ln, subcommandPlaceholder } from \"../utilities/utilities.ts\";\nimport { terminalMarkdown } from \"./terminal-markdown.ts\";\n\nimport type { SubcommandMetadata } from \"../types/metadata-types.ts\";\nimport type { FormatOptions } from \"./generate-for-cli.ts\";\n\nexport function formatHelpMessageCommands(subcommandsMetadata: SubcommandMetadata[], options: FormatOptions): string {\n if (subcommandsMetadata.length === 0) return \"\";\n\n const {\n style,\n indentBeforeName,\n indentAfterName,\n indentBeforePlaceholder,\n newLineIndent,\n longest,\n commandsTitle,\n emptyLines,\n emptyLinesBeforeTitle,\n emptyLinesAfterTitle,\n markdownRenderer,\n } = options;\n\n let message = ln(emptyLinesBeforeTitle) + indent(1) + style.title(commandsTitle) + ln(1 + emptyLinesAfterTitle);\n\n // the space from the beginning to the start of the next column.\n const totalSpacing = longest + indentBeforeName + indentAfterName + indentBeforePlaceholder + newLineIndent;\n\n for (const metadata of subcommandsMetadata) {\n if (metadata.hidden) continue;\n\n const names = metadata.aliases.concat([metadata.name]);\n const placeholder = subcommandPlaceholder(metadata);\n\n let description = metadata.description\n ? style.description(metadata.description)\n : terminalMarkdown(metadata.descriptionMarkdown, markdownRenderer, style.description);\n\n description = indentLines(description, totalSpacing);\n\n const optLength = names.join(\", \").length + placeholder.length;\n const spacing = longest - optLength;\n\n const coloredNames = names.map(name => style.command(name)).join(style.punctuation(\", \"));\n\n message +=\n indent(indentBeforeName) +\n coloredNames +\n indent(indentBeforePlaceholder) +\n style.placeholder(placeholder) +\n indent(indentAfterName) +\n indent(spacing) +\n description +\n ln(1 + emptyLines);\n }\n\n return message;\n}\n"],
5
+ "mappings": ";AAAA,SAAS,QAAQ,aAAa,IAAI,6BAA6B;AAC/D,SAAS,wBAAwB;AAK1B,SAAS,0BAA0B,qBAA2C,SAAgC;AACnH,MAAI,oBAAoB,WAAW,EAAG,QAAO;AAE7C,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,MAAI,UAAU,GAAG,qBAAqB,IAAI,OAAO,CAAC,IAAI,MAAM,MAAM,aAAa,IAAI,GAAG,IAAI,oBAAoB;AAG9G,QAAM,eAAe,UAAU,mBAAmB,kBAAkB,0BAA0B;AAE9F,aAAW,YAAY,qBAAqB;AAC1C,QAAI,SAAS,OAAQ;AAErB,UAAM,QAAQ,SAAS,QAAQ,OAAO,CAAC,SAAS,IAAI,CAAC;AACrD,UAAM,cAAc,sBAAsB,QAAQ;AAElD,QAAI,cAAc,SAAS,cACvB,MAAM,YAAY,SAAS,WAAW,IACtC,iBAAiB,SAAS,qBAAqB,kBAAkB,MAAM,WAAW;AAEtF,kBAAc,YAAY,aAAa,YAAY;AAEnD,UAAM,YAAY,MAAM,KAAK,IAAI,EAAE,SAAS,YAAY;AACxD,UAAM,UAAU,UAAU;AAE1B,UAAM,eAAe,MAAM,IAAI,UAAQ,MAAM,QAAQ,IAAI,CAAC,EAAE,KAAK,MAAM,YAAY,IAAI,CAAC;AAExF,eACE,OAAO,gBAAgB,IACvB,eACA,OAAO,uBAAuB,IAC9B,MAAM,YAAY,WAAW,IAC7B,OAAO,eAAe,IACtB,OAAO,OAAO,IACd,cACA,GAAG,IAAI,UAAU;AAAA,EACrB;AAEA,SAAO;AACT;",
6
+ "names": []
7
+ }
@@ -1,2 +1,71 @@
1
- import{getCliMetadata}from"../metadata/cli-metadata.js";import{indent,indentLines,ln,subcommandPlaceholder}from"../utilities.js";import{formatHelpMessageArguments}from"./format-arguments.js";import{formatHelpMessageOptions}from"./format-options.js";import{formatHelpMessageCommands}from"./format-subcommands.js";import{setPrintHelpOptionsDefaults}from"./set-defaults.js";import{helpMessageStyles}from"./styles.js";import{terminalMarkdown}from"./terminal-markdown.js";function generateCliHelpMessage(e,t={}){const n=setPrintHelpOptionsDefaults(t),s={...helpMessageStyles.default,...n.style},a=getCliMetadata(e),o=e=>indent(1)+s.title(e);let i="",m=a.usage;if(m||(m=s.punctuation("$"),m+=a.name?s.description("",a.name):"",m+=a.subcommands.length>0?s.command("","[command]"):"",m+=a.options.length>0?s.option("","[options]"):"",m+=a.arguments.length>0?s.argument("","<arguments>"):"",m+=a.allowPositionals?s.argument("","<positionals>"):""),i+=o(n.usageTitle)+ln(1+n.emptyLinesAfterTitle),i+=indent(n.indentBeforeName)+m+ln(1),a.description||a.descriptionMarkdown){i+=ln(n.emptyLinesBeforeTitle)+o(n.descriptionTitle)+ln(1+n.emptyLinesAfterTitle);let e=a.description?s.description(a.description):terminalMarkdown(a.descriptionMarkdown,n.markdownRenderer,s.description);e=indentLines(e,n.indentBeforeName),i+=indent(n.indentBeforeName)+e+ln(1)}let l=0;const r=a.options;let p=0;for(const e of r){const t=[...e.aliasesAsArgs,e.nameAsArg].join(", ").length+e.placeholder.length;p=Math.max(t,p)}l=Math.max(p,l);const d=a.subcommands;let f=0;for(const e of d){const t=[...e.aliases,e.name].join(", "),n=subcommandPlaceholder(e),s=t.length+n.length;f=Math.max(s,f)}l=Math.max(f,l);const g=a.arguments;let c=0;for(const e of g)c=Math.max(e.name.length,c);l=Math.max(c,l);const u=Object.assign({...n},{style:s,longest:l});if(i+=formatHelpMessageOptions(r,u),i+=formatHelpMessageCommands(d,u),i+=formatHelpMessageArguments(g,u),a.example){i+=ln(n.emptyLinesBeforeTitle)+o(n.exampleTitle)+ln(1+n.emptyLinesAfterTitle);const e=indentLines(a.example,n.indentBeforeName);i+=indent(n.indentBeforeName)+s.example(e)}return i}export{generateCliHelpMessage};
2
- //# sourceMappingURL=generate-for-cli.js.map
1
+ // src/help-message/generate-for-cli.ts
2
+ import { getCliMetadata } from "../metadata/cli-metadata.js";
3
+ import { indent, indentLines, ln, subcommandPlaceholder } from "../utilities/utilities.js";
4
+ import { formatHelpMessageArguments } from "./format-arguments.js";
5
+ import { formatHelpMessageOptions } from "./format-options.js";
6
+ import { formatHelpMessageCommands } from "./format-subcommands.js";
7
+ import { setPrintHelpOptionsDefaults } from "./set-defaults.js";
8
+ import { helpMessageStyles } from "./styles.js";
9
+ import { terminalMarkdown } from "./terminal-markdown.js";
10
+ function generateCliHelpMessage(cliDefinition, printOptions = {}) {
11
+ const options = setPrintHelpOptionsDefaults(printOptions);
12
+ const style = { ...helpMessageStyles.default, ...options.style };
13
+ const metadata = getCliMetadata(cliDefinition);
14
+ const formatTitle = (title) => indent(1) + style.title(title);
15
+ let message = "";
16
+ let usage = metadata.usage;
17
+ if (!usage) {
18
+ usage = style.punctuation("$");
19
+ usage += metadata.name ? style.description("", metadata.name) : "";
20
+ usage += metadata.subcommands.length > 0 ? style.command("", "[command]") : "";
21
+ usage += metadata.options.length > 0 ? style.option("", "[options]") : "";
22
+ usage += metadata.arguments.length > 0 ? style.argument("", "<arguments>") : "";
23
+ usage += metadata.allowPositionals ? style.argument("", "<positionals>") : "";
24
+ }
25
+ message += formatTitle(options.usageTitle) + ln(1 + options.emptyLinesAfterTitle);
26
+ message += indent(options.indentBeforeName) + usage + ln(1);
27
+ if (metadata.description || metadata.descriptionMarkdown) {
28
+ message += ln(options.emptyLinesBeforeTitle) + formatTitle(options.descriptionTitle) + ln(1 + options.emptyLinesAfterTitle);
29
+ let description = metadata.description ? style.description(metadata.description) : terminalMarkdown(metadata.descriptionMarkdown, options.markdownRenderer, style.description);
30
+ description = indentLines(description, options.indentBeforeName);
31
+ message += indent(options.indentBeforeName) + description + ln(1);
32
+ }
33
+ let longest = 0;
34
+ const optionsMetadata = metadata.options;
35
+ let longestOptionTitle = 0;
36
+ for (const metadata2 of optionsMetadata) {
37
+ const names = [...metadata2.aliasesAsArgs, metadata2.nameAsArg].join(", ");
38
+ const optLength = names.length + metadata2.placeholder.length;
39
+ longestOptionTitle = Math.max(optLength, longestOptionTitle);
40
+ }
41
+ longest = Math.max(longestOptionTitle, longest);
42
+ const subcommandsMetadata = metadata.subcommands;
43
+ let longestSubcommandTitle = 0;
44
+ for (const metadata2 of subcommandsMetadata) {
45
+ const names = [...metadata2.aliases, metadata2.name].join(", ");
46
+ const placeholder = subcommandPlaceholder(metadata2);
47
+ const optLength = names.length + placeholder.length;
48
+ longestSubcommandTitle = Math.max(optLength, longestSubcommandTitle);
49
+ }
50
+ longest = Math.max(longestSubcommandTitle, longest);
51
+ const argumentsMetadata = metadata.arguments;
52
+ let longestArgumentTitle = 0;
53
+ for (const argument of argumentsMetadata) {
54
+ longestArgumentTitle = Math.max(argument.name.length, longestArgumentTitle);
55
+ }
56
+ longest = Math.max(longestArgumentTitle, longest);
57
+ const formatOptions = Object.assign({ ...options }, { style, longest });
58
+ message += formatHelpMessageOptions(optionsMetadata, formatOptions);
59
+ message += formatHelpMessageCommands(subcommandsMetadata, formatOptions);
60
+ message += formatHelpMessageArguments(argumentsMetadata, formatOptions);
61
+ if (metadata.example) {
62
+ message += ln(options.emptyLinesBeforeTitle) + formatTitle(options.exampleTitle) + ln(1 + options.emptyLinesAfterTitle);
63
+ const normalizeExample = indentLines(metadata.example, options.indentBeforeName);
64
+ message += indent(options.indentBeforeName) + style.example(normalizeExample);
65
+ }
66
+ return message;
67
+ }
68
+ export {
69
+ generateCliHelpMessage
70
+ };
71
+ //# sourceMappingURL=generate-for-cli.js.map
@@ -1 +1,7 @@
1
- {"version":3,"names":["getCliMetadata","indent","indentLines","ln","subcommandPlaceholder","formatHelpMessageArguments","formatHelpMessageOptions","formatHelpMessageCommands","setPrintHelpOptionsDefaults","helpMessageStyles","terminalMarkdown","generateCliHelpMessage","cliDefinition","printOptions","options","style","default","metadata","formatTitle","title","message","usage","punctuation","name","description","subcommands","length","command","option","arguments","argument","allowPositionals","usageTitle","emptyLinesAfterTitle","indentBeforeName","descriptionMarkdown","emptyLinesBeforeTitle","descriptionTitle","markdownRenderer","longest","optionsMetadata","longestOptionTitle","optLength","aliasesAsArgs","nameAsArg","join","placeholder","Math","max","subcommandsMetadata","longestSubcommandTitle","names","aliases","argumentsMetadata","longestArgumentTitle","formatOptions","Object","assign","example","exampleTitle","normalizeExample"],"sources":["../../../src/help-message/generate-for-cli.ts"],"sourcesContent":["import { getCliMetadata } from \"../metadata/cli-metadata.ts\";\nimport { indent, indentLines, ln, subcommandPlaceholder } from \"../utilities.ts\";\nimport { formatHelpMessageArguments } from \"./format-arguments.ts\";\nimport { formatHelpMessageOptions } from \"./format-options.ts\";\nimport { formatHelpMessageCommands } from \"./format-subcommands.ts\";\nimport { setPrintHelpOptionsDefaults } from \"./set-defaults.ts\";\nimport { helpMessageStyles } from \"./styles.ts\";\nimport { terminalMarkdown } from \"./terminal-markdown.ts\";\n\nimport type { Cli } from \"../types/definitions-types.ts\";\nimport type { HelpMessageStyleImpl, PrintHelpOptions } from \"../types/help-message-types.ts\";\n\nexport interface FormatOptions extends Required<PrintHelpOptions> {\n style: HelpMessageStyleImpl;\n longest: number;\n}\n\nexport function generateCliHelpMessage(cliDefinition: Cli, printOptions: PrintHelpOptions = {}): string {\n const options = setPrintHelpOptionsDefaults(printOptions);\n\n const style = { ...helpMessageStyles.default, ...options.style };\n\n const metadata = getCliMetadata(cliDefinition);\n\n const formatTitle = (title: string) => indent(1) + style.title(title);\n\n let message = \"\";\n\n // CLI usage\n let usage = metadata.usage;\n if (!usage) {\n usage = style.punctuation(\"$\");\n usage += metadata.name ? style.description(\"\", metadata.name) : \"\";\n usage += metadata.subcommands.length > 0 ? style.command(\"\", \"[command]\") : \"\";\n usage += metadata.options.length > 0 ? style.option(\"\", \"[options]\") : \"\";\n usage += metadata.arguments.length > 0 ? style.argument(\"\", \"<arguments>\") : \"\";\n usage += metadata.allowPositionals ? style.argument(\"\", \"<positionals>\") : \"\";\n }\n\n message += formatTitle(options.usageTitle) + ln(1 + options.emptyLinesAfterTitle);\n message += indent(options.indentBeforeName) + usage + ln(1);\n\n // CLI description\n if (metadata.description || metadata.descriptionMarkdown) {\n message +=\n ln(options.emptyLinesBeforeTitle) + formatTitle(options.descriptionTitle) + ln(1 + options.emptyLinesAfterTitle);\n\n let description = metadata.description\n ? style.description(metadata.description)\n : terminalMarkdown(metadata.descriptionMarkdown, options.markdownRenderer, style.description);\n\n description = indentLines(description, options.indentBeforeName);\n\n message += indent(options.indentBeforeName) + description + ln(1);\n }\n\n let longest = 0;\n\n // Prepare CLI options\n const optionsMetadata = metadata.options;\n\n let longestOptionTitle = 0;\n for (const metadata of optionsMetadata) {\n const names = [...metadata.aliasesAsArgs, metadata.nameAsArg].join(\", \");\n const optLength = names.length + metadata.placeholder.length;\n longestOptionTitle = Math.max(optLength, longestOptionTitle);\n }\n\n longest = Math.max(longestOptionTitle, longest);\n\n // Prepare CLI commands\n const subcommandsMetadata = metadata.subcommands;\n\n let longestSubcommandTitle = 0;\n for (const metadata of subcommandsMetadata) {\n const names = [...metadata.aliases, metadata.name].join(\", \");\n const placeholder = subcommandPlaceholder(metadata);\n const optLength = names.length + placeholder.length;\n longestSubcommandTitle = Math.max(optLength, longestSubcommandTitle);\n }\n\n longest = Math.max(longestSubcommandTitle, longest);\n\n // Prepare CLI arguments\n const argumentsMetadata = metadata.arguments;\n\n let longestArgumentTitle = 0;\n for (const argument of argumentsMetadata) {\n longestArgumentTitle = Math.max(argument.name.length, longestArgumentTitle);\n }\n\n longest = Math.max(longestArgumentTitle, longest);\n\n const formatOptions = Object.assign({ ...options }, { style, longest }) as FormatOptions;\n\n // CLI options\n message += formatHelpMessageOptions(optionsMetadata, formatOptions);\n\n // CLI commands\n message += formatHelpMessageCommands(subcommandsMetadata, formatOptions);\n\n // CLI arguments\n message += formatHelpMessageArguments(argumentsMetadata, formatOptions);\n\n // CLI example\n if (metadata.example) {\n message +=\n ln(options.emptyLinesBeforeTitle) + formatTitle(options.exampleTitle) + ln(1 + options.emptyLinesAfterTitle);\n const normalizeExample = indentLines(metadata.example, options.indentBeforeName);\n message += indent(options.indentBeforeName) + style.example(normalizeExample);\n }\n\n return message;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/help-message/generate-for-cli.ts"],
4
+ "sourcesContent": ["import { getCliMetadata } from \"../metadata/cli-metadata.ts\";\nimport { indent, indentLines, ln, subcommandPlaceholder } from \"../utilities/utilities.ts\";\nimport { formatHelpMessageArguments } from \"./format-arguments.ts\";\nimport { formatHelpMessageOptions } from \"./format-options.ts\";\nimport { formatHelpMessageCommands } from \"./format-subcommands.ts\";\nimport { setPrintHelpOptionsDefaults } from \"./set-defaults.ts\";\nimport { helpMessageStyles } from \"./styles.ts\";\nimport { terminalMarkdown } from \"./terminal-markdown.ts\";\n\nimport type { Cli } from \"../types/definitions-types.ts\";\nimport type { HelpMessageStyleImpl, PrintHelpOptions } from \"../types/help-message-types.ts\";\n\nexport interface FormatOptions extends Required<PrintHelpOptions> {\n style: HelpMessageStyleImpl;\n longest: number;\n}\n\nexport function generateCliHelpMessage(cliDefinition: Cli, printOptions: PrintHelpOptions = {}): string {\n const options = setPrintHelpOptionsDefaults(printOptions);\n\n const style = { ...helpMessageStyles.default, ...options.style };\n\n const metadata = getCliMetadata(cliDefinition);\n\n const formatTitle = (title: string) => indent(1) + style.title(title);\n\n let message = \"\";\n\n // CLI usage\n let usage = metadata.usage;\n if (!usage) {\n usage = style.punctuation(\"$\");\n usage += metadata.name ? style.description(\"\", metadata.name) : \"\";\n usage += metadata.subcommands.length > 0 ? style.command(\"\", \"[command]\") : \"\";\n usage += metadata.options.length > 0 ? style.option(\"\", \"[options]\") : \"\";\n usage += metadata.arguments.length > 0 ? style.argument(\"\", \"<arguments>\") : \"\";\n usage += metadata.allowPositionals ? style.argument(\"\", \"<positionals>\") : \"\";\n }\n\n message += formatTitle(options.usageTitle) + ln(1 + options.emptyLinesAfterTitle);\n message += indent(options.indentBeforeName) + usage + ln(1);\n\n // CLI description\n if (metadata.description || metadata.descriptionMarkdown) {\n message +=\n ln(options.emptyLinesBeforeTitle) + formatTitle(options.descriptionTitle) + ln(1 + options.emptyLinesAfterTitle);\n\n let description = metadata.description\n ? style.description(metadata.description)\n : terminalMarkdown(metadata.descriptionMarkdown, options.markdownRenderer, style.description);\n\n description = indentLines(description, options.indentBeforeName);\n\n message += indent(options.indentBeforeName) + description + ln(1);\n }\n\n let longest = 0;\n\n // Prepare CLI options\n const optionsMetadata = metadata.options;\n\n let longestOptionTitle = 0;\n for (const metadata of optionsMetadata) {\n const names = [...metadata.aliasesAsArgs, metadata.nameAsArg].join(\", \");\n const optLength = names.length + metadata.placeholder.length;\n longestOptionTitle = Math.max(optLength, longestOptionTitle);\n }\n\n longest = Math.max(longestOptionTitle, longest);\n\n // Prepare CLI commands\n const subcommandsMetadata = metadata.subcommands;\n\n let longestSubcommandTitle = 0;\n for (const metadata of subcommandsMetadata) {\n const names = [...metadata.aliases, metadata.name].join(\", \");\n const placeholder = subcommandPlaceholder(metadata);\n const optLength = names.length + placeholder.length;\n longestSubcommandTitle = Math.max(optLength, longestSubcommandTitle);\n }\n\n longest = Math.max(longestSubcommandTitle, longest);\n\n // Prepare CLI arguments\n const argumentsMetadata = metadata.arguments;\n\n let longestArgumentTitle = 0;\n for (const argument of argumentsMetadata) {\n longestArgumentTitle = Math.max(argument.name.length, longestArgumentTitle);\n }\n\n longest = Math.max(longestArgumentTitle, longest);\n\n const formatOptions = Object.assign({ ...options }, { style, longest }) as FormatOptions;\n\n // CLI options\n message += formatHelpMessageOptions(optionsMetadata, formatOptions);\n\n // CLI commands\n message += formatHelpMessageCommands(subcommandsMetadata, formatOptions);\n\n // CLI arguments\n message += formatHelpMessageArguments(argumentsMetadata, formatOptions);\n\n // CLI example\n if (metadata.example) {\n message +=\n ln(options.emptyLinesBeforeTitle) + formatTitle(options.exampleTitle) + ln(1 + options.emptyLinesAfterTitle);\n const normalizeExample = indentLines(metadata.example, options.indentBeforeName);\n message += indent(options.indentBeforeName) + style.example(normalizeExample);\n }\n\n return message;\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["metadata"]
7
+ }
@@ -1,2 +1,23 @@
1
- import{generateCliHelpMessage}from"./generate-for-cli.js";import{setPrintHelpOptionsDefaults}from"./set-defaults.js";import{helpMessageStyles}from"./styles.js";function generateSubcommandHelpMessage(e,t={},s=""){setPrintHelpOptionsDefaults(t);const a={...helpMessageStyles.default,...t.style},n=e.meta??{};let o=n.usage;o||(o=a.punctuation("$"),o+=s?` ${s}`:"",o+=a.command("",e.name),o+=e.options?a.option(" [options]"):"",o+=e.arguments||e.allowPositionals?a.argument(" <arguments>"):"");const l={...e,cliName:e.name,meta:{usage:o,...n}};return generateCliHelpMessage(l,t)}export{generateSubcommandHelpMessage};
2
- //# sourceMappingURL=generate-for-subcommand.js.map
1
+ // src/help-message/generate-for-subcommand.ts
2
+ import { generateCliHelpMessage } from "./generate-for-cli.js";
3
+ import { setPrintHelpOptionsDefaults } from "./set-defaults.js";
4
+ import { helpMessageStyles } from "./styles.js";
5
+ function generateSubcommandHelpMessage(commandDefinition, options = {}, cliName = "") {
6
+ setPrintHelpOptionsDefaults(options);
7
+ const style = { ...helpMessageStyles.default, ...options.style };
8
+ const meta = commandDefinition.meta ?? {};
9
+ let usage = meta.usage;
10
+ if (!usage) {
11
+ usage = style.punctuation("$");
12
+ usage += cliName ? ` ${cliName}` : "";
13
+ usage += style.command("", commandDefinition.name);
14
+ usage += commandDefinition.options ? style.option(" [options]") : "";
15
+ usage += commandDefinition.arguments || commandDefinition.allowPositionals ? style.argument(" <arguments>") : "";
16
+ }
17
+ const asCliDefinition = { ...commandDefinition, cliName: commandDefinition.name, meta: { usage, ...meta } };
18
+ return generateCliHelpMessage(asCliDefinition, options);
19
+ }
20
+ export {
21
+ generateSubcommandHelpMessage
22
+ };
23
+ //# sourceMappingURL=generate-for-subcommand.js.map
@@ -1 +1,7 @@
1
- {"version":3,"names":["generateCliHelpMessage","setPrintHelpOptionsDefaults","helpMessageStyles","generateSubcommandHelpMessage","commandDefinition","options","cliName","style","default","meta","usage","punctuation","command","name","option","arguments","allowPositionals","argument","asCliDefinition"],"sources":["../../../src/help-message/generate-for-subcommand.ts"],"sourcesContent":["import { generateCliHelpMessage } from \"./generate-for-cli.ts\";\nimport { setPrintHelpOptionsDefaults } from \"./set-defaults.ts\";\nimport { helpMessageStyles } from \"./styles.ts\";\n\nimport type { Cli, Subcommand } from \"../types/definitions-types.ts\";\nimport type { PrintHelpOptions } from \"../types/help-message-types.ts\";\n\nexport function generateSubcommandHelpMessage(\n commandDefinition: Subcommand,\n options: PrintHelpOptions = {},\n cliName = \"\",\n): string {\n setPrintHelpOptionsDefaults(options);\n\n const style = { ...helpMessageStyles.default, ...options.style };\n\n const meta = commandDefinition.meta ?? {};\n\n let usage = meta.usage;\n if (!usage) {\n usage = style.punctuation(\"$\");\n usage += cliName ? ` ${cliName}` : \"\";\n usage += style.command(\"\", commandDefinition.name);\n usage += commandDefinition.options ? style.option(\" [options]\") : \"\";\n usage += commandDefinition.arguments || commandDefinition.allowPositionals ? style.argument(\" <arguments>\") : \"\";\n }\n\n // convert to cli object without subcommands\n const asCliDefinition: Cli = { ...commandDefinition, cliName: commandDefinition.name, meta: { usage, ...meta } };\n\n return generateCliHelpMessage(asCliDefinition, options);\n}\n"],"mappings":"OAASA,2BAA8B,+BAC9BC,gCAAmC,2BACnCC,sBAAyB,cAK3B,SAASC,8BACdC,EACAC,EAA4B,CAAC,EAC7BC,EAAU,IAEVL,4BAA4BI,GAE5B,MAAME,EAAQ,IAAKL,kBAAkBM,WAAYH,EAAQE,OAEnDE,EAAOL,EAAkBK,MAAQ,CAAC,EAExC,IAAIC,EAAQD,EAAKC,MACZA,IACHA,EAAQH,EAAMI,YAAY,KAC1BD,GAASJ,EAAU,IAAIA,IAAY,GACnCI,GAASH,EAAMK,QAAQ,GAAIR,EAAkBS,MAC7CH,GAASN,EAAkBC,QAAUE,EAAMO,OAAO,cAAgB,GAClEJ,GAASN,EAAkBW,WAAaX,EAAkBY,iBAAmBT,EAAMU,SAAS,gBAAkB,IAIhH,MAAMC,EAAuB,IAAKd,EAAmBE,QAASF,EAAkBS,KAAMJ,KAAM,CAAEC,WAAUD,IAExG,OAAOT,uBAAuBkB,EAAiBb,EACjD,Q","ignoreList":[]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/help-message/generate-for-subcommand.ts"],
4
+ "sourcesContent": ["import { generateCliHelpMessage } from \"./generate-for-cli.ts\";\nimport { setPrintHelpOptionsDefaults } from \"./set-defaults.ts\";\nimport { helpMessageStyles } from \"./styles.ts\";\n\nimport type { Cli, Subcommand } from \"../types/definitions-types.ts\";\nimport type { PrintHelpOptions } from \"../types/help-message-types.ts\";\n\nexport function generateSubcommandHelpMessage(\n commandDefinition: Subcommand,\n options: PrintHelpOptions = {},\n cliName = \"\",\n): string {\n setPrintHelpOptionsDefaults(options);\n\n const style = { ...helpMessageStyles.default, ...options.style };\n\n const meta = commandDefinition.meta ?? {};\n\n let usage = meta.usage;\n if (!usage) {\n usage = style.punctuation(\"$\");\n usage += cliName ? ` ${cliName}` : \"\";\n usage += style.command(\"\", commandDefinition.name);\n usage += commandDefinition.options ? style.option(\" [options]\") : \"\";\n usage += commandDefinition.arguments || commandDefinition.allowPositionals ? style.argument(\" <arguments>\") : \"\";\n }\n\n // convert to cli object without subcommands\n const asCliDefinition: Cli = { ...commandDefinition, cliName: commandDefinition.name, meta: { usage, ...meta } };\n\n return generateCliHelpMessage(asCliDefinition, options);\n}\n"],
5
+ "mappings": ";AAAA,SAAS,8BAA8B;AACvC,SAAS,mCAAmC;AAC5C,SAAS,yBAAyB;AAK3B,SAAS,8BACd,mBACA,UAA4B,CAAC,GAC7B,UAAU,IACF;AACR,8BAA4B,OAAO;AAEnC,QAAM,QAAQ,EAAE,GAAG,kBAAkB,SAAS,GAAG,QAAQ,MAAM;AAE/D,QAAM,OAAO,kBAAkB,QAAQ,CAAC;AAExC,MAAI,QAAQ,KAAK;AACjB,MAAI,CAAC,OAAO;AACV,YAAQ,MAAM,YAAY,GAAG;AAC7B,aAAS,UAAU,IAAI,OAAO,KAAK;AACnC,aAAS,MAAM,QAAQ,IAAI,kBAAkB,IAAI;AACjD,aAAS,kBAAkB,UAAU,MAAM,OAAO,YAAY,IAAI;AAClE,aAAS,kBAAkB,aAAa,kBAAkB,mBAAmB,MAAM,SAAS,cAAc,IAAI;AAAA,EAChH;AAGA,QAAM,kBAAuB,EAAE,GAAG,mBAAmB,SAAS,kBAAkB,MAAM,MAAM,EAAE,OAAO,GAAG,KAAK,EAAE;AAE/G,SAAO,uBAAuB,iBAAiB,OAAO;AACxD;",
6
+ "names": []
7
+ }
@@ -1,2 +1,14 @@
1
- import{generateCliHelpMessage}from"./generate-for-cli.js";import{generateSubcommandHelpMessage}from"./generate-for-subcommand.js";function printCliHelp(e,n={}){console.log(generateCliHelpMessage(e,n))}function printSubcommandHelp(e,n={},o=""){console.log(generateSubcommandHelpMessage(e,n,o))}export{printCliHelp,printSubcommandHelp};
2
- //# sourceMappingURL=print-help.js.map
1
+ // src/help-message/print-help.ts
2
+ import { generateCliHelpMessage } from "./generate-for-cli.js";
3
+ import { generateSubcommandHelpMessage } from "./generate-for-subcommand.js";
4
+ function printCliHelp(cliDefinition, options = {}) {
5
+ console.log(generateCliHelpMessage(cliDefinition, options));
6
+ }
7
+ function printSubcommandHelp(commandDefinition, options = {}, cliName = "") {
8
+ console.log(generateSubcommandHelpMessage(commandDefinition, options, cliName));
9
+ }
10
+ export {
11
+ printCliHelp,
12
+ printSubcommandHelp
13
+ };
14
+ //# sourceMappingURL=print-help.js.map
@@ -1 +1,7 @@
1
- {"version":3,"names":["generateCliHelpMessage","generateSubcommandHelpMessage","printCliHelp","cliDefinition","options","console","log","printSubcommandHelp","commandDefinition","cliName"],"sources":["../../../src/help-message/print-help.ts"],"sourcesContent":["import { generateCliHelpMessage } from \"./generate-for-cli.ts\";\nimport { generateSubcommandHelpMessage } from \"./generate-for-subcommand.ts\";\n\nimport type { Cli, Subcommand } from \"../types/definitions-types.ts\";\nimport type { PrintHelpOptions } from \"../types/help-message-types.ts\";\n\nexport function printCliHelp(cliDefinition: Cli, options: PrintHelpOptions = {}) {\n console.log(generateCliHelpMessage(cliDefinition, options));\n}\n\nexport function printSubcommandHelp(commandDefinition: Subcommand, options: PrintHelpOptions = {}, cliName = \"\") {\n console.log(generateSubcommandHelpMessage(commandDefinition, options, cliName));\n}\n"],"mappings":"OAASA,2BAA8B,+BAC9BC,kCAAqC,+BAKvC,SAASC,aAAaC,EAAoBC,EAA4B,CAAC,GAC5EC,QAAQC,IAAIN,uBAAuBG,EAAeC,GACpD,CAEO,SAASG,oBAAoBC,EAA+BJ,EAA4B,CAAC,EAAGK,EAAU,IAC3GJ,QAAQC,IAAIL,8BAA8BO,EAAmBJ,EAASK,GACxE,Q","ignoreList":[]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/help-message/print-help.ts"],
4
+ "sourcesContent": ["import { generateCliHelpMessage } from \"./generate-for-cli.ts\";\nimport { generateSubcommandHelpMessage } from \"./generate-for-subcommand.ts\";\n\nimport type { Cli, Subcommand } from \"../types/definitions-types.ts\";\nimport type { PrintHelpOptions } from \"../types/help-message-types.ts\";\n\nexport function printCliHelp(cliDefinition: Cli, options: PrintHelpOptions = {}) {\n console.log(generateCliHelpMessage(cliDefinition, options));\n}\n\nexport function printSubcommandHelp(commandDefinition: Subcommand, options: PrintHelpOptions = {}, cliName = \"\") {\n console.log(generateSubcommandHelpMessage(commandDefinition, options, cliName));\n}\n"],
5
+ "mappings": ";AAAA,SAAS,8BAA8B;AACvC,SAAS,qCAAqC;AAKvC,SAAS,aAAa,eAAoB,UAA4B,CAAC,GAAG;AAC/E,UAAQ,IAAI,uBAAuB,eAAe,OAAO,CAAC;AAC5D;AAEO,SAAS,oBAAoB,mBAA+B,UAA4B,CAAC,GAAG,UAAU,IAAI;AAC/G,UAAQ,IAAI,8BAA8B,mBAAmB,SAAS,OAAO,CAAC;AAChF;",
6
+ "names": []
7
+ }
@@ -1,2 +1,29 @@
1
- import{helpMessageStyles}from"./styles.js";function setPrintHelpOptionsDefaults(e){const t={...e};return t.style??(t.style=helpMessageStyles.default),t.markdownRenderer??(t.markdownRenderer="terminal"),t.kebabCaseArgumentName??(t.kebabCaseArgumentName=!0),t.indentBeforeName??(t.indentBeforeName=2),t.indentAfterName??(t.indentAfterName=4),t.indentBeforePlaceholder??(t.indentBeforePlaceholder=1),t.newLineIndent??(t.newLineIndent=0),t.emptyLines??(t.emptyLines=0),t.emptyLinesBeforeTitle??(t.emptyLinesBeforeTitle=1),t.emptyLinesAfterTitle??(t.emptyLinesAfterTitle=0),t.exampleKeyword??(t.exampleKeyword="Example"),t.optionalKeyword??(t.optionalKeyword="(optional)"),t.defaultKeyword??(t.defaultKeyword="(default: {{ value }})"),t.usageTitle??(t.usageTitle="USAGE"),t.descriptionTitle??(t.descriptionTitle="DESCRIPTION"),t.commandsTitle??(t.commandsTitle="COMMANDS"),t.optionsTitle??(t.optionsTitle="OPTIONS"),t.argumentsTitle??(t.argumentsTitle="ARGUMENTS"),t.exampleTitle??(t.exampleTitle="EXAMPLE"),t}export{setPrintHelpOptionsDefaults};
2
- //# sourceMappingURL=set-defaults.js.map
1
+ // src/help-message/set-defaults.ts
2
+ import { helpMessageStyles } from "./styles.js";
3
+ function setPrintHelpOptionsDefaults(options) {
4
+ const clone = { ...options };
5
+ clone.style ??= helpMessageStyles.default;
6
+ clone.markdownRenderer ??= "terminal";
7
+ clone.kebabCaseArgumentName ??= true;
8
+ clone.indentBeforeName ??= 2;
9
+ clone.indentAfterName ??= 4;
10
+ clone.indentBeforePlaceholder ??= 1;
11
+ clone.newLineIndent ??= 0;
12
+ clone.emptyLines ??= 0;
13
+ clone.emptyLinesBeforeTitle ??= 1;
14
+ clone.emptyLinesAfterTitle ??= 0;
15
+ clone.exampleKeyword ??= "Example";
16
+ clone.optionalKeyword ??= "(optional)";
17
+ clone.defaultKeyword ??= "(default: {{ value }})";
18
+ clone.usageTitle ??= "USAGE";
19
+ clone.descriptionTitle ??= "DESCRIPTION";
20
+ clone.commandsTitle ??= "COMMANDS";
21
+ clone.optionsTitle ??= "OPTIONS";
22
+ clone.argumentsTitle ??= "ARGUMENTS";
23
+ clone.exampleTitle ??= "EXAMPLE";
24
+ return clone;
25
+ }
26
+ export {
27
+ setPrintHelpOptionsDefaults
28
+ };
29
+ //# sourceMappingURL=set-defaults.js.map
@@ -1 +1,7 @@
1
- {"version":3,"names":["helpMessageStyles","setPrintHelpOptionsDefaults","options","clone","style","default","markdownRenderer","kebabCaseArgumentName","indentBeforeName","indentAfterName","indentBeforePlaceholder","newLineIndent","emptyLines","emptyLinesBeforeTitle","emptyLinesAfterTitle","exampleKeyword","optionalKeyword","defaultKeyword","usageTitle","descriptionTitle","commandsTitle","optionsTitle","argumentsTitle","exampleTitle"],"sources":["../../../src/help-message/set-defaults.ts"],"sourcesContent":["import { helpMessageStyles } from \"./styles.ts\";\n\nimport type { PrintHelpOptions } from \"../types/help-message-types.ts\";\nimport type { FormatOptions } from \"./generate-for-cli.ts\";\n\nexport function setPrintHelpOptionsDefaults(options: PrintHelpOptions) {\n const clone = { ...options };\n\n clone.style ??= helpMessageStyles.default;\n clone.markdownRenderer ??= \"terminal\";\n clone.kebabCaseArgumentName ??= true;\n\n clone.indentBeforeName ??= 2;\n clone.indentAfterName ??= 4;\n clone.indentBeforePlaceholder ??= 1;\n clone.newLineIndent ??= 0;\n\n clone.emptyLines ??= 0;\n clone.emptyLinesBeforeTitle ??= 1;\n clone.emptyLinesAfterTitle ??= 0;\n\n clone.exampleKeyword ??= \"Example\";\n clone.optionalKeyword ??= \"(optional)\";\n clone.defaultKeyword ??= \"(default: {{ value }})\";\n\n clone.usageTitle ??= \"USAGE\";\n clone.descriptionTitle ??= \"DESCRIPTION\";\n clone.commandsTitle ??= \"COMMANDS\";\n clone.optionsTitle ??= \"OPTIONS\";\n clone.argumentsTitle ??= \"ARGUMENTS\";\n clone.exampleTitle ??= \"EXAMPLE\";\n\n return clone as Required<FormatOptions>;\n}\n"],"mappings":"OAASA,sBAAyB,cAK3B,SAASC,4BAA4BC,GAC1C,MAAMC,EAAQ,IAAKD,GA0BnB,OAxBAC,EAAMC,QAAND,EAAMC,MAAUJ,kBAAkBK,SAClCF,EAAMG,mBAANH,EAAMG,iBAAqB,YAC3BH,EAAMI,wBAANJ,EAAMI,uBAA0B,GAEhCJ,EAAMK,mBAANL,EAAMK,iBAAqB,GAC3BL,EAAMM,kBAANN,EAAMM,gBAAoB,GAC1BN,EAAMO,0BAANP,EAAMO,wBAA4B,GAClCP,EAAMQ,gBAANR,EAAMQ,cAAkB,GAExBR,EAAMS,aAANT,EAAMS,WAAe,GACrBT,EAAMU,wBAANV,EAAMU,sBAA0B,GAChCV,EAAMW,uBAANX,EAAMW,qBAAyB,GAE/BX,EAAMY,iBAANZ,EAAMY,eAAmB,WACzBZ,EAAMa,kBAANb,EAAMa,gBAAoB,cAC1Bb,EAAMc,iBAANd,EAAMc,eAAmB,0BAEzBd,EAAMe,aAANf,EAAMe,WAAe,SACrBf,EAAMgB,mBAANhB,EAAMgB,iBAAqB,eAC3BhB,EAAMiB,gBAANjB,EAAMiB,cAAkB,YACxBjB,EAAMkB,eAANlB,EAAMkB,aAAiB,WACvBlB,EAAMmB,iBAANnB,EAAMmB,eAAmB,aACzBnB,EAAMoB,eAANpB,EAAMoB,aAAiB,WAEhBpB,CACT,Q","ignoreList":[]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/help-message/set-defaults.ts"],
4
+ "sourcesContent": ["import { helpMessageStyles } from \"./styles.ts\";\n\nimport type { PrintHelpOptions } from \"../types/help-message-types.ts\";\nimport type { FormatOptions } from \"./generate-for-cli.ts\";\n\nexport function setPrintHelpOptionsDefaults(options: PrintHelpOptions) {\n const clone = { ...options };\n\n clone.style ??= helpMessageStyles.default;\n clone.markdownRenderer ??= \"terminal\";\n clone.kebabCaseArgumentName ??= true;\n\n clone.indentBeforeName ??= 2;\n clone.indentAfterName ??= 4;\n clone.indentBeforePlaceholder ??= 1;\n clone.newLineIndent ??= 0;\n\n clone.emptyLines ??= 0;\n clone.emptyLinesBeforeTitle ??= 1;\n clone.emptyLinesAfterTitle ??= 0;\n\n clone.exampleKeyword ??= \"Example\";\n clone.optionalKeyword ??= \"(optional)\";\n clone.defaultKeyword ??= \"(default: {{ value }})\";\n\n clone.usageTitle ??= \"USAGE\";\n clone.descriptionTitle ??= \"DESCRIPTION\";\n clone.commandsTitle ??= \"COMMANDS\";\n clone.optionsTitle ??= \"OPTIONS\";\n clone.argumentsTitle ??= \"ARGUMENTS\";\n clone.exampleTitle ??= \"EXAMPLE\";\n\n return clone as Required<FormatOptions>;\n}\n"],
5
+ "mappings": ";AAAA,SAAS,yBAAyB;AAK3B,SAAS,4BAA4B,SAA2B;AACrE,QAAM,QAAQ,EAAE,GAAG,QAAQ;AAE3B,QAAM,UAAU,kBAAkB;AAClC,QAAM,qBAAqB;AAC3B,QAAM,0BAA0B;AAEhC,QAAM,qBAAqB;AAC3B,QAAM,oBAAoB;AAC1B,QAAM,4BAA4B;AAClC,QAAM,kBAAkB;AAExB,QAAM,eAAe;AACrB,QAAM,0BAA0B;AAChC,QAAM,yBAAyB;AAE/B,QAAM,mBAAmB;AACzB,QAAM,oBAAoB;AAC1B,QAAM,mBAAmB;AAEzB,QAAM,eAAe;AACrB,QAAM,qBAAqB;AAC3B,QAAM,kBAAkB;AACxB,QAAM,iBAAiB;AACvB,QAAM,mBAAmB;AACzB,QAAM,iBAAiB;AAEvB,SAAO;AACT;",
6
+ "names": []
7
+ }