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":["getCliMetadata","escapeHtmlTags","stripAnsi","generateMarkdown","cliDefinition","metadata","md","name","description","descriptionMarkdown","forceLineBreak","example","renderExamples","options","length","renderOptions","arguments","renderArguments","subcommands","renderSubcommands","examples","outString","optionsMetadata","h","index","hidden","aliases","nameAsArg","concat","aliasesAsArgs","join","placeholder","repeat","optional","defaultValue","defaultValueAsString","argumentsMetadata","subcommandsMetadata","string","replace"],"sources":["../../../src/markdown/generate-markdown.ts"],"sourcesContent":["import { getCliMetadata } from \"../metadata/cli-metadata.ts\";\nimport { escapeHtmlTags, stripAnsi } from \"../utilities.ts\";\n\nimport type { Cli } from \"../types/definitions-types.ts\";\nimport type { ArgumentMetadata, OptionMetadata, SubcommandMetadata } from \"../types/metadata-types.ts\";\n\nexport function generateMarkdown(cliDefinition: Cli): string {\n const metadata = getCliMetadata(cliDefinition);\n\n let md = \"<!-- Auto-generated by zod-args-parser -->\\n\\n\";\n\n // Title\n md += `# ${metadata.name}\\n\\n`;\n\n // Description\n if (metadata.description && !metadata.descriptionMarkdown) {\n md += `${forceLineBreak(metadata.description)}\\n`;\n }\n\n // Description Markdown\n if (metadata.descriptionMarkdown) {\n md += `${forceLineBreak(metadata.descriptionMarkdown)}\\n`;\n }\n\n // Examples\n if (metadata.example) {\n md += renderExamples(metadata.example);\n }\n\n // Options\n if (metadata.options.length > 0) {\n md += \"\\n## Options:\\n\\n\";\n md += renderOptions(metadata.options, 3);\n }\n\n // Arguments\n if (metadata.arguments.length > 0) {\n md += \"\\n## Arguments:\\n\\n\";\n md += renderArguments(metadata.arguments, 3);\n }\n\n // Subcommands\n if (metadata.subcommands.length > 0) {\n md += \"\\n## Subcommands:\\n\\n\";\n md += renderSubcommands(metadata.subcommands);\n }\n\n md = stripAnsi(md);\n md = escapeHtmlTags(md);\n\n return md;\n}\n\nfunction renderExamples(examples: string) {\n let outString = \"\\n**Example:**\\n\";\n\n const lang = \"bash\";\n\n outString += \"\\n\";\n outString += \"```\" + lang + \"\\n\";\n outString += examples;\n outString += \"\\n```\\n\";\n\n return outString;\n}\n\nfunction renderOptions(optionsMetadata: OptionMetadata[] = [], h: number) {\n let outString = \"\";\n\n for (let index = 0; index < optionsMetadata.length; index++) {\n const metadata = optionsMetadata[index];\n if (metadata.hidden) continue;\n\n const aliases = [metadata.nameAsArg].concat(metadata.aliasesAsArgs).join(\", \");\n\n const placeholder = metadata.placeholder && ` ${metadata.placeholder}`;\n\n outString += `${\"#\".repeat(h)} \\`${aliases + placeholder}\\``;\n\n if (metadata.optional) {\n outString += \" _optional_\";\n }\n\n outString += \"\\n\\n\";\n\n if (metadata.description && !metadata.descriptionMarkdown) {\n outString += `${forceLineBreak(metadata.description)}\\n`;\n }\n\n if (metadata.descriptionMarkdown) {\n outString += `${forceLineBreak(metadata.descriptionMarkdown)}\\n`;\n }\n\n if (metadata.defaultValue !== undefined) {\n outString += `\\n**default:** \\`${metadata.defaultValueAsString}\\`\\n`;\n }\n\n if (metadata.example) {\n outString += renderExamples(metadata.example);\n }\n\n if (index < optionsMetadata.length - 1) {\n outString += \"\\n\";\n }\n }\n\n return outString;\n}\n\nfunction renderArguments(argumentsMetadata: ArgumentMetadata[] = [], h: number) {\n let outString = \"\";\n\n for (let index = 0; index < argumentsMetadata.length; index++) {\n const metadata = argumentsMetadata[index];\n if (metadata.hidden) continue;\n\n outString += `${\"#\".repeat(h)} \\`${metadata.name}\\``;\n\n if (metadata.optional) {\n outString += \" _optional_\";\n }\n\n outString += \"\\n\\n\";\n\n if (metadata.description && !metadata.descriptionMarkdown) {\n outString += `${forceLineBreak(metadata.description)}\\n`;\n }\n\n if (metadata.descriptionMarkdown) {\n outString += `${forceLineBreak(metadata.descriptionMarkdown)}\\n`;\n }\n\n if (metadata.defaultValue !== undefined) {\n outString += `\\n**default:** \\`${metadata.defaultValueAsString}\\`\\n`;\n }\n\n if (metadata.example) {\n outString += renderExamples(metadata.example);\n }\n\n if (index < argumentsMetadata.length - 1) {\n outString += \"\\n\";\n }\n }\n\n return outString;\n}\n\nfunction renderSubcommands(subcommandsMetadata: SubcommandMetadata[]) {\n let outString = \"\";\n\n for (let index = 0; index < subcommandsMetadata.length; index++) {\n const metadata = subcommandsMetadata[index];\n if (metadata.hidden) continue;\n\n const aliases = [metadata.name].concat(metadata.aliases).join(\", \");\n\n const placeholder = metadata.placeholder && ` ${metadata.placeholder}`;\n\n outString += `### ${aliases + placeholder}\\n\\n`;\n\n if (metadata.description && !metadata.descriptionMarkdown) {\n outString += `${forceLineBreak(metadata.description)}\\n`;\n }\n\n if (metadata.descriptionMarkdown) {\n outString += `${forceLineBreak(metadata.descriptionMarkdown)}\\n`;\n }\n\n if (metadata.example) {\n outString += renderExamples(metadata.example);\n }\n\n if (metadata.options.length > 0) {\n outString += \"\\n#### Options:\\n\\n\";\n outString += renderOptions(metadata.options, 4);\n }\n\n if (metadata.arguments.length > 0) {\n outString += \"\\n#### Arguments:\\n\\n\";\n outString += renderArguments(metadata.arguments, 4);\n }\n\n if (index < subcommandsMetadata.length - 1) {\n outString += \"\\n---\\n\\n\";\n }\n }\n\n return outString;\n}\n\n/** Inserts two trailing spaces before newline. In Markdown, a newline that ends with two spaces forces a line break. */\nfunction forceLineBreak(string: string): string {\n return string.replace(/(\\n+)/g, \" $1\");\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/markdown/generate-markdown.ts"],
4
+ "sourcesContent": ["import { getCliMetadata } from \"../metadata/cli-metadata.ts\";\nimport { escapeHtmlTags, stripAnsi } from \"../utilities/utilities.ts\";\n\nimport type { Cli } from \"../types/definitions-types.ts\";\nimport type { ArgumentMetadata, OptionMetadata, SubcommandMetadata } from \"../types/metadata-types.ts\";\n\nexport function generateMarkdown(cliDefinition: Cli): string {\n const metadata = getCliMetadata(cliDefinition);\n\n let md = \"<!-- Auto-generated by zod-args-parser -->\\n\\n\";\n\n // Title\n md += `# ${metadata.name}\\n\\n`;\n\n // Description\n if (metadata.description && !metadata.descriptionMarkdown) {\n md += `${forceLineBreak(metadata.description)}\\n`;\n }\n\n // Description Markdown\n if (metadata.descriptionMarkdown) {\n md += `${forceLineBreak(metadata.descriptionMarkdown)}\\n`;\n }\n\n // Examples\n if (metadata.example) {\n md += renderExamples(metadata.example);\n }\n\n // Options\n if (metadata.options.length > 0) {\n md += \"\\n## Options:\\n\\n\";\n md += renderOptions(metadata.options, 3);\n }\n\n // Arguments\n if (metadata.arguments.length > 0) {\n md += \"\\n## Arguments:\\n\\n\";\n md += renderArguments(metadata.arguments, 3);\n }\n\n // Subcommands\n if (metadata.subcommands.length > 0) {\n md += \"\\n## Subcommands:\\n\\n\";\n md += renderSubcommands(metadata.subcommands);\n }\n\n md = stripAnsi(md);\n md = escapeHtmlTags(md);\n\n return md;\n}\n\nfunction renderExamples(examples: string) {\n let outString = \"\\n**Example:**\\n\";\n\n const lang = \"bash\";\n\n outString += \"\\n\";\n outString += \"```\" + lang + \"\\n\";\n outString += examples;\n outString += \"\\n```\\n\";\n\n return outString;\n}\n\nfunction renderOptions(optionsMetadata: OptionMetadata[] = [], h: number) {\n let outString = \"\";\n\n for (let index = 0; index < optionsMetadata.length; index++) {\n const metadata = optionsMetadata[index];\n if (metadata.hidden) continue;\n\n const aliases = [metadata.nameAsArg].concat(metadata.aliasesAsArgs).join(\", \");\n const placeholder = metadata.placeholder && ` ${metadata.placeholder}`;\n\n outString += `${\"#\".repeat(h)} \\`${aliases + placeholder}\\``;\n\n if (metadata.optional) {\n outString += \" _optional_\";\n }\n\n outString += \"\\n\\n\";\n\n if (metadata.description && !metadata.descriptionMarkdown) {\n outString += `${forceLineBreak(metadata.description)}\\n`;\n }\n\n if (metadata.descriptionMarkdown) {\n outString += `${forceLineBreak(metadata.descriptionMarkdown)}\\n`;\n }\n\n if (metadata.defaultValue !== undefined) {\n const nl = outString.endsWith(\"\\n\\n\") ? \"\" : \"\\n\";\n outString += `${nl}**default:** \\`${metadata.defaultValueAsString}\\`\\n`;\n }\n\n if (metadata.example) {\n outString += renderExamples(metadata.example);\n }\n\n if (index < optionsMetadata.length - 1) {\n outString += \"\\n\";\n }\n }\n\n return outString;\n}\n\nfunction renderArguments(argumentsMetadata: ArgumentMetadata[] = [], h: number) {\n let outString = \"\";\n\n for (let index = 0; index < argumentsMetadata.length; index++) {\n const metadata = argumentsMetadata[index];\n if (metadata.hidden) continue;\n\n outString += `${\"#\".repeat(h)} \\`${metadata.name}\\``;\n\n if (metadata.optional) {\n outString += \" _optional_\";\n }\n\n outString += \"\\n\\n\";\n\n if (metadata.description && !metadata.descriptionMarkdown) {\n outString += `${forceLineBreak(metadata.description)}\\n`;\n }\n\n if (metadata.descriptionMarkdown) {\n outString += `${forceLineBreak(metadata.descriptionMarkdown)}\\n`;\n }\n\n if (metadata.defaultValue !== undefined) {\n const nl = outString.endsWith(\"\\n\\n\") ? \"\" : \"\\n\";\n outString += `${nl}**default:** \\`${metadata.defaultValueAsString}\\`\\n`;\n }\n\n if (metadata.example) {\n outString += renderExamples(metadata.example);\n }\n\n if (index < argumentsMetadata.length - 1) {\n outString += \"\\n\";\n }\n }\n\n return outString;\n}\n\nfunction renderSubcommands(subcommandsMetadata: SubcommandMetadata[]) {\n let outString = \"\";\n\n for (let index = 0; index < subcommandsMetadata.length; index++) {\n const metadata = subcommandsMetadata[index];\n if (metadata.hidden) continue;\n\n const aliases = [metadata.name].concat(metadata.aliases).join(\", \");\n\n const placeholder = metadata.placeholder && ` ${metadata.placeholder}`;\n\n outString += `### ${aliases + placeholder}\\n\\n`;\n\n if (metadata.description && !metadata.descriptionMarkdown) {\n outString += `${forceLineBreak(metadata.description)}\\n`;\n }\n\n if (metadata.descriptionMarkdown) {\n outString += `${forceLineBreak(metadata.descriptionMarkdown)}\\n`;\n }\n\n if (metadata.example) {\n outString += renderExamples(metadata.example);\n }\n\n if (metadata.options.length > 0) {\n outString += \"\\n#### Options:\\n\\n\";\n outString += renderOptions(metadata.options, 4);\n }\n\n if (metadata.arguments.length > 0) {\n outString += \"\\n#### Arguments:\\n\\n\";\n outString += renderArguments(metadata.arguments, 4);\n }\n\n if (index < subcommandsMetadata.length - 1) {\n outString += \"\\n---\\n\\n\";\n }\n }\n\n return outString;\n}\n\n/** Inserts two trailing spaces before newline. In Markdown, a newline that ends with two spaces forces a line break. */\nfunction forceLineBreak(string: string): string {\n return string.replace(/(\\n+)/g, \" $1\");\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -1,2 +1,26 @@
1
- import{defaultValueAndIsOptional,stringifyValue}from"../utilities.js";function getArgumentsMetadata(e){const t=[];for(const[a,n]of Object.entries(e)){const e=n.meta??{},{optional:i,defaultValue:o}=n._preparedType??defaultValueAndIsOptional(n.schema);t.push({name:e.name??a,description:e.description??"",descriptionMarkdown:e.descriptionMarkdown??"",defaultValue:o,defaultValueAsString:e.default??stringifyValue(o)??"",optional:e.optional??i,example:e.example??"",schema:n.schema,hidden:e.hidden??!1})}return t}export{getArgumentsMetadata};
2
- //# sourceMappingURL=arguments-metadata.js.map
1
+ // src/metadata/arguments-metadata.ts
2
+ import { defaultValueAndIsOptional } from "../utilities/schema-utilities.js";
3
+ import { stringifyValue } from "../utilities/utilities.js";
4
+ function getArgumentsMetadata(argumentsDefinition) {
5
+ const outputMetadata = [];
6
+ for (const [name, argument] of Object.entries(argumentsDefinition)) {
7
+ const meta = argument.meta ?? {};
8
+ const { optional, defaultValue } = argument._preparedType ?? defaultValueAndIsOptional(argument.schema);
9
+ outputMetadata.push({
10
+ name: meta.name ?? name,
11
+ description: meta.description ?? "",
12
+ descriptionMarkdown: meta.descriptionMarkdown ?? "",
13
+ defaultValue,
14
+ defaultValueAsString: meta.default ?? stringifyValue(defaultValue) ?? "",
15
+ optional: meta.optional ?? optional,
16
+ example: meta.example ?? "",
17
+ schema: argument.schema,
18
+ hidden: meta.hidden ?? false
19
+ });
20
+ }
21
+ return outputMetadata;
22
+ }
23
+ export {
24
+ getArgumentsMetadata
25
+ };
26
+ //# sourceMappingURL=arguments-metadata.js.map
@@ -1 +1,7 @@
1
- {"version":3,"names":["defaultValueAndIsOptional","stringifyValue","getArgumentsMetadata","argumentsDefinition","outputMetadata","name","argument","Object","entries","meta","optional","defaultValue","_preparedType","schema","push","description","descriptionMarkdown","defaultValueAsString","default","example","hidden"],"sources":["../../../src/metadata/arguments-metadata.ts"],"sourcesContent":["import { defaultValueAndIsOptional, stringifyValue } from \"../utilities.ts\";\n\nimport type { Argument } from \"../types/definitions-types.ts\";\nimport type { ArgumentMetadata } from \"../types/metadata-types.ts\";\n\nexport function getArgumentsMetadata(argumentsDefinition: Record<string, Argument>): ArgumentMetadata[] {\n const outputMetadata: ArgumentMetadata[] = [];\n\n for (const [name, argument] of Object.entries(argumentsDefinition)) {\n const meta = argument.meta ?? {};\n\n const { optional, defaultValue } = argument._preparedType ?? defaultValueAndIsOptional(argument.schema);\n\n outputMetadata.push({\n name: meta.name ?? name,\n description: meta.description ?? \"\",\n descriptionMarkdown: meta.descriptionMarkdown ?? \"\",\n defaultValue,\n defaultValueAsString: meta.default ?? stringifyValue(defaultValue) ?? \"\",\n optional: meta.optional ?? optional,\n example: meta.example ?? \"\",\n schema: argument.schema,\n hidden: meta.hidden ?? false,\n });\n }\n\n return outputMetadata;\n}\n"],"mappings":"OAASA,0BAA2BC,mBAAsB,kBAKnD,SAASC,qBAAqBC,GACnC,MAAMC,EAAqC,GAE3C,UAAYC,EAAMC,KAAaC,OAAOC,QAAQL,GAAsB,CAClE,MAAMM,EAAOH,EAASG,MAAQ,CAAC,GAEzBC,SAAEA,EAAAC,aAAUA,GAAiBL,EAASM,eAAiBZ,0BAA0BM,EAASO,QAEhGT,EAAeU,KAAK,CAClBT,KAAMI,EAAKJ,MAAQA,EACnBU,YAAaN,EAAKM,aAAe,GACjCC,oBAAqBP,EAAKO,qBAAuB,GACjDL,eACAM,qBAAsBR,EAAKS,SAAWjB,eAAeU,IAAiB,GACtED,SAAUD,EAAKC,UAAYA,EAC3BS,QAASV,EAAKU,SAAW,GACzBN,OAAQP,EAASO,OACjBO,OAAQX,EAAKW,SAAU,GAE3B,CAEA,OAAOhB,CACT,Q","ignoreList":[]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/metadata/arguments-metadata.ts"],
4
+ "sourcesContent": ["import { defaultValueAndIsOptional } from \"../utilities/schema-utilities.ts\";\nimport { stringifyValue } from \"../utilities/utilities.ts\";\n\nimport type { Argument } from \"../types/definitions-types.ts\";\nimport type { ArgumentMetadata } from \"../types/metadata-types.ts\";\n\nexport function getArgumentsMetadata(argumentsDefinition: Record<string, Argument>): ArgumentMetadata[] {\n const outputMetadata: ArgumentMetadata[] = [];\n\n for (const [name, argument] of Object.entries(argumentsDefinition)) {\n const meta = argument.meta ?? {};\n\n const { optional, defaultValue } = argument._preparedType ?? defaultValueAndIsOptional(argument.schema);\n\n outputMetadata.push({\n name: meta.name ?? name,\n description: meta.description ?? \"\",\n descriptionMarkdown: meta.descriptionMarkdown ?? \"\",\n defaultValue,\n defaultValueAsString: meta.default ?? stringifyValue(defaultValue) ?? \"\",\n optional: meta.optional ?? optional,\n example: meta.example ?? \"\",\n schema: argument.schema,\n hidden: meta.hidden ?? false,\n });\n }\n\n return outputMetadata;\n}\n"],
5
+ "mappings": ";AAAA,SAAS,iCAAiC;AAC1C,SAAS,sBAAsB;AAKxB,SAAS,qBAAqB,qBAAmE;AACtG,QAAM,iBAAqC,CAAC;AAE5C,aAAW,CAAC,MAAM,QAAQ,KAAK,OAAO,QAAQ,mBAAmB,GAAG;AAClE,UAAM,OAAO,SAAS,QAAQ,CAAC;AAE/B,UAAM,EAAE,UAAU,aAAa,IAAI,SAAS,iBAAiB,0BAA0B,SAAS,MAAM;AAEtG,mBAAe,KAAK;AAAA,MAClB,MAAM,KAAK,QAAQ;AAAA,MACnB,aAAa,KAAK,eAAe;AAAA,MACjC,qBAAqB,KAAK,uBAAuB;AAAA,MACjD;AAAA,MACA,sBAAsB,KAAK,WAAW,eAAe,YAAY,KAAK;AAAA,MACtE,UAAU,KAAK,YAAY;AAAA,MAC3B,SAAS,KAAK,WAAW;AAAA,MACzB,QAAQ,SAAS;AAAA,MACjB,QAAQ,KAAK,UAAU;AAAA,IACzB,CAAC;AAAA,EACH;AAEA,SAAO;AACT;",
6
+ "names": []
7
+ }
@@ -1,2 +1,24 @@
1
- import{getArgumentsMetadata}from"./arguments-metadata.js";import{getOptionsMetadata}from"./options-metadata.js";import{getSubcommandsMetadata}from"./subcommands-metadata.js";function getCliMetadata(t){const a=t.subcommands??[],e=t.meta??{};return{name:t.cliName,description:e.description??"",descriptionMarkdown:e.descriptionMarkdown??"",usage:e.usage??"",example:e.example??"",allowPositionals:t.allowPositionals??!1,options:t.options?getOptionsMetadata(t.options):[],arguments:t.arguments?getArgumentsMetadata(t.arguments):[],subcommands:a?getSubcommandsMetadata(a):[]}}export{getCliMetadata};
2
- //# sourceMappingURL=cli-metadata.js.map
1
+ // src/metadata/cli-metadata.ts
2
+ import { getArgumentsMetadata } from "./arguments-metadata.js";
3
+ import { getOptionsMetadata } from "./options-metadata.js";
4
+ import { getSubcommandsMetadata } from "./subcommands-metadata.js";
5
+ function getCliMetadata(cliDefinition) {
6
+ const subcommands = cliDefinition.subcommands ?? [];
7
+ const meta = cliDefinition.meta ?? {};
8
+ const outputMetadata = {
9
+ name: cliDefinition.cliName,
10
+ description: meta.description ?? "",
11
+ descriptionMarkdown: meta.descriptionMarkdown ?? "",
12
+ usage: meta.usage ?? "",
13
+ example: meta.example ?? "",
14
+ allowPositionals: cliDefinition.allowPositionals ?? false,
15
+ options: cliDefinition.options ? getOptionsMetadata(cliDefinition.options) : [],
16
+ arguments: cliDefinition.arguments ? getArgumentsMetadata(cliDefinition.arguments) : [],
17
+ subcommands: subcommands ? getSubcommandsMetadata(subcommands) : []
18
+ };
19
+ return outputMetadata;
20
+ }
21
+ export {
22
+ getCliMetadata
23
+ };
24
+ //# sourceMappingURL=cli-metadata.js.map
@@ -1 +1,7 @@
1
- {"version":3,"names":["getArgumentsMetadata","getOptionsMetadata","getSubcommandsMetadata","getCliMetadata","cliDefinition","subcommands","meta","name","cliName","description","descriptionMarkdown","usage","example","allowPositionals","options","arguments"],"sources":["../../../src/metadata/cli-metadata.ts"],"sourcesContent":["import { getArgumentsMetadata } from \"./arguments-metadata.ts\";\nimport { getOptionsMetadata } from \"./options-metadata.ts\";\nimport { getSubcommandsMetadata } from \"./subcommands-metadata.ts\";\n\nimport type { Cli } from \"../types/definitions-types.ts\";\nimport type { CliMetadata } from \"../types/metadata-types.ts\";\n\nexport function getCliMetadata(cliDefinition: Cli): CliMetadata {\n const subcommands = cliDefinition.subcommands ?? [];\n\n const meta = cliDefinition.meta ?? {};\n\n const outputMetadata: CliMetadata = {\n name: cliDefinition.cliName,\n description: meta.description ?? \"\",\n descriptionMarkdown: meta.descriptionMarkdown ?? \"\",\n usage: meta.usage ?? \"\",\n example: meta.example ?? \"\",\n allowPositionals: cliDefinition.allowPositionals ?? false,\n options: cliDefinition.options ? getOptionsMetadata(cliDefinition.options) : [],\n arguments: cliDefinition.arguments ? getArgumentsMetadata(cliDefinition.arguments) : [],\n subcommands: subcommands ? getSubcommandsMetadata(subcommands) : [],\n };\n\n return outputMetadata;\n}\n"],"mappings":"OAASA,yBAA4B,iCAC5BC,uBAA0B,+BAC1BC,2BAA8B,4BAKhC,SAASC,eAAeC,GAC7B,MAAMC,EAAcD,EAAcC,aAAe,GAE3CC,EAAOF,EAAcE,MAAQ,CAAC,EAcpC,MAZoC,CAClCC,KAAMH,EAAcI,QACpBC,YAAaH,EAAKG,aAAe,GACjCC,oBAAqBJ,EAAKI,qBAAuB,GACjDC,MAAOL,EAAKK,OAAS,GACrBC,QAASN,EAAKM,SAAW,GACzBC,iBAAkBT,EAAcS,mBAAoB,EACpDC,QAASV,EAAcU,QAAUb,mBAAmBG,EAAcU,SAAW,GAC7EC,UAAWX,EAAcW,UAAYf,qBAAqBI,EAAcW,WAAa,GACrFV,YAAaA,EAAcH,uBAAuBG,GAAe,GAIrE,Q","ignoreList":[]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/metadata/cli-metadata.ts"],
4
+ "sourcesContent": ["import { getArgumentsMetadata } from \"./arguments-metadata.ts\";\nimport { getOptionsMetadata } from \"./options-metadata.ts\";\nimport { getSubcommandsMetadata } from \"./subcommands-metadata.ts\";\n\nimport type { Cli } from \"../types/definitions-types.ts\";\nimport type { CliMetadata } from \"../types/metadata-types.ts\";\n\nexport function getCliMetadata(cliDefinition: Cli): CliMetadata {\n const subcommands = cliDefinition.subcommands ?? [];\n\n const meta = cliDefinition.meta ?? {};\n\n const outputMetadata: CliMetadata = {\n name: cliDefinition.cliName,\n description: meta.description ?? \"\",\n descriptionMarkdown: meta.descriptionMarkdown ?? \"\",\n usage: meta.usage ?? \"\",\n example: meta.example ?? \"\",\n allowPositionals: cliDefinition.allowPositionals ?? false,\n options: cliDefinition.options ? getOptionsMetadata(cliDefinition.options) : [],\n arguments: cliDefinition.arguments ? getArgumentsMetadata(cliDefinition.arguments) : [],\n subcommands: subcommands ? getSubcommandsMetadata(subcommands) : [],\n };\n\n return outputMetadata;\n}\n"],
5
+ "mappings": ";AAAA,SAAS,4BAA4B;AACrC,SAAS,0BAA0B;AACnC,SAAS,8BAA8B;AAKhC,SAAS,eAAe,eAAiC;AAC9D,QAAM,cAAc,cAAc,eAAe,CAAC;AAElD,QAAM,OAAO,cAAc,QAAQ,CAAC;AAEpC,QAAM,iBAA8B;AAAA,IAClC,MAAM,cAAc;AAAA,IACpB,aAAa,KAAK,eAAe;AAAA,IACjC,qBAAqB,KAAK,uBAAuB;AAAA,IACjD,OAAO,KAAK,SAAS;AAAA,IACrB,SAAS,KAAK,WAAW;AAAA,IACzB,kBAAkB,cAAc,oBAAoB;AAAA,IACpD,SAAS,cAAc,UAAU,mBAAmB,cAAc,OAAO,IAAI,CAAC;AAAA,IAC9E,WAAW,cAAc,YAAY,qBAAqB,cAAc,SAAS,IAAI,CAAC;AAAA,IACtF,aAAa,cAAc,uBAAuB,WAAW,IAAI,CAAC;AAAA,EACpE;AAEA,SAAO;AACT;",
6
+ "names": []
7
+ }
@@ -1,2 +1,35 @@
1
- import{transformOptionToArgument}from"../parse/parser-utilities.js";import{defaultValueAndIsOptional,stringifyValue}from"../utilities.js";function getOptionsMetadata(e){const t=[];if(!e)return t;for(const[a,i]of Object.entries(e)){const e=i.aliases??[],n=i.meta??{},{optional:o,defaultValue:r}=i._preparedType??defaultValueAndIsOptional(i.schema);t.push({name:a,nameAsArg:transformOptionToArgument(a),aliases:e,aliasesAsArgs:e.map(e=>transformOptionToArgument(e)),placeholder:n.placeholder??"",description:n.description??"",descriptionMarkdown:n.descriptionMarkdown??"",optional:n.optional??o,example:n.example??"",defaultValue:r,defaultValueAsString:n.default??stringifyValue(r)??"",schema:i.schema,hidden:n.hidden??!1})}return t}export{getOptionsMetadata};
2
- //# sourceMappingURL=options-metadata.js.map
1
+ // src/metadata/options-metadata.ts
2
+ import { transformOptionToArgument } from "../parse/parser-utilities.js";
3
+ import { defaultValueAndIsOptional } from "../utilities/schema-utilities.js";
4
+ import { stringifyValue } from "../utilities/utilities.js";
5
+ function getOptionsMetadata(optionsDefinition) {
6
+ const outputMetadata = [];
7
+ if (!optionsDefinition) {
8
+ return outputMetadata;
9
+ }
10
+ for (const [optionName, option] of Object.entries(optionsDefinition)) {
11
+ const aliases = option.aliases ?? [];
12
+ const meta = option.meta ?? {};
13
+ const { optional, defaultValue } = option._preparedType ?? defaultValueAndIsOptional(option.schema);
14
+ outputMetadata.push({
15
+ name: optionName,
16
+ nameAsArg: transformOptionToArgument(optionName),
17
+ aliases,
18
+ aliasesAsArgs: aliases.map((alias) => transformOptionToArgument(alias)),
19
+ placeholder: meta.placeholder ?? "",
20
+ description: meta.description ?? "",
21
+ descriptionMarkdown: meta.descriptionMarkdown ?? "",
22
+ optional: meta.optional ?? optional,
23
+ example: meta.example ?? "",
24
+ defaultValue,
25
+ defaultValueAsString: meta.default ?? stringifyValue(defaultValue) ?? "",
26
+ schema: option.schema,
27
+ hidden: meta.hidden ?? false
28
+ });
29
+ }
30
+ return outputMetadata;
31
+ }
32
+ export {
33
+ getOptionsMetadata
34
+ };
35
+ //# sourceMappingURL=options-metadata.js.map
@@ -1 +1,7 @@
1
- {"version":3,"names":["transformOptionToArgument","defaultValueAndIsOptional","stringifyValue","getOptionsMetadata","optionsDefinition","outputMetadata","optionName","option","Object","entries","aliases","meta","optional","defaultValue","_preparedType","schema","push","name","nameAsArg","aliasesAsArgs","map","alias","placeholder","description","descriptionMarkdown","example","defaultValueAsString","default","hidden"],"sources":["../../../src/metadata/options-metadata.ts"],"sourcesContent":["import { transformOptionToArgument } from \"../parse/parser-utilities.ts\";\nimport { defaultValueAndIsOptional, stringifyValue } from \"../utilities.ts\";\n\nimport type { Option } from \"../types/definitions-types.ts\";\nimport type { OptionMetadata } from \"../types/metadata-types.ts\";\n\nexport function getOptionsMetadata(optionsDefinition: Record<string, Option>): OptionMetadata[] {\n const outputMetadata: OptionMetadata[] = [];\n\n if (!optionsDefinition) {\n return outputMetadata;\n }\n\n for (const [optionName, option] of Object.entries(optionsDefinition)) {\n const aliases = option.aliases ?? [];\n const meta = option.meta ?? {};\n\n const { optional, defaultValue } = option._preparedType ?? defaultValueAndIsOptional(option.schema);\n\n outputMetadata.push({\n name: optionName,\n nameAsArg: transformOptionToArgument(optionName),\n aliases,\n aliasesAsArgs: aliases.map(alias => transformOptionToArgument(alias)),\n placeholder: meta.placeholder ?? \"\",\n description: meta.description ?? \"\",\n descriptionMarkdown: meta.descriptionMarkdown ?? \"\",\n optional: meta.optional ?? optional,\n example: meta.example ?? \"\",\n defaultValue,\n defaultValueAsString: meta.default ?? stringifyValue(defaultValue) ?? \"\",\n schema: option.schema,\n hidden: meta.hidden ?? false,\n });\n }\n\n return outputMetadata;\n}\n"],"mappings":"OAASA,8BAAiC,sCACjCC,0BAA2BC,mBAAsB,kBAKnD,SAASC,mBAAmBC,GACjC,MAAMC,EAAmC,GAEzC,IAAKD,EACH,OAAOC,EAGT,UAAYC,EAAYC,KAAWC,OAAOC,QAAQL,GAAoB,CACpE,MAAMM,EAAUH,EAAOG,SAAW,GAC5BC,EAAOJ,EAAOI,MAAQ,CAAC,GAEvBC,SAAEA,EAAAC,aAAUA,GAAiBN,EAAOO,eAAiBb,0BAA0BM,EAAOQ,QAE5FV,EAAeW,KAAK,CAClBC,KAAMX,EACNY,UAAWlB,0BAA0BM,GACrCI,UACAS,cAAeT,EAAQU,IAAIC,GAASrB,0BAA0BqB,IAC9DC,YAAaX,EAAKW,aAAe,GACjCC,YAAaZ,EAAKY,aAAe,GACjCC,oBAAqBb,EAAKa,qBAAuB,GACjDZ,SAAUD,EAAKC,UAAYA,EAC3Ba,QAASd,EAAKc,SAAW,GACzBZ,eACAa,qBAAsBf,EAAKgB,SAAWzB,eAAeW,IAAiB,GACtEE,OAAQR,EAAOQ,OACfa,OAAQjB,EAAKiB,SAAU,GAE3B,CAEA,OAAOvB,CACT,Q","ignoreList":[]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/metadata/options-metadata.ts"],
4
+ "sourcesContent": ["import { transformOptionToArgument } from \"../parse/parser-utilities.ts\";\nimport { defaultValueAndIsOptional } from \"../utilities/schema-utilities.ts\";\nimport { stringifyValue } from \"../utilities/utilities.ts\";\n\nimport type { Option } from \"../types/definitions-types.ts\";\nimport type { OptionMetadata } from \"../types/metadata-types.ts\";\n\nexport function getOptionsMetadata(optionsDefinition: Record<string, Option>): OptionMetadata[] {\n const outputMetadata: OptionMetadata[] = [];\n\n if (!optionsDefinition) {\n return outputMetadata;\n }\n\n for (const [optionName, option] of Object.entries(optionsDefinition)) {\n const aliases = option.aliases ?? [];\n const meta = option.meta ?? {};\n\n const { optional, defaultValue } = option._preparedType ?? defaultValueAndIsOptional(option.schema);\n\n outputMetadata.push({\n name: optionName,\n nameAsArg: transformOptionToArgument(optionName),\n aliases,\n aliasesAsArgs: aliases.map(alias => transformOptionToArgument(alias)),\n placeholder: meta.placeholder ?? \"\",\n description: meta.description ?? \"\",\n descriptionMarkdown: meta.descriptionMarkdown ?? \"\",\n optional: meta.optional ?? optional,\n example: meta.example ?? \"\",\n defaultValue,\n defaultValueAsString: meta.default ?? stringifyValue(defaultValue) ?? \"\",\n schema: option.schema,\n hidden: meta.hidden ?? false,\n });\n }\n\n return outputMetadata;\n}\n"],
5
+ "mappings": ";AAAA,SAAS,iCAAiC;AAC1C,SAAS,iCAAiC;AAC1C,SAAS,sBAAsB;AAKxB,SAAS,mBAAmB,mBAA6D;AAC9F,QAAM,iBAAmC,CAAC;AAE1C,MAAI,CAAC,mBAAmB;AACtB,WAAO;AAAA,EACT;AAEA,aAAW,CAAC,YAAY,MAAM,KAAK,OAAO,QAAQ,iBAAiB,GAAG;AACpE,UAAM,UAAU,OAAO,WAAW,CAAC;AACnC,UAAM,OAAO,OAAO,QAAQ,CAAC;AAE7B,UAAM,EAAE,UAAU,aAAa,IAAI,OAAO,iBAAiB,0BAA0B,OAAO,MAAM;AAElG,mBAAe,KAAK;AAAA,MAClB,MAAM;AAAA,MACN,WAAW,0BAA0B,UAAU;AAAA,MAC/C;AAAA,MACA,eAAe,QAAQ,IAAI,WAAS,0BAA0B,KAAK,CAAC;AAAA,MACpE,aAAa,KAAK,eAAe;AAAA,MACjC,aAAa,KAAK,eAAe;AAAA,MACjC,qBAAqB,KAAK,uBAAuB;AAAA,MACjD,UAAU,KAAK,YAAY;AAAA,MAC3B,SAAS,KAAK,WAAW;AAAA,MACzB;AAAA,MACA,sBAAsB,KAAK,WAAW,eAAe,YAAY,KAAK;AAAA,MACtE,QAAQ,OAAO;AAAA,MACf,QAAQ,KAAK,UAAU;AAAA,IACzB,CAAC;AAAA,EACH;AAEA,SAAO;AACT;",
6
+ "names": []
7
+ }
@@ -1,2 +1,32 @@
1
- import{getArgumentsMetadata}from"./arguments-metadata.js";import{getOptionsMetadata}from"./options-metadata.js";function getSubcommandsMetadata(t){const a=[];if(!t||0===t.length)return a;for(const e of t){const t=e.options?getOptionsMetadata(e.options):[],o=e.arguments?getArgumentsMetadata(e.arguments):[],n=e.meta??{};a.push({name:e.name,aliases:e.aliases??[],description:n.description??"",descriptionMarkdown:n.descriptionMarkdown??"",placeholder:n.placeholder??"",usage:n.usage??"",example:n.example??"",allowPositionals:e.allowPositionals??!1,options:t,arguments:o,hidden:n.hidden??!1})}return a}export{getSubcommandsMetadata};
2
- //# sourceMappingURL=subcommands-metadata.js.map
1
+ // src/metadata/subcommands-metadata.ts
2
+ import { getArgumentsMetadata } from "./arguments-metadata.js";
3
+ import { getOptionsMetadata } from "./options-metadata.js";
4
+ function getSubcommandsMetadata(commandDefinition) {
5
+ const outputMetadata = [];
6
+ if (!commandDefinition || commandDefinition.length === 0) {
7
+ return outputMetadata;
8
+ }
9
+ for (const subcommand of commandDefinition) {
10
+ const optionsMetadata = subcommand.options ? getOptionsMetadata(subcommand.options) : [];
11
+ const argumentsMetadata = subcommand.arguments ? getArgumentsMetadata(subcommand.arguments) : [];
12
+ const meta = subcommand.meta ?? {};
13
+ outputMetadata.push({
14
+ name: subcommand.name,
15
+ aliases: subcommand.aliases ?? [],
16
+ description: meta.description ?? "",
17
+ descriptionMarkdown: meta.descriptionMarkdown ?? "",
18
+ placeholder: meta.placeholder ?? "",
19
+ usage: meta.usage ?? "",
20
+ example: meta.example ?? "",
21
+ allowPositionals: subcommand.allowPositionals ?? false,
22
+ options: optionsMetadata,
23
+ arguments: argumentsMetadata,
24
+ hidden: meta.hidden ?? false
25
+ });
26
+ }
27
+ return outputMetadata;
28
+ }
29
+ export {
30
+ getSubcommandsMetadata
31
+ };
32
+ //# sourceMappingURL=subcommands-metadata.js.map
@@ -1 +1,7 @@
1
- {"version":3,"names":["getArgumentsMetadata","getOptionsMetadata","getSubcommandsMetadata","commandDefinition","outputMetadata","length","subcommand","optionsMetadata","options","argumentsMetadata","arguments","meta","push","name","aliases","description","descriptionMarkdown","placeholder","usage","example","allowPositionals","hidden"],"sources":["../../../src/metadata/subcommands-metadata.ts"],"sourcesContent":["import { getArgumentsMetadata } from \"./arguments-metadata.ts\";\nimport { getOptionsMetadata } from \"./options-metadata.ts\";\n\nimport type { Subcommand } from \"../types/definitions-types.ts\";\nimport type { SubcommandMetadata } from \"../types/metadata-types.ts\";\n\nexport function getSubcommandsMetadata(commandDefinition: readonly Subcommand[]): SubcommandMetadata[] {\n const outputMetadata: SubcommandMetadata[] = [];\n\n if (!commandDefinition || commandDefinition.length === 0) {\n return outputMetadata;\n }\n\n for (const subcommand of commandDefinition) {\n const optionsMetadata = subcommand.options ? getOptionsMetadata(subcommand.options) : [];\n const argumentsMetadata = subcommand.arguments ? getArgumentsMetadata(subcommand.arguments) : [];\n const meta = subcommand.meta ?? {};\n\n outputMetadata.push({\n name: subcommand.name,\n aliases: subcommand.aliases ?? [],\n description: meta.description ?? \"\",\n descriptionMarkdown: meta.descriptionMarkdown ?? \"\",\n placeholder: meta.placeholder ?? \"\",\n usage: meta.usage ?? \"\",\n example: meta.example ?? \"\",\n allowPositionals: subcommand.allowPositionals ?? false,\n options: optionsMetadata,\n arguments: argumentsMetadata,\n hidden: meta.hidden ?? false,\n });\n }\n\n return outputMetadata;\n}\n"],"mappings":"OAASA,yBAA4B,iCAC5BC,uBAA0B,wBAK5B,SAASC,uBAAuBC,GACrC,MAAMC,EAAuC,GAE7C,IAAKD,GAAkD,IAA7BA,EAAkBE,OAC1C,OAAOD,EAGT,UAAWE,KAAcH,EAAmB,CAC1C,MAAMI,EAAkBD,EAAWE,QAAUP,mBAAmBK,EAAWE,SAAW,GAChFC,EAAoBH,EAAWI,UAAYV,qBAAqBM,EAAWI,WAAa,GACxFC,EAAOL,EAAWK,MAAQ,CAAC,EAEjCP,EAAeQ,KAAK,CAClBC,KAAMP,EAAWO,KACjBC,QAASR,EAAWQ,SAAW,GAC/BC,YAAaJ,EAAKI,aAAe,GACjCC,oBAAqBL,EAAKK,qBAAuB,GACjDC,YAAaN,EAAKM,aAAe,GACjCC,MAAOP,EAAKO,OAAS,GACrBC,QAASR,EAAKQ,SAAW,GACzBC,iBAAkBd,EAAWc,mBAAoB,EACjDZ,QAASD,EACTG,UAAWD,EACXY,OAAQV,EAAKU,SAAU,GAE3B,CAEA,OAAOjB,CACT,Q","ignoreList":[]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/metadata/subcommands-metadata.ts"],
4
+ "sourcesContent": ["import { getArgumentsMetadata } from \"./arguments-metadata.ts\";\nimport { getOptionsMetadata } from \"./options-metadata.ts\";\n\nimport type { Subcommand } from \"../types/definitions-types.ts\";\nimport type { SubcommandMetadata } from \"../types/metadata-types.ts\";\n\nexport function getSubcommandsMetadata(commandDefinition: readonly Subcommand[]): SubcommandMetadata[] {\n const outputMetadata: SubcommandMetadata[] = [];\n\n if (!commandDefinition || commandDefinition.length === 0) {\n return outputMetadata;\n }\n\n for (const subcommand of commandDefinition) {\n const optionsMetadata = subcommand.options ? getOptionsMetadata(subcommand.options) : [];\n const argumentsMetadata = subcommand.arguments ? getArgumentsMetadata(subcommand.arguments) : [];\n const meta = subcommand.meta ?? {};\n\n outputMetadata.push({\n name: subcommand.name,\n aliases: subcommand.aliases ?? [],\n description: meta.description ?? \"\",\n descriptionMarkdown: meta.descriptionMarkdown ?? \"\",\n placeholder: meta.placeholder ?? \"\",\n usage: meta.usage ?? \"\",\n example: meta.example ?? \"\",\n allowPositionals: subcommand.allowPositionals ?? false,\n options: optionsMetadata,\n arguments: argumentsMetadata,\n hidden: meta.hidden ?? false,\n });\n }\n\n return outputMetadata;\n}\n"],
5
+ "mappings": ";AAAA,SAAS,4BAA4B;AACrC,SAAS,0BAA0B;AAK5B,SAAS,uBAAuB,mBAAgE;AACrG,QAAM,iBAAuC,CAAC;AAE9C,MAAI,CAAC,qBAAqB,kBAAkB,WAAW,GAAG;AACxD,WAAO;AAAA,EACT;AAEA,aAAW,cAAc,mBAAmB;AAC1C,UAAM,kBAAkB,WAAW,UAAU,mBAAmB,WAAW,OAAO,IAAI,CAAC;AACvF,UAAM,oBAAoB,WAAW,YAAY,qBAAqB,WAAW,SAAS,IAAI,CAAC;AAC/F,UAAM,OAAO,WAAW,QAAQ,CAAC;AAEjC,mBAAe,KAAK;AAAA,MAClB,MAAM,WAAW;AAAA,MACjB,SAAS,WAAW,WAAW,CAAC;AAAA,MAChC,aAAa,KAAK,eAAe;AAAA,MACjC,qBAAqB,KAAK,uBAAuB;AAAA,MACjD,aAAa,KAAK,eAAe;AAAA,MACjC,OAAO,KAAK,SAAS;AAAA,MACrB,SAAS,KAAK,WAAW;AAAA,MACzB,kBAAkB,WAAW,oBAAoB;AAAA,MACjD,SAAS;AAAA,MACT,WAAW;AAAA,MACX,QAAQ,KAAK,UAAU;AAAA,IACzB,CAAC;AAAA,EACH;AAEA,SAAO;AACT;",
6
+ "names": []
7
+ }
@@ -1,2 +1,283 @@
1
- import{decoupleFlags,findOption,findSubcommandDefinition,isFlagArgument,isOptionArgument,transformOptionToArgument}from"../parser-utilities.js";function buildCliContext(o,e){const n=e.subcommands??[],t=new Set(n.flatMap(o=>[o.name,...o.aliases||[]]));o=decoupleFlags(o);const r={subcommand:void 0},i=()=>findSubcommandDefinition(r.subcommand,e);for(let e=0;e<o.length;e++){const n=o[e];if(0===e&&(r.subcommand=t.has(n)?n:void 0,r.subcommand))continue;const a=n.split("=").filter(Boolean),s=n.includes("="),u=a[0],p=a[1];if(isOptionArgument(u)){if(isFlagArgument(u)&&s)throw new Error(`flag arguments cannot be assigned using "=": "${n}"`);const t=i();if(!t)throw new Error(`unknown subcommand: "${r.subcommand}"`);if(!t.options){if(!r.subcommand)throw new Error(`options are not allowed here: "${u}"`);throw new Error(`subcommand "${r.subcommand}" does not accept options: "${u}"`)}const a=findOption(u,t.options);if(!a)throw new Error(`unknown option: "${u}"`);const[l,m]=a;if(r.options&&l in r.options)throw new Error(`duplicated option: "${u}"`);if(!m._preparedType)throw new Error(`internal error: missing prepared type for option "${l}"`);const{schema:c,optional:d,defaultValue:f,coerceTo:g}=m._preparedType,w=o[e+1];let h=s?p:w;if("boolean"===g){s||(h="true");u.startsWith("--no-")&&["true","false"].includes(h.toLowerCase())&&(h="true"===h?"false":"true")}if(void 0===h)throw new Error(`expected a value for "${u}" but got nothing`);if(!s&&isOptionArgument(h))throw new Error(`expected a value for "${u}" but got an argument "${w}"`);r.options??(r.options={}),r.options[l]={schema:c,optional:d,defaultValue:f,flag:u,stringValue:h,source:"terminal"},s||"boolean"===g||e++;continue}const l=i();if(l?.arguments){r.arguments??(r.arguments={});const o=Object.keys(r.arguments).length,e=Object.entries(l.arguments);if(o<e.length){const[t,i]=e[o];if(!i._preparedType)throw new Error(`internal error: missing prepared type for argument "${o}"`);const{schema:a,optional:s,defaultValue:u}=i._preparedType;r.arguments[t]={schema:a,optional:s,defaultValue:u,stringValue:n,source:"terminal"};continue}}if(!l?.allowPositionals){if(!r.subcommand)throw new Error(`unexpected argument "${n}": positionals arguments are not allowed here`);throw new Error(`unexpected argument "${n}": positionals arguments are not allowed for subcommand "${r.subcommand}"`)}r.positionals??(r.positionals=[]),r.positionals.push(n)}const a=i();if(!a)throw new Error(`unknown subcommand: "${r.subcommand}"`);if(a.options){r.options??(r.options={});for(const[o,e]of Object.entries(a.options)){if(o in r.options)continue;if(!e._preparedType)throw new Error(`internal error: missing prepared type for option "${o}"`);const{schema:n,optional:t,defaultValue:i}=e._preparedType;if(!t)throw new Error(`missing required option: ${transformOptionToArgument(o)}`);void 0!==i&&(r.options[o]={schema:n,optional:t,defaultValue:i,source:"default"})}}if(a.arguments){r.arguments??(r.arguments={});const o=Object.keys(r.arguments).length,e=Object.entries(a.arguments),n=e.length;if(o<n)for(let t=o;t<n;t++){const[o,n]=e[t];if(!n._preparedType)throw new Error(`internal error: missing prepared type for the argument "${o}"`);const{schema:i,optional:a,defaultValue:s}=n._preparedType;if(!a)throw new Error(`The argument "${o}" is required`);void 0!==s&&(r.arguments[o]={schema:i,optional:a,defaultValue:s,source:"default"})}}return a.allowPositionals&&(r.positionals??(r.positionals=[])),r}export{buildCliContext};
2
- //# sourceMappingURL=cli-context-builder.js.map
1
+ // src/parse/context/cli-context-builder.ts
2
+ import { CliError } from "../../cli-error/cli-error.js";
3
+ import { ErrorCause } from "../../cli-error/error-cause.js";
4
+ import { InternalErrorCode } from "../../cli-error/error-code/internal-error-code.js";
5
+ import { ParseErrorCode } from "../../cli-error/error-code/parse-error-code.js";
6
+ import {
7
+ decoupleFlags,
8
+ findOption,
9
+ findSubcommandDefinition,
10
+ isFlagArgument,
11
+ isOptionArgument,
12
+ splitAndGetKeys
13
+ } from "../parser-utilities.js";
14
+ function buildCliContext(argv, cliDefinition) {
15
+ const cliName = cliDefinition.cliName;
16
+ const subcommandArray = cliDefinition.subcommands ?? [];
17
+ const allSubcommands = new Set(subcommandArray.flatMap((c) => [c.name, ...c.aliases || []]));
18
+ argv = decoupleFlags(argv);
19
+ const context = {
20
+ subcommand: void 0
21
+ };
22
+ const getCommandDefinition = () => findSubcommandDefinition(context.subcommand, cliDefinition);
23
+ for (let index = 0; index < argv.length; index++) {
24
+ const argvItem = argv[index];
25
+ if (index === 0) {
26
+ context.subcommand = allSubcommands.has(argvItem) ? argvItem : void 0;
27
+ if (context.subcommand) continue;
28
+ }
29
+ const argumentAndValue = argvItem.split("=").filter(Boolean);
30
+ const argumentWithEquals = argvItem.includes("=");
31
+ const [argument, keys] = splitAndGetKeys(argumentAndValue[0]);
32
+ const optionWithKeys = keys.length > 0;
33
+ const argumentValue = argumentAndValue[1];
34
+ const isNegated = argument.startsWith("--no-");
35
+ if (isOptionArgument(argument)) {
36
+ const commandDefinition3 = getCommandDefinition();
37
+ const commandKind = context.subcommand === void 0 ? "command" : "subcommand";
38
+ const commandName = context.subcommand ?? cliName;
39
+ if (isFlagArgument(argument) && argumentWithEquals) {
40
+ throw new CliError({
41
+ cause: ErrorCause.Parse,
42
+ code: ParseErrorCode.FlagAssignedValue,
43
+ context: { commandKind, commandName, flag: argument, value: argumentValue }
44
+ });
45
+ }
46
+ if (!commandDefinition3) {
47
+ if (context.subcommand === void 0) {
48
+ throw new CliError({
49
+ cause: ErrorCause.Internal,
50
+ code: InternalErrorCode.CannotFindCliDefinition,
51
+ context: { cliName }
52
+ });
53
+ }
54
+ throw new CliError({
55
+ cause: ErrorCause.Parse,
56
+ code: ParseErrorCode.UnknownSubcommand,
57
+ context: { commandName }
58
+ });
59
+ }
60
+ if (!commandDefinition3.options) {
61
+ throw new CliError({
62
+ cause: ErrorCause.Parse,
63
+ code: ParseErrorCode.CommandWithoutOptions,
64
+ context: { commandKind, commandName, optionName: argument }
65
+ });
66
+ }
67
+ const nameOptionTuple = findOption(argument, commandDefinition3.options);
68
+ if (!nameOptionTuple) {
69
+ throw new CliError({
70
+ cause: ErrorCause.Parse,
71
+ code: ParseErrorCode.UnknownOption,
72
+ context: { commandKind, commandName, optionName: argument }
73
+ });
74
+ }
75
+ const [optionName, optionDefinition] = nameOptionTuple;
76
+ if (!optionWithKeys && context.options && optionName in context.options) {
77
+ throw new CliError({
78
+ cause: ErrorCause.Parse,
79
+ code: ParseErrorCode.DuplicateOptionProvided,
80
+ context: { commandKind, commandName, optionName }
81
+ });
82
+ }
83
+ if (!optionDefinition._preparedType) {
84
+ throw new CliError({
85
+ cause: ErrorCause.Internal,
86
+ code: InternalErrorCode.MissingPreparedTypes,
87
+ context: { commandKind, commandName, kind: "option", name: optionName }
88
+ });
89
+ }
90
+ const { schema, optional, defaultValue, coerceTo } = optionDefinition._preparedType;
91
+ const nextArgument = argv[index + 1];
92
+ let optionValue = argumentWithEquals ? argumentValue : nextArgument;
93
+ const isBoolean = coerceTo === "boolean";
94
+ if (isNegated && !isBoolean) {
95
+ throw new CliError({
96
+ cause: ErrorCause.Parse,
97
+ code: ParseErrorCode.InvalidNegationForNonBooleanOption,
98
+ context: { commandKind, commandName, optionName }
99
+ });
100
+ }
101
+ if (isBoolean) {
102
+ if (!argumentWithEquals) {
103
+ optionValue = "true";
104
+ }
105
+ if (isNegated && ["true", "false"].includes(optionValue.toLowerCase())) {
106
+ optionValue = optionValue === "true" ? "false" : "true";
107
+ }
108
+ }
109
+ if (optionValue === void 0 || !argumentWithEquals && isOptionArgument(optionValue)) {
110
+ throw new CliError({
111
+ cause: ErrorCause.Parse,
112
+ code: ParseErrorCode.OptionMissingValue,
113
+ context: { commandKind, commandName, optionName }
114
+ });
115
+ }
116
+ context.options ??= {};
117
+ if (optionWithKeys) {
118
+ const previousObject = JSON.parse(context.options[optionName]?.stringValue || "{}");
119
+ let current = previousObject;
120
+ for (let index2 = 0; index2 < keys.length; index2++) {
121
+ const key = keys[index2];
122
+ if (current[key] === void 0) {
123
+ current[key] = {};
124
+ }
125
+ if (index2 === keys.length - 1) {
126
+ current[key] = optionValue;
127
+ continue;
128
+ }
129
+ current = current[key];
130
+ }
131
+ optionValue = JSON.stringify(previousObject);
132
+ }
133
+ context.options[optionName] = {
134
+ schema,
135
+ optional,
136
+ defaultValue,
137
+ flag: argument,
138
+ stringValue: optionValue,
139
+ source: "terminal"
140
+ };
141
+ if (!argumentWithEquals && !isBoolean) {
142
+ index++;
143
+ }
144
+ continue;
145
+ }
146
+ const commandDefinition2 = getCommandDefinition();
147
+ if (commandDefinition2?.arguments) {
148
+ context.arguments ??= {};
149
+ const currentArgumentCount = Object.keys(context.arguments).length;
150
+ const argumentDefinitionEntries = Object.entries(commandDefinition2.arguments);
151
+ if (currentArgumentCount < argumentDefinitionEntries.length) {
152
+ const [name, argumentDefinition] = argumentDefinitionEntries[currentArgumentCount];
153
+ if (!argumentDefinition._preparedType) {
154
+ throw new CliError({
155
+ cause: ErrorCause.Internal,
156
+ code: InternalErrorCode.MissingPreparedTypes,
157
+ context: {
158
+ commandKind: context.subcommand ? "subcommand" : "command",
159
+ commandName: context.subcommand ?? cliName,
160
+ kind: "argument",
161
+ name
162
+ }
163
+ });
164
+ }
165
+ const { schema, optional, defaultValue } = argumentDefinition._preparedType;
166
+ context.arguments[name] = { schema, optional, defaultValue, stringValue: argvItem, source: "terminal" };
167
+ continue;
168
+ }
169
+ }
170
+ if (commandDefinition2?.allowPositionals) {
171
+ context.positionals ??= [];
172
+ context.positionals.push(argvItem);
173
+ continue;
174
+ }
175
+ throw new CliError({
176
+ cause: ErrorCause.Parse,
177
+ code: ParseErrorCode.PositionalArgumentNotAllowed,
178
+ context: {
179
+ commandKind: context.subcommand ? "subcommand" : "command",
180
+ commandName: context.subcommand ?? cliName,
181
+ argumentName: argvItem
182
+ }
183
+ });
184
+ }
185
+ const commandDefinition = getCommandDefinition();
186
+ if (!commandDefinition) {
187
+ if (context.subcommand === void 0) {
188
+ throw new CliError({
189
+ cause: ErrorCause.Internal,
190
+ code: InternalErrorCode.CannotFindCliDefinition,
191
+ context: { cliName }
192
+ });
193
+ }
194
+ throw new CliError({
195
+ cause: ErrorCause.Parse,
196
+ code: ParseErrorCode.UnknownSubcommand,
197
+ context: { commandName: context.subcommand ?? cliName }
198
+ });
199
+ }
200
+ if (commandDefinition.options) {
201
+ context.options ??= {};
202
+ for (const [name, optionDefinition] of Object.entries(commandDefinition.options)) {
203
+ if (name in context.options) continue;
204
+ if (!optionDefinition._preparedType) {
205
+ throw new CliError({
206
+ cause: ErrorCause.Internal,
207
+ code: InternalErrorCode.MissingPreparedTypes,
208
+ context: {
209
+ commandKind: context.subcommand ? "subcommand" : "command",
210
+ commandName: context.subcommand ?? cliName,
211
+ kind: "option",
212
+ name
213
+ }
214
+ });
215
+ }
216
+ const { schema, optional, defaultValue } = optionDefinition._preparedType;
217
+ if (optional) {
218
+ if (defaultValue === void 0) {
219
+ continue;
220
+ }
221
+ context.options[name] = { schema, optional, defaultValue, source: "default" };
222
+ continue;
223
+ }
224
+ throw new CliError({
225
+ cause: ErrorCause.Parse,
226
+ code: ParseErrorCode.MissingRequiredOption,
227
+ context: {
228
+ commandKind: context.subcommand ? "subcommand" : "command",
229
+ commandName: context.subcommand ?? cliName,
230
+ optionName: name
231
+ }
232
+ });
233
+ }
234
+ }
235
+ if (commandDefinition.arguments) {
236
+ context.arguments ??= {};
237
+ const currentArgumentCount = Object.keys(context.arguments).length;
238
+ const argumentDefinitionEntries = Object.entries(commandDefinition.arguments);
239
+ const argumentsDefinitionLength = argumentDefinitionEntries.length;
240
+ if (currentArgumentCount < argumentsDefinitionLength) {
241
+ for (let index = currentArgumentCount; index < argumentsDefinitionLength; index++) {
242
+ const [name, argumentDefinition] = argumentDefinitionEntries[index];
243
+ if (!argumentDefinition._preparedType) {
244
+ throw new CliError({
245
+ cause: ErrorCause.Internal,
246
+ code: InternalErrorCode.MissingPreparedTypes,
247
+ context: {
248
+ commandKind: context.subcommand ? "subcommand" : "command",
249
+ commandName: context.subcommand ?? cliName,
250
+ kind: "argument",
251
+ name
252
+ }
253
+ });
254
+ }
255
+ const { schema, optional, defaultValue } = argumentDefinition._preparedType;
256
+ if (optional) {
257
+ if (defaultValue === void 0) {
258
+ continue;
259
+ }
260
+ context.arguments[name] = { schema, optional, defaultValue, source: "default" };
261
+ continue;
262
+ }
263
+ throw new CliError({
264
+ cause: ErrorCause.Parse,
265
+ code: ParseErrorCode.MissingRequiredArgument,
266
+ context: {
267
+ commandKind: context.subcommand ? "subcommand" : "command",
268
+ commandName: context.subcommand ?? cliName,
269
+ argumentName: name
270
+ }
271
+ });
272
+ }
273
+ }
274
+ }
275
+ if (commandDefinition.allowPositionals) {
276
+ context.positionals ??= [];
277
+ }
278
+ return context;
279
+ }
280
+ export {
281
+ buildCliContext
282
+ };
283
+ //# sourceMappingURL=cli-context-builder.js.map
@@ -1 +1,7 @@
1
- {"version":3,"names":["decoupleFlags","findOption","findSubcommandDefinition","isFlagArgument","isOptionArgument","transformOptionToArgument","buildCliContext","argv","cliDefinition","subcommandArray","subcommands","allSubcommands","Set","flatMap","c","name","aliases","context","subcommand","getCommandDefinition","index","length","argvItem","has","argumentAndValue","split","filter","Boolean","argumentWithEquals","includes","argument","argumentValue","Error","commandDefinition","options","nameOptionTuple","optionName","optionDefinition","_preparedType","schema","optional","defaultValue","coerceTo","nextArgument","optionValue","startsWith","toLowerCase","flag","stringValue","source","arguments","currentArgumentCount","Object","keys","argumentDefinitionEntries","entries","argumentDefinition","allowPositionals","positionals","push","argumentsDefinitionLength"],"sources":["../../../../src/parse/context/cli-context-builder.ts"],"sourcesContent":["import {\n decoupleFlags,\n findOption,\n findSubcommandDefinition,\n isFlagArgument,\n isOptionArgument,\n transformOptionToArgument,\n} from \"../parser-utilities.ts\";\n\nimport type { ContextWide } from \"../../types/context-types.ts\";\nimport type { Cli } from \"../../types/definitions-types.ts\";\n\n/**\n * Parse argv and create a cli context\n *\n * @throws {Error}\n */\nexport function buildCliContext(argv: string[], cliDefinition: Cli) {\n const subcommandArray = cliDefinition.subcommands ?? [];\n const allSubcommands = new Set<string>(subcommandArray.flatMap(c => [c.name, ...(c.aliases || [])]));\n\n // decouple flags E.g. `-rf` -> `-r, -f`\n argv = decoupleFlags(argv);\n\n const context: ContextWide = {\n subcommand: undefined,\n };\n\n /** Get the current subcommand definition or cli definition if subcommand name is `undefined` object */\n const getCommandDefinition = () => findSubcommandDefinition(context.subcommand, cliDefinition);\n\n for (let index = 0; index < argv.length; index++) {\n const argvItem = argv[index];\n\n // * Subcommand check\n if (index === 0) {\n context.subcommand = allSubcommands.has(argvItem) ? argvItem : undefined;\n\n // First argument is a subcommand. Skip to the next argument\n if (context.subcommand) continue;\n }\n\n // * Option check\n\n const argumentAndValue = argvItem.split(\"=\").filter(Boolean); // E.g --option=value -> [\"--option\", \"value\"]\n const argumentWithEquals = argvItem.includes(\"=\"); // E.g --option=value\n const argument = argumentAndValue[0];\n const argumentValue: string | undefined = argumentAndValue[1];\n\n if (isOptionArgument(argument)) {\n if (isFlagArgument(argument) && argumentWithEquals) {\n throw new Error(`flag arguments cannot be assigned using \"=\": \"${argvItem}\"`);\n }\n\n const commandDefinition = getCommandDefinition();\n if (!commandDefinition) {\n throw new Error(`unknown subcommand: \"${context.subcommand}\"`);\n }\n\n if (!commandDefinition.options) {\n if (!context.subcommand) {\n throw new Error(`options are not allowed here: \"${argument}\"`);\n }\n\n throw new Error(`subcommand \"${context.subcommand}\" does not accept options: \"${argument}\"`);\n }\n\n const nameOptionTuple = findOption(argument, commandDefinition.options);\n if (!nameOptionTuple) {\n throw new Error(`unknown option: \"${argument}\"`);\n }\n\n const [optionName, optionDefinition] = nameOptionTuple;\n\n if (context.options && optionName in context.options) {\n throw new Error(`duplicated option: \"${argument}\"`);\n }\n\n if (!optionDefinition._preparedType) {\n throw new Error(`internal error: missing prepared type for option \"${optionName}\"`);\n }\n\n const { schema, optional, defaultValue, coerceTo } = optionDefinition._preparedType;\n\n const nextArgument = argv[index + 1];\n\n let optionValue: string | boolean = argumentWithEquals ? argumentValue : nextArgument;\n\n // infer value for boolean options\n if (coerceTo === \"boolean\") {\n if (!argumentWithEquals) {\n optionValue = \"true\";\n }\n\n const isNegated = argument.startsWith(\"--no-\");\n\n if (isNegated && [\"true\", \"false\"].includes(optionValue.toLowerCase())) {\n optionValue = optionValue === \"true\" ? \"false\" : \"true\";\n }\n }\n\n if (optionValue === undefined) {\n throw new Error(`expected a value for \"${argument}\" but got nothing`);\n }\n\n if (!argumentWithEquals && isOptionArgument(optionValue)) {\n throw new Error(`expected a value for \"${argument}\" but got an argument \"${nextArgument}\"`);\n }\n\n context.options ??= {};\n context.options[optionName] = {\n schema,\n optional,\n defaultValue,\n flag: argument,\n stringValue: optionValue,\n source: \"terminal\",\n };\n\n // Skip to the next argument if it is the current option's value.\n if (!argumentWithEquals && coerceTo !== \"boolean\") {\n index++;\n }\n\n continue;\n }\n\n const commandDefinition = getCommandDefinition();\n\n // * Arguments check\n if (commandDefinition?.arguments) {\n context.arguments ??= {};\n\n const currentArgumentCount = Object.keys(context.arguments).length;\n const argumentDefinitionEntries = Object.entries(commandDefinition.arguments);\n\n // The current argument is a typed argument and not a positional\n if (currentArgumentCount < argumentDefinitionEntries.length) {\n const [name, argumentDefinition] = argumentDefinitionEntries[currentArgumentCount];\n\n if (!argumentDefinition._preparedType) {\n throw new Error(`internal error: missing prepared type for argument \"${currentArgumentCount}\"`);\n }\n\n const { schema, optional, defaultValue } = argumentDefinition._preparedType;\n\n context.arguments[name] = { schema, optional, defaultValue, stringValue: argvItem, source: \"terminal\" };\n continue;\n }\n }\n\n // The current argument is a positional and not a typed argument (when `allowPositionals` is enabled)\n if (commandDefinition?.allowPositionals) {\n context.positionals ??= [];\n context.positionals.push(argvItem);\n continue;\n }\n\n if (!context.subcommand) {\n throw new Error(`unexpected argument \"${argvItem}\": positionals arguments are not allowed here`);\n }\n\n throw new Error(\n `unexpected argument \"${argvItem}\": positionals arguments are not allowed for subcommand \"${context.subcommand}\"`,\n );\n }\n\n const commandDefinition = getCommandDefinition();\n if (!commandDefinition) {\n throw new Error(`unknown subcommand: \"${context.subcommand}\"`);\n }\n\n // Options\n if (commandDefinition.options) {\n context.options ??= {};\n\n for (const [name, optionDefinition] of Object.entries(commandDefinition.options)) {\n // option already added to the context (found during argument parsing)\n if (name in context.options) continue;\n\n if (!optionDefinition._preparedType) {\n throw new Error(`internal error: missing prepared type for option \"${name}\"`);\n }\n\n const { schema, optional, defaultValue } = optionDefinition._preparedType;\n\n if (optional) {\n // optional without default value\n if (defaultValue === undefined) {\n continue;\n }\n\n // optional with default value\n context.options[name] = { schema, optional, defaultValue, source: \"default\" };\n continue;\n }\n\n // required option\n throw new Error(`missing required option: ${transformOptionToArgument(name)}`);\n }\n }\n\n // Arguments\n if (commandDefinition.arguments) {\n context.arguments ??= {};\n\n const currentArgumentCount = Object.keys(context.arguments).length;\n\n const argumentDefinitionEntries = Object.entries(commandDefinition.arguments);\n const argumentsDefinitionLength = argumentDefinitionEntries.length;\n\n // missing arguments\n if (currentArgumentCount < argumentsDefinitionLength) {\n for (let index = currentArgumentCount; index < argumentsDefinitionLength; index++) {\n const [name, argumentDefinition] = argumentDefinitionEntries[index];\n\n if (!argumentDefinition._preparedType) {\n throw new Error(`internal error: missing prepared type for the argument \"${name}\"`);\n }\n\n const { schema, optional, defaultValue } = argumentDefinition._preparedType;\n\n if (optional) {\n // optional argument without default value\n if (defaultValue === undefined) {\n continue;\n }\n\n // optional argument with default value\n context.arguments[name] = { schema, optional, defaultValue, source: \"default\" };\n continue;\n }\n\n // required argument\n throw new Error(`The argument \"${name}\" is required`);\n }\n }\n }\n\n // make sure `positionals` is defined when `allowPositionals` is enabled\n if (commandDefinition.allowPositionals) {\n context.positionals ??= [];\n }\n\n return context;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/parse/context/cli-context-builder.ts"],
4
+ "sourcesContent": ["import { CliError } from \"../../cli-error/cli-error.ts\";\nimport { ErrorCause } from \"../../cli-error/error-cause.ts\";\nimport { InternalErrorCode } from \"../../cli-error/error-code/internal-error-code.ts\";\nimport { ParseErrorCode } from \"../../cli-error/error-code/parse-error-code.ts\";\nimport {\n decoupleFlags,\n findOption,\n findSubcommandDefinition,\n isFlagArgument,\n isOptionArgument,\n splitAndGetKeys,\n} from \"../parser-utilities.ts\";\n\nimport type { ContextWide } from \"../../types/context-types.ts\";\nimport type { Cli } from \"../../types/definitions-types.ts\";\n\n/**\n * Parse argv and create a cli context\n *\n * @throws {CliError}\n */\nexport function buildCliContext(argv: string[], cliDefinition: Cli) {\n const cliName = cliDefinition.cliName;\n const subcommandArray = cliDefinition.subcommands ?? [];\n const allSubcommands = new Set<string>(subcommandArray.flatMap(c => [c.name, ...(c.aliases || [])]));\n\n // decouple flags E.g. `-rf` -> `-r, -f`\n argv = decoupleFlags(argv);\n\n const context: ContextWide = {\n subcommand: undefined,\n };\n\n /** Get the current subcommand definition or cli definition if subcommand name is `undefined` object */\n const getCommandDefinition = () => findSubcommandDefinition(context.subcommand, cliDefinition);\n\n for (let index = 0; index < argv.length; index++) {\n const argvItem = argv[index];\n\n // * Subcommand check\n if (index === 0) {\n context.subcommand = allSubcommands.has(argvItem) ? argvItem : undefined;\n\n // First argument is a subcommand. Skip to the next argument\n if (context.subcommand) continue;\n }\n\n // * Option check\n\n const argumentAndValue = argvItem.split(\"=\").filter(Boolean); // E.g --option=value -> [\"--option\", \"value\"]\n const argumentWithEquals = argvItem.includes(\"=\"); // E.g --option=value\n const [argument, keys] = splitAndGetKeys(argumentAndValue[0]); // E.g --option.foo.bar -> [\"--option\", [\"foo\", \"bar\"]]\n const optionWithKeys = keys.length > 0; // E.g --option.foo.bar\n const argumentValue: string | undefined = argumentAndValue[1];\n const isNegated = argument.startsWith(\"--no-\");\n\n if (isOptionArgument(argument)) {\n const commandDefinition = getCommandDefinition();\n const commandKind = context.subcommand === undefined ? \"command\" : \"subcommand\";\n const commandName = context.subcommand ?? cliName;\n\n if (isFlagArgument(argument) && argumentWithEquals) {\n throw new CliError({\n cause: ErrorCause.Parse,\n code: ParseErrorCode.FlagAssignedValue,\n context: { commandKind, commandName, flag: argument, value: argumentValue },\n });\n }\n\n if (!commandDefinition) {\n if (context.subcommand === undefined) {\n throw new CliError({\n cause: ErrorCause.Internal,\n code: InternalErrorCode.CannotFindCliDefinition,\n context: { cliName },\n });\n }\n\n throw new CliError({\n cause: ErrorCause.Parse,\n code: ParseErrorCode.UnknownSubcommand,\n context: { commandName },\n });\n }\n\n if (!commandDefinition.options) {\n throw new CliError({\n cause: ErrorCause.Parse,\n code: ParseErrorCode.CommandWithoutOptions,\n context: { commandKind, commandName, optionName: argument },\n });\n }\n\n const nameOptionTuple = findOption(argument, commandDefinition.options);\n if (!nameOptionTuple) {\n throw new CliError({\n cause: ErrorCause.Parse,\n code: ParseErrorCode.UnknownOption,\n context: { commandKind, commandName, optionName: argument },\n });\n }\n\n const [optionName, optionDefinition] = nameOptionTuple;\n\n if (!optionWithKeys && context.options && optionName in context.options) {\n throw new CliError({\n cause: ErrorCause.Parse,\n code: ParseErrorCode.DuplicateOptionProvided,\n context: { commandKind, commandName, optionName },\n });\n }\n\n if (!optionDefinition._preparedType) {\n throw new CliError({\n cause: ErrorCause.Internal,\n code: InternalErrorCode.MissingPreparedTypes,\n context: { commandKind, commandName, kind: \"option\", name: optionName },\n });\n }\n\n const { schema, optional, defaultValue, coerceTo } = optionDefinition._preparedType;\n\n const nextArgument = argv[index + 1];\n\n let optionValue: string | boolean | undefined = argumentWithEquals ? argumentValue : nextArgument;\n\n const isBoolean = coerceTo === \"boolean\";\n\n if (isNegated && !isBoolean) {\n throw new CliError({\n cause: ErrorCause.Parse,\n code: ParseErrorCode.InvalidNegationForNonBooleanOption,\n context: { commandKind, commandName, optionName },\n });\n }\n\n // infer value for boolean options\n if (isBoolean) {\n if (!argumentWithEquals) {\n optionValue = \"true\";\n }\n\n if (isNegated && [\"true\", \"false\"].includes(optionValue.toLowerCase())) {\n optionValue = optionValue === \"true\" ? \"false\" : \"true\";\n }\n }\n\n if (optionValue === undefined || (!argumentWithEquals && isOptionArgument(optionValue))) {\n throw new CliError({\n cause: ErrorCause.Parse,\n code: ParseErrorCode.OptionMissingValue,\n context: { commandKind, commandName, optionName },\n });\n }\n\n context.options ??= {};\n\n // Handle options with keys for type `object`\n // E.g. `--option.key.nested=value`\n if (optionWithKeys) {\n const previousObject = JSON.parse(context.options[optionName]?.stringValue || \"{}\") as Record<string, any>;\n\n let current = previousObject;\n for (let index = 0; index < keys.length; index++) {\n const key = keys[index];\n\n if (current[key] === undefined) {\n current[key] = {};\n }\n\n if (index === keys.length - 1) {\n current[key] = optionValue;\n continue;\n }\n\n current = current[key] as Record<string, any>;\n }\n\n optionValue = JSON.stringify(previousObject);\n }\n\n context.options[optionName] = {\n schema,\n optional,\n defaultValue,\n flag: argument,\n stringValue: optionValue,\n source: \"terminal\",\n };\n\n // Skip to the next argument if it is the current option's value.\n if (!argumentWithEquals && !isBoolean) {\n index++;\n }\n\n continue;\n }\n\n const commandDefinition = getCommandDefinition();\n\n // * Arguments check\n if (commandDefinition?.arguments) {\n context.arguments ??= {};\n\n const currentArgumentCount = Object.keys(context.arguments).length;\n const argumentDefinitionEntries = Object.entries(commandDefinition.arguments);\n\n // The current argument is a typed argument and not a positional\n if (currentArgumentCount < argumentDefinitionEntries.length) {\n const [name, argumentDefinition] = argumentDefinitionEntries[currentArgumentCount];\n\n if (!argumentDefinition._preparedType) {\n throw new CliError({\n cause: ErrorCause.Internal,\n code: InternalErrorCode.MissingPreparedTypes,\n context: {\n commandKind: context.subcommand ? \"subcommand\" : \"command\",\n commandName: context.subcommand ?? cliName,\n kind: \"argument\",\n name,\n },\n });\n }\n\n const { schema, optional, defaultValue } = argumentDefinition._preparedType;\n\n context.arguments[name] = { schema, optional, defaultValue, stringValue: argvItem, source: \"terminal\" };\n continue;\n }\n }\n\n // The current argument is a positional and not a typed argument (when `allowPositionals` is enabled)\n if (commandDefinition?.allowPositionals) {\n context.positionals ??= [];\n context.positionals.push(argvItem);\n continue;\n }\n\n throw new CliError({\n cause: ErrorCause.Parse,\n code: ParseErrorCode.PositionalArgumentNotAllowed,\n context: {\n commandKind: context.subcommand ? \"subcommand\" : \"command\",\n commandName: context.subcommand ?? cliName,\n argumentName: argvItem,\n },\n });\n }\n\n const commandDefinition = getCommandDefinition();\n if (!commandDefinition) {\n if (context.subcommand === undefined) {\n throw new CliError({\n cause: ErrorCause.Internal,\n code: InternalErrorCode.CannotFindCliDefinition,\n context: { cliName },\n });\n }\n\n throw new CliError({\n cause: ErrorCause.Parse,\n code: ParseErrorCode.UnknownSubcommand,\n context: { commandName: context.subcommand ?? cliName },\n });\n }\n\n // Options\n if (commandDefinition.options) {\n context.options ??= {};\n\n for (const [name, optionDefinition] of Object.entries(commandDefinition.options)) {\n // option already added to the context (found during argument parsing)\n if (name in context.options) continue;\n\n if (!optionDefinition._preparedType) {\n throw new CliError({\n cause: ErrorCause.Internal,\n code: InternalErrorCode.MissingPreparedTypes,\n context: {\n commandKind: context.subcommand ? \"subcommand\" : \"command\",\n commandName: context.subcommand ?? cliName,\n kind: \"option\",\n name,\n },\n });\n }\n\n const { schema, optional, defaultValue } = optionDefinition._preparedType;\n\n if (optional) {\n // optional without default value\n if (defaultValue === undefined) {\n continue;\n }\n\n // optional with default value\n context.options[name] = { schema, optional, defaultValue, source: \"default\" };\n continue;\n }\n\n throw new CliError({\n cause: ErrorCause.Parse,\n code: ParseErrorCode.MissingRequiredOption,\n context: {\n commandKind: context.subcommand ? \"subcommand\" : \"command\",\n commandName: context.subcommand ?? cliName,\n optionName: name,\n },\n });\n }\n }\n\n // Arguments\n if (commandDefinition.arguments) {\n context.arguments ??= {};\n\n const currentArgumentCount = Object.keys(context.arguments).length;\n\n const argumentDefinitionEntries = Object.entries(commandDefinition.arguments);\n const argumentsDefinitionLength = argumentDefinitionEntries.length;\n\n // missing arguments\n if (currentArgumentCount < argumentsDefinitionLength) {\n for (let index = currentArgumentCount; index < argumentsDefinitionLength; index++) {\n const [name, argumentDefinition] = argumentDefinitionEntries[index];\n\n if (!argumentDefinition._preparedType) {\n throw new CliError({\n cause: ErrorCause.Internal,\n code: InternalErrorCode.MissingPreparedTypes,\n context: {\n commandKind: context.subcommand ? \"subcommand\" : \"command\",\n commandName: context.subcommand ?? cliName,\n kind: \"argument\",\n name,\n },\n });\n }\n\n const { schema, optional, defaultValue } = argumentDefinition._preparedType;\n\n if (optional) {\n // optional argument without default value\n if (defaultValue === undefined) {\n continue;\n }\n\n // optional argument with default value\n context.arguments[name] = { schema, optional, defaultValue, source: \"default\" };\n continue;\n }\n\n // required argument\n throw new CliError({\n cause: ErrorCause.Parse,\n code: ParseErrorCode.MissingRequiredArgument,\n context: {\n commandKind: context.subcommand ? \"subcommand\" : \"command\",\n commandName: context.subcommand ?? cliName,\n argumentName: name,\n },\n });\n }\n }\n }\n\n // make sure `positionals` is defined when `allowPositionals` is enabled\n if (commandDefinition.allowPositionals) {\n context.positionals ??= [];\n }\n\n return context;\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["commandDefinition", "index"]
7
+ }