@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,254 @@
1
+ // Ejected from @redocly/client-generator@0.4.0 — the built-in "typescript" 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 typescript --update`.
5
+ // Client assembly, shared by both output modes. The generated file embeds the
6
+ // assembled runtime sources (./inline-runtime.ts). Single-file layout:
7
+ // schema types → type guards → `<Op>*` aliases → Ops → OPERATIONS → embedded
8
+ // runtime → (baked setup) → client instance → sugar — the embedded types are
9
+ // already exported in place, so no re-exports. Split mode moves the schema types +
10
+ // guards into a sibling `<stem>.schemas.ts` the entry re-exports (`emitClientSplit`).
11
+ // Text templates throughout — no `typescript` at generate time.
12
+
13
+ import {
14
+ allOperations,
15
+ type ApiModel,
16
+ type EmitOptions,
17
+ type OperationModel,
18
+ } from '@redocly/client-generator';
19
+ import { codeString } from '@redocly/client-generator/printers/typescript';
20
+
21
+ import { banner, HEADER, renderTitleComment } from './banner.ts';
22
+ import { packageIdents, renderDescriptors } from './descriptor.ts';
23
+ import {
24
+ assembleInlineRuntime,
25
+ type InlineRuntimeNeeds,
26
+ runtimeModuleFiles,
27
+ } from './inline-runtime.ts';
28
+ import { isTypedMultipart } from './operation-types.ts';
29
+ import {
30
+ collectEntrySchemaRefs,
31
+ type EmitContext,
32
+ renderAliases,
33
+ renderOpsType,
34
+ } from './operations.ts';
35
+ import { renderTypeGuards } from './type-guards.ts';
36
+ import { renderTypeAliases } from './types.ts';
37
+
38
+ export function emitClientSingleFile(model: ApiModel, options: EmitOptions = {}): string {
39
+ return emitClient(model, options).entry;
40
+ }
41
+
42
+ /** Which optional runtime capabilities this API needs (drives both distribution modes). */
43
+ export function runtimeNeeds(model: ApiModel, options: EmitOptions): InlineRuntimeNeeds {
44
+ const ops = allOperations(model.services);
45
+ return {
46
+ multipart: ops.some((op) => op.requestBody && isTypedMultipart(op.requestBody)),
47
+ // Auth sugar needs schemes; `resolveAuth` fires when a descriptor carries
48
+ // `security` — a valid spec implies the former, but embed on either.
49
+ auth: model.securitySchemes.length > 0 || ops.some((op) => op.security.length > 0),
50
+ sse: ops.some((op) => op.sse !== undefined),
51
+ setup: !!options.setup,
52
+ paginate: (options.pagination ?? new Map()).size > 0,
53
+ };
54
+ }
55
+
56
+ /**
57
+ * `runtime: 'module'`: the runtime files written into `runtime/` beside the client —
58
+ * the raw per-needs modules plus the generated factory, each under the standard banner.
59
+ */
60
+ export function emitRuntimeFiles(
61
+ model: ApiModel,
62
+ options: EmitOptions
63
+ ): Array<{ name: string; content: string }> {
64
+ if (options.runtime !== 'module') return [];
65
+ return runtimeModuleFiles(runtimeNeeds(model, options), options.importExt ?? 'js').map(
66
+ ({ name, content }) => ({ name, content: `${HEADER}\n\n${content.trim()}\n` })
67
+ );
68
+ }
69
+
70
+ /**
71
+ * The module-mode replacement for the embedded block: the entry imports what its own
72
+ * code references and re-exports the factory's public surface (the same names the
73
+ * inline embed leaves in module scope).
74
+ */
75
+ function runtimeImports(options: EmitOptions, ctx: EmitContext, hasOps: boolean): string {
76
+ const ext = options.importExt ?? 'js';
77
+ const typeNames = [
78
+ 'OperationDescriptor',
79
+ ...(options.setup ? ['ClientConfig', 'Middleware'] : []),
80
+ ...(ctx.errorMode === 'result' && hasOps ? ['Result'] : []),
81
+ ].sort();
82
+ return [
83
+ `import { createClient${options.setup ? ', mergeSetup' : ''} } from './runtime/factory.${ext}';`,
84
+ `import type { ${typeNames.join(', ')} } from './runtime/types.${ext}';`,
85
+ `export * from './runtime/factory.${ext}';`,
86
+ ].join('\n');
87
+ }
88
+
89
+ /**
90
+ * `split` mode: the same client with the schema types + type guards carved out into a
91
+ * sibling `<stem>.schemas.ts`. The entry file re-exports the schemas module
92
+ * (`export *`) and type-imports exactly the schema names its own code references, so
93
+ * both files hold under `noUnusedLocals`. `schemas` is absent when the document
94
+ * declares no schema statements (the entry is then self-contained).
95
+ */
96
+ export function emitClientSplit(
97
+ model: ApiModel,
98
+ options: EmitOptions,
99
+ stem: string
100
+ ): { entry: string; schemas?: string } {
101
+ return emitClient(model, options, stem);
102
+ }
103
+
104
+ /** The shared assembly; `splitStem` (when given) selects the two-file split layout. */
105
+ function emitClient(
106
+ model: ApiModel,
107
+ options: EmitOptions,
108
+ splitStem?: string
109
+ ): { entry: string; schemas?: string } {
110
+ const ops = allOperations(model.services);
111
+ const idents = packageIdents(model);
112
+ // Resolved (and VERIFIED) up front: an explicit rule that doesn't fit throws here,
113
+ // before any statement is built — one aggregated error for the whole model.
114
+ const pagination = options.pagination ?? new Map();
115
+ const ctx: EmitContext = {
116
+ argsStyle: options.argsStyle ?? 'grouped',
117
+ errorMode: options.errorMode ?? 'throw',
118
+ dateType: options.dateType ?? 'string',
119
+ schemaNames: new Set(model.schemas.map((s) => s.name)),
120
+ schemas: model.schemas,
121
+ pagination,
122
+ };
123
+ const wiring =
124
+ ops.length > 0
125
+ ? [
126
+ renderOpsType(model, idents, ctx),
127
+ renderDescriptors(model, idents, ctx.dateType, pagination, ctx.argsStyle),
128
+ ]
129
+ : // A spec with no operations still gets the uniform wiring shape.
130
+ [
131
+ 'export type Ops = Record<string, never>;',
132
+ 'export const OPERATIONS = {} as const satisfies Record<string, OperationDescriptor>;',
133
+ ];
134
+
135
+ const runtimeSection =
136
+ options.runtime === 'module'
137
+ ? runtimeImports(options, ctx, ops.length > 0)
138
+ : assembleInlineRuntime(runtimeNeeds(model, options));
139
+ const schemaSection = [
140
+ renderTypeAliases(model.schemas, ctx.dateType),
141
+ renderTypeGuards(model.schemas),
142
+ ]
143
+ .filter((section) => section.length > 0)
144
+ .join('\n\n');
145
+ const bodySection = [...ops.map((op) => renderAliases(op, ctx)), ...wiring]
146
+ .filter((section) => section.length > 0)
147
+ .join('\n\n');
148
+ const sugar = sugarSection(ops, idents);
149
+
150
+ // Layout puts the reader's OWN API first (types → aliases → Ops → OPERATIONS) and the
151
+ // machinery after it. The runtime block sits between the descriptors and the `client`
152
+ // initializer — after it for readability, before `client` so every declaration the
153
+ // module-init call chain touches (hoisted functions AND any future top-level const)
154
+ // is already evaluated.
155
+ const moduleMode = options.runtime === 'module';
156
+ if (splitStem === undefined) {
157
+ return {
158
+ entry: banner([
159
+ HEADER,
160
+ renderTitleComment(model),
161
+ ...(moduleMode ? [runtimeSection] : []),
162
+ [schemaSection, bodySection].filter((section) => section.length > 0).join('\n\n'),
163
+ ...(moduleMode ? [] : [runtimeSection]),
164
+ clientSection(options, ctx, model),
165
+ sugar,
166
+ ]),
167
+ };
168
+ }
169
+
170
+ const hasSchemas = schemaSection.length > 0;
171
+ return {
172
+ entry: banner([
173
+ HEADER,
174
+ renderTitleComment(model),
175
+ ...(moduleMode ? [runtimeSection] : []),
176
+ hasSchemas
177
+ ? schemaLinks(model, ctx, `./${splitStem}.schemas.${options.importExt ?? 'js'}`)
178
+ : '',
179
+ bodySection,
180
+ ...(moduleMode ? [] : [runtimeSection]),
181
+ clientSection(options, ctx, model),
182
+ sugar,
183
+ ]),
184
+ schemas: hasSchemas ? banner([HEADER, renderTitleComment(model), schemaSection]) : undefined,
185
+ };
186
+ }
187
+
188
+ /**
189
+ * The entry ⇄ schemas linkage of the split layout: a type-only import of exactly the
190
+ * schema names the entry's own code references (derived from the IR — the same
191
+ * sources the alias/Ops renderers type), plus the public `export *` re-export.
192
+ */
193
+ function schemaLinks(model: ApiModel, ctx: EmitContext, specifier: string): string {
194
+ const names = collectEntrySchemaRefs(model, ctx);
195
+ const importLine =
196
+ names.length > 0 ? `import type { ${names.join(', ')} } from '${specifier}';\n` : '';
197
+ return `${importLine}export * from '${specifier}';`;
198
+ }
199
+
200
+ /** The (optional) baked setup + the default `client` instance. */
201
+ function clientSection(options: EmitOptions, ctx: EmitContext, model: ApiModel): string {
202
+ const serverUrl = options.serverUrl ?? model.serverUrl;
203
+ const fields = [
204
+ // Always baked when the document declares one: the runtime's fallback is a
205
+ // relative URL, which Node's fetch rejects.
206
+ ...(serverUrl !== undefined ? [`serverUrl: ${codeString(serverUrl)}`] : []),
207
+ ...(ctx.errorMode === 'result' ? ['errorMode: "result"'] : []),
208
+ // The runtime converts a merged call to the namespaced shape, so it has to know
209
+ // which style this module's types promise.
210
+ ...(ctx.argsStyle === 'flat' ? ['argsStyle: "flat"'] : []),
211
+ // Client identification for API-owner telemetry; the runtime sends it only
212
+ // outside browsers, and `configure({ clientHeader: false })` disables it.
213
+ 'clientHeader: "redocly-client-generator"',
214
+ ];
215
+ const config = fields.length > 0 ? `{ ${fields.join(', ')} }` : '{}';
216
+ // Precedence, lowest → highest: spec defaults → baked publisher setup → app `configure()`.
217
+ // The inner merge flattens the setup into a ClientConfig; the outer layers it OVER the
218
+ // spec defaults (mergeSetup's second argument wins per-field; middleware composes).
219
+ const configArg = options.setup
220
+ ? `mergeSetup({ config: ${config} }, mergeSetup(__redoclySetup, {}))`
221
+ : config;
222
+ // The trailing type args narrow `ctx.operation` to the spec's literal unions.
223
+ // `OperationTag` mirrors the descriptor block's gate: derived only when some
224
+ // operation is tagged (it would otherwise be `never`); zero-ops specs have no
225
+ // derived unions at all, so they keep the string defaults.
226
+ const ops = allOperations(model.services);
227
+ const hasTags = ops.some((op) => op.tags.length > 0);
228
+ const typeArgs =
229
+ ops.length > 0
230
+ ? `<Ops, OperationId, OperationPath, ${hasTags ? 'OperationTag' : 'string'}>`
231
+ : '<Ops>';
232
+ const client = `export const client = createClient${typeArgs}(OPERATIONS, ${configArg});`;
233
+ if (!options.setup) return client;
234
+ return (
235
+ '// ─── Baked-in setup (--setup) ───\n' +
236
+ `const __redoclySetup: { config?: ClientConfig; middleware?: Middleware[] } = ${options.setup};\n` +
237
+ client
238
+ );
239
+ }
240
+
241
+ /** Core destructure + per-scheme auth setters + per-operation call sugar. */
242
+ function sugarSection(ops: OperationModel[], idents: Map<string, string>): string {
243
+ // Credentials go through `configure({ auth })` or `client.auth.*` — one way per act.
244
+ // Per-scheme setters used to be exported here too, which gave the same act three
245
+ // spellings and a name per scheme that operation names then had to avoid.
246
+ const lines = ['export const { configure, use } = client;'];
247
+ if (ops.length === 0) return lines.join('\n');
248
+ // Bindings, never wrappers: `updateOrder` IS `client.updateOrder`, so importing the name
249
+ // and reaching through the instance cannot disagree about the arguments. `argsStyle`
250
+ // shapes the method itself, which is why one binding serves both styles.
251
+ const names = ops.map((op) => idents.get(op.name)!).join(', ');
252
+ lines.push(`export const { ${names} } = client;`);
253
+ return lines.join('\n');
254
+ }
@@ -0,0 +1,137 @@
1
+ // Ejected from @redocly/client-generator@0.4.0 — the built-in "typescript" 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 typescript --update`.
5
+ // Package-mode descriptor emission: the identifier plan for a generated module that
6
+ // shares scope with the `@redocly/client-generator` wiring, plus the `OPERATIONS`
7
+ // descriptor map (`satisfies Record<string, OperationDescriptor>` — the semver skew
8
+ // guard against the runtime contract in src/runtime/types.ts). Text templates.
9
+
10
+ import {
11
+ allOperations,
12
+ type ApiModel,
13
+ type ArgsStyle,
14
+ type DateType,
15
+ type ModelPagination,
16
+ type NamedSchemaModel,
17
+ type OperationModel,
18
+ securityRequirements,
19
+ type SecuritySchemeModel,
20
+ WIRING_NAMES,
21
+ } from '@redocly/client-generator';
22
+ import { codeLiteral, uniqueIdent } from '@redocly/client-generator/printers/typescript';
23
+
24
+ import { isTypedMultipart } from './operation-types.ts';
25
+ import { flatInputShape, responseText } from './operations.ts';
26
+ import { responseHeaderSpecs } from './response-headers.ts';
27
+ import { tsJsdoc } from './types.ts';
28
+
29
+ /**
30
+ * Operation-name → emitted-identifier plan. The full reserved set (wiring + imported
31
+ * bindings, computed from the model FIRST) is seeded before any operation
32
+ * is sanitized, so collisions rename the operation (`configure` → `configure_2`)
33
+ * deterministically regardless of document order.
34
+ */
35
+ export function packageIdents(model: ApiModel): Map<string, string> {
36
+ const used = new Set<string>(WIRING_NAMES);
37
+ const idents = new Map<string, string>();
38
+ for (const op of allOperations(model.services)) idents.set(op.name, uniqueIdent(op.name, used));
39
+ return idents;
40
+ }
41
+
42
+ /** One operation's OperationDescriptor as plain data (only non-default fields present). */
43
+ function descriptorValue(
44
+ op: OperationModel,
45
+ schemes: SecuritySchemeModel[],
46
+ dateType: DateType,
47
+ pagination?: ModelPagination,
48
+ schemas: readonly NamedSchemaModel[] = [],
49
+ argsStyle: ArgsStyle = 'grouped'
50
+ ) {
51
+ const params = [...op.pathParams, ...op.queryParams, ...op.headerParams, ...op.cookieParams].map(
52
+ (p) => ({
53
+ name: p.name,
54
+ in: p.in,
55
+ ...(p.style !== undefined ? { style: p.style } : {}),
56
+ ...(p.explode !== undefined ? { explode: p.explode } : {}),
57
+ ...(p.allowReserved !== undefined ? { allowReserved: p.allowReserved } : {}),
58
+ })
59
+ );
60
+ const security = securityRequirements(op, { securitySchemes: schemes });
61
+ const sse = op.sse !== undefined;
62
+ const responseKind = sse ? 'sse' : responseText(op.successResponses, dateType).kind;
63
+ const responseHeaders = responseHeaderSpecs(op.successResponseHeaders, schemas);
64
+ return {
65
+ // The spec's operationId, NOT the (possibly renamed) map key: `id` drives middleware
66
+ // targeting (`ctx.operation.id`) and must match inline mode's `operationMetaExpr`.
67
+ // The wire/middleware identity stays the SPEC operationId even when the emitted
68
+ // function name was renamed away from a collision (`configure` → `configure_2`).
69
+ id: op.specName ?? op.name,
70
+ method: op.method.toUpperCase(),
71
+ path: op.path,
72
+ ...(op.tags.length > 0 ? { tags: op.tags } : {}),
73
+ ...(params.length > 0 ? { params } : {}),
74
+ ...(op.requestBody
75
+ ? {
76
+ body: {
77
+ contentType: op.requestBody.contentType,
78
+ ...(isTypedMultipart(op.requestBody) ? { multipart: true } : {}),
79
+ },
80
+ }
81
+ : {}),
82
+ ...(responseKind !== 'json' ? { responseKind } : {}),
83
+ ...(op.sse === undefined ? {} : { sseDataKind: op.sse.dataKind }),
84
+ ...(security.length > 0 ? { security } : {}),
85
+ ...(responseHeaders === undefined ? {} : { responseHeaders }),
86
+ // The resolved spec is already normalized with stable key order (see pagination.ts).
87
+ ...(pagination?.has(op.name) ? { pagination: pagination.get(op.name)!.spec } : {}),
88
+ // A merged call cannot carry one name for two layers, so an operation whose names
89
+ // collide keeps the namespaced shape — its `<Op>Variables` says so, and the runtime
90
+ // has to agree or the typed call would be rejected.
91
+ ...(argsStyle === 'flat' && 'collisions' in flatInputShape(op, schemas)
92
+ ? { argsStyle: 'grouped' }
93
+ : {}),
94
+ };
95
+ }
96
+
97
+ /** `export const OPERATIONS = {…} as const satisfies …` + the derived unions. */
98
+ export function renderDescriptors(
99
+ model: ApiModel,
100
+ idents: Map<string, string>,
101
+ dateType: DateType,
102
+ pagination?: ModelPagination,
103
+ argsStyle: ArgsStyle = 'grouped'
104
+ ): string {
105
+ const ops = allOperations(model.services);
106
+ if (ops.length === 0) return '';
107
+ const entryLines = ops.map((op, index) => {
108
+ const value = codeLiteral(
109
+ descriptorValue(op, model.securitySchemes, dateType, pagination, model.schemas, argsStyle)
110
+ );
111
+ return ` ${idents.get(op.name)!}: ${value}${index === ops.length - 1 ? '' : ','}`;
112
+ });
113
+ const blocks = [
114
+ [
115
+ ...tsJsdoc(
116
+ 'The wire-shape descriptor for every operation, keyed by operationId — the data the\n' +
117
+ 'runtime routes requests by. Also minification-safe static metadata (method, path,\n' +
118
+ 'tags) for cache keys, tracing span names, and request logging.',
119
+ undefined,
120
+ ''
121
+ ),
122
+ 'export const OPERATIONS = {',
123
+ ...entryLines,
124
+ '} as const satisfies Record<string, OperationDescriptor>;',
125
+ ].join('\n'),
126
+ 'export type OperationId = (typeof OPERATIONS)[keyof typeof OPERATIONS]["id"];',
127
+ 'export type OperationPath = (typeof OPERATIONS)[keyof typeof OPERATIONS]["path"];',
128
+ ];
129
+ if (ops.some((op) => op.tags.length > 0)) {
130
+ blocks.push(
131
+ 'export type OperationTag = Extract<(typeof OPERATIONS)[keyof typeof OPERATIONS], {\n' +
132
+ ' tags: readonly string[];\n' +
133
+ '}>["tags"][number];'
134
+ );
135
+ }
136
+ return blocks.join('\n\n');
137
+ }
@@ -0,0 +1,101 @@
1
+ // Ejected from @redocly/client-generator@0.4.0 — the built-in "typescript" 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 typescript --update`.
5
+ import {
6
+ type CodeSample,
7
+ type Generator,
8
+ type OperationModel,
9
+ renderReferencePage,
10
+ type SampleContext,
11
+ } from '@redocly/client-generator';
12
+ import { join } from 'node:path';
13
+
14
+ import { emitClientSingleFile, emitClientSplit, emitRuntimeFiles } from './client.ts';
15
+ import { packageIdents } from './descriptor.ts';
16
+
17
+ /**
18
+ * The default generator: the full typed client (model types + runtime + endpoints).
19
+ * Other generators (zod, framework hooks) emit *additional* files alongside.
20
+ *
21
+ * `single` mode writes the whole client to the `--output` path. `split` mode derives
22
+ * two sibling files from that anchor — `<stem>.schemas.ts` (model types, enums,
23
+ * const-objects, type guards; skipped when the document declares no schemas) and
24
+ * `<stem>.ts` (everything else, which `export *`s the schemas module).
25
+ */
26
+ export const typescriptGenerator: Generator = ({ model, output, outputMode, emit }) => {
27
+ // `runtime: 'module'` adds the per-needs runtime files beside the client.
28
+ const runtime = emitRuntimeFiles(model, emit).map(({ name, content }) => ({
29
+ path: join(output.dir, 'runtime', name),
30
+ content,
31
+ }));
32
+ if (outputMode === 'split') {
33
+ const { dir, stem } = output;
34
+ const { entry, schemas } = emitClientSplit(model, emit, stem);
35
+ return [
36
+ ...(schemas === undefined
37
+ ? []
38
+ : [{ path: join(dir, `${stem}.schemas.ts`), content: schemas }]),
39
+ { path: output.path, content: entry },
40
+ ...runtime,
41
+ ];
42
+ }
43
+ return [{ path: output.path, content: emitClientSingleFile(model, emit) }, ...runtime];
44
+ };
45
+
46
+ /**
47
+ * The client's own reference page, written when `client.docs` is on. Its snippets come from
48
+ * `typescriptSample` below, so the page shows the calling convention this run generated —
49
+ * `argsStyle` included.
50
+ */
51
+ export const typescriptDocs: Generator = ({ model, output, emit, pagination }) => [
52
+ {
53
+ path: output.path.replace(/\.[^.\\/]+$/, '.typescript.md'),
54
+ content: renderReferencePage(model, {
55
+ title: `${model.title} TypeScript client reference`,
56
+ frontmatter: emit.docsFrontmatter === true,
57
+ language: {
58
+ name: 'typescript',
59
+ label: 'TypeScript',
60
+ fence: 'typescript',
61
+ requires: 'The client has no dependencies.',
62
+ },
63
+ sample: (op) => typescriptSample(op, { model, emit, outputPath: output.path }),
64
+ paginated: new Set(pagination?.keys() ?? []),
65
+ }),
66
+ },
67
+ ];
68
+
69
+ /** One idiomatic TS call per operation, for `x-codeSamples` and the SDK reference pages. */
70
+ export function typescriptSample(op: OperationModel, ctx: SampleContext): CodeSample {
71
+ const ident = packageIdents(ctx.model).get(op.name) ?? op.name;
72
+ // The module this run writes, with the run's import extension — `./client` would be
73
+ // both the wrong name for most stems and extensionless under ESM resolution.
74
+ const stem = ctx.outputPath.replace(/^.*[\\/]/, '').replace(/\.[^.]+$/, '');
75
+ const specifier = `./${stem}.${ctx.emit.importExt ?? 'js'}`;
76
+ const requiredQuery = op.queryParams.filter((param) => param.required);
77
+ const merged = ctx.emit.argsStyle === 'flat';
78
+ const path = op.pathParams.map((param) => `${param.name}: '<${param.name}>'`);
79
+ const query = requiredQuery.map((param) => `${param.name}: /* … */`);
80
+ const parts = merged
81
+ ? [...path, ...query, ...(op.requestBody ? ['/* body properties */'] : [])]
82
+ : [
83
+ ...(path.length > 0 ? [`path: { ${path.join(', ')} }`] : []),
84
+ ...(query.length > 0 ? [`query: { ${query.join(', ')} }`] : []),
85
+ ...(op.requestBody ? ['body: { /* … */ }'] : []),
86
+ ];
87
+ const args = parts.length > 0 ? [`{ ${parts.join(', ')} }`] : [];
88
+ return {
89
+ lang: 'typescript',
90
+ label: 'TypeScript SDK',
91
+ source: `import { ${ident} } from '${specifier}';\n\nconst result = await ${ident}(${args.join(', ')});\n`,
92
+ };
93
+ }
94
+
95
+ export default {
96
+ name: 'typescript',
97
+ run: typescriptGenerator,
98
+ sample: typescriptSample,
99
+ docs: typescriptDocs,
100
+ requiresGenerator: '^0.4.0',
101
+ };
@@ -0,0 +1,135 @@
1
+ // Ejected from @redocly/client-generator@0.4.0 — the built-in "typescript" 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 typescript --update`.
5
+ // Assembles the embedded runtime block for inline-mode clients: the real
6
+ // `src/runtime/` sources — stripped of module syntax at PREPARE time (see
7
+ // scripts/generate-runtime-sources.mjs, which owns the kept-export surface) — in
8
+ // import-graph order, followed by a local `createClient` factory wiring only the
9
+ // capabilities this API needs. Pure string concatenation: no `typescript` at
10
+ // generate time.
11
+
12
+ import {
13
+ RUNTIME_SOURCES,
14
+ RUNTIME_SOURCES_STRIPPED,
15
+ type RuntimeModuleName,
16
+ } from '@redocly/client-generator/runtime-sources';
17
+
18
+ /** Which optional runtime capabilities the generated client must embed. */
19
+ export type InlineRuntimeNeeds = {
20
+ multipart: boolean;
21
+ auth: boolean;
22
+ sse: boolean;
23
+ setup: boolean;
24
+ paginate: boolean;
25
+ };
26
+
27
+ const HEADER =
28
+ "// ─── Embedded runtime (@redocly/client-generator, assembled per this API's needs) ───";
29
+
30
+ /** The per-needs module set, in import-graph topological order (both modes share it). */
31
+ function runtimeModules(needs: InlineRuntimeNeeds): RuntimeModuleName[] {
32
+ // The optional capability modules slot in where the runtime barrel would import
33
+ // them (core never imports them statically).
34
+ const modules: RuntimeModuleName[] = ['types.ts', 'errors.ts', 'url.ts', 'parse.ts', 'retry.ts'];
35
+ if (needs.multipart) modules.push('multipart.ts');
36
+ if (needs.auth) modules.push('auth.ts');
37
+ if (needs.setup) modules.push('setup.ts');
38
+ // paginate.ts has only type imports (types.ts + create-client.ts's OperationArgs),
39
+ // so it can sit anywhere; keep it with the other capability modules, before send.ts.
40
+ if (needs.paginate) modules.push('paginate.ts');
41
+ modules.push('send.ts');
42
+ if (needs.sse) modules.push('sse.ts');
43
+ modules.push('create-client.ts');
44
+ return modules;
45
+ }
46
+
47
+ /** The embedded runtime source block: stripped modules in dependency order + the factory. */
48
+ export function assembleInlineRuntime(needs: InlineRuntimeNeeds): string {
49
+ return [
50
+ HEADER,
51
+ ...runtimeModules(needs).map((name) => RUNTIME_SOURCES_STRIPPED[name]),
52
+ clientFactory(needs),
53
+ ].join('\n\n');
54
+ }
55
+
56
+ /**
57
+ * The runtime as real files (`runtime: 'module'`): the same per-needs modules, RAW —
58
+ * imports intact, exactly as authored — plus `factory.ts`, the per-needs `createClient`
59
+ * wiring as a module importing what it references from its siblings. `importExt`
60
+ * rewrites the intra-runtime specifiers for consumers that resolve them literally.
61
+ */
62
+ export function runtimeModuleFiles(
63
+ needs: InlineRuntimeNeeds,
64
+ importExt: 'js' | 'ts' = 'js'
65
+ ): Array<{ name: string; content: string }> {
66
+ const files = [
67
+ ...runtimeModules(needs).map((name) => ({ name, content: RUNTIME_SOURCES[name] })),
68
+ { name: 'factory.ts', content: moduleFactory(needs) },
69
+ ];
70
+ if (importExt === 'js') return files;
71
+ return files.map(({ name, content }) => ({
72
+ name,
73
+ content: content.replace(/(from '\.\/[a-z-]+)\.js'/g, "$1.ts'"),
74
+ }));
75
+ }
76
+
77
+ /** `factory.ts`: the sibling-module equivalent of the inline factory block. */
78
+ function moduleFactory(needs: InlineRuntimeNeeds): string {
79
+ const imports = [
80
+ "import { createClientCore } from './create-client.js';",
81
+ ...(needs.multipart ? ["import { toFormData } from './multipart.js';"] : []),
82
+ ...(needs.auth ? ["import { resolveAuth } from './auth.js';"] : []),
83
+ ...(needs.paginate
84
+ ? ["import { items, itemsByLink, pages, pagesByLink } from './paginate.js';"]
85
+ : []),
86
+ ...(needs.sse ? ["import { sse } from './sse.js';"] : []),
87
+ `import type {
88
+ Client,
89
+ ClientConfig,
90
+ OperationContext,
91
+ OperationDescriptor,
92
+ OpsShape,
93
+ } from './types.js';`,
94
+ ];
95
+ // The client entry re-exports this module, so the factory carries the same public
96
+ // surface the inline embed leaves in module scope (the kept-export set).
97
+ const reexports = [
98
+ "export { ApiError, TimeoutError } from './errors.js';",
99
+ "export { defaultRetryOn } from './retry.js';",
100
+ ...(needs.setup ? ["export { mergeSetup } from './setup.js';"] : []),
101
+ "export type * from './types.js';",
102
+ ];
103
+ return [imports.join('\n'), clientFactory(needs), reexports.join('\n')].join('\n\n');
104
+ }
105
+
106
+ // The embedded equivalent of the package barrel's `createClient`: `createClientCore`
107
+ // with only the included capabilities wired. EXPORTED — the design spec promises the
108
+ // generated module re-exports `createClient`/`OPERATIONS`/`Ops` so apps can build
109
+ // additional per-tenant instances over the same descriptors.
110
+ function clientFactory(needs: InlineRuntimeNeeds): string {
111
+ const caps = [
112
+ ...(needs.multipart ? ['serializeMultipart: toFormData'] : []),
113
+ ...(needs.auth ? ['resolveAuth'] : []),
114
+ ...(needs.sse ? ['sse'] : []),
115
+ ...(needs.paginate ? ['paginate: { pages, items, pagesByLink, itemsByLink }'] : []),
116
+ ];
117
+ const wired = caps.length > 0 ? `{ ${caps.join(', ')} }` : '{}';
118
+ return `/**
119
+ * The client factory: \`createClientCore\` wired with the capabilities this API needs.
120
+ * Exported so apps can build additional instances (per-tenant, per-environment) over
121
+ * the same \`OPERATIONS\`/\`Ops\`. The trailing string params carry the wiring's literal
122
+ * unions (\`OperationId\`/\`OperationPath\`/\`OperationTag\`) into \`ctx.operation\`.
123
+ */
124
+ export function createClient<
125
+ Ops extends OpsShape,
126
+ Id extends string = string,
127
+ Path extends string = string,
128
+ Tag extends string = string,
129
+ >(
130
+ operations: Record<string, OperationDescriptor>,
131
+ config?: ClientConfig<OperationContext<Id, Path, Tag>>
132
+ ): Client<Ops, OperationContext<Id, Path, Tag>> {
133
+ return createClientCore<Ops, Id, Path, Tag>(operations, config, ${wired});
134
+ }`;
135
+ }