@redocly/client-generator 0.3.8 → 0.4.0

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 (617) hide show
  1. package/README.md +32 -54
  2. package/eject-assets/AGENTS.md +137 -0
  3. package/eject-assets/generators/cli/docs.ts +224 -0
  4. package/eject-assets/generators/cli/engine-source.ts +21 -0
  5. package/eject-assets/generators/cli/index.ts +90 -0
  6. package/eject-assets/generators/cli/render.ts +348 -0
  7. package/eject-assets/generators/go/client.ts +57 -0
  8. package/eject-assets/generators/go/descriptor.ts +41 -0
  9. package/eject-assets/generators/go/index.ts +336 -0
  10. package/eject-assets/generators/go/models.ts +179 -0
  11. package/eject-assets/generators/go/naming.ts +49 -0
  12. package/eject-assets/generators/go/operations.ts +296 -0
  13. package/eject-assets/generators/go/pagination.ts +194 -0
  14. package/eject-assets/generators/go/types.ts +60 -0
  15. package/eject-assets/generators/mock/faker.ts +214 -0
  16. package/eject-assets/generators/mock/index.ts +35 -0
  17. package/eject-assets/generators/mock/render.ts +282 -0
  18. package/eject-assets/generators/mock/sample.ts +316 -0
  19. package/eject-assets/generators/mock/values.ts +63 -0
  20. package/eject-assets/generators/php/client.ts +63 -0
  21. package/eject-assets/generators/php/descriptor.ts +58 -0
  22. package/eject-assets/generators/php/index.ts +237 -0
  23. package/eject-assets/generators/php/models.ts +275 -0
  24. package/eject-assets/generators/php/naming.ts +51 -0
  25. package/eject-assets/generators/php/operations.ts +232 -0
  26. package/eject-assets/generators/php/pagination.ts +133 -0
  27. package/eject-assets/generators/php/types.ts +148 -0
  28. package/eject-assets/generators/python/client.ts +123 -0
  29. package/eject-assets/generators/python/descriptor.ts +52 -0
  30. package/eject-assets/generators/python/index.ts +251 -0
  31. package/eject-assets/generators/python/models.ts +242 -0
  32. package/eject-assets/generators/python/naming.ts +46 -0
  33. package/eject-assets/generators/python/operations.ts +147 -0
  34. package/eject-assets/generators/python/pagination.ts +128 -0
  35. package/eject-assets/generators/python/types.ts +54 -0
  36. package/eject-assets/generators/swr/index.ts +37 -0
  37. package/eject-assets/generators/swr/render.ts +78 -0
  38. package/eject-assets/generators/tanstack-query/index.ts +48 -0
  39. package/eject-assets/generators/tanstack-query/render.ts +346 -0
  40. package/eject-assets/generators/transformers/index.ts +46 -0
  41. package/eject-assets/generators/transformers/render.ts +506 -0
  42. package/eject-assets/generators/typescript/banner.ts +35 -0
  43. package/eject-assets/generators/typescript/client.ts +254 -0
  44. package/eject-assets/generators/typescript/descriptor.ts +137 -0
  45. package/eject-assets/generators/typescript/index.ts +101 -0
  46. package/eject-assets/generators/typescript/inline-runtime.ts +135 -0
  47. package/eject-assets/generators/typescript/operation-signature.ts +62 -0
  48. package/eject-assets/generators/typescript/operation-types.ts +17 -0
  49. package/eject-assets/generators/typescript/operations.ts +524 -0
  50. package/eject-assets/generators/typescript/response-headers.ts +74 -0
  51. package/eject-assets/generators/typescript/type-guards.ts +159 -0
  52. package/eject-assets/generators/typescript/types.ts +172 -0
  53. package/eject-assets/generators/zod/index.ts +32 -0
  54. package/eject-assets/generators/zod/schemas.ts +456 -0
  55. package/eject-assets/skills/cli-generator/SKILL.md +121 -0
  56. package/eject-assets/skills/client-generators/SKILL.md +142 -0
  57. package/eject-assets/skills/go-generator/SKILL.md +96 -0
  58. package/eject-assets/skills/mock-generator/SKILL.md +50 -0
  59. package/eject-assets/skills/php-generator/SKILL.md +112 -0
  60. package/eject-assets/skills/python-generator/SKILL.md +110 -0
  61. package/eject-assets/skills/swr-generator/SKILL.md +50 -0
  62. package/eject-assets/skills/tanstack-query-generator/SKILL.md +55 -0
  63. package/eject-assets/skills/transformers-generator/SKILL.md +47 -0
  64. package/eject-assets/skills/typescript-generator/SKILL.md +95 -0
  65. package/eject-assets/skills/zod-generator/SKILL.md +54 -0
  66. package/lib/authoring/index.d.ts +11 -0
  67. package/lib/authoring/index.d.ts.map +1 -0
  68. package/lib/authoring/index.js +42 -0
  69. package/lib/authoring/index.js.map +1 -0
  70. package/lib/authoring/naming.d.ts +34 -0
  71. package/lib/authoring/naming.d.ts.map +1 -0
  72. package/lib/authoring/naming.js +104 -0
  73. package/lib/authoring/naming.js.map +1 -0
  74. package/lib/authoring/operation.d.ts +47 -0
  75. package/lib/authoring/operation.d.ts.map +1 -0
  76. package/lib/authoring/operation.js +86 -0
  77. package/lib/authoring/operation.js.map +1 -0
  78. package/lib/authoring/options.d.ts +9 -0
  79. package/lib/authoring/options.d.ts.map +1 -0
  80. package/lib/authoring/options.js +5 -0
  81. package/lib/authoring/options.js.map +1 -0
  82. package/lib/authoring/pagination.d.ts +19 -0
  83. package/lib/authoring/pagination.d.ts.map +1 -0
  84. package/lib/authoring/pagination.js +45 -0
  85. package/lib/authoring/pagination.js.map +1 -0
  86. package/lib/authoring/printer.d.ts +16 -0
  87. package/lib/authoring/printer.d.ts.map +1 -0
  88. package/lib/authoring/printer.js +36 -0
  89. package/lib/authoring/printer.js.map +1 -0
  90. package/lib/authoring/reference-page.d.ts +31 -0
  91. package/lib/authoring/reference-page.d.ts.map +1 -0
  92. package/lib/authoring/reference-page.js +160 -0
  93. package/lib/authoring/reference-page.js.map +1 -0
  94. package/lib/authoring/schema.d.ts +51 -0
  95. package/lib/authoring/schema.d.ts.map +1 -0
  96. package/lib/authoring/schema.js +190 -0
  97. package/lib/authoring/schema.js.map +1 -0
  98. package/lib/cli-contract.d.ts +126 -0
  99. package/lib/cli-contract.d.ts.map +1 -0
  100. package/lib/cli-contract.js +25 -0
  101. package/lib/cli-contract.js.map +1 -0
  102. package/lib/{emitters/wrapper-support.d.ts → contracts/typescript.d.ts} +13 -24
  103. package/lib/contracts/typescript.d.ts.map +1 -0
  104. package/lib/contracts/typescript.js +87 -0
  105. package/lib/contracts/typescript.js.map +1 -0
  106. package/lib/generate.d.ts +10 -10
  107. package/lib/generate.d.ts.map +1 -1
  108. package/lib/generate.js +25 -106
  109. package/lib/generate.js.map +1 -1
  110. package/lib/generators/cli/docs.d.ts +19 -0
  111. package/lib/generators/cli/docs.d.ts.map +1 -0
  112. package/lib/generators/cli/docs.js +187 -0
  113. package/lib/generators/cli/docs.js.map +1 -0
  114. package/lib/generators/cli/engine-source.d.ts +5 -0
  115. package/lib/generators/cli/engine-source.d.ts.map +1 -0
  116. package/lib/generators/cli/engine-source.js +12 -0
  117. package/lib/generators/cli/engine-source.js.map +1 -0
  118. package/lib/generators/cli/index.d.ts +18 -0
  119. package/lib/generators/cli/index.d.ts.map +1 -0
  120. package/lib/generators/cli/index.js +67 -0
  121. package/lib/generators/cli/index.js.map +1 -0
  122. package/lib/generators/cli/render.d.ts +39 -0
  123. package/lib/generators/cli/render.d.ts.map +1 -0
  124. package/lib/generators/cli/render.js +281 -0
  125. package/lib/generators/cli/render.js.map +1 -0
  126. package/lib/generators/cli/runtime/cli.d.ts +42 -0
  127. package/lib/generators/cli/runtime/cli.d.ts.map +1 -0
  128. package/lib/generators/cli/runtime/cli.js +582 -0
  129. package/lib/generators/cli/runtime/cli.js.map +1 -0
  130. package/lib/generators/compatibility.d.ts +10 -0
  131. package/lib/generators/compatibility.d.ts.map +1 -0
  132. package/lib/generators/compatibility.js +45 -0
  133. package/lib/generators/compatibility.js.map +1 -0
  134. package/lib/generators/go/client.d.ts +5 -0
  135. package/lib/generators/go/client.d.ts.map +1 -0
  136. package/lib/generators/go/client.js +34 -0
  137. package/lib/generators/go/client.js.map +1 -0
  138. package/lib/generators/go/descriptor.d.ts +6 -0
  139. package/lib/generators/go/descriptor.d.ts.map +1 -0
  140. package/lib/generators/go/descriptor.js +26 -0
  141. package/lib/generators/go/descriptor.js.map +1 -0
  142. package/lib/generators/go/index.d.ts +14 -0
  143. package/lib/generators/go/index.d.ts.map +1 -0
  144. package/lib/generators/go/index.js +240 -0
  145. package/lib/generators/go/index.js.map +1 -0
  146. package/lib/generators/go/models.d.ts +4 -0
  147. package/lib/generators/go/models.d.ts.map +1 -0
  148. package/lib/generators/go/models.js +125 -0
  149. package/lib/generators/go/models.js.map +1 -0
  150. package/lib/generators/go/naming.d.ts +15 -0
  151. package/lib/generators/go/naming.d.ts.map +1 -0
  152. package/lib/generators/go/naming.js +36 -0
  153. package/lib/generators/go/naming.js.map +1 -0
  154. package/lib/generators/go/operations.d.ts +16 -0
  155. package/lib/generators/go/operations.d.ts.map +1 -0
  156. package/lib/generators/go/operations.js +200 -0
  157. package/lib/generators/go/operations.js.map +1 -0
  158. package/lib/generators/go/pagination.d.ts +5 -0
  159. package/lib/generators/go/pagination.d.ts.map +1 -0
  160. package/lib/generators/go/pagination.js +93 -0
  161. package/lib/generators/go/pagination.js.map +1 -0
  162. package/lib/generators/go/types.d.ts +4 -0
  163. package/lib/generators/go/types.d.ts.map +1 -0
  164. package/lib/generators/go/types.js +48 -0
  165. package/lib/generators/go/types.js.map +1 -0
  166. package/lib/generators/index.d.ts +2 -3
  167. package/lib/generators/index.d.ts.map +1 -1
  168. package/lib/generators/index.js +31 -53
  169. package/lib/generators/index.js.map +1 -1
  170. package/lib/generators/meta.d.ts +13 -0
  171. package/lib/generators/meta.d.ts.map +1 -0
  172. package/lib/generators/meta.js +157 -0
  173. package/lib/generators/meta.js.map +1 -0
  174. package/lib/{emitters → generators/mock}/faker.d.ts +4 -5
  175. package/lib/generators/mock/faker.d.ts.map +1 -0
  176. package/lib/generators/mock/faker.js +180 -0
  177. package/lib/generators/mock/faker.js.map +1 -0
  178. package/lib/generators/{mock.d.ts → mock/index.d.ts} +2 -2
  179. package/lib/generators/mock/index.d.ts.map +1 -0
  180. package/lib/generators/{mock.js → mock/index.js} +8 -8
  181. package/lib/generators/mock/index.js.map +1 -0
  182. package/lib/{emitters/mock.d.ts → generators/mock/render.d.ts} +2 -3
  183. package/lib/generators/mock/render.d.ts.map +1 -0
  184. package/lib/generators/mock/render.js +228 -0
  185. package/lib/generators/mock/render.js.map +1 -0
  186. package/lib/{emitters → generators/mock}/sample.d.ts +1 -2
  187. package/lib/generators/mock/sample.d.ts.map +1 -0
  188. package/lib/generators/mock/sample.js.map +1 -0
  189. package/lib/generators/mock/values.d.ts +33 -0
  190. package/lib/generators/mock/values.d.ts.map +1 -0
  191. package/lib/generators/mock/values.js +46 -0
  192. package/lib/generators/mock/values.js.map +1 -0
  193. package/lib/generators/options.d.ts +7 -0
  194. package/lib/generators/options.d.ts.map +1 -0
  195. package/lib/generators/options.js +74 -0
  196. package/lib/generators/options.js.map +1 -0
  197. package/lib/generators/php/client.d.ts +5 -0
  198. package/lib/generators/php/client.d.ts.map +1 -0
  199. package/lib/generators/php/client.js +38 -0
  200. package/lib/generators/php/client.js.map +1 -0
  201. package/lib/generators/php/descriptor.d.ts +7 -0
  202. package/lib/generators/php/descriptor.d.ts.map +1 -0
  203. package/lib/generators/php/descriptor.js +42 -0
  204. package/lib/generators/php/descriptor.js.map +1 -0
  205. package/lib/generators/php/index.d.ts +14 -0
  206. package/lib/generators/php/index.d.ts.map +1 -0
  207. package/lib/generators/php/index.js +166 -0
  208. package/lib/generators/php/index.js.map +1 -0
  209. package/lib/generators/php/models.d.ts +8 -0
  210. package/lib/generators/php/models.d.ts.map +1 -0
  211. package/lib/generators/php/models.js +200 -0
  212. package/lib/generators/php/models.js.map +1 -0
  213. package/lib/generators/php/naming.d.ts +16 -0
  214. package/lib/generators/php/naming.d.ts.map +1 -0
  215. package/lib/generators/php/naming.js +31 -0
  216. package/lib/generators/php/naming.js.map +1 -0
  217. package/lib/generators/php/operations.d.ts +21 -0
  218. package/lib/generators/php/operations.d.ts.map +1 -0
  219. package/lib/generators/php/operations.js +156 -0
  220. package/lib/generators/php/operations.js.map +1 -0
  221. package/lib/generators/php/pagination.d.ts +5 -0
  222. package/lib/generators/php/pagination.d.ts.map +1 -0
  223. package/lib/generators/php/pagination.js +68 -0
  224. package/lib/generators/php/pagination.js.map +1 -0
  225. package/lib/generators/php/types.d.ts +27 -0
  226. package/lib/generators/php/types.d.ts.map +1 -0
  227. package/lib/generators/php/types.js +128 -0
  228. package/lib/generators/php/types.js.map +1 -0
  229. package/lib/generators/python/client.d.ts +6 -0
  230. package/lib/generators/python/client.d.ts.map +1 -0
  231. package/lib/generators/python/client.js +80 -0
  232. package/lib/generators/python/client.js.map +1 -0
  233. package/lib/generators/python/descriptor.d.ts +9 -0
  234. package/lib/generators/python/descriptor.d.ts.map +1 -0
  235. package/lib/generators/python/descriptor.js +38 -0
  236. package/lib/generators/python/descriptor.js.map +1 -0
  237. package/lib/generators/python/index.d.ts +15 -0
  238. package/lib/generators/python/index.d.ts.map +1 -0
  239. package/lib/generators/python/index.js +197 -0
  240. package/lib/generators/python/index.js.map +1 -0
  241. package/lib/generators/python/models.d.ts +31 -0
  242. package/lib/generators/python/models.d.ts.map +1 -0
  243. package/lib/generators/python/models.js +203 -0
  244. package/lib/generators/python/models.js.map +1 -0
  245. package/lib/generators/python/naming.d.ts +22 -0
  246. package/lib/generators/python/naming.d.ts.map +1 -0
  247. package/lib/generators/python/naming.js +28 -0
  248. package/lib/generators/python/naming.js.map +1 -0
  249. package/lib/generators/python/operations.d.ts +4 -0
  250. package/lib/generators/python/operations.d.ts.map +1 -0
  251. package/lib/generators/python/operations.js +108 -0
  252. package/lib/generators/python/operations.js.map +1 -0
  253. package/lib/generators/python/pagination.d.ts +5 -0
  254. package/lib/generators/python/pagination.d.ts.map +1 -0
  255. package/lib/generators/python/pagination.js +95 -0
  256. package/lib/generators/python/pagination.js.map +1 -0
  257. package/lib/generators/python/types.d.ts +4 -0
  258. package/lib/generators/python/types.d.ts.map +1 -0
  259. package/lib/generators/python/types.js +45 -0
  260. package/lib/generators/python/types.js.map +1 -0
  261. package/lib/generators/resolve.d.ts.map +1 -1
  262. package/lib/generators/resolve.js +92 -13
  263. package/lib/generators/resolve.js.map +1 -1
  264. package/lib/generators/{swr.d.ts → swr/index.d.ts} +3 -3
  265. package/lib/generators/swr/index.d.ts.map +1 -0
  266. package/lib/generators/{swr.js → swr/index.js} +7 -10
  267. package/lib/generators/swr/index.js.map +1 -0
  268. package/lib/{emitters/swr.d.ts → generators/swr/render.d.ts} +2 -4
  269. package/lib/generators/swr/render.d.ts.map +1 -0
  270. package/lib/generators/swr/render.js +57 -0
  271. package/lib/generators/swr/render.js.map +1 -0
  272. package/lib/generators/{tanstack-query.d.ts → tanstack-query/index.d.ts} +3 -3
  273. package/lib/generators/tanstack-query/index.d.ts.map +1 -0
  274. package/lib/generators/{tanstack-query.js → tanstack-query/index.js} +11 -10
  275. package/lib/generators/tanstack-query/index.js.map +1 -0
  276. package/lib/{emitters/tanstack-query.d.ts → generators/tanstack-query/render.d.ts} +6 -5
  277. package/lib/generators/tanstack-query/render.d.ts.map +1 -0
  278. package/lib/{emitters/tanstack-query.js → generators/tanstack-query/render.js} +33 -21
  279. package/lib/generators/tanstack-query/render.js.map +1 -0
  280. package/lib/generators/{transformers.d.ts → transformers/index.d.ts} +2 -2
  281. package/lib/generators/transformers/index.d.ts.map +1 -0
  282. package/lib/generators/{transformers.js → transformers/index.js} +11 -8
  283. package/lib/generators/transformers/index.js.map +1 -0
  284. package/lib/{emitters/transformers.d.ts → generators/transformers/render.d.ts} +2 -2
  285. package/lib/generators/transformers/render.d.ts.map +1 -0
  286. package/lib/{emitters/transformers.js → generators/transformers/render.js} +125 -165
  287. package/lib/generators/transformers/render.js.map +1 -0
  288. package/lib/generators/types.d.ts +190 -12
  289. package/lib/generators/types.d.ts.map +1 -1
  290. package/lib/generators/typescript/banner.d.ts +12 -0
  291. package/lib/generators/typescript/banner.d.ts.map +1 -0
  292. package/lib/{emitters/emit-options.js → generators/typescript/banner.js} +2 -3
  293. package/lib/generators/typescript/banner.js.map +1 -0
  294. package/lib/generators/typescript/client.d.ts +25 -0
  295. package/lib/generators/typescript/client.d.ts.map +1 -0
  296. package/lib/generators/typescript/client.js +207 -0
  297. package/lib/generators/typescript/client.js.map +1 -0
  298. package/lib/generators/typescript/descriptor.d.ts +11 -0
  299. package/lib/generators/typescript/descriptor.d.ts.map +1 -0
  300. package/lib/generators/typescript/descriptor.js +97 -0
  301. package/lib/generators/typescript/descriptor.js.map +1 -0
  302. package/lib/generators/typescript/index.d.ts +20 -0
  303. package/lib/generators/typescript/index.d.ts.map +1 -0
  304. package/lib/generators/typescript/index.js +80 -0
  305. package/lib/generators/typescript/index.js.map +1 -0
  306. package/lib/generators/typescript/inline-runtime.d.ts +21 -0
  307. package/lib/generators/typescript/inline-runtime.d.ts.map +1 -0
  308. package/lib/generators/typescript/inline-runtime.js +114 -0
  309. package/lib/generators/typescript/inline-runtime.js.map +1 -0
  310. package/lib/generators/typescript/operation-signature.d.ts +23 -0
  311. package/lib/generators/typescript/operation-signature.d.ts.map +1 -0
  312. package/lib/generators/typescript/operation-signature.js +41 -0
  313. package/lib/generators/typescript/operation-signature.js.map +1 -0
  314. package/lib/generators/typescript/operation-types.d.ts +9 -0
  315. package/lib/generators/typescript/operation-types.d.ts.map +1 -0
  316. package/lib/generators/typescript/operation-types.js +11 -0
  317. package/lib/generators/typescript/operation-types.js.map +1 -0
  318. package/lib/generators/typescript/operations.d.ts +60 -0
  319. package/lib/generators/typescript/operations.d.ts.map +1 -0
  320. package/lib/generators/typescript/operations.js +386 -0
  321. package/lib/generators/typescript/operations.js.map +1 -0
  322. package/lib/generators/typescript/response-headers.d.ts +12 -0
  323. package/lib/generators/typescript/response-headers.d.ts.map +1 -0
  324. package/lib/generators/typescript/response-headers.js +40 -0
  325. package/lib/generators/typescript/response-headers.js.map +1 -0
  326. package/lib/generators/typescript/runtime/auth.d.ts.map +1 -0
  327. package/lib/generators/typescript/runtime/auth.js.map +1 -0
  328. package/lib/{runtime → generators/typescript/runtime}/create-client.d.ts +7 -2
  329. package/lib/generators/typescript/runtime/create-client.d.ts.map +1 -0
  330. package/lib/{runtime → generators/typescript/runtime}/create-client.js +84 -30
  331. package/lib/generators/typescript/runtime/create-client.js.map +1 -0
  332. package/lib/generators/typescript/runtime/errors.d.ts.map +1 -0
  333. package/lib/generators/typescript/runtime/errors.js.map +1 -0
  334. package/lib/generators/typescript/runtime/index.d.ts.map +1 -0
  335. package/lib/generators/typescript/runtime/index.js.map +1 -0
  336. package/lib/generators/typescript/runtime/multipart.d.ts.map +1 -0
  337. package/lib/generators/typescript/runtime/multipart.js.map +1 -0
  338. package/lib/{runtime → generators/typescript/runtime}/paginate.d.ts +2 -2
  339. package/lib/generators/typescript/runtime/paginate.d.ts.map +1 -0
  340. package/lib/{runtime → generators/typescript/runtime}/paginate.js +12 -12
  341. package/lib/generators/typescript/runtime/paginate.js.map +1 -0
  342. package/lib/generators/typescript/runtime/parse.d.ts.map +1 -0
  343. package/lib/generators/typescript/runtime/parse.js.map +1 -0
  344. package/lib/generators/typescript/runtime/retry.d.ts.map +1 -0
  345. package/lib/generators/typescript/runtime/retry.js.map +1 -0
  346. package/lib/generators/typescript/runtime/send.d.ts.map +1 -0
  347. package/lib/generators/typescript/runtime/send.js.map +1 -0
  348. package/lib/generators/typescript/runtime/setup.d.ts.map +1 -0
  349. package/lib/generators/typescript/runtime/setup.js.map +1 -0
  350. package/lib/generators/typescript/runtime/sse.d.ts.map +1 -0
  351. package/lib/generators/typescript/runtime/sse.js.map +1 -0
  352. package/lib/{runtime → generators/typescript/runtime}/types.d.ts +17 -95
  353. package/lib/generators/typescript/runtime/types.d.ts.map +1 -0
  354. package/lib/generators/typescript/runtime/types.js.map +1 -0
  355. package/lib/generators/typescript/runtime/url.d.ts.map +1 -0
  356. package/lib/generators/typescript/runtime/url.js.map +1 -0
  357. package/lib/generators/typescript/type-guards.d.ts +4 -0
  358. package/lib/generators/typescript/type-guards.d.ts.map +1 -0
  359. package/lib/{emitters → generators/typescript}/type-guards.js +18 -52
  360. package/lib/generators/typescript/type-guards.js.map +1 -0
  361. package/lib/generators/typescript/types.d.ts +8 -0
  362. package/lib/generators/typescript/types.d.ts.map +1 -0
  363. package/lib/generators/typescript/types.js +132 -0
  364. package/lib/generators/typescript/types.js.map +1 -0
  365. package/lib/generators/{zod.d.ts → zod/index.d.ts} +2 -2
  366. package/lib/generators/zod/index.d.ts.map +1 -0
  367. package/lib/generators/{zod.js → zod/index.js} +5 -7
  368. package/lib/generators/zod/index.js.map +1 -0
  369. package/lib/{emitters/zod.d.ts → generators/zod/schemas.d.ts} +4 -5
  370. package/lib/generators/zod/schemas.d.ts.map +1 -0
  371. package/lib/{emitters/zod.js → generators/zod/schemas.js} +118 -154
  372. package/lib/generators/zod/schemas.js.map +1 -0
  373. package/lib/index.d.ts +8 -3
  374. package/lib/index.d.ts.map +1 -1
  375. package/lib/index.js +18 -11
  376. package/lib/index.js.map +1 -1
  377. package/lib/intermediate-representation/build.d.ts +8 -1
  378. package/lib/intermediate-representation/build.d.ts.map +1 -1
  379. package/lib/intermediate-representation/build.js +59 -4
  380. package/lib/intermediate-representation/build.js.map +1 -1
  381. package/lib/intermediate-representation/model.d.ts +26 -1
  382. package/lib/intermediate-representation/model.d.ts.map +1 -1
  383. package/lib/intermediate-representation/model.js.map +1 -1
  384. package/lib/intermediate-representation/sanitize-identifiers.d.ts +1 -10
  385. package/lib/intermediate-representation/sanitize-identifiers.d.ts.map +1 -1
  386. package/lib/intermediate-representation/sanitize-identifiers.js +37 -38
  387. package/lib/intermediate-representation/sanitize-identifiers.js.map +1 -1
  388. package/lib/{emitters/pagination.d.ts → pagination.d.ts} +39 -15
  389. package/lib/pagination.d.ts.map +1 -0
  390. package/lib/{emitters/pagination.js → pagination.js} +13 -52
  391. package/lib/pagination.js.map +1 -0
  392. package/lib/pipeline.d.ts +17 -0
  393. package/lib/pipeline.d.ts.map +1 -0
  394. package/lib/pipeline.js +244 -0
  395. package/lib/pipeline.js.map +1 -0
  396. package/lib/plugin.d.ts +4 -4
  397. package/lib/plugin.d.ts.map +1 -1
  398. package/lib/plugin.js +12 -9
  399. package/lib/plugin.js.map +1 -1
  400. package/lib/printers/go.d.ts +33 -0
  401. package/lib/printers/go.d.ts.map +1 -0
  402. package/lib/printers/go.js +209 -0
  403. package/lib/printers/go.js.map +1 -0
  404. package/lib/printers/index.d.ts +5 -0
  405. package/lib/printers/index.d.ts.map +1 -0
  406. package/lib/printers/index.js +9 -0
  407. package/lib/printers/index.js.map +1 -0
  408. package/lib/printers/php.d.ts +21 -0
  409. package/lib/printers/php.d.ts.map +1 -0
  410. package/lib/printers/php.js +68 -0
  411. package/lib/printers/php.js.map +1 -0
  412. package/lib/printers/python.d.ts +31 -0
  413. package/lib/printers/python.d.ts.map +1 -0
  414. package/lib/printers/python.js +101 -0
  415. package/lib/printers/python.js.map +1 -0
  416. package/lib/printers/typescript.d.ts +82 -0
  417. package/lib/printers/typescript.d.ts.map +1 -0
  418. package/lib/printers/typescript.js +268 -0
  419. package/lib/printers/typescript.js.map +1 -0
  420. package/lib/reserved-names.d.ts +8 -0
  421. package/lib/reserved-names.d.ts.map +1 -0
  422. package/lib/{emitters/reserved-names.js → reserved-names.js} +16 -27
  423. package/lib/reserved-names.js.map +1 -0
  424. package/lib/runtime-contract.d.ts +62 -2
  425. package/lib/runtime-contract.d.ts.map +1 -1
  426. package/lib/runtime-contract.js +3 -3
  427. package/lib/runtime-contract.js.map +1 -1
  428. package/lib/runtime-sources/go.d.ts +2 -0
  429. package/lib/runtime-sources/go.d.ts.map +1 -0
  430. package/lib/runtime-sources/go.js +3 -0
  431. package/lib/runtime-sources/go.js.map +1 -0
  432. package/lib/runtime-sources/php.d.ts +2 -0
  433. package/lib/runtime-sources/php.d.ts.map +1 -0
  434. package/lib/runtime-sources/php.js +3 -0
  435. package/lib/runtime-sources/php.js.map +1 -0
  436. package/lib/runtime-sources/python.d.ts +12 -0
  437. package/lib/runtime-sources/python.d.ts.map +1 -0
  438. package/lib/runtime-sources/python.js +12 -0
  439. package/lib/runtime-sources/python.js.map +1 -0
  440. package/lib/runtime-sources/typescript.d.ts +36 -0
  441. package/lib/runtime-sources/typescript.d.ts.map +1 -0
  442. package/lib/runtime-sources/typescript.js +152 -0
  443. package/lib/runtime-sources/typescript.js.map +1 -0
  444. package/lib/runtime-sources.d.ts +5 -0
  445. package/lib/runtime-sources.d.ts.map +1 -0
  446. package/lib/runtime-sources.js +10 -0
  447. package/lib/runtime-sources.js.map +1 -0
  448. package/lib/setup-bake.d.ts.map +1 -0
  449. package/lib/{emitters/setup-bake.js → setup-bake.js} +11 -2
  450. package/lib/setup-bake.js.map +1 -0
  451. package/lib/types.d.ts +38 -8
  452. package/lib/types.d.ts.map +1 -1
  453. package/package.json +40 -4
  454. package/lib/emitters/auth.d.ts +0 -14
  455. package/lib/emitters/auth.d.ts.map +0 -1
  456. package/lib/emitters/auth.js +0 -30
  457. package/lib/emitters/auth.js.map +0 -1
  458. package/lib/emitters/client-assembly.d.ts +0 -15
  459. package/lib/emitters/client-assembly.d.ts.map +0 -1
  460. package/lib/emitters/client-assembly.js +0 -358
  461. package/lib/emitters/client-assembly.js.map +0 -1
  462. package/lib/emitters/descriptor.d.ts +0 -22
  463. package/lib/emitters/descriptor.d.ts.map +0 -1
  464. package/lib/emitters/descriptor.js +0 -199
  465. package/lib/emitters/descriptor.js.map +0 -1
  466. package/lib/emitters/emit-options.d.ts +0 -67
  467. package/lib/emitters/emit-options.d.ts.map +0 -1
  468. package/lib/emitters/emit-options.js.map +0 -1
  469. package/lib/emitters/faker.d.ts.map +0 -1
  470. package/lib/emitters/faker.js +0 -221
  471. package/lib/emitters/faker.js.map +0 -1
  472. package/lib/emitters/identifier.d.ts +0 -34
  473. package/lib/emitters/identifier.d.ts.map +0 -1
  474. package/lib/emitters/identifier.js +0 -104
  475. package/lib/emitters/identifier.js.map +0 -1
  476. package/lib/emitters/inline-runtime.d.ts +0 -11
  477. package/lib/emitters/inline-runtime.d.ts.map +0 -1
  478. package/lib/emitters/inline-runtime.js +0 -99
  479. package/lib/emitters/inline-runtime.js.map +0 -1
  480. package/lib/emitters/jsdoc.d.ts +0 -9
  481. package/lib/emitters/jsdoc.d.ts.map +0 -1
  482. package/lib/emitters/jsdoc.js +0 -83
  483. package/lib/emitters/jsdoc.js.map +0 -1
  484. package/lib/emitters/mock.d.ts.map +0 -1
  485. package/lib/emitters/mock.js +0 -265
  486. package/lib/emitters/mock.js.map +0 -1
  487. package/lib/emitters/operation-aliases.d.ts +0 -27
  488. package/lib/emitters/operation-aliases.d.ts.map +0 -1
  489. package/lib/emitters/operation-aliases.js +0 -150
  490. package/lib/emitters/operation-aliases.js.map +0 -1
  491. package/lib/emitters/operation-signature.d.ts +0 -24
  492. package/lib/emitters/operation-signature.d.ts.map +0 -1
  493. package/lib/emitters/operation-signature.js +0 -42
  494. package/lib/emitters/operation-signature.js.map +0 -1
  495. package/lib/emitters/operation-types.d.ts +0 -32
  496. package/lib/emitters/operation-types.d.ts.map +0 -1
  497. package/lib/emitters/operation-types.js +0 -117
  498. package/lib/emitters/operation-types.js.map +0 -1
  499. package/lib/emitters/operations.d.ts +0 -41
  500. package/lib/emitters/operations.d.ts.map +0 -1
  501. package/lib/emitters/operations.js +0 -35
  502. package/lib/emitters/operations.js.map +0 -1
  503. package/lib/emitters/pagination.d.ts.map +0 -1
  504. package/lib/emitters/pagination.js.map +0 -1
  505. package/lib/emitters/reserved-names.d.ts +0 -5
  506. package/lib/emitters/reserved-names.d.ts.map +0 -1
  507. package/lib/emitters/reserved-names.js.map +0 -1
  508. package/lib/emitters/response-headers.d.ts +0 -14
  509. package/lib/emitters/response-headers.d.ts.map +0 -1
  510. package/lib/emitters/response-headers.js +0 -91
  511. package/lib/emitters/response-headers.js.map +0 -1
  512. package/lib/emitters/runtime-sources.d.ts +0 -16
  513. package/lib/emitters/runtime-sources.d.ts.map +0 -1
  514. package/lib/emitters/runtime-sources.js +0 -16
  515. package/lib/emitters/runtime-sources.js.map +0 -1
  516. package/lib/emitters/sample.d.ts.map +0 -1
  517. package/lib/emitters/sample.js.map +0 -1
  518. package/lib/emitters/setup-bake.d.ts.map +0 -1
  519. package/lib/emitters/setup-bake.js.map +0 -1
  520. package/lib/emitters/sse.d.ts +0 -10
  521. package/lib/emitters/sse.d.ts.map +0 -1
  522. package/lib/emitters/sse.js +0 -46
  523. package/lib/emitters/sse.js.map +0 -1
  524. package/lib/emitters/support.d.ts +0 -18
  525. package/lib/emitters/support.d.ts.map +0 -1
  526. package/lib/emitters/support.js +0 -37
  527. package/lib/emitters/support.js.map +0 -1
  528. package/lib/emitters/swr.d.ts.map +0 -1
  529. package/lib/emitters/swr.js +0 -88
  530. package/lib/emitters/swr.js.map +0 -1
  531. package/lib/emitters/tanstack-query.d.ts.map +0 -1
  532. package/lib/emitters/tanstack-query.js.map +0 -1
  533. package/lib/emitters/transformers.d.ts.map +0 -1
  534. package/lib/emitters/transformers.js.map +0 -1
  535. package/lib/emitters/ts.d.ts +0 -42
  536. package/lib/emitters/ts.d.ts.map +0 -1
  537. package/lib/emitters/ts.js +0 -116
  538. package/lib/emitters/ts.js.map +0 -1
  539. package/lib/emitters/type-guards.d.ts +0 -21
  540. package/lib/emitters/type-guards.d.ts.map +0 -1
  541. package/lib/emitters/type-guards.js.map +0 -1
  542. package/lib/emitters/types.d.ts +0 -15
  543. package/lib/emitters/types.d.ts.map +0 -1
  544. package/lib/emitters/types.js +0 -125
  545. package/lib/emitters/types.js.map +0 -1
  546. package/lib/emitters/wrapper-support.d.ts.map +0 -1
  547. package/lib/emitters/wrapper-support.js +0 -127
  548. package/lib/emitters/wrapper-support.js.map +0 -1
  549. package/lib/emitters/zod.d.ts.map +0 -1
  550. package/lib/emitters/zod.js.map +0 -1
  551. package/lib/generators/anchor.d.ts +0 -9
  552. package/lib/generators/anchor.d.ts.map +0 -1
  553. package/lib/generators/anchor.js +0 -10
  554. package/lib/generators/anchor.js.map +0 -1
  555. package/lib/generators/mock.d.ts.map +0 -1
  556. package/lib/generators/mock.js.map +0 -1
  557. package/lib/generators/sdk.d.ts +0 -12
  558. package/lib/generators/sdk.d.ts.map +0 -1
  559. package/lib/generators/sdk.js +0 -26
  560. package/lib/generators/sdk.js.map +0 -1
  561. package/lib/generators/swr.d.ts.map +0 -1
  562. package/lib/generators/swr.js.map +0 -1
  563. package/lib/generators/tanstack-query.d.ts.map +0 -1
  564. package/lib/generators/tanstack-query.js.map +0 -1
  565. package/lib/generators/transformers.d.ts.map +0 -1
  566. package/lib/generators/transformers.js.map +0 -1
  567. package/lib/generators/zod.d.ts.map +0 -1
  568. package/lib/generators/zod.js.map +0 -1
  569. package/lib/runtime/auth.d.ts.map +0 -1
  570. package/lib/runtime/auth.js.map +0 -1
  571. package/lib/runtime/create-client.d.ts.map +0 -1
  572. package/lib/runtime/create-client.js.map +0 -1
  573. package/lib/runtime/errors.d.ts.map +0 -1
  574. package/lib/runtime/errors.js.map +0 -1
  575. package/lib/runtime/index.d.ts.map +0 -1
  576. package/lib/runtime/index.js.map +0 -1
  577. package/lib/runtime/multipart.d.ts.map +0 -1
  578. package/lib/runtime/multipart.js.map +0 -1
  579. package/lib/runtime/paginate.d.ts.map +0 -1
  580. package/lib/runtime/paginate.js.map +0 -1
  581. package/lib/runtime/parse.d.ts.map +0 -1
  582. package/lib/runtime/parse.js.map +0 -1
  583. package/lib/runtime/retry.d.ts.map +0 -1
  584. package/lib/runtime/retry.js.map +0 -1
  585. package/lib/runtime/send.d.ts.map +0 -1
  586. package/lib/runtime/send.js.map +0 -1
  587. package/lib/runtime/setup.d.ts.map +0 -1
  588. package/lib/runtime/setup.js.map +0 -1
  589. package/lib/runtime/sse.d.ts.map +0 -1
  590. package/lib/runtime/sse.js.map +0 -1
  591. package/lib/runtime/types.d.ts.map +0 -1
  592. package/lib/runtime/types.js.map +0 -1
  593. package/lib/runtime/url.d.ts.map +0 -1
  594. package/lib/runtime/url.js.map +0 -1
  595. /package/lib/{emitters → generators/mock}/sample.js +0 -0
  596. /package/lib/{runtime → generators/typescript/runtime}/auth.d.ts +0 -0
  597. /package/lib/{runtime → generators/typescript/runtime}/auth.js +0 -0
  598. /package/lib/{runtime → generators/typescript/runtime}/errors.d.ts +0 -0
  599. /package/lib/{runtime → generators/typescript/runtime}/errors.js +0 -0
  600. /package/lib/{runtime → generators/typescript/runtime}/index.d.ts +0 -0
  601. /package/lib/{runtime → generators/typescript/runtime}/index.js +0 -0
  602. /package/lib/{runtime → generators/typescript/runtime}/multipart.d.ts +0 -0
  603. /package/lib/{runtime → generators/typescript/runtime}/multipart.js +0 -0
  604. /package/lib/{runtime → generators/typescript/runtime}/parse.d.ts +0 -0
  605. /package/lib/{runtime → generators/typescript/runtime}/parse.js +0 -0
  606. /package/lib/{runtime → generators/typescript/runtime}/retry.d.ts +0 -0
  607. /package/lib/{runtime → generators/typescript/runtime}/retry.js +0 -0
  608. /package/lib/{runtime → generators/typescript/runtime}/send.d.ts +0 -0
  609. /package/lib/{runtime → generators/typescript/runtime}/send.js +0 -0
  610. /package/lib/{runtime → generators/typescript/runtime}/setup.d.ts +0 -0
  611. /package/lib/{runtime → generators/typescript/runtime}/setup.js +0 -0
  612. /package/lib/{runtime → generators/typescript/runtime}/sse.d.ts +0 -0
  613. /package/lib/{runtime → generators/typescript/runtime}/sse.js +0 -0
  614. /package/lib/{runtime → generators/typescript/runtime}/types.js +0 -0
  615. /package/lib/{runtime → generators/typescript/runtime}/url.d.ts +0 -0
  616. /package/lib/{runtime → generators/typescript/runtime}/url.js +0 -0
  617. /package/lib/{emitters/setup-bake.d.ts → setup-bake.d.ts} +0 -0
@@ -0,0 +1,187 @@
1
+ // The cli-docs emitter: renders the Markdown reference for the generated CLI from the
2
+ // SAME command table `runCli` dispatches on, and the same `groupSlug`/`constantCase` the
3
+ // runtime addresses groups and reads credentials with. A second model would drift from
4
+ // the tool the first time either side changed.
5
+ import { constantCase, groupSlug, Printer, } from '@redocly/client-generator';
6
+ /** Table-cell-safe text: one line, and pipes/backslashes escaped so they don't alter columns/escaping. */
7
+ function cell(text) {
8
+ return (text ?? '').replace(/\s+/g, ' ').trim().replace(/\\/g, '\\\\').replace(/\|/g, '\\|');
9
+ }
10
+ /** How a command is typed at the prompt: `<group-slug> <name>`, or just `<name>`. */
11
+ function address(command) {
12
+ return [command.group === undefined ? undefined : groupSlug(command.group), command.name]
13
+ .filter(Boolean)
14
+ .join(' ');
15
+ }
16
+ function usageLine(name, command) {
17
+ const words = [
18
+ name,
19
+ address(command),
20
+ ...command.positionals.map((positional) => `<${positional.name}>`),
21
+ ...command.flags.filter((flag) => flag.required).map((flag) => `--${flag.name} <${flag.type}>`),
22
+ ...(command.body ? [command.body.required ? "--json '<json>'" : "[--json '<json>']"] : []),
23
+ ];
24
+ return words.filter((word) => word !== '').join(' ');
25
+ }
26
+ function writeFlagTable(printer, flags) {
27
+ printer.line('| Flag | Type | Required | Description |');
28
+ printer.line('| ---- | ---- | -------- | ----------- |');
29
+ for (const flag of flags) {
30
+ const description = [
31
+ cell(flag.description),
32
+ flag.enum === undefined
33
+ ? ''
34
+ : `One of ${flag.enum.map((value) => `\`${value}\``).join(', ')}.`,
35
+ flag.type === 'array' ? 'Repeat the flag for multiple values.' : '',
36
+ ]
37
+ .filter((part) => part !== '')
38
+ .join(' ');
39
+ printer.line(`| \`--${flag.name}\` | ${flag.type} | ${flag.required ? 'yes' : 'no'} | ${description} |`);
40
+ }
41
+ printer.blank();
42
+ }
43
+ function writeCommand(printer, command, options) {
44
+ printer.line(`### \`${address(command)}\``);
45
+ printer.blank();
46
+ if (command.summary !== undefined) {
47
+ printer.line(cell(command.summary));
48
+ printer.blank();
49
+ }
50
+ printer.line(`\`${command.method} ${command.path}\``);
51
+ printer.blank();
52
+ printer.line('```sh');
53
+ printer.line(usageLine(options.name, command));
54
+ printer.line('```');
55
+ printer.blank();
56
+ if (command.positionals.length > 0) {
57
+ printer.line('| Argument | Description |');
58
+ printer.line('| -------- | ----------- |');
59
+ for (const positional of command.positionals) {
60
+ printer.line(`| \`<${positional.name}>\` | ${cell(positional.description)} |`);
61
+ }
62
+ printer.blank();
63
+ }
64
+ if (command.flags.length > 0)
65
+ writeFlagTable(printer, command.flags);
66
+ const notes = [
67
+ command.body === undefined
68
+ ? ''
69
+ : `Takes a JSON body${command.body.required ? ' (required)' : ''}: \`--json '<json>'\`, \`--json @file.json\`, or \`--json @-\` for stdin.`,
70
+ command.unsupportedBody === undefined
71
+ ? ''
72
+ : `Takes a \`${command.unsupportedBody}\` body, which the CLI cannot build — call this operation through the generated client instead.`,
73
+ command.paginated === true
74
+ ? 'Paginated: `--page-all` follows every page, printing one JSON page per line.'
75
+ : '',
76
+ command.sse === true ? 'Streams server-sent events as one JSON object per line.' : '',
77
+ command.blob === true ? 'Returns binary content, so `--output <path>` is required.' : '',
78
+ ].filter((note) => note !== '');
79
+ for (const note of notes)
80
+ printer.line(note);
81
+ if (notes.length > 0)
82
+ printer.blank();
83
+ }
84
+ /** The whole page: heading, global flags, credentials, exit codes, then every command. */
85
+ export function renderCliDocs(commands, options) {
86
+ const printer = new Printer();
87
+ if (options.frontmatter) {
88
+ printer.line('---');
89
+ printer.line(`title: ${options.title}`);
90
+ printer.line('---');
91
+ printer.blank();
92
+ }
93
+ printer.line(`# ${options.title}`);
94
+ printer.blank();
95
+ printer.line(`Generated command-line reference for \`${options.name}\`, produced from the API description by \`redocly generate-client\`.`);
96
+ printer.line('Re-run generation to update it — this file is not hand-edited.');
97
+ printer.blank();
98
+ printer.line('## Usage');
99
+ printer.blank();
100
+ printer.line('```sh');
101
+ printer.line(`${options.name} <command> [flags]`);
102
+ printer.line(`${options.name} --help`);
103
+ printer.line(`${options.name} schema <command> # request/response schemas`);
104
+ printer.line('```');
105
+ printer.blank();
106
+ printer.line('Install the file under any `bin` name: the command takes that name, and the credential variables below do not change.');
107
+ printer.blank();
108
+ printer.line('## Global flags');
109
+ printer.blank();
110
+ printer.line('| Flag | Description |');
111
+ printer.line('| ---- | ----------- |');
112
+ // `--token` mirrors the CLI itself: without a bearer scheme the tool rejects the flag,
113
+ // so the reference must not list it.
114
+ const hasBearer = options.schemes.some((scheme) => scheme.kind === 'bearer');
115
+ for (const [flag, description] of [
116
+ ['--server-url <url>', 'Override the server URL included in the client.'],
117
+ ['--format <json\\|ndjson>', 'Output format.'],
118
+ ['--dry-run', 'Print the prepared request, credentials redacted, without sending it.'],
119
+ ['--page-all', 'Follow pagination, printing one JSON page per line.'],
120
+ ['--output <path>', 'Write the response body to a file. Required for binary responses.'],
121
+ ...(hasBearer ? [['--token <token>', 'Bearer token, overriding the environment.']] : []),
122
+ ['--json <json\\|@file\\|@->', 'Request body, inline or from a file or stdin.'],
123
+ ]) {
124
+ printer.line(`| \`${flag}\` | ${description} |`);
125
+ }
126
+ printer.blank();
127
+ const prefix = constantCase(options.name);
128
+ printer.line('## Credentials');
129
+ printer.blank();
130
+ if (options.schemes.length === 0) {
131
+ printer.line('The description declares no security schemes, so no credentials are read.');
132
+ }
133
+ else {
134
+ printer.line('Credentials come from the environment:');
135
+ printer.blank();
136
+ printer.line('| Scheme | Variable |');
137
+ printer.line('| ------ | -------- |');
138
+ for (const scheme of options.schemes) {
139
+ const variable = scheme.kind === 'bearer'
140
+ ? `\`${prefix}_TOKEN\` (or \`--token\`)`
141
+ : scheme.kind === 'basic'
142
+ ? `\`${prefix}_USERNAME\` and \`${prefix}_PASSWORD\``
143
+ : `\`${prefix}_API_KEY_${constantCase(scheme.key)}\``;
144
+ printer.line(`| ${scheme.kind} (\`${scheme.key}\`) | ${variable} |`);
145
+ }
146
+ }
147
+ printer.blank();
148
+ printer.line('## Exit codes');
149
+ printer.blank();
150
+ printer.line('| Code | Meaning |');
151
+ printer.line('| ---- | ------- |');
152
+ for (const [code, meaning] of [
153
+ [0, 'success'],
154
+ [1, 'API error (status other than 401 or 403)'],
155
+ [2, 'auth error (401 or 403)'],
156
+ [3, 'validation error'],
157
+ [4, 'usage error (unknown command or flag, bad `--json`)'],
158
+ ]) {
159
+ printer.line(`| ${code} | ${meaning} |`);
160
+ }
161
+ printer.blank();
162
+ printer.line('Errors print one JSON object to stderr, so stdout stays clean for piping.');
163
+ printer.blank();
164
+ // One section per tag, in the order the description declares them, then the untagged
165
+ // commands — the same order `--help` lists them in.
166
+ const groups = [...new Set(commands.map((command) => command.group))];
167
+ for (const group of groups) {
168
+ const inGroup = commands.filter((command) => command.group === group);
169
+ if (group === undefined) {
170
+ printer.line('## Commands');
171
+ printer.blank();
172
+ }
173
+ else {
174
+ printer.line(`## ${group}`);
175
+ printer.blank();
176
+ printer.line(`Addressed as \`${options.name} ${groupSlug(group)} <command>\`.`);
177
+ printer.blank();
178
+ }
179
+ for (const command of inGroup)
180
+ writeCommand(printer, command, options);
181
+ }
182
+ return (printer
183
+ .toString()
184
+ .replace(/\n{3,}/g, '\n\n')
185
+ .trimEnd() + '\n');
186
+ }
187
+ //# sourceMappingURL=docs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs.js","sourceRoot":"","sources":["../../../src/generators/cli/docs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /** The cli engine (`runCli` + types) stripped for embedding into `<stem>.cli.ts`. */
2
+ export declare function embedCliRuntime(): string;
3
+ /** The cli engine RAW, for `runtime: 'module'` (written as `runtime/cli.ts`). */
4
+ export declare function cliRuntimeSource(): string;
5
+ //# sourceMappingURL=engine-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine-source.d.ts","sourceRoot":"","sources":["../../../src/generators/cli/engine-source.ts"],"names":[],"mappings":"AAQA,qFAAqF;AACrF,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,iFAAiF;AACjF,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC"}
@@ -0,0 +1,12 @@
1
+ // The cli engine's embeddable source, snapshotted at prepare time (see
2
+ // scripts/generate-runtime-sources.mjs).
3
+ import { RUNTIME_SOURCES, RUNTIME_SOURCES_STRIPPED, } from '@redocly/client-generator/runtime-sources';
4
+ /** The cli engine (`runCli` + types) stripped for embedding into `<stem>.cli.ts`. */
5
+ export function embedCliRuntime() {
6
+ return RUNTIME_SOURCES_STRIPPED['cli.ts'];
7
+ }
8
+ /** The cli engine RAW, for `runtime: 'module'` (written as `runtime/cli.ts`). */
9
+ export function cliRuntimeSource() {
10
+ return RUNTIME_SOURCES['cli.ts'];
11
+ }
12
+ //# sourceMappingURL=engine-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine-source.js","sourceRoot":"","sources":["../../../src/generators/cli/engine-source.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,yCAAyC;AAEzC,OAAO,EACL,eAAe,EACf,wBAAwB,GACzB,MAAM,2CAA2C,CAAC;AAEnD,qFAAqF;AACrF,MAAM,UAAU,eAAe;IAC7B,OAAO,wBAAwB,CAAC,QAAQ,CAAC,CAAC;AAC5C,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,gBAAgB;IAC9B,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC;AACnC,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { type CodeSample, type Generator, type OperationModel, type SampleContext } from '@redocly/client-generator';
2
+ /**
3
+ * The cli generator: a bin-ready `<stem>.cli.ts` — a zero-dependency, typed
4
+ * command-line interface over the sibling client (typed flags, `--json`
5
+ * bodies, env auth, `--page-all`, SSE/blob output, a documented exit-code
6
+ * contract). Requires `typescript` (throw mode); wires zod validation when co-selected.
7
+ */
8
+ export declare const cliGenerator: Generator;
9
+ /**
10
+ * The CLI's own reference page, written when `client.docs` is on: the usage line, the
11
+ * global flags, the credential variables, the exit codes, and one section per command.
12
+ * It renders from `commandData` — the same table `runCli` dispatches on — so the page
13
+ * cannot describe a tool other than the one beside it.
14
+ */
15
+ export declare const cliDocs: Generator;
16
+ /** One shell invocation per operation — feeds `x-codeSamples` for docs. */
17
+ export declare function cliSample(op: OperationModel, ctx: SampleContext): CodeSample | undefined;
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generators/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,UAAU,EACf,KAAK,SAAS,EAEd,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,2BAA2B,CAAC;AAOnC;;;;;GAKG;AACH,eAAO,MAAM,YAAY,EAAE,SAmB1B,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,OAAO,EAAE,SAQrB,CAAC;AAEF,2EAA2E;AAC3E,wBAAgB,SAAS,CAAC,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,aAAa,GAAG,UAAU,GAAG,SAAS,CAkBxF"}
@@ -0,0 +1,67 @@
1
+ import { groupSlug, } from '@redocly/client-generator';
2
+ import { join } from 'node:path';
3
+ import { renderCliDocs } from "./docs.js";
4
+ import { cliRuntimeSource } from "./engine-source.js";
5
+ import { cliAuthSchemes, commandData, renderCliModule } from "./render.js";
6
+ /**
7
+ * The cli generator: a bin-ready `<stem>.cli.ts` — a zero-dependency, typed
8
+ * command-line interface over the sibling client (typed flags, `--json`
9
+ * bodies, env auth, `--page-all`, SSE/blob output, a documented exit-code
10
+ * contract). Requires `typescript` (throw mode); wires zod validation when co-selected.
11
+ */
12
+ export const cliGenerator = ({ model, output, banner, emit, selected, pagination }) => {
13
+ const content = renderCliModule(model, {
14
+ stem: output.stem,
15
+ importExt: emit.importExt ?? 'js',
16
+ zodSelected: selected?.includes('zod') ?? false,
17
+ pagination,
18
+ argsStyle: emit.argsStyle ?? 'grouped',
19
+ runtime: emit.runtime ?? 'inline',
20
+ });
21
+ const entry = { path: join(output.dir, `${output.stem}.cli.ts`), content };
22
+ if (emit.runtime !== 'module')
23
+ return [entry];
24
+ const header = banner.map((line) => `// ${line}`).join('\n');
25
+ return [
26
+ entry,
27
+ {
28
+ path: join(output.dir, 'runtime', 'cli.ts'),
29
+ content: `${header}\n\n${cliRuntimeSource().trim()}\n`,
30
+ },
31
+ ];
32
+ };
33
+ /**
34
+ * The CLI's own reference page, written when `client.docs` is on: the usage line, the
35
+ * global flags, the credential variables, the exit codes, and one section per command.
36
+ * It renders from `commandData` — the same table `runCli` dispatches on — so the page
37
+ * cannot describe a tool other than the one beside it.
38
+ */
39
+ export const cliDocs = ({ model, output, emit, pagination }) => {
40
+ const content = renderCliDocs(commandData(model, { pagination }), {
41
+ title: `${model.title} command-line reference`,
42
+ frontmatter: emit.docsFrontmatter === true,
43
+ name: output.stem,
44
+ schemes: cliAuthSchemes(model),
45
+ });
46
+ return [{ path: join(output.dir, `${output.stem}.cli.md`), content }];
47
+ };
48
+ /** One shell invocation per operation — feeds `x-codeSamples` for docs. */
49
+ export function cliSample(op, ctx) {
50
+ const command = commandData(ctx.model, { pagination: ctx.pagination }).find((candidate) => candidate.name === op.name);
51
+ if (command === undefined)
52
+ return undefined;
53
+ const words = [
54
+ 'client',
55
+ ...(command.group ? [groupSlug(command.group)] : []),
56
+ command.name,
57
+ ...command.positionals.map((positional) => `<${positional.name}>`),
58
+ ...command.flags.filter((flag) => flag.required).map((flag) => `--${flag.name} <${flag.type}>`),
59
+ ...(command.body ? ["--json '<json>'"] : []),
60
+ ];
61
+ return {
62
+ lang: 'shell',
63
+ label: 'CLI',
64
+ source: `npx tsx client.cli.ts ${words.slice(1).join(' ')}\n`,
65
+ };
66
+ }
67
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generators/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import { type ApiModel, type CliAuthScheme, type CliCommand, type ModelPagination } from '@redocly/client-generator';
2
+ /** Every operation as pure command data — the table `runCli` interprets. */
3
+ export declare function commandData(model: ApiModel, emit: {
4
+ pagination?: ModelPagination;
5
+ argsStyle?: 'grouped' | 'flat';
6
+ }): CliCommand[];
7
+ export type CliModuleOptions = {
8
+ stem: string;
9
+ importExt: string;
10
+ zodSelected: boolean;
11
+ pagination?: ModelPagination;
12
+ /** The sibling client's call shape, which the dispatcher builds its inputs for. */
13
+ argsStyle?: 'grouped' | 'flat';
14
+ /** `'module'` imports the engine from `./runtime/cli` instead of embedding it. */
15
+ runtime?: 'inline' | 'module';
16
+ };
17
+ /**
18
+ * The auth schemes as the CLI sees them: every apiKey placement is one `apiKey` kind,
19
+ * since the credential is read from the same env variable either way. Exported so the
20
+ * docs generator names the same variables the runtime reads.
21
+ */
22
+ export declare function cliAuthSchemes(model: ApiModel): CliAuthScheme[];
23
+ /** The whole `<stem>.cli.ts` file. */
24
+ export declare function renderCliModule(model: ApiModel, options: CliModuleOptions): string;
25
+ export type ComposedCliSource = {
26
+ /** The api alias from `apis:` — it becomes the namespace the shell types. */
27
+ alias: string;
28
+ /** Relative specifier of that api's generated cli module, extension included. */
29
+ modulePath: string;
30
+ };
31
+ /**
32
+ * The composed entry `client.cliOutput` produces: one binary over every api that selected
33
+ * `cli`, each behind its alias as the namespace, with `<BINNAME>_<ALIAS>` credential
34
+ * prefixes. It imports `runCli` from the first source's module — generated code, so the
35
+ * inline runtime's zero-dependency promise holds — and exports `SOURCES` so an adopter
36
+ * layers custom commands (a `login`) around it without editing a generated file.
37
+ */
38
+ export declare function renderComposedCliEntry(sources: ComposedCliSource[], stem: string): string;
39
+ //# sourceMappingURL=render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../src/generators/cli/render.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,QAAQ,EAEb,KAAK,aAAa,EAClB,KAAK,UAAU,EAIf,KAAK,eAAe,EAIrB,MAAM,2BAA2B,CAAC;AAiFnC,4EAA4E;AAC5E,wBAAgB,WAAW,CACzB,KAAK,EAAE,QAAQ,EACf,IAAI,EAAE;IAAE,UAAU,CAAC,EAAE,eAAe,CAAC;IAAC,SAAS,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;CAAE,GACrE,UAAU,EAAE,CA0Cd;AA0BD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,mFAAmF;IACnF,SAAS,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC/B,kFAAkF;IAClF,OAAO,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAC/B,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,GAAG,aAAa,EAAE,CAK/D;AA2BD,sCAAsC;AACtC,wBAAgB,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,GAAG,MAAM,CA2DlF;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,6EAA6E;IAC7E,KAAK,EAAE,MAAM,CAAC;IACd,iFAAiF;IACjF,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,iBAAiB,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAkDzF"}
@@ -0,0 +1,281 @@
1
+ // The cli emitter: derives pure `CliCommand[]` data from the IR and renders
2
+ // `<stem>.cli.ts` — a shebang entry that embeds (inline) or imports (package)
3
+ // the `runCli` engine and dispatches through the sibling generated client.
4
+ import { casing, constantCase, groupSlug, } from '@redocly/client-generator';
5
+ import { flatInputShape } from '@redocly/client-generator/contracts/typescript';
6
+ import { logger } from '@redocly/openapi-core';
7
+ import { embedCliRuntime } from "./engine-source.js";
8
+ // The generated-by banner every emitted module carries (same lines as the pipeline's
9
+ // `input.banner`, rendered in `//` syntax).
10
+ const HEADER = `// Generated by @redocly/client-generator — do not edit by hand.
11
+ // Source: OpenAPI description. Re-run \`redocly generate-client\` to update.`;
12
+ function kebab(name) {
13
+ return casing.snake(name).replace(/_/g, '-');
14
+ }
15
+ function flagFor(param) {
16
+ const schema = param.schema;
17
+ const type = schema.kind === 'array'
18
+ ? 'array'
19
+ : schema.kind === 'scalar' && (schema.scalar === 'integer' || schema.scalar === 'number')
20
+ ? 'number'
21
+ : schema.kind === 'scalar' && schema.scalar === 'boolean'
22
+ ? 'boolean'
23
+ : 'string';
24
+ return {
25
+ name: kebab(param.name),
26
+ param: param.name,
27
+ type,
28
+ required: param.required,
29
+ ...(schema.kind === 'enum' ? { enum: schema.values.map(String) } : {}),
30
+ ...(param.description !== undefined ? { description: param.description } : {}),
31
+ };
32
+ }
33
+ /** Mirrors `computeResponse`: a blob operation has binary success content and no JSON alternative. */
34
+ function isBlobOp(op) {
35
+ const responses = op.successResponses;
36
+ if (responses.some((response) => response.contentType.toLowerCase().includes('json'))) {
37
+ return false;
38
+ }
39
+ return responses.some((response) => response.contentType.startsWith('image/') ||
40
+ response.contentType === 'application/octet-stream');
41
+ }
42
+ function jsonSuccessSchema(op) {
43
+ return op.successResponses.find((response) => response.contentType.toLowerCase().includes('json'))
44
+ ?.schema;
45
+ }
46
+ /**
47
+ * Whether a flat-style call spells this operation's body as its own properties — the same
48
+ * decision the client's types make, so the dispatcher never has to guess from a value.
49
+ */
50
+ function mergedBodyFlag(op, model, argsStyle) {
51
+ if (argsStyle !== 'flat')
52
+ return {};
53
+ const shape = flatInputShape(op, model.schemas);
54
+ return 'mergeBody' in shape && shape.mergeBody ? { merged: true } : {};
55
+ }
56
+ /**
57
+ * The operations a flat-style run still addresses by layer: their merged names would
58
+ * collide, so the client's own input type keeps the namespaced shape and the dispatcher
59
+ * has to build that shape too.
60
+ */
61
+ function groupedInputFlag(op, model, argsStyle) {
62
+ if (argsStyle !== 'flat')
63
+ return {};
64
+ return 'collisions' in flatInputShape(op, model.schemas) ? { argsStyle: 'grouped' } : {};
65
+ }
66
+ /** Every operation as pure command data — the table `runCli` interprets. */
67
+ export function commandData(model, emit) {
68
+ const commands = [];
69
+ for (const service of model.services) {
70
+ for (const op of service.operations) {
71
+ const jsonBody = op.requestBody?.contentType.toLowerCase().includes('json')
72
+ ? op.requestBody
73
+ : undefined;
74
+ const responseSchema = jsonSuccessSchema(op);
75
+ commands.push({
76
+ ...(op.tags.length > 0 ? { group: op.tags[0] } : {}),
77
+ name: op.name,
78
+ ...(op.summary !== undefined ? { summary: op.summary } : {}),
79
+ method: op.method.toUpperCase(),
80
+ path: op.path,
81
+ positionals: op.pathParams.map((param) => ({
82
+ name: param.name,
83
+ type: flagFor(param).type,
84
+ ...(param.description !== undefined ? { description: param.description } : {}),
85
+ })),
86
+ flags: op.queryParams.map(flagFor),
87
+ ...(jsonBody
88
+ ? { body: { required: jsonBody.required, ...mergedBodyFlag(op, model, emit.argsStyle) } }
89
+ : {}),
90
+ ...(jsonBody === undefined && op.requestBody !== undefined
91
+ ? { unsupportedBody: op.requestBody.contentType }
92
+ : {}),
93
+ ...(emit.pagination?.has(op.name) === true ? { paginated: true } : {}),
94
+ ...groupedInputFlag(op, model, emit.argsStyle),
95
+ ...(op.sse !== undefined ? { sse: true } : {}),
96
+ ...(isBlobOp(op) ? { blob: true } : {}),
97
+ ...(jsonBody !== undefined || responseSchema !== undefined
98
+ ? {
99
+ schemas: {
100
+ ...(jsonBody ? { request: jsonBody.schema } : {}),
101
+ ...(responseSchema !== undefined ? { response: responseSchema } : {}),
102
+ },
103
+ }
104
+ : {}),
105
+ });
106
+ }
107
+ }
108
+ return commands;
109
+ }
110
+ /**
111
+ * The self-execution guard both generated entries share. Realpath on both sides: some
112
+ * runners resolve symlinks in `import.meta.url` but not in `argv[1]` (macOS temp dirs,
113
+ * installed bin symlinks); the catch covers an entry that is not a file (REPL, node -e).
114
+ */
115
+ const ENTRY_GUARD = `function isProcessEntry(): boolean {
116
+ if (process.argv[1] === undefined) return false;
117
+ try {
118
+ return realpathSync(fileURLToPath(import.meta.url)) === realpathSync(process.argv[1]);
119
+ } catch {
120
+ return false;
121
+ }
122
+ }
123
+ if (isProcessEntry()) {
124
+ process.exit(await run());
125
+ }`;
126
+ /** JSON as a TS expression: U+2028/U+2029 are line terminators in code contexts. */
127
+ function codeJson(value, indent) {
128
+ return JSON.stringify(value, null, indent)
129
+ .replace(/\u2028/g, '\\u2028')
130
+ .replace(/\u2029/g, '\\u2029');
131
+ }
132
+ /**
133
+ * The auth schemes as the CLI sees them: every apiKey placement is one `apiKey` kind,
134
+ * since the credential is read from the same env variable either way. Exported so the
135
+ * docs generator names the same variables the runtime reads.
136
+ */
137
+ export function cliAuthSchemes(model) {
138
+ return model.securitySchemes.map((scheme) => ({
139
+ key: scheme.key,
140
+ kind: scheme.kind === 'bearer' || scheme.kind === 'basic' ? scheme.kind : 'apiKey',
141
+ }));
142
+ }
143
+ /** How an operation named after a tag is reached — the two halves of `parseInvocation`. */
144
+ function shadowedAddress(command) {
145
+ return command.group === undefined
146
+ ? `${command.name} (keeps the bare word, so the "${command.name}" group has no help page)`
147
+ : `${command.name} (run it as "${groupSlug(command.group)} ${command.name}")`;
148
+ }
149
+ /**
150
+ * A leading group name is read as the group, so an operation whose name is also a tag name
151
+ * resolves unusually: a tagged one loses the bare form and runs as `<its group> <name>`,
152
+ * and an untagged one keeps the bare form and hides that group's help. Nothing becomes
153
+ * unreachable either way, but only the description's author can rename a side of the
154
+ * collision, so say it once at generation time.
155
+ */
156
+ function warnShadowedCommands(commands) {
157
+ const slugs = new Set(commands.filter((c) => c.group).map((c) => groupSlug(c.group)));
158
+ const shadowed = commands.filter((command) => slugs.has(command.name));
159
+ if (shadowed.length === 0)
160
+ return;
161
+ logger.warn(`generate-client: cli reads a leading group name as the group, so ${shadowed.length} operation(s) named after a tag resolve unusually — rename the operation or the tag: ${shadowed
162
+ .map(shadowedAddress)
163
+ .join(', ')}.\n`);
164
+ }
165
+ /** The whole `<stem>.cli.ts` file. */
166
+ export function renderCliModule(model, options) {
167
+ const commands = commandData(model, {
168
+ pagination: options.pagination,
169
+ argsStyle: options.argsStyle,
170
+ });
171
+ warnShadowedCommands(commands);
172
+ const schemes = cliAuthSchemes(model);
173
+ const clientModule = `./${options.stem}.${options.importExt}`;
174
+ const clientImports = ['client', 'configure', ...(options.zodSelected ? ['use'] : [])];
175
+ const parts = [
176
+ '#!/usr/bin/env node',
177
+ HEADER,
178
+ 'import { readFileSync, realpathSync, writeFileSync } from "node:fs";\nimport { fileURLToPath } from "node:url";',
179
+ [
180
+ `import { ${clientImports.join(', ')} } from "${clientModule}";`,
181
+ ...(options.zodSelected
182
+ ? [`import { zodValidation } from "./${options.stem}.zod.${options.importExt}";`]
183
+ : []),
184
+ ].join('\n'),
185
+ options.runtime === 'module'
186
+ ? `import { invokedName, runCli, type CliCommand, type CliWiring } from "./runtime/cli.${options.importExt}";`
187
+ : '// ─── Embedded cli engine (@redocly/client-generator) ───\n' + embedCliRuntime(),
188
+ `export const COMMANDS: CliCommand[] = ${codeJson(commands, 2)};`,
189
+ ...(options.zodSelected
190
+ ? [
191
+ // A dry run never sends the request, so its "response" is the stub the dry-run
192
+ // fetch returns — validating that reports drift that does not exist. Request
193
+ // validation still runs, which is what makes `--dry-run` a useful preflight.
194
+ `use(zodValidation(process.argv.includes("--dry-run") ? { response: false } : {}));`,
195
+ ]
196
+ : []),
197
+ `export const wiring: CliWiring = {
198
+ name: invokedName(process.argv[1], ${codeJson(options.stem)}),
199
+ envPrefix: ${codeJson(constantCase(options.stem))},
200
+ client,
201
+ ${options.argsStyle === 'flat' ? ' argsStyle: "flat",\n' : ''} configure,
202
+ schemes: ${codeJson(schemes)},
203
+ env: process.env,
204
+ stdin: () => readFileSync(0, "utf-8"),
205
+ readFile: (path: string) => readFileSync(path, "utf-8"),
206
+ writeFile: (path: string, data: Uint8Array) => writeFileSync(path, data),
207
+ stdout: (line: string) => console.log(line),
208
+ stderr: (line: string) => console.error(line),
209
+ };
210
+
211
+ /** Run this CLI programmatically; defaults to the process argv. */
212
+ export const run = (argv: string[] = process.argv.slice(2)): Promise<number> =>
213
+ runCli(COMMANDS, wiring, argv);
214
+
215
+ // Re-exported so a composed entry can run these commands without its own runtime copy.
216
+ export { runCli };
217
+
218
+ // Self-execute only as the process entry, so importing this module is side-effect-safe:
219
+ // composed binaries and login-style wrappers import COMMANDS/wiring/run instead of
220
+ // editing this generated file.
221
+ ${ENTRY_GUARD}`,
222
+ ];
223
+ return parts.join('\n\n') + '\n';
224
+ }
225
+ /**
226
+ * The composed entry `client.cliOutput` produces: one binary over every api that selected
227
+ * `cli`, each behind its alias as the namespace, with `<BINNAME>_<ALIAS>` credential
228
+ * prefixes. It imports `runCli` from the first source's module — generated code, so the
229
+ * inline runtime's zero-dependency promise holds — and exports `SOURCES` so an adopter
230
+ * layers custom commands (a `login`) around it without editing a generated file.
231
+ */
232
+ export function renderComposedCliEntry(sources, stem) {
233
+ const prefix = constantCase(stem);
234
+ // An identifier can't start with a digit, and two aliases can sanitize identically —
235
+ // the underscore and the index keep every import binding legal and unique.
236
+ const idents = new Map();
237
+ sources.forEach(({ alias }, index) => {
238
+ const sanitized = alias.replace(/[^A-Za-z0-9]/g, '_');
239
+ const legal = /^[A-Za-z_]/.test(sanitized) ? sanitized : `_${sanitized}`;
240
+ idents.set(alias, [...idents.values()].includes(legal) ? `${legal}_${index}` : legal);
241
+ });
242
+ const identFor = (alias) => idents.get(alias);
243
+ const imports = sources.map(({ alias, modulePath }, index) => {
244
+ const ident = identFor(alias);
245
+ const runtime = index === 0 ? ', runCli' : '';
246
+ return `import { COMMANDS as ${ident}Commands, wiring as ${ident}Wiring${runtime} } from ${JSON.stringify(modulePath)};`;
247
+ });
248
+ const entries = sources.map(({ alias }) => {
249
+ const ident = identFor(alias);
250
+ const namespace = kebab(alias);
251
+ const aliasPrefix = `${prefix}_${constantCase(alias)}`;
252
+ return ` {
253
+ namespace: ${JSON.stringify(namespace)},
254
+ commands: ${ident}Commands,
255
+ wiring: { ...${ident}Wiring, envPrefix: ${JSON.stringify(aliasPrefix)} },
256
+ },`;
257
+ });
258
+ return ([
259
+ '#!/usr/bin/env node',
260
+ HEADER,
261
+ [
262
+ 'import { realpathSync } from "node:fs";',
263
+ 'import { fileURLToPath } from "node:url";',
264
+ ...imports,
265
+ ].join('\n'),
266
+ `/** The composed sources — import SOURCES to layer custom commands around this binary. */
267
+ export const SOURCES = [
268
+ ${entries.join('\n')}
269
+ ];
270
+
271
+ /** Run the composed CLI programmatically; defaults to the process argv. */
272
+ export const run = (argv: string[] = process.argv.slice(2)): Promise<number> =>
273
+ runCli(SOURCES, argv);
274
+
275
+ // Re-exported so a wrapper (a custom \`login\` command) can run these sources itself.
276
+ export { runCli };
277
+
278
+ ${ENTRY_GUARD}`,
279
+ ].join('\n\n') + '\n');
280
+ }
281
+ //# sourceMappingURL=render.js.map