@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,47 @@
1
+ ---
2
+ name: transformers-generator
3
+ description: Design of the ejected Redocly `transformers` client generator. Read it, and update it, before changing generators/transformers/.
4
+ ---
5
+
6
+ # The `transformers` generator — its skill
7
+
8
+ This file is the DESIGN of your ejected `transformers` generator (`generators/transformers/`):
9
+ **to change the generator, edit this skill first, then make the code match it** — a diff
10
+ to `generators/transformers/` that has no covering sentence here is incomplete.
11
+
12
+ ## What it emits
13
+
14
+ Per-schema `to<Name>()` / `from<Name>()` converters that turn wire JSON into typed
15
+ values and back — the bridge for `dateType: Date` clients.
16
+
17
+ ## Design decisions that must hold
18
+
19
+ - **Requires `dateType: Date`** (declared as `dateTypes: ['Date']`, so a mismatched
20
+ selection fails fast): the converters assign `Date` objects to fields the sdk types as
21
+ `Date`, which only type-checks in that mode.
22
+ - **Imports the sdk's schema TYPES** (so `typescript` is required) and nothing else.
23
+ - Converters are pure and total: every named schema gets a pair, nested structures
24
+ recurse, and a missing optional stays missing.
25
+
26
+ ## The stage files
27
+
28
+ `render.ts` holds the whole converter renderer; `index.ts` is the entry. Naming comes
29
+ from the TypeScript printer (`@redocly/client-generator/printers/typescript`).
30
+
31
+ ## Ejecting it
32
+
33
+ `redocly eject-generator transformers` copies this generator's TypeScript source folder
34
+ to `generators/transformers/`, exactly as we wrote it, importing
35
+ `@redocly/client-generator` and `@redocly/client-generator/printers/typescript`. Running
36
+ a `.ts` generator uses Node's type stripping (Node 22.18, 23.6, or newer); newer built-in
37
+ versions merge in per file with `--update`. Change which fields are converted, or how,
38
+ and regenerate.
39
+
40
+ ## The modify loop
41
+
42
+ 1. Edit this skill: state the new behavior or decision.
43
+ 2. Make `generators/transformers/` match it.
44
+ 3. Run `redocly generate-client` and inspect the `git diff` of the generated output —
45
+ generated files are never hand-edited.
46
+
47
+ Newer built-in versions merge in with `redocly eject-generator transformers --update`.
@@ -0,0 +1,95 @@
1
+ ---
2
+ name: typescript-generator
3
+ description: Design of the ejected Redocly `typescript` client generator. Read it, and update it, before changing generators/typescript/.
4
+ ---
5
+
6
+ # The `typescript` generator — its skill
7
+
8
+ This file is the DESIGN of your ejected `typescript` generator (`generators/typescript/`):
9
+ **to change the generator, edit this skill first, then make the code match it** — a diff
10
+ to `generators/typescript/` that has no covering sentence here is incomplete.
11
+
12
+ ## What it emits
13
+
14
+ The typed TypeScript client itself: model types with JSDoc, type guards, the `Ops`
15
+ type map, the `OPERATIONS` descriptor table, a `client` instance, one binding per
16
+ operation, and the runtime — embedded in the file (`runtime: inline`, the default) or
17
+ written as real modules in a `runtime/` folder beside it that the client imports
18
+ relatively (`runtime: module`).
19
+
20
+ ## Design decisions that must hold
21
+
22
+ - **Descriptor-driven:** generated code is DATA (`OPERATIONS` + `Ops`) plus wiring;
23
+ request behavior lives in the runtime, never in per-operation code.
24
+ `satisfies Record<string, OperationDescriptor>` is the version-skew guard.
25
+ - **`single` vs `split`:** split derives `<stem>.schemas.ts` (types, enums, guards) and
26
+ an entry that `export *`s it; the entry type-imports only the schema names it
27
+ references (`collectEntrySchemaRefs`).
28
+ - **Zero runtime dependencies.** `Date`, `Blob`, `fetch` — nothing else.
29
+ - **Names are collision-safe:** `packageIdents` seeds every reserved wiring name before
30
+ any operation is sanitized, so renames are deterministic (`configure` → `configure_2`).
31
+ A rename becomes part of the SDK's public API, so the warning must say WHICH cause it
32
+ is and what the publisher can do: a duplicate `operationId` in the description (fix the
33
+ description — the only real fix), a name that isn't a valid identifier, or a clash with
34
+ a name the generated module already declares. A vague "collides or is invalid" message
35
+ leaves the publisher unable to act.
36
+ - **One operation, one function, one input shape.** The module-level names are bindings
37
+ of the client's own methods (`export const { getOrder } = client;`), never wrappers, so
38
+ `getOrder` and `client.getOrder` cannot disagree about their arguments. `argsStyle`
39
+ shapes the method itself: `grouped` (the default) namespaces the inputs by transport
40
+ layer — `path`, `query`, `headers`, `cookies`, `body` — and `flat` merges them into one
41
+ object, which the runtime converts back using the descriptor's own parameter list. An
42
+ operation whose merged names would collide keeps the grouped shape.
43
+ - **Throw mode returns the body**; `{ envelope: true }` opts into
44
+ `{ data, headers, response }` with typed declared headers. Result mode returns
45
+ `{ data, error, response }` and ignores `envelope`.
46
+
47
+ ## The stage files
48
+
49
+ One file per stage of the emit, same skeleton as the other generators:
50
+ `types.ts` renders type text (`tsType`, JSDoc, the model type aliases);
51
+ `operations.ts` the per-operation surface (the `Ops` map, the `<Op>*` aliases, the
52
+ input shapes, `flatInputShape`);
53
+ `descriptor.ts` the `OPERATIONS` wire table and the collision-safe `packageIdents`;
54
+ `client.ts` the assembly (single/split entries, the runtime needs, the module-mode
55
+ runtime files);
56
+ `type-guards.ts`, `response-headers.ts`, `operation-types.ts`, `operation-signature.ts`
57
+ the narrower questions their names state;
58
+ `banner.ts` the generated-by header and title comment;
59
+ `inline-runtime.ts` the runtime assembly for both modes. The runtime's real sources ship
60
+ inside the package and reach the generator through
61
+ `@redocly/client-generator/runtime-sources` (in this repo they live in `runtime/` beside
62
+ these files). Naming and string escaping live in the TypeScript printer
63
+ (`@redocly/client-generator/printers/typescript`).
64
+
65
+ ## Ejecting it
66
+
67
+ `redocly eject-generator typescript` copies this generator's TypeScript source folder to
68
+ `generators/typescript/` — the stage files above, exactly as we wrote them. Imports stay
69
+ package specifiers: `@redocly/client-generator` (the toolkit and IR types),
70
+ `@redocly/client-generator/printers/typescript` (naming and text mechanics), and
71
+ `@redocly/client-generator/runtime-sources` (the runtime sources it embeds). Running a
72
+ `.ts` generator uses Node's own type stripping (Node 22.18, 23.6, or newer), and newer
73
+ built-in versions merge into your copy per file with
74
+ `redocly eject-generator typescript --update`.
75
+
76
+ It is the largest of them, so reach for the smaller paths first when they fit:
77
+ `client.setup` bakes publisher defaults into the generated client, and middleware or
78
+ `configure()` change behavior at run time rather than generation time.
79
+
80
+ - **It documents itself.** With `client.docs` (or `--docs`), the `docs` hook writes
81
+ `<stem>.typescript.md`: the security schemes, then one section per operation with its parameters,
82
+ body, response type, and behavior notes. The call snippets come from this generator's own
83
+ `sample` hook, so the page can only show the syntax of the SDK beside it, and the layout
84
+ comes from `renderReferencePage` in the authoring toolkit — reachable from an ejected copy
85
+ through `@redocly/client-generator`. Pagination on the page is decided by
86
+ `paginationRuleFor`, the same helper this generator resolves pagination with.
87
+
88
+ ## The modify loop
89
+
90
+ 1. Edit this skill: state the new behavior or decision.
91
+ 2. Make `generators/typescript/` match it.
92
+ 3. Run `redocly generate-client` and inspect the `git diff` of the generated output —
93
+ generated files are never hand-edited.
94
+
95
+ Newer built-in versions merge in with `redocly eject-generator typescript --update`.
@@ -0,0 +1,54 @@
1
+ ---
2
+ name: zod-generator
3
+ description: Design of the ejected Redocly `zod` client generator. Read it, and update it, before changing generators/zod/.
4
+ ---
5
+
6
+ # The `zod` generator — its skill
7
+
8
+ This file is the DESIGN of your ejected `zod` generator (`generators/zod/`):
9
+ **to change the generator, edit this skill first, then make the code match it** — a diff
10
+ to `generators/zod/` that has no covering sentence here is incomplete.
11
+
12
+ ## What it emits
13
+
14
+ A standalone `<stem>.zod.ts`: one `export const <Name>Schema` per named IR schema, the
15
+ `operationSchemas` request/response map, and a `zodValidation()` middleware.
16
+
17
+ ## Design decisions that must hold
18
+
19
+ - **The client stays dependency-free.** zod is the CONSUMER's peer dependency; the
20
+ generated client never imports this module, and this module never imports the client.
21
+ - **Output-mode-agnostic:** one module beside the client whatever the sdk's layout.
22
+ - **Emits nothing** when the model has neither named schemas nor JSON operation bodies —
23
+ an empty file is worse than no file.
24
+ - Validation is opt-in at runtime (`use(zodValidation())`), never automatic.
25
+ - **Only ERASABLE TypeScript.** The module must run under `node --experimental-strip-types`
26
+ with no build step, so nothing that needs a transform is emitted: no `enum`, no
27
+ `namespace`, and no constructor parameter properties. `ZodValidationError` therefore
28
+ declares its fields and assigns them in the constructor body — `constructor(readonly
29
+ operationId: string)` fails strip-only mode, which is how the generated CLI broke when it
30
+ imported this module.
31
+
32
+ ## The stage files
33
+
34
+ `schemas.ts` holds the whole renderer — schema expressions, the `operationSchemas` map,
35
+ and the module assembly; `index.ts` is the entry. Naming and literal escaping come from
36
+ the TypeScript printer (`@redocly/client-generator/printers/typescript`).
37
+
38
+ ## Ejecting it
39
+
40
+ `redocly eject-generator zod` copies this generator's TypeScript source folder to
41
+ `generators/zod/`, exactly as we wrote it, importing `@redocly/client-generator` and
42
+ `@redocly/client-generator/printers/typescript`. Running a `.ts` generator uses Node's
43
+ type stripping (Node 22.18, 23.6, or newer); newer built-in versions merge in per file
44
+ with `--update`. Change the schema shapes, the naming, or what gets a schema at all, and
45
+ regenerate.
46
+
47
+ ## The modify loop
48
+
49
+ 1. Edit this skill: state the new behavior or decision.
50
+ 2. Make `generators/zod/` match it.
51
+ 3. Run `redocly generate-client` and inspect the `git diff` of the generated output —
52
+ generated files are never hand-edited.
53
+
54
+ Newer built-in versions merge in with `redocly eject-generator zod --update`.
@@ -0,0 +1,11 @@
1
+ export { NotSupportedError } from '../errors.js';
2
+ export { Printer } from './printer.js';
3
+ export type { DateType } from './options.js';
4
+ export { casing, identifierFor, RESERVED_WORDS, uniqueIdentifiers } from './naming.js';
5
+ export { paginationRuleFor, type NeutralPaginationRule } from './pagination.js';
6
+ export { renderReferencePage, type ReferenceLanguage, type ReferencePageOptions, } from './reference-page.js';
7
+ export { isMultipartBody, jsonSuccessSchema, paginationItemSchema, securityRequirements, serverUrlParts, sseResponse, type SecurityRequirement, type ServerUrlPart, } from './operation.js';
8
+ export { deref, discriminatorCases, docText, enumValues, flattenAllOf, headerCoerceType, isNullable, schemaAtPointer, unwrapNullable, } from './schema.js';
9
+ /** Every value exported above — the skill's helper table and Tier-2 telemetry key off this. */
10
+ export declare const AUTHORING_HELPER_NAMES: readonly ["Printer", "casing", "identifierFor", "uniqueIdentifiers", "RESERVED_WORDS", "flattenAllOf", "deref", "discriminatorCases", "jsonSuccessSchema", "sseResponse", "isMultipartBody", "serverUrlParts", "securityRequirements", "paginationItemSchema", "isNullable", "unwrapNullable", "enumValues", "docText", "headerCoerceType", "schemaAtPointer", "paginationRuleFor", "renderReferencePage", "NotSupportedError"];
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/authoring/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAAE,KAAK,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAGhF,OAAO,EACL,mBAAmB,EACnB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,EACd,WAAW,EACX,KAAK,mBAAmB,EACxB,KAAK,aAAa,GACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,KAAK,EACL,kBAAkB,EAClB,OAAO,EACP,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,+FAA+F;AAC/F,eAAO,MAAM,sBAAsB,iaAwBzB,CAAC"}
@@ -0,0 +1,42 @@
1
+ // The language-neutral authoring toolkit barrel. Pure functions over the IR —
2
+ // no typescript, no @redocly/openapi-core, no Node builtins — so it is exported
3
+ // from the package ROOT: a custom generator importing only these stays TS-free.
4
+ // A generator rejects an option it can't honor by throwing this — the CLI prints its
5
+ // message as a user error instead of an unexpected crash. Part of the authoring surface
6
+ // because an ejected generator only imports from this barrel.
7
+ export { NotSupportedError } from '../errors.js';
8
+ export { Printer } from './printer.js';
9
+ export { casing, identifierFor, RESERVED_WORDS, uniqueIdentifiers } from './naming.js';
10
+ export { paginationRuleFor } from './pagination.js';
11
+ // The Markdown reference page a generator's `docs` hook returns. Here rather than in the
12
+ // emitters, so a generator ejected as source reaches it through the package like we do.
13
+ export { renderReferencePage, } from './reference-page.js';
14
+ export { isMultipartBody, jsonSuccessSchema, paginationItemSchema, securityRequirements, serverUrlParts, sseResponse, } from './operation.js';
15
+ export { deref, discriminatorCases, docText, enumValues, flattenAllOf, headerCoerceType, isNullable, schemaAtPointer, unwrapNullable, } from './schema.js';
16
+ /** Every value exported above — the skill's helper table and Tier-2 telemetry key off this. */
17
+ export const AUTHORING_HELPER_NAMES = [
18
+ 'Printer',
19
+ 'casing',
20
+ 'identifierFor',
21
+ 'uniqueIdentifiers',
22
+ 'RESERVED_WORDS',
23
+ 'flattenAllOf',
24
+ 'deref',
25
+ 'discriminatorCases',
26
+ 'jsonSuccessSchema',
27
+ 'sseResponse',
28
+ 'isMultipartBody',
29
+ 'serverUrlParts',
30
+ 'securityRequirements',
31
+ 'paginationItemSchema',
32
+ 'isNullable',
33
+ 'unwrapNullable',
34
+ 'enumValues',
35
+ 'docText',
36
+ 'headerCoerceType',
37
+ 'schemaAtPointer',
38
+ 'paginationRuleFor',
39
+ 'renderReferencePage',
40
+ 'NotSupportedError',
41
+ ];
42
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/authoring/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,gFAAgF;AAChF,gFAAgF;AAEhF,qFAAqF;AACrF,wFAAwF;AACxF,8DAA8D;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAA8B,MAAM,iBAAiB,CAAC;AAChF,yFAAyF;AACzF,wFAAwF;AACxF,OAAO,EACL,mBAAmB,GAGpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,EACd,WAAW,GAGZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,KAAK,EACL,kBAAkB,EAClB,OAAO,EACP,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,+FAA+F;AAC/F,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,SAAS;IACT,QAAQ;IACR,eAAe;IACf,mBAAmB;IACnB,gBAAgB;IAChB,cAAc;IACd,OAAO;IACP,oBAAoB;IACpB,mBAAmB;IACnB,aAAa;IACb,iBAAiB;IACjB,gBAAgB;IAChB,sBAAsB;IACtB,sBAAsB;IACtB,YAAY;IACZ,gBAAgB;IAChB,YAAY;IACZ,SAAS;IACT,kBAAkB;IAClB,iBAAiB;IACjB,mBAAmB;IACnB,qBAAqB;IACrB,mBAAmB;CACX,CAAC"}
@@ -0,0 +1,34 @@
1
+ export declare const casing: {
2
+ camel: (name: string) => string;
3
+ pascal: (name: string) => string;
4
+ snake: (name: string) => string;
5
+ screaming: (name: string) => string;
6
+ };
7
+ /** Keyword sets for the first-party target languages; authors pass their own set for others. */
8
+ export declare const RESERVED_WORDS: Record<'typescript' | 'python' | 'go' | 'php', ReadonlySet<string>>;
9
+ /**
10
+ * A safe identifier for any C-like or snake-case language: applies the casing
11
+ * style (which strips invalid characters), prefixes `_` when the result starts
12
+ * with a digit, and suffixes `_` when it is a reserved word — the cross-language
13
+ * convention (Python's `class_`, Go's `type_`).
14
+ */
15
+ export declare function identifierFor(name: string, options?: {
16
+ style?: keyof typeof casing;
17
+ reserved?: ReadonlySet<string>;
18
+ }): string;
19
+ /**
20
+ * `identifierFor` over a list of wire names, made unique among themselves and among the
21
+ * names already `taken` — `id`, `id_2`, `id_3`, … A language that passes parameters as
22
+ * separate arguments needs this: OpenAPI lets one name appear in two locations (`id` in the
23
+ * path AND in the query), and a signature cannot declare that name twice. Seed `taken` with
24
+ * the argument slots the method itself declares (a body, a headers bag, a timeout), so a
25
+ * parameter named after one of them moves aside instead of shadowing it.
26
+ *
27
+ * The wire name is untouched: only the binding moves, so the request is unchanged.
28
+ */
29
+ export declare function uniqueIdentifiers(names: readonly string[], options?: {
30
+ style?: keyof typeof casing;
31
+ reserved?: ReadonlySet<string>;
32
+ taken?: Iterable<string>;
33
+ }): string[];
34
+ //# sourceMappingURL=naming.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"naming.d.ts","sourceRoot":"","sources":["../../src/authoring/naming.ts"],"names":[],"mappings":"AA0BA,eAAO,MAAM,MAAM;kBACH,MAAM,KAAG,MAAM;mBAId,MAAM,KAAG,MAAM;kBAChB,MAAM,KAAG,MAAM;sBACX,MAAM,KAAG,MAAM;CAClC,CAAC;AAEF,gGAAgG;AAChG,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,YAAY,GAAG,QAAQ,GAAG,IAAI,GAAG,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAoC9F,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,OAAO,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAAO,GAC5E,MAAM,CAIR;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,OAAO,GAAE;IACP,KAAK,CAAC,EAAE,MAAM,OAAO,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC/B,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;CACrB,GACL,MAAM,EAAE,CAYV"}
@@ -0,0 +1,104 @@
1
+ // Language-neutral naming: one word splitter, four casings, and an identifier
2
+ // sanitizer parameterized by the target language's reserved words. TypeScript
3
+ // keeps its specialized sanitizer in the TypeScript printer; this is for the
4
+ // other output languages.
5
+ /** Split on delimiters and camel/acronym boundaries: 'APIKey-v2' → ['api', 'key', 'v2']. */
6
+ function splitWords(name) {
7
+ return (name
8
+ // A leading sign on a number is meaning, not a delimiter: '+1'/'-1' (GitHub
9
+ // reactions) must not collapse to the same identifier.
10
+ .replace(/^\+(?=\d)/, 'plus ')
11
+ .replace(/^-(?=\d)/, 'minus ')
12
+ // A plural acronym is one word: fold the trailing 's' in so the
13
+ // acronym-boundary rule below doesn't split 'APIs' into 'AP Is'.
14
+ .replace(/([A-Z]{2,})s(?![a-z])/g, '$1S')
15
+ .replace(/([a-z0-9])([A-Z])/g, '$1 $2')
16
+ .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')
17
+ .split(/[^A-Za-z0-9]+/)
18
+ .filter((word) => word !== '')
19
+ .map((word) => word.toLowerCase()));
20
+ }
21
+ const capitalize = (word) => word.charAt(0).toUpperCase() + word.slice(1);
22
+ export const casing = {
23
+ camel: (name) => {
24
+ const [first, ...rest] = splitWords(name);
25
+ return (first ?? '') + rest.map(capitalize).join('');
26
+ },
27
+ pascal: (name) => splitWords(name).map(capitalize).join(''),
28
+ snake: (name) => splitWords(name).join('_'),
29
+ screaming: (name) => splitWords(name).join('_').toUpperCase(),
30
+ };
31
+ /** Keyword sets for the first-party target languages; authors pass their own set for others. */
32
+ export const RESERVED_WORDS = {
33
+ // prettier-ignore
34
+ typescript: new Set([
35
+ 'break', 'case', 'catch', 'class', 'const', 'continue', 'debugger', 'default', 'delete',
36
+ 'do', 'else', 'enum', 'export', 'extends', 'false', 'finally', 'for', 'function', 'if',
37
+ 'import', 'in', 'instanceof', 'new', 'null', 'return', 'super', 'switch', 'this', 'throw',
38
+ 'true', 'try', 'typeof', 'var', 'void', 'while', 'with', 'implements', 'interface', 'let',
39
+ 'package', 'private', 'protected', 'public', 'static', 'yield', 'await',
40
+ ]),
41
+ // prettier-ignore
42
+ python: new Set([
43
+ 'false', 'none', 'true', 'and', 'as', 'assert', 'async', 'await', 'break', 'class',
44
+ 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global',
45
+ 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return',
46
+ 'try', 'while', 'with', 'yield', 'match', 'case', 'type',
47
+ ]),
48
+ // prettier-ignore
49
+ go: new Set([
50
+ 'break', 'case', 'chan', 'const', 'continue', 'default', 'defer', 'else', 'fallthrough',
51
+ 'for', 'func', 'go', 'goto', 'if', 'import', 'interface', 'map', 'package', 'range',
52
+ 'return', 'select', 'struct', 'switch', 'type', 'var',
53
+ ]),
54
+ // PHP keywords + compile-time constants are case-insensitive; the set stays lowercase
55
+ // because `identifierFor` matches on the lowercased candidate.
56
+ // prettier-ignore
57
+ php: new Set([
58
+ 'abstract', 'and', 'array', 'as', 'break', 'callable', 'case', 'catch', 'class', 'clone',
59
+ 'const', 'continue', 'declare', 'default', 'die', 'do', 'echo', 'else', 'elseif', 'empty',
60
+ 'enddeclare', 'endfor', 'endforeach', 'endif', 'endswitch', 'endwhile', 'enum', 'eval',
61
+ 'exit', 'extends', 'final', 'finally', 'fn', 'for', 'foreach', 'function', 'global', 'goto',
62
+ 'if', 'implements', 'include', 'instanceof', 'insteadof', 'interface', 'isset', 'list',
63
+ 'match', 'namespace', 'new', 'or', 'print', 'private', 'protected', 'public', 'readonly',
64
+ 'require', 'return', 'static', 'switch', 'throw', 'trait', 'try', 'unset', 'use', 'var',
65
+ 'while', 'xor', 'yield', 'true', 'false', 'null', 'int', 'float', 'bool', 'string', 'void',
66
+ 'iterable', 'object', 'mixed', 'never', 'self', 'parent',
67
+ ]),
68
+ };
69
+ /**
70
+ * A safe identifier for any C-like or snake-case language: applies the casing
71
+ * style (which strips invalid characters), prefixes `_` when the result starts
72
+ * with a digit, and suffixes `_` when it is a reserved word — the cross-language
73
+ * convention (Python's `class_`, Go's `type_`).
74
+ */
75
+ export function identifierFor(name, options = {}) {
76
+ const styled = casing[options.style ?? 'camel'](name);
77
+ const base = styled === '' ? '_' : /^[0-9]/.test(styled) ? `_${styled}` : styled;
78
+ return options.reserved?.has(base.toLowerCase()) ? `${base}_` : base;
79
+ }
80
+ /**
81
+ * `identifierFor` over a list of wire names, made unique among themselves and among the
82
+ * names already `taken` — `id`, `id_2`, `id_3`, … A language that passes parameters as
83
+ * separate arguments needs this: OpenAPI lets one name appear in two locations (`id` in the
84
+ * path AND in the query), and a signature cannot declare that name twice. Seed `taken` with
85
+ * the argument slots the method itself declares (a body, a headers bag, a timeout), so a
86
+ * parameter named after one of them moves aside instead of shadowing it.
87
+ *
88
+ * The wire name is untouched: only the binding moves, so the request is unchanged.
89
+ */
90
+ export function uniqueIdentifiers(names, options = {}) {
91
+ const used = new Set(options.taken ?? []);
92
+ // The separator follows the casing style, so the result stays idiomatic: `order_id_2` in
93
+ // snake-case languages, `orderId2` where names run together.
94
+ const separator = options.style === 'snake' || options.style === 'screaming' ? '_' : '';
95
+ return names.map((name) => {
96
+ const base = identifierFor(name, options);
97
+ let unique = base;
98
+ for (let suffix = 2; used.has(unique); suffix++)
99
+ unique = `${base}${separator}${suffix}`;
100
+ used.add(unique);
101
+ return unique;
102
+ });
103
+ }
104
+ //# sourceMappingURL=naming.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"naming.js","sourceRoot":"","sources":["../../src/authoring/naming.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import type { ApiModel, OperationModel, ResponseBodyModel, SchemaModel, ServerModel } from '../intermediate-representation/model.js';
2
+ /** The schema of the operation's primary JSON success response, if it has one. */
3
+ export declare function jsonSuccessSchema(op: OperationModel): SchemaModel | undefined;
4
+ /** The `text/event-stream` success response — present exactly when the operation streams. */
5
+ export declare function sseResponse(op: OperationModel): ResponseBodyModel | undefined;
6
+ /** Whether the request body is multipart (any `multipart/*` content type). */
7
+ export declare function isMultipartBody(op: OperationModel): boolean;
8
+ /** One piece of a parsed server-URL template: literal text, or a declared variable's name. */
9
+ export type ServerUrlPart = {
10
+ kind: 'literal';
11
+ value: string;
12
+ } | {
13
+ kind: 'variable';
14
+ name: string;
15
+ };
16
+ /**
17
+ * A server's URL template as parts a generator concatenates in its own syntax:
18
+ * `https://{region}.api.example.com/v1` → literal, variable `region`, literal. A variable
19
+ * the server does not declare has nothing to substitute, so its placeholder stays literal
20
+ * text and remains visible in the generated code.
21
+ */
22
+ export declare function serverUrlParts(server: ServerModel): ServerUrlPart[];
23
+ /** One resolved security requirement: the scheme's key, kind, and (for apiKey) placement. */
24
+ export type SecurityRequirement = {
25
+ scheme: string;
26
+ kind: 'bearer' | 'basic';
27
+ } | {
28
+ scheme: string;
29
+ kind: 'apiKey';
30
+ name: string;
31
+ in: 'header' | 'query' | 'cookie';
32
+ };
33
+ /**
34
+ * The operation's security as OR-alternatives of AND-sets, denormalized against the
35
+ * declared schemes — the shape every generated runtime's auth resolver consumes. A key that
36
+ * names no declared scheme is dropped, and an alternative that ends up empty with it.
37
+ * Generators print this in their own literal syntax; the mapping itself has one answer.
38
+ */
39
+ export declare function securityRequirements(op: OperationModel, model: Pick<ApiModel, 'securitySchemes'>): SecurityRequirement[][];
40
+ /**
41
+ * The element type of a paginated operation's items: resolve the rule's `items` pointer to
42
+ * the items ARRAY, then take its raw element — a `ref` element keeps its class name (a
43
+ * deref'd result would hydrate as plain data). Undefined when the pointer misses or the
44
+ * target is not an array.
45
+ */
46
+ export declare function paginationItemSchema(pageSchema: SchemaModel | undefined, itemsPointer: string | undefined, model: ApiModel): SchemaModel | undefined;
47
+ //# sourceMappingURL=operation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operation.d.ts","sourceRoot":"","sources":["../../src/authoring/operation.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,QAAQ,EACR,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,WAAW,EACZ,MAAM,yCAAyC,CAAC;AAGjD,kFAAkF;AAClF,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,cAAc,GAAG,WAAW,GAAG,SAAS,CAG7E;AAED,6FAA6F;AAC7F,wBAAgB,WAAW,CAAC,EAAE,EAAE,cAAc,GAAG,iBAAiB,GAAG,SAAS,CAI7E;AAED,8EAA8E;AAC9E,wBAAgB,eAAe,CAAC,EAAE,EAAE,cAAc,GAAG,OAAO,CAE3D;AAED,8FAA8F;AAC9F,MAAM,MAAM,aAAa,GAAG;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpG;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,aAAa,EAAE,CAoBnE;AAED,6FAA6F;AAC7F,MAAM,MAAM,mBAAmB,GAC3B;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAA;CAAE,GAC5C;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAA;CAAE,CAAC;AAExF;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,cAAc,EAClB,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,GACvC,mBAAmB,EAAE,EAAE,CAmBzB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,WAAW,GAAG,SAAS,EACnC,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,KAAK,EAAE,QAAQ,GACd,WAAW,GAAG,SAAS,CAIzB"}
@@ -0,0 +1,86 @@
1
+ // Language-neutral operation-shape helpers: the questions every generator asks of an
2
+ // operation before deciding what to emit — which response is the JSON success, whether it
3
+ // streams, whether the body is multipart. One answer each, so two generators cannot
4
+ // disagree about the same operation.
5
+ import { schemaAtPointer } from './schema.js';
6
+ /** The schema of the operation's primary JSON success response, if it has one. */
7
+ export function jsonSuccessSchema(op) {
8
+ return op.successResponses.find((response) => response.contentType.toLowerCase().includes('json'))
9
+ ?.schema;
10
+ }
11
+ /** The `text/event-stream` success response — present exactly when the operation streams. */
12
+ export function sseResponse(op) {
13
+ return op.successResponses.find((response) => response.contentType.toLowerCase().includes('text/event-stream'));
14
+ }
15
+ /** Whether the request body is multipart (any `multipart/*` content type). */
16
+ export function isMultipartBody(op) {
17
+ return op.requestBody?.contentType.toLowerCase().includes('multipart') ?? false;
18
+ }
19
+ /**
20
+ * A server's URL template as parts a generator concatenates in its own syntax:
21
+ * `https://{region}.api.example.com/v1` → literal, variable `region`, literal. A variable
22
+ * the server does not declare has nothing to substitute, so its placeholder stays literal
23
+ * text and remains visible in the generated code.
24
+ */
25
+ export function serverUrlParts(server) {
26
+ const declared = new Set(server.variables.map((variable) => variable.name));
27
+ const parts = [];
28
+ let literal = '';
29
+ let rest = server.url;
30
+ const template = /\{([^{}]+)\}/;
31
+ for (let match = template.exec(rest); match !== null; match = template.exec(rest)) {
32
+ literal += rest.slice(0, match.index);
33
+ if (declared.has(match[1])) {
34
+ if (literal !== '')
35
+ parts.push({ kind: 'literal', value: literal });
36
+ literal = '';
37
+ parts.push({ kind: 'variable', name: match[1] });
38
+ }
39
+ else {
40
+ literal += match[0];
41
+ }
42
+ rest = rest.slice(match.index + match[0].length);
43
+ }
44
+ literal += rest;
45
+ if (literal !== '' || parts.length === 0)
46
+ parts.push({ kind: 'literal', value: literal });
47
+ return parts;
48
+ }
49
+ /**
50
+ * The operation's security as OR-alternatives of AND-sets, denormalized against the
51
+ * declared schemes — the shape every generated runtime's auth resolver consumes. A key that
52
+ * names no declared scheme is dropped, and an alternative that ends up empty with it.
53
+ * Generators print this in their own literal syntax; the mapping itself has one answer.
54
+ */
55
+ export function securityRequirements(op, model) {
56
+ return op.security
57
+ .map((alternative) => alternative.flatMap((key) => {
58
+ const scheme = model.securitySchemes.find((candidate) => candidate.key === key);
59
+ if (scheme === undefined)
60
+ return [];
61
+ if (scheme.kind === 'bearer' || scheme.kind === 'basic') {
62
+ return [{ scheme: key, kind: scheme.kind }];
63
+ }
64
+ if (scheme.kind === 'apiKeyHeader') {
65
+ return [{ scheme: key, kind: 'apiKey', name: scheme.headerName, in: 'header' }];
66
+ }
67
+ if (scheme.kind === 'apiKeyQuery') {
68
+ return [{ scheme: key, kind: 'apiKey', name: scheme.paramName, in: 'query' }];
69
+ }
70
+ return [{ scheme: key, kind: 'apiKey', name: scheme.cookieName, in: 'cookie' }];
71
+ }))
72
+ .filter((alternative) => alternative.length > 0);
73
+ }
74
+ /**
75
+ * The element type of a paginated operation's items: resolve the rule's `items` pointer to
76
+ * the items ARRAY, then take its raw element — a `ref` element keeps its class name (a
77
+ * deref'd result would hydrate as plain data). Undefined when the pointer misses or the
78
+ * target is not an array.
79
+ */
80
+ export function paginationItemSchema(pageSchema, itemsPointer, model) {
81
+ if (pageSchema === undefined || itemsPointer === undefined)
82
+ return undefined;
83
+ const itemsArray = schemaAtPointer(pageSchema, itemsPointer, model);
84
+ return itemsArray?.kind === 'array' ? itemsArray.items : undefined;
85
+ }
86
+ //# sourceMappingURL=operation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operation.js","sourceRoot":"","sources":["../../src/authoring/operation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * How `format: date-time`/`date` string fields are typed:
3
+ * - `'string'` (default): the wire shape — an ISO string.
4
+ * - `'Date'`: the target language's date object (`Date` in TypeScript, `datetime`
5
+ * in Python, `time.Time` in Go, `DateTimeImmutable` in PHP). The generated
6
+ * client converts on the wire boundary, so the values match the types.
7
+ */
8
+ export type DateType = 'string' | 'Date';
9
+ //# sourceMappingURL=options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/authoring/options.ts"],"names":[],"mappings":"AAIA;;;;;;GAMG;AACH,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC"}
@@ -0,0 +1,5 @@
1
+ // Neutral option types every generator (any output language) may need to honor.
2
+ // They live in the authoring toolkit — not the TypeScript emitters — so a language
3
+ // generator can type its plumbing without importing TS-specific modules.
4
+ export {};
5
+ //# sourceMappingURL=options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/authoring/options.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,mFAAmF;AACnF,yEAAyE"}
@@ -0,0 +1,19 @@
1
+ import type { OperationModel } from '../intermediate-representation/model.js';
2
+ /** The normalized rule a generator renders into its runtime's pagination spec. */
3
+ export type NeutralPaginationRule = {
4
+ style: string;
5
+ /** The advance query parameter (cursor/offset/page styles). */
6
+ param?: string;
7
+ nextCursor?: string;
8
+ hasMore?: string;
9
+ limitParam?: string;
10
+ items?: string;
11
+ };
12
+ /**
13
+ * Pagination for one operation. The convention rule applies only where it structurally
14
+ * fits — the advance parameter exists on the operation, or for `link` (which has no
15
+ * parameter) the success response documents a `Link` header; `exclude` kills every source.
16
+ * Returns undefined when the operation does not paginate.
17
+ */
18
+ export declare function paginationRuleFor(op: OperationModel, config: Record<string, unknown> | undefined): NeutralPaginationRule | undefined;
19
+ //# sourceMappingURL=pagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../src/authoring/pagination.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAE9E,kFAAkF;AAClF,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,cAAc,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC1C,qBAAqB,GAAG,SAAS,CAgCnC"}