@redocly/client-generator 0.3.7 → 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,346 @@
1
+ // Ejected from @redocly/client-generator@0.4.0 — the built-in "tanstack-query" generator.
2
+ // This file is yours: edit freely; the generated client stays machine-owned and is
3
+ // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
+ // `redocly eject-generator tanstack-query --update`.
5
+ // Emits an idiomatic TanStack Query v5 module over the generated client. The factories
6
+ // are built by `createQueryFactories(instance)` — bindable to any client instance (per-instance
7
+ // config, middleware, retry) — and the module-level exports bind the sdk's default
8
+ // `client`. Per query operation (GET/HEAD): `<op>QueryKey(vars?)` (the no-args form is
9
+ // the invalidation prefix) and `<op>Options(vars, init?)` whose `queryFn` forwards
10
+ // TanStack's abort `signal`. A paginated query op additionally gets
11
+ // `<op>InfiniteOptions(vars, init?)` with `initialPageParam`/`getNextPageParam` compiled
12
+ // from the pagination rule's JSON pointers. Per mutation: `<op>Mutation(init?)`. Calls go
13
+ // through the client instance's methods, which take one input object in either
14
+ // `--args-style`; only the infinite query's cursor override differs between them.
15
+ //
16
+ // The factory bodies are authored as source text — the emitted module verbatim
17
+ // and normalizes everything to the printer's canonical style. Every interpolated piece
18
+ // is generator-derived (sanitized operation names, JSON-pointer property chains built
19
+ // here) — never raw spec text.
20
+
21
+ import {
22
+ type ApiModel,
23
+ type ModelPagination,
24
+ type OperationModel,
25
+ type PaginationSpec,
26
+ resolveSchemaPointer,
27
+ } from '@redocly/client-generator';
28
+ import {
29
+ hasInputs,
30
+ isQuery,
31
+ variablesName,
32
+ wrappableOperations,
33
+ } from '@redocly/client-generator/contracts/typescript';
34
+ import {
35
+ codeString,
36
+ isSafeIdentifier,
37
+ safeIdent,
38
+ } from '@redocly/client-generator/printers/typescript';
39
+
40
+ export type TanstackOptions = {
41
+ /** Import specifier for the sdk entry the `client` instance and types live in. */
42
+ sdkModule: string;
43
+ /** TanStack adapter to import the option helpers from (`@tanstack/${framework}-query`). */
44
+ framework: 'react' | 'vue' | 'svelte' | 'solid';
45
+ /** The run's RESOLVED pagination — paginated query ops gain `<op>InfiniteOptions`. */
46
+ pagination?: ModelPagination;
47
+ /** Leading element for every query/mutation key — namespaces the cache when several
48
+ * generated APIs share one QueryClient (operationIds may collide across APIs). */
49
+ queryKeyPrefix?: string;
50
+ /** The sdk's call shape — the infinite query overrides the cursor inside it. */
51
+ argsStyle?: 'grouped' | 'flat';
52
+ };
53
+
54
+ /** Render the full TanStack Query module source. `''` when there are no wrappable operations. */
55
+ export function renderTanstackModule(model: ApiModel, opts: TanstackOptions): string {
56
+ const ops = wrappableOperations(model, 'tanstack-query');
57
+ if (ops.length === 0) return '';
58
+ const pagination = opts.pagination ?? new Map();
59
+ const source = [
60
+ importHeader(ops, opts, pagination),
61
+ ...ops.filter(isQuery).map((op) => queryKeySource(op, opts.queryKeyPrefix)),
62
+ factoriesSource(model, ops, pagination, opts.queryKeyPrefix, opts.argsStyle),
63
+ ...defaultBindings(ops, pagination),
64
+ ].join('\n');
65
+ return source;
66
+ }
67
+
68
+ /**
69
+ * Whether the op gets an `<op>InfiniteOptions` factory: a paginated query operation.
70
+ * `link`-style pagination is excluded — its next page lives in the `Link` response
71
+ * HEADER, which a TanStack `queryFn` (body-only) cannot see; use the sdk's
72
+ * `.pages()`/`.items()` iterators for those operations instead.
73
+ */
74
+ function isInfinite(op: OperationModel, pagination: ModelPagination): boolean {
75
+ if (!isQuery(op)) return false;
76
+ const paginated = pagination.get(op.name);
77
+ return paginated !== undefined && paginated.spec.style !== 'link';
78
+ }
79
+
80
+ /**
81
+ * The import header: the option helpers from `@tanstack/${framework}-query` (only the
82
+ * ones used), then the sdk's `client` instance plus the referenced types.
83
+ */
84
+ function importHeader(
85
+ ops: OperationModel[],
86
+ opts: TanstackOptions,
87
+ pagination: ModelPagination
88
+ ): string {
89
+ const helpers = [
90
+ ...(ops.some((op) => isInfinite(op, pagination)) ? ['infiniteQueryOptions'] : []),
91
+ ...(ops.some(isQuery) ? ['queryOptions'] : []),
92
+ ];
93
+ const types = [...ops.filter(hasInputs).map(variablesName), 'RequestOptions']
94
+ .sort()
95
+ .map((name) => `type ${name}`);
96
+ const lines = [];
97
+ if (helpers.length > 0) {
98
+ lines.push(`import { ${helpers.join(', ')} } from "@tanstack/${opts.framework}-query";`);
99
+ }
100
+ lines.push(`import { client, ${types.join(', ')} } from "${opts.sdkModule}";`);
101
+ return lines.join('\n');
102
+ }
103
+
104
+ /**
105
+ * `<op>QueryKey(vars?)` — with `vars` the exact key `<op>Options` uses; without, the
106
+ * one-element prefix matching every cached page/filter of the operation
107
+ * (`queryClient.invalidateQueries({ queryKey: getOrderQueryKey() })`).
108
+ */
109
+ function queryKeySource(op: OperationModel, prefix: string | undefined): string {
110
+ const base = keyElements(op, prefix);
111
+ if (!hasInputs(op)) {
112
+ return `export const ${op.name}QueryKey = () => [${base}] as const;`;
113
+ }
114
+ return (
115
+ `export const ${op.name}QueryKey = (vars?: ${variablesName(op)}) =>\n` +
116
+ ` vars === undefined ? ([${base}] as const) : ([${base}, vars] as const);`
117
+ );
118
+ }
119
+
120
+ /** The constant leading key elements: `"main", "getOrder"` with a prefix, else the id alone. */
121
+ function keyElements(op: OperationModel, prefix: string | undefined): string {
122
+ // The prefix is config-supplied text — `codeString` is the code-context escaping.
123
+ return prefix === undefined ? `"${op.name}"` : `${codeString(prefix)}, "${op.name}"`;
124
+ }
125
+
126
+ /** The `createQueryFactories(instance)` declaration wrapping every option/mutation factory. */
127
+ function factoriesSource(
128
+ model: ApiModel,
129
+ ops: OperationModel[],
130
+ pagination: ModelPagination,
131
+ prefix: string | undefined,
132
+ argsStyle: TanstackOptions['argsStyle']
133
+ ): string {
134
+ const members = ops.flatMap((op) => {
135
+ if (!isQuery(op)) return [mutationMember(op, prefix)];
136
+ const paginated = pagination.get(op.name);
137
+ return paginated !== undefined && paginated.spec.style !== 'link'
138
+ ? [optionsMember(op), infiniteMember(model, op, paginated.spec, argsStyle)]
139
+ : [optionsMember(op)];
140
+ });
141
+ return (
142
+ '/**\n' +
143
+ ' * Build the factories over a specific client instance — its config, middleware, and\n' +
144
+ ' * retry apply to every call (`createQueryFactories(createClient(OPERATIONS, config))`).\n' +
145
+ " * The module-level exports below are these factories bound to the generated module's default `client`.\n" +
146
+ ' */\n' +
147
+ 'export const createQueryFactories = (instance: typeof client = client) => ({\n' +
148
+ members.join(',\n') +
149
+ '\n});'
150
+ );
151
+ }
152
+
153
+ /** `<op>Options` — `queryFn` forwards TanStack's abort `signal` into the request `init`. */
154
+ function optionsMember(op: OperationModel): string {
155
+ const { params, keyArg, callArgs } = varsPieces(op);
156
+ return (
157
+ ` ${op.name}Options: (${params}) => queryOptions({\n` +
158
+ ` queryKey: ${op.name}QueryKey(${keyArg}),\n` +
159
+ ` queryFn: ({ signal }) => instance.${op.name}(${callArgs}, { ...init, signal, envelope: undefined }),\n` +
160
+ ` })`
161
+ );
162
+ }
163
+
164
+ /** `<op>Mutation(init?)` — per-call options (headers, a retry override) reach the mutation. */
165
+ function mutationMember(op: OperationModel, prefix: string | undefined): string {
166
+ const mutationFn = hasInputs(op)
167
+ ? `(vars: ${variablesName(op)}) => instance.${op.name}(vars, { ...init, envelope: undefined })`
168
+ : `() => instance.${op.name}({}, { ...init, envelope: undefined })`;
169
+ return (
170
+ ` ${op.name}Mutation: (${INIT_PARAM}) => ({\n` +
171
+ ` mutationKey: [${keyElements(op, prefix)}] as const,\n` +
172
+ ` mutationFn: ${mutationFn},\n` +
173
+ ` })`
174
+ );
175
+ }
176
+
177
+ /**
178
+ * `<op>InfiniteOptions` — the pagination rule compiled into TanStack's contract: the
179
+ * page param rides the rule's advance query parameter, `initialPageParam` resumes from
180
+ * the caller's own value, and `getNextPageParam` mirrors the runtime iterators' stop
181
+ * conditions (cursor: absent/`null`/`''`, plus the optional `hasMore === false`;
182
+ * offset/page: an empty items page).
183
+ */
184
+ function infiniteMember(
185
+ model: ApiModel,
186
+ op: OperationModel,
187
+ spec: Exclude<PaginationSpec, { style: 'link' }>,
188
+ argsStyle: TanstackOptions['argsStyle']
189
+ ): string {
190
+ const { params, keyArg } = varsPieces(op);
191
+ // The cursor is a query parameter, so it lands in the sdk's own spelling for one:
192
+ // inside the `query` layer, or at the top level of a merged call.
193
+ const cursor = safeIdent(spec.param);
194
+ const override =
195
+ argsStyle === 'flat'
196
+ ? `{ ...vars, ${cursor}: pageParam }`
197
+ : `{ ...vars, query: { ...vars.query, ${cursor}: pageParam } }`;
198
+ return (
199
+ ` ${op.name}InfiniteOptions: (${params}) => infiniteQueryOptions({\n` +
200
+ ` queryKey: [...${op.name}QueryKey(${keyArg}), "infinite"] as const,\n` +
201
+ ` queryFn: ({ pageParam, signal }) => instance.${op.name}(${override}, { ...init, signal, envelope: undefined }),\n` +
202
+ nextPageSource(model, op, spec, argsStyle) +
203
+ ` })`
204
+ );
205
+ }
206
+
207
+ /** The `initialPageParam` + `getNextPageParam` pair for one pagination style. */
208
+ function nextPageSource(
209
+ model: ApiModel,
210
+ op: OperationModel,
211
+ spec: Exclude<PaginationSpec, { style: 'link' }>,
212
+ argsStyle: TanstackOptions['argsStyle']
213
+ ): string {
214
+ const advance = paramsAccess(spec.param);
215
+ // Where the caller's own starting value lives, in the sdk's spelling for a query param.
216
+ const given = argsStyle === 'flat' ? memberAccess('vars', spec.param) : `vars.query?.${advance}`;
217
+ if (spec.style === 'cursor') {
218
+ const stopEarly =
219
+ spec.hasMore === undefined
220
+ ? ''
221
+ : ` if (lastPage${pointerChain(spec.hasMore)} === false) return undefined;\n`;
222
+ // Only the stop checks the cursor's static type admits are emitted — a `=== null`
223
+ // against a non-nullable string is a TS2367 in the consumer's build. TanStack v5
224
+ // itself stops on a returned `null`/`undefined`, so an omitted check stays safe
225
+ // even when the server sends a value the description says it cannot.
226
+ const checks = cursorStopChecks(model, op, spec.nextCursor);
227
+ const body =
228
+ checks.length === 0
229
+ ? ` return lastPage${pointerChain(spec.nextCursor)};\n`
230
+ : ` const next = lastPage${pointerChain(spec.nextCursor)};\n` +
231
+ ` return ${checks.join(' || ')} ? undefined : next;\n`;
232
+ return (
233
+ ` initialPageParam: ${given},\n` +
234
+ ` getNextPageParam: (lastPage) => {\n` +
235
+ stopEarly +
236
+ body +
237
+ ` },\n`
238
+ );
239
+ }
240
+ const step = spec.style === 'offset' ? 'lastPageParam + count' : 'lastPageParam + 1';
241
+ const start = spec.style === 'offset' ? '0' : '1';
242
+ return (
243
+ ` initialPageParam: ${given} ?? ${start},\n` +
244
+ ` getNextPageParam: (lastPage, _allPages, lastPageParam) => {\n` +
245
+ ` const count = ${itemsLength(spec.items)};\n` +
246
+ ` return count === 0 ? undefined : ${step};\n` +
247
+ ` },\n`
248
+ );
249
+ }
250
+
251
+ /**
252
+ * The `next === …` stop conditions whose comparison the cursor's static type allows:
253
+ * `undefined` when any step of the chain can miss, `null` when the cursor is nullable,
254
+ * `""` when it is a plain string.
255
+ */
256
+ function cursorStopChecks(model: ApiModel, op: OperationModel, pointer: string): string[] {
257
+ const page = op.successResponses.find((response) =>
258
+ response.contentType.toLowerCase().includes('json')
259
+ );
260
+ // Both resolve — `resolveModelPagination` already verified the rule fits the operation.
261
+ const root = resolveSchemaPointer(page!.schema, '', model);
262
+ const target = resolveSchemaPointer(page!.schema, pointer, model);
263
+ const keys = pointer.slice(1).split('/');
264
+ let canBeUndefined = keys.length > 1;
265
+ if (!canBeUndefined && root?.kind === 'object') {
266
+ const property = root.properties.find((candidate) => candidate.name === keys[0]);
267
+ canBeUndefined = property === undefined || !property.required;
268
+ }
269
+ const members = target?.kind === 'union' ? target.members : target ? [target] : [];
270
+ const nullable = members.some((member) => member.kind === 'null');
271
+ const plainString = members.some(
272
+ (member) => member.kind === 'scalar' && member.scalar === 'string'
273
+ );
274
+ return [
275
+ ...(canBeUndefined ? ['next === undefined'] : []),
276
+ ...(nullable ? ['next === null'] : []),
277
+ ...(plainString ? ['next === ""'] : []),
278
+ ];
279
+ }
280
+
281
+ /**
282
+ * The `init` parameter every factory takes. The throw-only `envelope` option is
283
+ * excluded from the type and stripped in the forwarding calls — cached query data
284
+ * must stay the plain body.
285
+ */
286
+ const INIT_PARAM = 'init?: Omit<RequestOptions, "envelope">';
287
+
288
+ /** The shared `(vars, init?)` parameter list plus how `vars` reaches the key and the call. */
289
+ function varsPieces(op: OperationModel): { params: string; keyArg: string; callArgs: string } {
290
+ if (!hasInputs(op)) {
291
+ return { params: INIT_PARAM, keyArg: '', callArgs: '{}' };
292
+ }
293
+ return {
294
+ params: `vars: ${variablesName(op)}, ${INIT_PARAM}`,
295
+ keyArg: 'vars',
296
+ callArgs: 'vars',
297
+ };
298
+ }
299
+
300
+ /** One query-param access step: `.name`, or `["a b"]` when not a bare identifier. */
301
+ function paramsAccess(name: string): string {
302
+ return isSafeIdentifier(name) ? name : `[${safeIdent(name)}]`;
303
+ }
304
+
305
+ /**
306
+ * `<base>.name`, or `<base>["wire-name"]` when the name is not an identifier — the dot form
307
+ * would be a syntax error there. (After `?.` either form appends directly.)
308
+ */
309
+ function memberAccess(base: string, name: string): string {
310
+ return isSafeIdentifier(name) ? `${base}.${name}` : `${base}[${safeIdent(name)}]`;
311
+ }
312
+
313
+ /** An RFC 6901 pointer as an optional property chain: `/page/endCursor` → `.page?.endCursor`. */
314
+ function pointerChain(pointer: string): string {
315
+ const keys = pointer
316
+ .slice(1)
317
+ .split('/')
318
+ .map((token) => token.replaceAll('~1', '/').replaceAll('~0', '~'));
319
+ return keys
320
+ .map((key, index) => {
321
+ const bare = isSafeIdentifier(key);
322
+ if (index === 0) return bare ? `.${key}` : `[${safeIdent(key)}]`;
323
+ return bare ? `?.${key}` : `?.[${safeIdent(key)}]`;
324
+ })
325
+ .join('');
326
+ }
327
+
328
+ /** The page's item count per the `items` pointer (`''` means the page IS the array). */
329
+ function itemsLength(items: string): string {
330
+ if (items === '') return 'lastPage?.length ?? 0';
331
+ return `lastPage${pointerChain(items)}?.length ?? 0`;
332
+ }
333
+
334
+ /** `export const <name> = defaultFactories.<name>;` per factory, bound to the default client. */
335
+ function defaultBindings(ops: OperationModel[], pagination: ModelPagination): string[] {
336
+ const names = ops.flatMap((op) => {
337
+ if (!isQuery(op)) return [`${op.name}Mutation`];
338
+ return isInfinite(op, pagination)
339
+ ? [`${op.name}Options`, `${op.name}InfiniteOptions`]
340
+ : [`${op.name}Options`];
341
+ });
342
+ return [
343
+ 'const defaultFactories = createQueryFactories();',
344
+ ...names.map((name) => `export const ${name} = defaultFactories.${name};`),
345
+ ];
346
+ }
@@ -0,0 +1,46 @@
1
+ // Ejected from @redocly/client-generator@0.4.0 — the built-in "transformers" generator.
2
+ // This file is yours: edit freely; the generated client stays machine-owned and is
3
+ // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
+ // `redocly eject-generator transformers --update`.
5
+ import type { Generator } from '@redocly/client-generator';
6
+ import { join } from 'node:path';
7
+
8
+ import { renderTransformersModule } from './render.ts';
9
+
10
+ /**
11
+ * The transformers generator: a standalone `<stem>.transformers.ts` module of
12
+ * `transform<Name>(data: <Name>): <Name>` functions, one per IR named schema
13
+ * that (recursively) carries a `date-time`/`date` field. Each walks the value
14
+ * and rewrites wire ISO strings to `new Date(...)` in place, so the runtime
15
+ * value matches the sdk's `--date-type Date` types — pair the two.
16
+ *
17
+ * Standalone — the consumer pipes responses through it
18
+ * (`transformPet(await getPet(id))`); the sdk client itself stays zero-dep
19
+ * (Date is a web standard). The transformers import only the schema TYPES from
20
+ * the sdk entry (`./<stem>.js`) and call each other as siblings.
21
+ *
22
+ * Output-mode-agnostic: it reads only `model.schemas` and emits a single module
23
+ * beside the client regardless of how the sdk partitions its files. Emits
24
+ * nothing when no schema has a date field (nothing to transform).
25
+ */
26
+ export const transformersGenerator: Generator = ({ model, output, banner, emit }) => {
27
+ const content = renderTransformersModule(model, {
28
+ sdkModule: `./${output.stem}.${emit.importExt ?? 'js'}`,
29
+ });
30
+ if (content === '') return [];
31
+ const header = banner.map((line) => `// ${line}`).join('\n');
32
+ return [
33
+ {
34
+ path: join(output.dir, `${output.stem}.transformers.ts`),
35
+ content: `${header}\n\n${content}`,
36
+ },
37
+ ];
38
+ };
39
+
40
+ export default {
41
+ name: 'transformers',
42
+ run: transformersGenerator,
43
+ requires: ["typescript"],
44
+ dateTypes: ["Date"],
45
+ requiresGenerator: '^0.4.0',
46
+ };