@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,197 @@
1
+ // The built-in `python` generator — the first non-TypeScript library entry,
2
+ // authored the way the AGENTS.md skill teaches users' agents to author theirs:
3
+ // with the language-neutral toolkit only (Printer + schema/naming helpers).
4
+ // A guard test pins that this module never imports the TS emitter toolkit.
5
+ // One file per pipeline stage (ADR-0020); this entry assembles them.
6
+ import { identifierFor, renderReferencePage, securityRequirements, } from '@redocly/client-generator';
7
+ import { PythonPrinter } from '@redocly/client-generator/printers/python';
8
+ import { PYTHON_RUNTIME_SOURCES } from '@redocly/client-generator/runtime-sources';
9
+ import { writeClientClass, writePythonServers } from "./client.js";
10
+ import { paginationSpec, pythonLiteral } from "./descriptor.js";
11
+ import { discriminatorRegistrations, pydanticDiscriminators, renderPythonModels, } from "./models.js";
12
+ import { operationIdents, PY } from "./naming.js";
13
+ export { renderPythonModels } from "./models.js";
14
+ export { pythonType } from "./types.js";
15
+ export const pythonOptions = {
16
+ type: 'object',
17
+ properties: {
18
+ models: {
19
+ enum: ['dataclass', 'pydantic'],
20
+ default: 'dataclass',
21
+ description: 'Model style: standard-library dataclasses (default, httpx is the only dependency), or pydantic BaseModel classes (adds pydantic).',
22
+ },
23
+ },
24
+ additionalProperties: false,
25
+ };
26
+ /**
27
+ * The output path with an IMPORTABLE module name. The `--output` stem follows the
28
+ * TypeScript convention (`openapi.client.ts`), and `openapi.client.py` cannot be
29
+ * imported by name — nor can a hyphen or a leading digit — so the stem is converted
30
+ * to a legal module identifier (`openapi_client.py`). The directory is untouched.
31
+ */
32
+ function pythonModulePath(outputPath) {
33
+ const separator = outputPath.lastIndexOf('/') >= 0 ? '/' : '\\';
34
+ const cut = outputPath.lastIndexOf(separator);
35
+ const dir = cut >= 0 ? outputPath.slice(0, cut + 1) : '';
36
+ const stem = (cut >= 0 ? outputPath.slice(cut + 1) : outputPath).replace(/\.[^.]+$/, '');
37
+ return `${dir}${identifierFor(stem, { style: 'snake', reserved: PY })}.py`;
38
+ }
39
+ /** The whole generated file: header, models, embedded runtime, descriptors, clients. */
40
+ export const pythonGenerator = ({ model, output, banner, emit, options, pagination, }) => {
41
+ const errorMode = emit.errorMode ?? 'throw';
42
+ const dateType = emit.dateType ?? 'string';
43
+ const models = options?.models ?? 'dataclass';
44
+ const pydantic = models === 'pydantic' ? pydanticDiscriminators(model) : undefined;
45
+ const printer = new PythonPrinter();
46
+ printer.line(`# Generated by @redocly/client-generator (python) from "${model.title}" ${model.version}.`);
47
+ printer.line('# Do not edit by hand — regenerate with `redocly generate-client`.');
48
+ printer.line(models === 'pydantic'
49
+ ? '# Requires Python >= 3.9, httpx, and pydantic: pip install httpx pydantic'
50
+ : '# Requires Python >= 3.9 and httpx: pip install httpx');
51
+ printer.blank();
52
+ // Models (with the shared imports header).
53
+ printer.line(renderPythonModels(model, dateType, models).trimEnd());
54
+ printer.blank();
55
+ printer.blank();
56
+ writePythonServers(printer, model);
57
+ if (emit.runtime === 'module') {
58
+ // The runtime lives in real sibling modules; star imports rebind the same
59
+ // public names the inline stitching would have defined at this position.
60
+ printer.line('# ─── Runtime (real modules beside this file, written by the same run) ───');
61
+ for (const name of Object.keys(PYTHON_RUNTIME_SOURCES)) {
62
+ printer.line(`from ${name.replace(/\.py$/, '')} import *`);
63
+ }
64
+ printer.blank();
65
+ printer.blank();
66
+ }
67
+ else {
68
+ // The embedded runtime, stitched into one module: `from __future__` may appear
69
+ // only at the top of a file, and the intra-runtime relative imports resolve to
70
+ // this same file — both are dropped; duplicate stdlib imports are legal Python.
71
+ printer.line('# ─── Embedded runtime (@redocly/client-generator python runtime) ───');
72
+ for (const source of Object.values(PYTHON_RUNTIME_SOURCES)) {
73
+ const stitched = source
74
+ .split('\n')
75
+ .filter((line) => !line.startsWith('from __future__') && !line.startsWith('from ._'))
76
+ .join('\n')
77
+ .trim();
78
+ printer.line(stitched);
79
+ printer.blank();
80
+ }
81
+ printer.blank();
82
+ }
83
+ const registrations = discriminatorRegistrations(model, new Set(pydantic?.unions.keys()));
84
+ if (registrations.length > 0) {
85
+ printer.line('# Discriminated unions dispatch by their property inside decode().');
86
+ for (const registration of registrations)
87
+ printer.line(registration);
88
+ printer.blank();
89
+ }
90
+ printer.block('def _safe_json(response: httpx.Response) -> Any:', () => {
91
+ printer.block('try:', () => {
92
+ printer.line('return response.json()');
93
+ });
94
+ printer.block('except Exception:', () => {
95
+ printer.line('return None');
96
+ });
97
+ });
98
+ printer.blank();
99
+ // The wire-shape descriptor table the runtime routes by.
100
+ const paginationSpecs = new Map();
101
+ for (const { op, ident } of operationIdents(model)) {
102
+ paginationSpecs.set(ident, paginationSpec(pagination?.get(op.name)?.spec));
103
+ }
104
+ printer.line('_OPERATIONS = {');
105
+ printer.indent(() => {
106
+ for (const { op, ident } of operationIdents(model)) {
107
+ const descriptor = {
108
+ id: op.specName ?? op.name,
109
+ method: op.method.toUpperCase(),
110
+ path: op.path,
111
+ ...(securityRequirements(op, model).length > 0
112
+ ? { security: securityRequirements(op, model) }
113
+ : {}),
114
+ ...(paginationSpecs.get(ident) !== undefined
115
+ ? { pagination: paginationSpecs.get(ident) }
116
+ : {}),
117
+ };
118
+ printer.line(`"${ident}": ${pythonLiteral(descriptor)},`);
119
+ }
120
+ });
121
+ printer.line('}');
122
+ printer.blank();
123
+ printer.blank();
124
+ // The `serverUrl` option overrides the description's server, like the TS sdk.
125
+ const serverUrl = emit.serverUrl ?? model.serverUrl ?? '';
126
+ writeClientClass(printer, model, errorMode, false, paginationSpecs, serverUrl, dateType);
127
+ writeClientClass(printer, model, errorMode, true, paginationSpecs, serverUrl, dateType);
128
+ const entry = { path: pythonModulePath(output.path), content: printer.toString() };
129
+ if (emit.runtime !== 'module')
130
+ return [entry];
131
+ // The runtime modules, verbatim except the package-relative imports: the flat
132
+ // sibling layout has no package, so `from ._x` becomes the sibling `from _x`.
133
+ const header = banner.map((line) => `# ${line}`).join('\n');
134
+ const dir = pythonModulePath(output.path).replace(/[^\\/]+$/, '');
135
+ const runtimeFiles = Object.entries(PYTHON_RUNTIME_SOURCES).map(([name, source]) => ({
136
+ path: `${dir}${name}`,
137
+ content: `${header}\n\n${source
138
+ .split('\n')
139
+ .map((line) => (line.startsWith('from ._') ? line.replace('from ._', 'from _') : line))
140
+ .join('\n')
141
+ .trim()}\n`,
142
+ }));
143
+ return [entry, ...runtimeFiles];
144
+ };
145
+ /** One idiomatic Python call per operation — feeds `x-codeSamples` for docs. */
146
+ export function pythonSample(op, ctx) {
147
+ // The module name this run writes, not a guess: `openapi.client.ts` becomes
148
+ // `openapi_client.py`, so `from client import Client` would not import.
149
+ const module = pythonModulePath(ctx.outputPath)
150
+ .replace(/^.*[\\/]/, '')
151
+ .replace(/\.py$/, '');
152
+ // The DEDUPED name: on a collision the method is `get_user_2`, and a snippet naming
153
+ // the raw `get_user` would show a call that goes to a different operation.
154
+ const ident = operationIdents(ctx.model).find((entry) => entry.op.name === op.name)?.ident ??
155
+ identifierFor(op.name, { style: 'snake', reserved: PY });
156
+ const args = [
157
+ ...op.pathParams.map((param) => {
158
+ const python = identifierFor(param.name, { style: 'snake', reserved: PY });
159
+ return `${python}="<${python}>"`;
160
+ }),
161
+ ...op.queryParams
162
+ .filter((param) => param.required)
163
+ .map((param) => {
164
+ const python = identifierFor(param.name, { style: 'snake', reserved: PY });
165
+ return `${python}=...`;
166
+ }),
167
+ ...(op.requestBody ? ['body=...'] : []),
168
+ ];
169
+ return {
170
+ lang: 'python',
171
+ label: 'Python SDK',
172
+ source: `from ${module} import Client\n\nclient = Client()\nresult = client.${ident}(${args.join(', ')})\n`,
173
+ };
174
+ }
175
+ /**
176
+ * The SDK's own reference page, written when `client.docs` is on. The call snippets come
177
+ * from `pythonSample` — this generator's own hook — so the page can only ever show the syntax
178
+ * of the SDK beside it, and ejecting this generator takes the page with it.
179
+ */
180
+ export const pythonDocs = ({ model, output, emit, pagination }) => [
181
+ {
182
+ path: output.path.replace(/\.[^.\\/]+$/, '.python.md'),
183
+ content: renderReferencePage(model, {
184
+ title: `${model.title} Python SDK reference`,
185
+ frontmatter: emit.docsFrontmatter === true,
186
+ language: {
187
+ name: 'python',
188
+ label: 'Python',
189
+ fence: 'python',
190
+ requires: 'The SDK needs `httpx`.',
191
+ },
192
+ sample: (op) => pythonSample(op, { model, emit, outputPath: output.path }),
193
+ paginated: new Set(pagination?.keys() ?? []),
194
+ }),
195
+ },
196
+ ];
197
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generators/python/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { type ApiModel, type DateType } from '@redocly/client-generator';
2
+ /** The model style the generator emits: plain dataclasses, or pydantic `BaseModel`s. */
3
+ export type PythonModels = 'dataclass' | 'pydantic';
4
+ /** The wire property and value a union's discriminator mapping pins on one member class. */
5
+ export type DiscriminatorPin = {
6
+ property: string;
7
+ value: string;
8
+ };
9
+ /**
10
+ * Under `models: pydantic` the decoder hands a whole object tree to `model_validate`, so a
11
+ * union nested in a model is resolved by pydantic and never reaches the `DISCRIMINATORS`
12
+ * table. Pydantic resolves it correctly when the annotation carries the discriminator, which
13
+ * it accepts only if every member types that property as a `Literal` — and the mapping
14
+ * already pins one value per member. This pass works out which unions qualify: every member
15
+ * must declare the property, and no member may be pinned to two different values (a schema
16
+ * reused by two unions).
17
+ */
18
+ export declare function pydanticDiscriminators(model: ApiModel): {
19
+ pins: Map<string, DiscriminatorPin>;
20
+ unions: Map<string, string>;
21
+ };
22
+ /** Render every named schema: Enum classes, dataclasses (allOf flattened), union aliases. */
23
+ export declare function renderPythonModels(model: ApiModel, dateType?: DateType, models?: PythonModels): string;
24
+ /**
25
+ * `DISCRIMINATORS[Pet] = ("petType", {"cat": Cat, ...})` registration lines, which `decode`
26
+ * dispatches through. A union whose annotation already carries the discriminator is left
27
+ * out: pydantic resolves it at any depth, and the `Literal` on each member makes the
28
+ * decoder's member probe exact.
29
+ */
30
+ export declare function discriminatorRegistrations(model: ApiModel, annotated: Set<string>): string[];
31
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../src/generators/python/models.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,QAAQ,EAKd,MAAM,2BAA2B,CAAC;AAMnC,wFAAwF;AACxF,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,UAAU,CAAC;AAEpD,4FAA4F;AAC5F,MAAM,MAAM,gBAAgB,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnE;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,QAAQ,GAAG;IACvD,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACpC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B,CAmCA;AA0DD,6FAA6F;AAC7F,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,QAAQ,EACf,QAAQ,GAAE,QAAmB,EAC7B,MAAM,GAAE,YAA0B,GACjC,MAAM,CAmFR;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAc5F"}
@@ -0,0 +1,203 @@
1
+ // The `models` stage: named schemas as Enum classes, dataclasses/pydantic models
2
+ // (allOf flattened), union aliases, and the decoder's discriminator registrations.
3
+ import { discriminatorCases, enumValues, flattenAllOf, } from '@redocly/client-generator';
4
+ import { PythonPrinter } from '@redocly/client-generator/printers/python';
5
+ import { className, fieldName, naming } from "./naming.js";
6
+ import { pythonType } from "./types.js";
7
+ /**
8
+ * Under `models: pydantic` the decoder hands a whole object tree to `model_validate`, so a
9
+ * union nested in a model is resolved by pydantic and never reaches the `DISCRIMINATORS`
10
+ * table. Pydantic resolves it correctly when the annotation carries the discriminator, which
11
+ * it accepts only if every member types that property as a `Literal` — and the mapping
12
+ * already pins one value per member. This pass works out which unions qualify: every member
13
+ * must declare the property, and no member may be pinned to two different values (a schema
14
+ * reused by two unions).
15
+ */
16
+ export function pydanticDiscriminators(model) {
17
+ const pins = new Map();
18
+ const conflicted = new Set();
19
+ const candidates = [];
20
+ for (const { name, schema } of model.schemas) {
21
+ const cases = discriminatorCases(schema, model);
22
+ if (cases === undefined)
23
+ continue;
24
+ const declares = cases.cases.every((entry) => flattenAllOf(entry.schema, model)?.properties.some((property) => property.name === cases.property) === true);
25
+ if (!declares)
26
+ continue;
27
+ for (const entry of cases.cases) {
28
+ const existing = pins.get(entry.schemaName);
29
+ if (existing !== undefined && existing.value !== entry.value) {
30
+ conflicted.add(entry.schemaName);
31
+ continue;
32
+ }
33
+ pins.set(entry.schemaName, { property: cases.property, value: entry.value });
34
+ }
35
+ candidates.push({
36
+ name,
37
+ property: cases.property,
38
+ members: cases.cases.map((entry) => entry.schemaName),
39
+ });
40
+ }
41
+ const unions = new Map();
42
+ for (const candidate of candidates) {
43
+ if (candidate.members.some((member) => conflicted.has(member)))
44
+ continue;
45
+ unions.set(candidate.name, fieldName(candidate.property).python);
46
+ }
47
+ for (const member of conflicted)
48
+ pins.delete(member);
49
+ return { pins, unions };
50
+ }
51
+ function writeDataclass(printer, name, properties, dateType, models, description,
52
+ /** The discriminator value this class is mapped to, pinned as a `Literal` (pydantic). */
53
+ pinned) {
54
+ const pydantic = models === 'pydantic';
55
+ if (!pydantic)
56
+ printer.line('@dataclass');
57
+ const header = pydantic ? `class ${className(name)}(BaseModel):` : `class ${className(name)}:`;
58
+ printer.block(header, () => {
59
+ printer.doc(description);
60
+ // A wire name that is not a legal field name travels as an alias, so the model
61
+ // accepts both spellings; without this, populating by field name would fail.
62
+ if (pydantic) {
63
+ printer.line('model_config = ConfigDict(populate_by_name=True)');
64
+ printer.blank();
65
+ }
66
+ // Required fields first — a dataclass field without a default may not follow one with.
67
+ const ordered = [
68
+ ...properties.filter((property) => property.required),
69
+ ...properties.filter((property) => !property.required),
70
+ ];
71
+ const fieldMap = [];
72
+ if (ordered.length === 0)
73
+ printer.line('pass');
74
+ for (const property of ordered) {
75
+ const { python, renamed } = fieldName(property.name);
76
+ if (renamed && !pydantic)
77
+ fieldMap.push([python, property.name]);
78
+ const alias = renamed && pydantic ? `alias=${naming.string(property.name)}` : undefined;
79
+ const baseType = pinned?.property === property.name
80
+ ? `Literal[${naming.literal(pinned.value)}]`
81
+ : pythonType(property.schema, dateType);
82
+ if (property.required) {
83
+ const value = alias === undefined ? '' : ` = Field(${alias})`;
84
+ printer.line(`${python}: ${baseType}${value}`);
85
+ }
86
+ else {
87
+ const optional = baseType.startsWith('Optional[') ? baseType : `Optional[${baseType}]`;
88
+ const value = alias === undefined ? 'None' : `Field(default=None, ${alias})`;
89
+ printer.line(`${python}: ${optional} = ${value}`);
90
+ }
91
+ }
92
+ if (fieldMap.length > 0) {
93
+ printer.blank();
94
+ printer.line('# Python field name -> wire (JSON) name, for (de)serialization.');
95
+ const entries = fieldMap.map(([py, wire]) => `"${py}": ${naming.string(wire)}`).join(', ');
96
+ printer.line(`_field_map: ClassVar[Dict[str, str]] = {${entries}}`);
97
+ }
98
+ });
99
+ printer.blank();
100
+ printer.blank();
101
+ }
102
+ /** Render every named schema: Enum classes, dataclasses (allOf flattened), union aliases. */
103
+ export function renderPythonModels(model, dateType = 'string', models = 'dataclass') {
104
+ const printer = new PythonPrinter();
105
+ const { pins, unions } = models === 'pydantic'
106
+ ? pydanticDiscriminators(model)
107
+ : { pins: new Map(), unions: new Map() };
108
+ printer.line('from __future__ import annotations');
109
+ printer.blank();
110
+ if (models === 'dataclass')
111
+ printer.line('from dataclasses import dataclass');
112
+ printer.line('from enum import Enum');
113
+ // `ClassVar` types the `_field_map` of a dataclass model, which pydantic mode
114
+ // replaces with field aliases — importing it there would be an unused import.
115
+ const typingNames = [
116
+ 'Any',
117
+ 'AsyncIterator',
118
+ 'Dict',
119
+ 'Iterator',
120
+ 'List',
121
+ 'Literal',
122
+ 'Optional',
123
+ 'Tuple',
124
+ 'Union',
125
+ ];
126
+ if (models === 'dataclass')
127
+ typingNames.splice(2, 0, 'ClassVar');
128
+ if (unions.size > 0)
129
+ typingNames.unshift('Annotated');
130
+ printer.line(`from typing import ${typingNames.join(', ')}`);
131
+ if (models === 'pydantic')
132
+ printer.line('from pydantic import BaseModel, ConfigDict, Field');
133
+ // Only under `dateType: Date` — an unused import in every other client would be noise.
134
+ if (dateType === 'Date')
135
+ printer.line('from datetime import date, datetime');
136
+ printer.blank();
137
+ printer.blank();
138
+ const aliases = [];
139
+ for (const { name, schema } of model.schemas) {
140
+ const asEnum = enumValues(schema);
141
+ if (asEnum !== undefined) {
142
+ const base = asEnum.scalar === 'string' ? 'str, Enum' : 'int, Enum';
143
+ printer.block(`class ${className(name)}(${base}):`, () => {
144
+ printer.doc(schema.description);
145
+ asEnum.values.forEach((value, index) => {
146
+ printer.line(`${asEnum.memberNames[index]} = ${naming.literal(value)}`);
147
+ });
148
+ });
149
+ printer.blank();
150
+ printer.blank();
151
+ continue;
152
+ }
153
+ if (schema.kind === 'object' || schema.kind === 'intersection') {
154
+ const flat = flattenAllOf(schema, model);
155
+ if (flat !== undefined) {
156
+ writeDataclass(printer, name, flat.properties, dateType, models, flat.description ?? schema.description, pins.get(name));
157
+ continue;
158
+ }
159
+ }
160
+ // Everything else (unions, scalar aliases, records) becomes a module-level alias,
161
+ // emitted AFTER the classes it references so the assignment evaluates.
162
+ aliases.push(() => {
163
+ const cases = discriminatorCases(schema, model);
164
+ if (cases !== undefined) {
165
+ const table = cases.cases
166
+ .map((entry) => `${entry.value} -> ${className(entry.schemaName)}`)
167
+ .join(', ');
168
+ printer.line(`# Discriminated by "${cases.property}": ${table}`);
169
+ }
170
+ const field = unions.get(name);
171
+ const union = field === undefined
172
+ ? pythonType(schema, dateType)
173
+ : `Annotated[${pythonType(schema, dateType)}, Field(discriminator=${naming.string(field)})]`;
174
+ printer.line(`${className(name)} = ${union}`);
175
+ printer.blank();
176
+ });
177
+ }
178
+ for (const emit of aliases)
179
+ emit();
180
+ return printer.toString();
181
+ }
182
+ /**
183
+ * `DISCRIMINATORS[Pet] = ("petType", {"cat": Cat, ...})` registration lines, which `decode`
184
+ * dispatches through. A union whose annotation already carries the discriminator is left
185
+ * out: pydantic resolves it at any depth, and the `Literal` on each member makes the
186
+ * decoder's member probe exact.
187
+ */
188
+ export function discriminatorRegistrations(model, annotated) {
189
+ const lines = [];
190
+ for (const { name, schema } of model.schemas) {
191
+ if (annotated.has(name))
192
+ continue;
193
+ const cases = discriminatorCases(schema, model);
194
+ if (cases === undefined)
195
+ continue;
196
+ const mapping = cases.cases
197
+ .map((entry) => `${naming.string(entry.value)}: ${className(entry.schemaName)}`)
198
+ .join(', ');
199
+ lines.push(`DISCRIMINATORS[${className(name)}] = (${naming.string(cases.property)}, {${mapping}})`);
200
+ }
201
+ return lines;
202
+ }
203
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/generators/python/models.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { type ApiModel, type OperationModel } from '@redocly/client-generator';
2
+ import { PythonPrinter } from '@redocly/client-generator/printers/python';
3
+ export declare const PY: ReadonlySet<string>;
4
+ export declare const naming: PythonPrinter;
5
+ /** A named schema's Python class name. */
6
+ export declare function className(name: string): string;
7
+ /** A field/parameter name, with the wire name preserved when sanitization renames it. */
8
+ export declare function fieldName(name: string): {
9
+ python: string;
10
+ renamed: boolean;
11
+ };
12
+ /** Every operation with its collision-free snake_case Python method name. */
13
+ export declare function operationIdents(model: ApiModel): Array<{
14
+ op: OperationModel;
15
+ ident: string;
16
+ }>;
17
+ /**
18
+ * The argument names every request method declares itself. A parameter named after one of
19
+ * them takes a suffixed binding instead, so the slot keeps its meaning.
20
+ */
21
+ export declare const METHOD_ARG_SLOTS: string[];
22
+ //# sourceMappingURL=naming.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"naming.d.ts","sourceRoot":"","sources":["../../../src/generators/python/naming.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,cAAc,EAGpB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAE1E,eAAO,MAAM,EAAE,qBAAwB,CAAC;AAGxC,eAAO,MAAM,MAAM,eAAsB,CAAC;AAE1C,0CAA0C;AAC1C,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,yFAAyF;AACzF,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAG5E;AAED,6EAA6E;AAC7E,wBAAgB,eAAe,CAAC,KAAK,EAAE,QAAQ,GAAG,KAAK,CAAC;IAAE,EAAE,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAO7F;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,UAAqE,CAAC"}
@@ -0,0 +1,28 @@
1
+ // The `naming` stage: the shared printer/naming instance and the collision-free
2
+ // identifier derivations every other stage builds on.
3
+ import { RESERVED_WORDS, uniqueIdentifiers, } from '@redocly/client-generator';
4
+ import { PythonPrinter } from '@redocly/client-generator/printers/python';
5
+ export const PY = RESERVED_WORDS.python;
6
+ // Naming delegates to the printer — one implementation, used here and by any ejected copy.
7
+ export const naming = new PythonPrinter();
8
+ /** A named schema's Python class name. */
9
+ export function className(name) {
10
+ return naming.typeName(name);
11
+ }
12
+ /** A field/parameter name, with the wire name preserved when sanitization renames it. */
13
+ export function fieldName(name) {
14
+ const { identifier, renamed } = naming.memberName(name);
15
+ return { python: identifier, renamed };
16
+ }
17
+ /** Every operation with its collision-free snake_case Python method name. */
18
+ export function operationIdents(model) {
19
+ const operations = model.services.flatMap((service) => service.operations);
20
+ const idents = uniqueIdentifiers(operations.map((op) => op.name), { style: 'snake', reserved: PY });
21
+ return operations.map((op, index) => ({ op, ident: idents[index] }));
22
+ }
23
+ /**
24
+ * The argument names every request method declares itself. A parameter named after one of
25
+ * them takes a suffixed binding instead, so the slot keeps its meaning.
26
+ */
27
+ export const METHOD_ARG_SLOTS = ['self', 'body', 'headers', 'timeout', 'retry', 'idempotency_key'];
28
+ //# sourceMappingURL=naming.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"naming.js","sourceRoot":"","sources":["../../../src/generators/python/naming.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,sDAAsD;AAEtD,OAAO,EAGL,cAAc,EACd,iBAAiB,GAClB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAE1E,MAAM,CAAC,MAAM,EAAE,GAAG,cAAc,CAAC,MAAM,CAAC;AAExC,2FAA2F;AAC3F,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;AAE1C,0CAA0C;AAC1C,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACxD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;AACzC,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,eAAe,CAAC,KAAe;IAC7C,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3E,MAAM,MAAM,GAAG,iBAAiB,CAC9B,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,EAC/B,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CACjC,CAAC;IACF,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AACvE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type ApiModel, type DateType, type OperationModel } from '@redocly/client-generator';
2
+ import type { PythonPrinter } from '@redocly/client-generator/printers/python';
3
+ export declare function writeMethod(printer: PythonPrinter, op: OperationModel, ident: string, errorMode: 'throw' | 'result', isAsync: boolean, dateType: DateType, model?: ApiModel, envelope?: boolean): void;
4
+ //# sourceMappingURL=operations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../../src/generators/python/operations.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,QAAQ,EAGb,KAAK,cAAc,EAGpB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAM/E,wBAAgB,WAAW,CACzB,OAAO,EAAE,aAAa,EACtB,EAAE,EAAE,cAAc,EAClB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,OAAO,GAAG,QAAQ,EAC7B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,KAAK,CAAC,EAAE,QAAQ,EAChB,QAAQ,UAAQ,GACf,IAAI,CAmHN"}