@redocly/client-generator 0.3.8 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (617) hide show
  1. package/README.md +32 -54
  2. package/eject-assets/AGENTS.md +137 -0
  3. package/eject-assets/generators/cli/docs.ts +224 -0
  4. package/eject-assets/generators/cli/engine-source.ts +21 -0
  5. package/eject-assets/generators/cli/index.ts +90 -0
  6. package/eject-assets/generators/cli/render.ts +348 -0
  7. package/eject-assets/generators/go/client.ts +57 -0
  8. package/eject-assets/generators/go/descriptor.ts +41 -0
  9. package/eject-assets/generators/go/index.ts +336 -0
  10. package/eject-assets/generators/go/models.ts +179 -0
  11. package/eject-assets/generators/go/naming.ts +49 -0
  12. package/eject-assets/generators/go/operations.ts +296 -0
  13. package/eject-assets/generators/go/pagination.ts +194 -0
  14. package/eject-assets/generators/go/types.ts +60 -0
  15. package/eject-assets/generators/mock/faker.ts +214 -0
  16. package/eject-assets/generators/mock/index.ts +35 -0
  17. package/eject-assets/generators/mock/render.ts +282 -0
  18. package/eject-assets/generators/mock/sample.ts +316 -0
  19. package/eject-assets/generators/mock/values.ts +63 -0
  20. package/eject-assets/generators/php/client.ts +63 -0
  21. package/eject-assets/generators/php/descriptor.ts +58 -0
  22. package/eject-assets/generators/php/index.ts +237 -0
  23. package/eject-assets/generators/php/models.ts +275 -0
  24. package/eject-assets/generators/php/naming.ts +51 -0
  25. package/eject-assets/generators/php/operations.ts +232 -0
  26. package/eject-assets/generators/php/pagination.ts +133 -0
  27. package/eject-assets/generators/php/types.ts +148 -0
  28. package/eject-assets/generators/python/client.ts +123 -0
  29. package/eject-assets/generators/python/descriptor.ts +52 -0
  30. package/eject-assets/generators/python/index.ts +251 -0
  31. package/eject-assets/generators/python/models.ts +242 -0
  32. package/eject-assets/generators/python/naming.ts +46 -0
  33. package/eject-assets/generators/python/operations.ts +147 -0
  34. package/eject-assets/generators/python/pagination.ts +128 -0
  35. package/eject-assets/generators/python/types.ts +54 -0
  36. package/eject-assets/generators/swr/index.ts +37 -0
  37. package/eject-assets/generators/swr/render.ts +78 -0
  38. package/eject-assets/generators/tanstack-query/index.ts +48 -0
  39. package/eject-assets/generators/tanstack-query/render.ts +346 -0
  40. package/eject-assets/generators/transformers/index.ts +46 -0
  41. package/eject-assets/generators/transformers/render.ts +506 -0
  42. package/eject-assets/generators/typescript/banner.ts +35 -0
  43. package/eject-assets/generators/typescript/client.ts +254 -0
  44. package/eject-assets/generators/typescript/descriptor.ts +137 -0
  45. package/eject-assets/generators/typescript/index.ts +101 -0
  46. package/eject-assets/generators/typescript/inline-runtime.ts +135 -0
  47. package/eject-assets/generators/typescript/operation-signature.ts +62 -0
  48. package/eject-assets/generators/typescript/operation-types.ts +17 -0
  49. package/eject-assets/generators/typescript/operations.ts +524 -0
  50. package/eject-assets/generators/typescript/response-headers.ts +74 -0
  51. package/eject-assets/generators/typescript/type-guards.ts +159 -0
  52. package/eject-assets/generators/typescript/types.ts +172 -0
  53. package/eject-assets/generators/zod/index.ts +32 -0
  54. package/eject-assets/generators/zod/schemas.ts +456 -0
  55. package/eject-assets/skills/cli-generator/SKILL.md +121 -0
  56. package/eject-assets/skills/client-generators/SKILL.md +142 -0
  57. package/eject-assets/skills/go-generator/SKILL.md +96 -0
  58. package/eject-assets/skills/mock-generator/SKILL.md +50 -0
  59. package/eject-assets/skills/php-generator/SKILL.md +112 -0
  60. package/eject-assets/skills/python-generator/SKILL.md +110 -0
  61. package/eject-assets/skills/swr-generator/SKILL.md +50 -0
  62. package/eject-assets/skills/tanstack-query-generator/SKILL.md +55 -0
  63. package/eject-assets/skills/transformers-generator/SKILL.md +47 -0
  64. package/eject-assets/skills/typescript-generator/SKILL.md +95 -0
  65. package/eject-assets/skills/zod-generator/SKILL.md +54 -0
  66. package/lib/authoring/index.d.ts +11 -0
  67. package/lib/authoring/index.d.ts.map +1 -0
  68. package/lib/authoring/index.js +42 -0
  69. package/lib/authoring/index.js.map +1 -0
  70. package/lib/authoring/naming.d.ts +34 -0
  71. package/lib/authoring/naming.d.ts.map +1 -0
  72. package/lib/authoring/naming.js +104 -0
  73. package/lib/authoring/naming.js.map +1 -0
  74. package/lib/authoring/operation.d.ts +47 -0
  75. package/lib/authoring/operation.d.ts.map +1 -0
  76. package/lib/authoring/operation.js +86 -0
  77. package/lib/authoring/operation.js.map +1 -0
  78. package/lib/authoring/options.d.ts +9 -0
  79. package/lib/authoring/options.d.ts.map +1 -0
  80. package/lib/authoring/options.js +5 -0
  81. package/lib/authoring/options.js.map +1 -0
  82. package/lib/authoring/pagination.d.ts +19 -0
  83. package/lib/authoring/pagination.d.ts.map +1 -0
  84. package/lib/authoring/pagination.js +45 -0
  85. package/lib/authoring/pagination.js.map +1 -0
  86. package/lib/authoring/printer.d.ts +16 -0
  87. package/lib/authoring/printer.d.ts.map +1 -0
  88. package/lib/authoring/printer.js +36 -0
  89. package/lib/authoring/printer.js.map +1 -0
  90. package/lib/authoring/reference-page.d.ts +31 -0
  91. package/lib/authoring/reference-page.d.ts.map +1 -0
  92. package/lib/authoring/reference-page.js +160 -0
  93. package/lib/authoring/reference-page.js.map +1 -0
  94. package/lib/authoring/schema.d.ts +51 -0
  95. package/lib/authoring/schema.d.ts.map +1 -0
  96. package/lib/authoring/schema.js +190 -0
  97. package/lib/authoring/schema.js.map +1 -0
  98. package/lib/cli-contract.d.ts +126 -0
  99. package/lib/cli-contract.d.ts.map +1 -0
  100. package/lib/cli-contract.js +25 -0
  101. package/lib/cli-contract.js.map +1 -0
  102. package/lib/{emitters/wrapper-support.d.ts → contracts/typescript.d.ts} +13 -24
  103. package/lib/contracts/typescript.d.ts.map +1 -0
  104. package/lib/contracts/typescript.js +87 -0
  105. package/lib/contracts/typescript.js.map +1 -0
  106. package/lib/generate.d.ts +10 -10
  107. package/lib/generate.d.ts.map +1 -1
  108. package/lib/generate.js +25 -106
  109. package/lib/generate.js.map +1 -1
  110. package/lib/generators/cli/docs.d.ts +19 -0
  111. package/lib/generators/cli/docs.d.ts.map +1 -0
  112. package/lib/generators/cli/docs.js +187 -0
  113. package/lib/generators/cli/docs.js.map +1 -0
  114. package/lib/generators/cli/engine-source.d.ts +5 -0
  115. package/lib/generators/cli/engine-source.d.ts.map +1 -0
  116. package/lib/generators/cli/engine-source.js +12 -0
  117. package/lib/generators/cli/engine-source.js.map +1 -0
  118. package/lib/generators/cli/index.d.ts +18 -0
  119. package/lib/generators/cli/index.d.ts.map +1 -0
  120. package/lib/generators/cli/index.js +67 -0
  121. package/lib/generators/cli/index.js.map +1 -0
  122. package/lib/generators/cli/render.d.ts +39 -0
  123. package/lib/generators/cli/render.d.ts.map +1 -0
  124. package/lib/generators/cli/render.js +281 -0
  125. package/lib/generators/cli/render.js.map +1 -0
  126. package/lib/generators/cli/runtime/cli.d.ts +42 -0
  127. package/lib/generators/cli/runtime/cli.d.ts.map +1 -0
  128. package/lib/generators/cli/runtime/cli.js +582 -0
  129. package/lib/generators/cli/runtime/cli.js.map +1 -0
  130. package/lib/generators/compatibility.d.ts +10 -0
  131. package/lib/generators/compatibility.d.ts.map +1 -0
  132. package/lib/generators/compatibility.js +45 -0
  133. package/lib/generators/compatibility.js.map +1 -0
  134. package/lib/generators/go/client.d.ts +5 -0
  135. package/lib/generators/go/client.d.ts.map +1 -0
  136. package/lib/generators/go/client.js +34 -0
  137. package/lib/generators/go/client.js.map +1 -0
  138. package/lib/generators/go/descriptor.d.ts +6 -0
  139. package/lib/generators/go/descriptor.d.ts.map +1 -0
  140. package/lib/generators/go/descriptor.js +26 -0
  141. package/lib/generators/go/descriptor.js.map +1 -0
  142. package/lib/generators/go/index.d.ts +14 -0
  143. package/lib/generators/go/index.d.ts.map +1 -0
  144. package/lib/generators/go/index.js +240 -0
  145. package/lib/generators/go/index.js.map +1 -0
  146. package/lib/generators/go/models.d.ts +4 -0
  147. package/lib/generators/go/models.d.ts.map +1 -0
  148. package/lib/generators/go/models.js +125 -0
  149. package/lib/generators/go/models.js.map +1 -0
  150. package/lib/generators/go/naming.d.ts +15 -0
  151. package/lib/generators/go/naming.d.ts.map +1 -0
  152. package/lib/generators/go/naming.js +36 -0
  153. package/lib/generators/go/naming.js.map +1 -0
  154. package/lib/generators/go/operations.d.ts +16 -0
  155. package/lib/generators/go/operations.d.ts.map +1 -0
  156. package/lib/generators/go/operations.js +200 -0
  157. package/lib/generators/go/operations.js.map +1 -0
  158. package/lib/generators/go/pagination.d.ts +5 -0
  159. package/lib/generators/go/pagination.d.ts.map +1 -0
  160. package/lib/generators/go/pagination.js +93 -0
  161. package/lib/generators/go/pagination.js.map +1 -0
  162. package/lib/generators/go/types.d.ts +4 -0
  163. package/lib/generators/go/types.d.ts.map +1 -0
  164. package/lib/generators/go/types.js +48 -0
  165. package/lib/generators/go/types.js.map +1 -0
  166. package/lib/generators/index.d.ts +2 -3
  167. package/lib/generators/index.d.ts.map +1 -1
  168. package/lib/generators/index.js +31 -53
  169. package/lib/generators/index.js.map +1 -1
  170. package/lib/generators/meta.d.ts +13 -0
  171. package/lib/generators/meta.d.ts.map +1 -0
  172. package/lib/generators/meta.js +157 -0
  173. package/lib/generators/meta.js.map +1 -0
  174. package/lib/{emitters → generators/mock}/faker.d.ts +4 -5
  175. package/lib/generators/mock/faker.d.ts.map +1 -0
  176. package/lib/generators/mock/faker.js +180 -0
  177. package/lib/generators/mock/faker.js.map +1 -0
  178. package/lib/generators/{mock.d.ts → mock/index.d.ts} +2 -2
  179. package/lib/generators/mock/index.d.ts.map +1 -0
  180. package/lib/generators/{mock.js → mock/index.js} +8 -8
  181. package/lib/generators/mock/index.js.map +1 -0
  182. package/lib/{emitters/mock.d.ts → generators/mock/render.d.ts} +2 -3
  183. package/lib/generators/mock/render.d.ts.map +1 -0
  184. package/lib/generators/mock/render.js +228 -0
  185. package/lib/generators/mock/render.js.map +1 -0
  186. package/lib/{emitters → generators/mock}/sample.d.ts +1 -2
  187. package/lib/generators/mock/sample.d.ts.map +1 -0
  188. package/lib/generators/mock/sample.js.map +1 -0
  189. package/lib/generators/mock/values.d.ts +33 -0
  190. package/lib/generators/mock/values.d.ts.map +1 -0
  191. package/lib/generators/mock/values.js +46 -0
  192. package/lib/generators/mock/values.js.map +1 -0
  193. package/lib/generators/options.d.ts +7 -0
  194. package/lib/generators/options.d.ts.map +1 -0
  195. package/lib/generators/options.js +74 -0
  196. package/lib/generators/options.js.map +1 -0
  197. package/lib/generators/php/client.d.ts +5 -0
  198. package/lib/generators/php/client.d.ts.map +1 -0
  199. package/lib/generators/php/client.js +38 -0
  200. package/lib/generators/php/client.js.map +1 -0
  201. package/lib/generators/php/descriptor.d.ts +7 -0
  202. package/lib/generators/php/descriptor.d.ts.map +1 -0
  203. package/lib/generators/php/descriptor.js +42 -0
  204. package/lib/generators/php/descriptor.js.map +1 -0
  205. package/lib/generators/php/index.d.ts +14 -0
  206. package/lib/generators/php/index.d.ts.map +1 -0
  207. package/lib/generators/php/index.js +166 -0
  208. package/lib/generators/php/index.js.map +1 -0
  209. package/lib/generators/php/models.d.ts +8 -0
  210. package/lib/generators/php/models.d.ts.map +1 -0
  211. package/lib/generators/php/models.js +200 -0
  212. package/lib/generators/php/models.js.map +1 -0
  213. package/lib/generators/php/naming.d.ts +16 -0
  214. package/lib/generators/php/naming.d.ts.map +1 -0
  215. package/lib/generators/php/naming.js +31 -0
  216. package/lib/generators/php/naming.js.map +1 -0
  217. package/lib/generators/php/operations.d.ts +21 -0
  218. package/lib/generators/php/operations.d.ts.map +1 -0
  219. package/lib/generators/php/operations.js +156 -0
  220. package/lib/generators/php/operations.js.map +1 -0
  221. package/lib/generators/php/pagination.d.ts +5 -0
  222. package/lib/generators/php/pagination.d.ts.map +1 -0
  223. package/lib/generators/php/pagination.js +68 -0
  224. package/lib/generators/php/pagination.js.map +1 -0
  225. package/lib/generators/php/types.d.ts +27 -0
  226. package/lib/generators/php/types.d.ts.map +1 -0
  227. package/lib/generators/php/types.js +128 -0
  228. package/lib/generators/php/types.js.map +1 -0
  229. package/lib/generators/python/client.d.ts +6 -0
  230. package/lib/generators/python/client.d.ts.map +1 -0
  231. package/lib/generators/python/client.js +80 -0
  232. package/lib/generators/python/client.js.map +1 -0
  233. package/lib/generators/python/descriptor.d.ts +9 -0
  234. package/lib/generators/python/descriptor.d.ts.map +1 -0
  235. package/lib/generators/python/descriptor.js +38 -0
  236. package/lib/generators/python/descriptor.js.map +1 -0
  237. package/lib/generators/python/index.d.ts +15 -0
  238. package/lib/generators/python/index.d.ts.map +1 -0
  239. package/lib/generators/python/index.js +197 -0
  240. package/lib/generators/python/index.js.map +1 -0
  241. package/lib/generators/python/models.d.ts +31 -0
  242. package/lib/generators/python/models.d.ts.map +1 -0
  243. package/lib/generators/python/models.js +203 -0
  244. package/lib/generators/python/models.js.map +1 -0
  245. package/lib/generators/python/naming.d.ts +22 -0
  246. package/lib/generators/python/naming.d.ts.map +1 -0
  247. package/lib/generators/python/naming.js +28 -0
  248. package/lib/generators/python/naming.js.map +1 -0
  249. package/lib/generators/python/operations.d.ts +4 -0
  250. package/lib/generators/python/operations.d.ts.map +1 -0
  251. package/lib/generators/python/operations.js +108 -0
  252. package/lib/generators/python/operations.js.map +1 -0
  253. package/lib/generators/python/pagination.d.ts +5 -0
  254. package/lib/generators/python/pagination.d.ts.map +1 -0
  255. package/lib/generators/python/pagination.js +95 -0
  256. package/lib/generators/python/pagination.js.map +1 -0
  257. package/lib/generators/python/types.d.ts +4 -0
  258. package/lib/generators/python/types.d.ts.map +1 -0
  259. package/lib/generators/python/types.js +45 -0
  260. package/lib/generators/python/types.js.map +1 -0
  261. package/lib/generators/resolve.d.ts.map +1 -1
  262. package/lib/generators/resolve.js +92 -13
  263. package/lib/generators/resolve.js.map +1 -1
  264. package/lib/generators/{swr.d.ts → swr/index.d.ts} +3 -3
  265. package/lib/generators/swr/index.d.ts.map +1 -0
  266. package/lib/generators/{swr.js → swr/index.js} +7 -10
  267. package/lib/generators/swr/index.js.map +1 -0
  268. package/lib/{emitters/swr.d.ts → generators/swr/render.d.ts} +2 -4
  269. package/lib/generators/swr/render.d.ts.map +1 -0
  270. package/lib/generators/swr/render.js +57 -0
  271. package/lib/generators/swr/render.js.map +1 -0
  272. package/lib/generators/{tanstack-query.d.ts → tanstack-query/index.d.ts} +3 -3
  273. package/lib/generators/tanstack-query/index.d.ts.map +1 -0
  274. package/lib/generators/{tanstack-query.js → tanstack-query/index.js} +11 -10
  275. package/lib/generators/tanstack-query/index.js.map +1 -0
  276. package/lib/{emitters/tanstack-query.d.ts → generators/tanstack-query/render.d.ts} +6 -5
  277. package/lib/generators/tanstack-query/render.d.ts.map +1 -0
  278. package/lib/{emitters/tanstack-query.js → generators/tanstack-query/render.js} +33 -21
  279. package/lib/generators/tanstack-query/render.js.map +1 -0
  280. package/lib/generators/{transformers.d.ts → transformers/index.d.ts} +2 -2
  281. package/lib/generators/transformers/index.d.ts.map +1 -0
  282. package/lib/generators/{transformers.js → transformers/index.js} +11 -8
  283. package/lib/generators/transformers/index.js.map +1 -0
  284. package/lib/{emitters/transformers.d.ts → generators/transformers/render.d.ts} +2 -2
  285. package/lib/generators/transformers/render.d.ts.map +1 -0
  286. package/lib/{emitters/transformers.js → generators/transformers/render.js} +125 -165
  287. package/lib/generators/transformers/render.js.map +1 -0
  288. package/lib/generators/types.d.ts +190 -12
  289. package/lib/generators/types.d.ts.map +1 -1
  290. package/lib/generators/typescript/banner.d.ts +12 -0
  291. package/lib/generators/typescript/banner.d.ts.map +1 -0
  292. package/lib/{emitters/emit-options.js → generators/typescript/banner.js} +2 -3
  293. package/lib/generators/typescript/banner.js.map +1 -0
  294. package/lib/generators/typescript/client.d.ts +25 -0
  295. package/lib/generators/typescript/client.d.ts.map +1 -0
  296. package/lib/generators/typescript/client.js +207 -0
  297. package/lib/generators/typescript/client.js.map +1 -0
  298. package/lib/generators/typescript/descriptor.d.ts +11 -0
  299. package/lib/generators/typescript/descriptor.d.ts.map +1 -0
  300. package/lib/generators/typescript/descriptor.js +97 -0
  301. package/lib/generators/typescript/descriptor.js.map +1 -0
  302. package/lib/generators/typescript/index.d.ts +20 -0
  303. package/lib/generators/typescript/index.d.ts.map +1 -0
  304. package/lib/generators/typescript/index.js +80 -0
  305. package/lib/generators/typescript/index.js.map +1 -0
  306. package/lib/generators/typescript/inline-runtime.d.ts +21 -0
  307. package/lib/generators/typescript/inline-runtime.d.ts.map +1 -0
  308. package/lib/generators/typescript/inline-runtime.js +114 -0
  309. package/lib/generators/typescript/inline-runtime.js.map +1 -0
  310. package/lib/generators/typescript/operation-signature.d.ts +23 -0
  311. package/lib/generators/typescript/operation-signature.d.ts.map +1 -0
  312. package/lib/generators/typescript/operation-signature.js +41 -0
  313. package/lib/generators/typescript/operation-signature.js.map +1 -0
  314. package/lib/generators/typescript/operation-types.d.ts +9 -0
  315. package/lib/generators/typescript/operation-types.d.ts.map +1 -0
  316. package/lib/generators/typescript/operation-types.js +11 -0
  317. package/lib/generators/typescript/operation-types.js.map +1 -0
  318. package/lib/generators/typescript/operations.d.ts +60 -0
  319. package/lib/generators/typescript/operations.d.ts.map +1 -0
  320. package/lib/generators/typescript/operations.js +386 -0
  321. package/lib/generators/typescript/operations.js.map +1 -0
  322. package/lib/generators/typescript/response-headers.d.ts +12 -0
  323. package/lib/generators/typescript/response-headers.d.ts.map +1 -0
  324. package/lib/generators/typescript/response-headers.js +40 -0
  325. package/lib/generators/typescript/response-headers.js.map +1 -0
  326. package/lib/generators/typescript/runtime/auth.d.ts.map +1 -0
  327. package/lib/generators/typescript/runtime/auth.js.map +1 -0
  328. package/lib/{runtime → generators/typescript/runtime}/create-client.d.ts +7 -2
  329. package/lib/generators/typescript/runtime/create-client.d.ts.map +1 -0
  330. package/lib/{runtime → generators/typescript/runtime}/create-client.js +84 -30
  331. package/lib/generators/typescript/runtime/create-client.js.map +1 -0
  332. package/lib/generators/typescript/runtime/errors.d.ts.map +1 -0
  333. package/lib/generators/typescript/runtime/errors.js.map +1 -0
  334. package/lib/generators/typescript/runtime/index.d.ts.map +1 -0
  335. package/lib/generators/typescript/runtime/index.js.map +1 -0
  336. package/lib/generators/typescript/runtime/multipart.d.ts.map +1 -0
  337. package/lib/generators/typescript/runtime/multipart.js.map +1 -0
  338. package/lib/{runtime → generators/typescript/runtime}/paginate.d.ts +2 -2
  339. package/lib/generators/typescript/runtime/paginate.d.ts.map +1 -0
  340. package/lib/{runtime → generators/typescript/runtime}/paginate.js +12 -12
  341. package/lib/generators/typescript/runtime/paginate.js.map +1 -0
  342. package/lib/generators/typescript/runtime/parse.d.ts.map +1 -0
  343. package/lib/generators/typescript/runtime/parse.js.map +1 -0
  344. package/lib/generators/typescript/runtime/retry.d.ts.map +1 -0
  345. package/lib/generators/typescript/runtime/retry.js.map +1 -0
  346. package/lib/generators/typescript/runtime/send.d.ts.map +1 -0
  347. package/lib/generators/typescript/runtime/send.js.map +1 -0
  348. package/lib/generators/typescript/runtime/setup.d.ts.map +1 -0
  349. package/lib/generators/typescript/runtime/setup.js.map +1 -0
  350. package/lib/generators/typescript/runtime/sse.d.ts.map +1 -0
  351. package/lib/generators/typescript/runtime/sse.js.map +1 -0
  352. package/lib/{runtime → generators/typescript/runtime}/types.d.ts +17 -95
  353. package/lib/generators/typescript/runtime/types.d.ts.map +1 -0
  354. package/lib/generators/typescript/runtime/types.js.map +1 -0
  355. package/lib/generators/typescript/runtime/url.d.ts.map +1 -0
  356. package/lib/generators/typescript/runtime/url.js.map +1 -0
  357. package/lib/generators/typescript/type-guards.d.ts +4 -0
  358. package/lib/generators/typescript/type-guards.d.ts.map +1 -0
  359. package/lib/{emitters → generators/typescript}/type-guards.js +18 -52
  360. package/lib/generators/typescript/type-guards.js.map +1 -0
  361. package/lib/generators/typescript/types.d.ts +8 -0
  362. package/lib/generators/typescript/types.d.ts.map +1 -0
  363. package/lib/generators/typescript/types.js +132 -0
  364. package/lib/generators/typescript/types.js.map +1 -0
  365. package/lib/generators/{zod.d.ts → zod/index.d.ts} +2 -2
  366. package/lib/generators/zod/index.d.ts.map +1 -0
  367. package/lib/generators/{zod.js → zod/index.js} +5 -7
  368. package/lib/generators/zod/index.js.map +1 -0
  369. package/lib/{emitters/zod.d.ts → generators/zod/schemas.d.ts} +4 -5
  370. package/lib/generators/zod/schemas.d.ts.map +1 -0
  371. package/lib/{emitters/zod.js → generators/zod/schemas.js} +118 -154
  372. package/lib/generators/zod/schemas.js.map +1 -0
  373. package/lib/index.d.ts +8 -3
  374. package/lib/index.d.ts.map +1 -1
  375. package/lib/index.js +18 -11
  376. package/lib/index.js.map +1 -1
  377. package/lib/intermediate-representation/build.d.ts +8 -1
  378. package/lib/intermediate-representation/build.d.ts.map +1 -1
  379. package/lib/intermediate-representation/build.js +59 -4
  380. package/lib/intermediate-representation/build.js.map +1 -1
  381. package/lib/intermediate-representation/model.d.ts +26 -1
  382. package/lib/intermediate-representation/model.d.ts.map +1 -1
  383. package/lib/intermediate-representation/model.js.map +1 -1
  384. package/lib/intermediate-representation/sanitize-identifiers.d.ts +1 -10
  385. package/lib/intermediate-representation/sanitize-identifiers.d.ts.map +1 -1
  386. package/lib/intermediate-representation/sanitize-identifiers.js +37 -38
  387. package/lib/intermediate-representation/sanitize-identifiers.js.map +1 -1
  388. package/lib/{emitters/pagination.d.ts → pagination.d.ts} +39 -15
  389. package/lib/pagination.d.ts.map +1 -0
  390. package/lib/{emitters/pagination.js → pagination.js} +13 -52
  391. package/lib/pagination.js.map +1 -0
  392. package/lib/pipeline.d.ts +17 -0
  393. package/lib/pipeline.d.ts.map +1 -0
  394. package/lib/pipeline.js +244 -0
  395. package/lib/pipeline.js.map +1 -0
  396. package/lib/plugin.d.ts +4 -4
  397. package/lib/plugin.d.ts.map +1 -1
  398. package/lib/plugin.js +12 -9
  399. package/lib/plugin.js.map +1 -1
  400. package/lib/printers/go.d.ts +33 -0
  401. package/lib/printers/go.d.ts.map +1 -0
  402. package/lib/printers/go.js +209 -0
  403. package/lib/printers/go.js.map +1 -0
  404. package/lib/printers/index.d.ts +5 -0
  405. package/lib/printers/index.d.ts.map +1 -0
  406. package/lib/printers/index.js +9 -0
  407. package/lib/printers/index.js.map +1 -0
  408. package/lib/printers/php.d.ts +21 -0
  409. package/lib/printers/php.d.ts.map +1 -0
  410. package/lib/printers/php.js +68 -0
  411. package/lib/printers/php.js.map +1 -0
  412. package/lib/printers/python.d.ts +31 -0
  413. package/lib/printers/python.d.ts.map +1 -0
  414. package/lib/printers/python.js +101 -0
  415. package/lib/printers/python.js.map +1 -0
  416. package/lib/printers/typescript.d.ts +82 -0
  417. package/lib/printers/typescript.d.ts.map +1 -0
  418. package/lib/printers/typescript.js +268 -0
  419. package/lib/printers/typescript.js.map +1 -0
  420. package/lib/reserved-names.d.ts +8 -0
  421. package/lib/reserved-names.d.ts.map +1 -0
  422. package/lib/{emitters/reserved-names.js → reserved-names.js} +16 -27
  423. package/lib/reserved-names.js.map +1 -0
  424. package/lib/runtime-contract.d.ts +62 -2
  425. package/lib/runtime-contract.d.ts.map +1 -1
  426. package/lib/runtime-contract.js +3 -3
  427. package/lib/runtime-contract.js.map +1 -1
  428. package/lib/runtime-sources/go.d.ts +2 -0
  429. package/lib/runtime-sources/go.d.ts.map +1 -0
  430. package/lib/runtime-sources/go.js +3 -0
  431. package/lib/runtime-sources/go.js.map +1 -0
  432. package/lib/runtime-sources/php.d.ts +2 -0
  433. package/lib/runtime-sources/php.d.ts.map +1 -0
  434. package/lib/runtime-sources/php.js +3 -0
  435. package/lib/runtime-sources/php.js.map +1 -0
  436. package/lib/runtime-sources/python.d.ts +12 -0
  437. package/lib/runtime-sources/python.d.ts.map +1 -0
  438. package/lib/runtime-sources/python.js +12 -0
  439. package/lib/runtime-sources/python.js.map +1 -0
  440. package/lib/runtime-sources/typescript.d.ts +36 -0
  441. package/lib/runtime-sources/typescript.d.ts.map +1 -0
  442. package/lib/runtime-sources/typescript.js +152 -0
  443. package/lib/runtime-sources/typescript.js.map +1 -0
  444. package/lib/runtime-sources.d.ts +5 -0
  445. package/lib/runtime-sources.d.ts.map +1 -0
  446. package/lib/runtime-sources.js +10 -0
  447. package/lib/runtime-sources.js.map +1 -0
  448. package/lib/setup-bake.d.ts.map +1 -0
  449. package/lib/{emitters/setup-bake.js → setup-bake.js} +11 -2
  450. package/lib/setup-bake.js.map +1 -0
  451. package/lib/types.d.ts +38 -8
  452. package/lib/types.d.ts.map +1 -1
  453. package/package.json +40 -4
  454. package/lib/emitters/auth.d.ts +0 -14
  455. package/lib/emitters/auth.d.ts.map +0 -1
  456. package/lib/emitters/auth.js +0 -30
  457. package/lib/emitters/auth.js.map +0 -1
  458. package/lib/emitters/client-assembly.d.ts +0 -15
  459. package/lib/emitters/client-assembly.d.ts.map +0 -1
  460. package/lib/emitters/client-assembly.js +0 -358
  461. package/lib/emitters/client-assembly.js.map +0 -1
  462. package/lib/emitters/descriptor.d.ts +0 -22
  463. package/lib/emitters/descriptor.d.ts.map +0 -1
  464. package/lib/emitters/descriptor.js +0 -199
  465. package/lib/emitters/descriptor.js.map +0 -1
  466. package/lib/emitters/emit-options.d.ts +0 -67
  467. package/lib/emitters/emit-options.d.ts.map +0 -1
  468. package/lib/emitters/emit-options.js.map +0 -1
  469. package/lib/emitters/faker.d.ts.map +0 -1
  470. package/lib/emitters/faker.js +0 -221
  471. package/lib/emitters/faker.js.map +0 -1
  472. package/lib/emitters/identifier.d.ts +0 -34
  473. package/lib/emitters/identifier.d.ts.map +0 -1
  474. package/lib/emitters/identifier.js +0 -104
  475. package/lib/emitters/identifier.js.map +0 -1
  476. package/lib/emitters/inline-runtime.d.ts +0 -11
  477. package/lib/emitters/inline-runtime.d.ts.map +0 -1
  478. package/lib/emitters/inline-runtime.js +0 -99
  479. package/lib/emitters/inline-runtime.js.map +0 -1
  480. package/lib/emitters/jsdoc.d.ts +0 -9
  481. package/lib/emitters/jsdoc.d.ts.map +0 -1
  482. package/lib/emitters/jsdoc.js +0 -83
  483. package/lib/emitters/jsdoc.js.map +0 -1
  484. package/lib/emitters/mock.d.ts.map +0 -1
  485. package/lib/emitters/mock.js +0 -265
  486. package/lib/emitters/mock.js.map +0 -1
  487. package/lib/emitters/operation-aliases.d.ts +0 -27
  488. package/lib/emitters/operation-aliases.d.ts.map +0 -1
  489. package/lib/emitters/operation-aliases.js +0 -150
  490. package/lib/emitters/operation-aliases.js.map +0 -1
  491. package/lib/emitters/operation-signature.d.ts +0 -24
  492. package/lib/emitters/operation-signature.d.ts.map +0 -1
  493. package/lib/emitters/operation-signature.js +0 -42
  494. package/lib/emitters/operation-signature.js.map +0 -1
  495. package/lib/emitters/operation-types.d.ts +0 -32
  496. package/lib/emitters/operation-types.d.ts.map +0 -1
  497. package/lib/emitters/operation-types.js +0 -117
  498. package/lib/emitters/operation-types.js.map +0 -1
  499. package/lib/emitters/operations.d.ts +0 -41
  500. package/lib/emitters/operations.d.ts.map +0 -1
  501. package/lib/emitters/operations.js +0 -35
  502. package/lib/emitters/operations.js.map +0 -1
  503. package/lib/emitters/pagination.d.ts.map +0 -1
  504. package/lib/emitters/pagination.js.map +0 -1
  505. package/lib/emitters/reserved-names.d.ts +0 -5
  506. package/lib/emitters/reserved-names.d.ts.map +0 -1
  507. package/lib/emitters/reserved-names.js.map +0 -1
  508. package/lib/emitters/response-headers.d.ts +0 -14
  509. package/lib/emitters/response-headers.d.ts.map +0 -1
  510. package/lib/emitters/response-headers.js +0 -91
  511. package/lib/emitters/response-headers.js.map +0 -1
  512. package/lib/emitters/runtime-sources.d.ts +0 -16
  513. package/lib/emitters/runtime-sources.d.ts.map +0 -1
  514. package/lib/emitters/runtime-sources.js +0 -16
  515. package/lib/emitters/runtime-sources.js.map +0 -1
  516. package/lib/emitters/sample.d.ts.map +0 -1
  517. package/lib/emitters/sample.js.map +0 -1
  518. package/lib/emitters/setup-bake.d.ts.map +0 -1
  519. package/lib/emitters/setup-bake.js.map +0 -1
  520. package/lib/emitters/sse.d.ts +0 -10
  521. package/lib/emitters/sse.d.ts.map +0 -1
  522. package/lib/emitters/sse.js +0 -46
  523. package/lib/emitters/sse.js.map +0 -1
  524. package/lib/emitters/support.d.ts +0 -18
  525. package/lib/emitters/support.d.ts.map +0 -1
  526. package/lib/emitters/support.js +0 -37
  527. package/lib/emitters/support.js.map +0 -1
  528. package/lib/emitters/swr.d.ts.map +0 -1
  529. package/lib/emitters/swr.js +0 -88
  530. package/lib/emitters/swr.js.map +0 -1
  531. package/lib/emitters/tanstack-query.d.ts.map +0 -1
  532. package/lib/emitters/tanstack-query.js.map +0 -1
  533. package/lib/emitters/transformers.d.ts.map +0 -1
  534. package/lib/emitters/transformers.js.map +0 -1
  535. package/lib/emitters/ts.d.ts +0 -42
  536. package/lib/emitters/ts.d.ts.map +0 -1
  537. package/lib/emitters/ts.js +0 -116
  538. package/lib/emitters/ts.js.map +0 -1
  539. package/lib/emitters/type-guards.d.ts +0 -21
  540. package/lib/emitters/type-guards.d.ts.map +0 -1
  541. package/lib/emitters/type-guards.js.map +0 -1
  542. package/lib/emitters/types.d.ts +0 -15
  543. package/lib/emitters/types.d.ts.map +0 -1
  544. package/lib/emitters/types.js +0 -125
  545. package/lib/emitters/types.js.map +0 -1
  546. package/lib/emitters/wrapper-support.d.ts.map +0 -1
  547. package/lib/emitters/wrapper-support.js +0 -127
  548. package/lib/emitters/wrapper-support.js.map +0 -1
  549. package/lib/emitters/zod.d.ts.map +0 -1
  550. package/lib/emitters/zod.js.map +0 -1
  551. package/lib/generators/anchor.d.ts +0 -9
  552. package/lib/generators/anchor.d.ts.map +0 -1
  553. package/lib/generators/anchor.js +0 -10
  554. package/lib/generators/anchor.js.map +0 -1
  555. package/lib/generators/mock.d.ts.map +0 -1
  556. package/lib/generators/mock.js.map +0 -1
  557. package/lib/generators/sdk.d.ts +0 -12
  558. package/lib/generators/sdk.d.ts.map +0 -1
  559. package/lib/generators/sdk.js +0 -26
  560. package/lib/generators/sdk.js.map +0 -1
  561. package/lib/generators/swr.d.ts.map +0 -1
  562. package/lib/generators/swr.js.map +0 -1
  563. package/lib/generators/tanstack-query.d.ts.map +0 -1
  564. package/lib/generators/tanstack-query.js.map +0 -1
  565. package/lib/generators/transformers.d.ts.map +0 -1
  566. package/lib/generators/transformers.js.map +0 -1
  567. package/lib/generators/zod.d.ts.map +0 -1
  568. package/lib/generators/zod.js.map +0 -1
  569. package/lib/runtime/auth.d.ts.map +0 -1
  570. package/lib/runtime/auth.js.map +0 -1
  571. package/lib/runtime/create-client.d.ts.map +0 -1
  572. package/lib/runtime/create-client.js.map +0 -1
  573. package/lib/runtime/errors.d.ts.map +0 -1
  574. package/lib/runtime/errors.js.map +0 -1
  575. package/lib/runtime/index.d.ts.map +0 -1
  576. package/lib/runtime/index.js.map +0 -1
  577. package/lib/runtime/multipart.d.ts.map +0 -1
  578. package/lib/runtime/multipart.js.map +0 -1
  579. package/lib/runtime/paginate.d.ts.map +0 -1
  580. package/lib/runtime/paginate.js.map +0 -1
  581. package/lib/runtime/parse.d.ts.map +0 -1
  582. package/lib/runtime/parse.js.map +0 -1
  583. package/lib/runtime/retry.d.ts.map +0 -1
  584. package/lib/runtime/retry.js.map +0 -1
  585. package/lib/runtime/send.d.ts.map +0 -1
  586. package/lib/runtime/send.js.map +0 -1
  587. package/lib/runtime/setup.d.ts.map +0 -1
  588. package/lib/runtime/setup.js.map +0 -1
  589. package/lib/runtime/sse.d.ts.map +0 -1
  590. package/lib/runtime/sse.js.map +0 -1
  591. package/lib/runtime/types.d.ts.map +0 -1
  592. package/lib/runtime/types.js.map +0 -1
  593. package/lib/runtime/url.d.ts.map +0 -1
  594. package/lib/runtime/url.js.map +0 -1
  595. /package/lib/{emitters → generators/mock}/sample.js +0 -0
  596. /package/lib/{runtime → generators/typescript/runtime}/auth.d.ts +0 -0
  597. /package/lib/{runtime → generators/typescript/runtime}/auth.js +0 -0
  598. /package/lib/{runtime → generators/typescript/runtime}/errors.d.ts +0 -0
  599. /package/lib/{runtime → generators/typescript/runtime}/errors.js +0 -0
  600. /package/lib/{runtime → generators/typescript/runtime}/index.d.ts +0 -0
  601. /package/lib/{runtime → generators/typescript/runtime}/index.js +0 -0
  602. /package/lib/{runtime → generators/typescript/runtime}/multipart.d.ts +0 -0
  603. /package/lib/{runtime → generators/typescript/runtime}/multipart.js +0 -0
  604. /package/lib/{runtime → generators/typescript/runtime}/parse.d.ts +0 -0
  605. /package/lib/{runtime → generators/typescript/runtime}/parse.js +0 -0
  606. /package/lib/{runtime → generators/typescript/runtime}/retry.d.ts +0 -0
  607. /package/lib/{runtime → generators/typescript/runtime}/retry.js +0 -0
  608. /package/lib/{runtime → generators/typescript/runtime}/send.d.ts +0 -0
  609. /package/lib/{runtime → generators/typescript/runtime}/send.js +0 -0
  610. /package/lib/{runtime → generators/typescript/runtime}/setup.d.ts +0 -0
  611. /package/lib/{runtime → generators/typescript/runtime}/setup.js +0 -0
  612. /package/lib/{runtime → generators/typescript/runtime}/sse.d.ts +0 -0
  613. /package/lib/{runtime → generators/typescript/runtime}/sse.js +0 -0
  614. /package/lib/{runtime → generators/typescript/runtime}/types.js +0 -0
  615. /package/lib/{runtime → generators/typescript/runtime}/url.d.ts +0 -0
  616. /package/lib/{runtime → generators/typescript/runtime}/url.js +0 -0
  617. /package/lib/{emitters/setup-bake.d.ts → setup-bake.d.ts} +0 -0
@@ -0,0 +1,316 @@
1
+ // Ejected from @redocly/client-generator@0.4.0 — the built-in "mock" 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 mock --update`.
5
+ import {
6
+ type DateType,
7
+ type NamedSchemaModel,
8
+ type ScalarKind,
9
+ type SchemaMetadata,
10
+ type SchemaModel,
11
+ } from '@redocly/client-generator';
12
+ import { isPlainObject } from '@redocly/openapi-core';
13
+
14
+ /** A sampled value the emitter must print as a raw TS expression rather than a JSON
15
+ * literal — e.g. a `format: binary` field, whose generated type is `Blob`. The `code`
16
+ * strings are generator-authored constants (never spec-derived), so emitting them
17
+ * verbatim is safe. */
18
+ export class SampleExpression {
19
+ constructor(readonly code: string) {}
20
+ }
21
+
22
+ /** Options for `sampleValue`. `dateType` mirrors the type emitter's `--date-type`
23
+ * knob: when `'Date'`, date/date-time fields are typed `Date` (not `string`), so
24
+ * the sample must be a `new Date(...)` expression to match. Defaults to `'string'`. */
25
+ export type SampleOptions = { dateType?: DateType };
26
+
27
+ /**
28
+ * Turn an IR schema into a single deterministic JS value for static mocks. Prefers
29
+ * a spec `example`, then `default`, then a type/format-aware synthesized value —
30
+ * EXCEPT for type-demanding fields (binary, or date/date-time under `dateType: 'Date'`)
31
+ * whose generated type is not a JSON literal: those emit a fixed raw expression that
32
+ * matches the type, regardless of any example/default (see `typeDemandedExpression`).
33
+ * Refs resolve against `schemas`; recursion is cut with a visited-set so cyclic
34
+ * schemas terminate (`null` at the cycle) instead of looping forever.
35
+ */
36
+ export function sampleValue(
37
+ schema: SchemaModel,
38
+ schemas: NamedSchemaModel[],
39
+ opts: SampleOptions = {}
40
+ ): unknown {
41
+ const byName = new Map(schemas.map((s) => [s.name, s.schema]));
42
+ const value = walk(schema, byName, new Set(), opts.dateType ?? 'string');
43
+ // A `CYCLE` that propagates all the way to the root has no container to absorb it
44
+ // into a valid empty value (e.g. a self-referential union); fall back to null.
45
+ return value === CYCLE ? null : value;
46
+ }
47
+
48
+ /**
49
+ * Sentinel returned by `walk` when a `$ref` re-enters a name already on the stack.
50
+ * Containers turn it into the type-correct empty value for their position — an array
51
+ * to `[]`, a record to `{}`, an optional property to omission — so a recursive schema
52
+ * yields data that still satisfies its (non-nullable) generated type. Only a required,
53
+ * non-container self-reference (a genuinely uninhabitable schema) degrades to null.
54
+ */
55
+ const CYCLE = Symbol('cycle');
56
+
57
+ /**
58
+ * The expression a field MUST sample to because its generated type is not a JSON
59
+ * literal — so it takes precedence over any spec `example`/`default` (baking those
60
+ * would not type-check). The returned `code` is a generator-authored CONSTANT and
61
+ * is NEVER interpolated from spec data: it flows verbatim into `parseExpression`,
62
+ * so feeding a spec example string in here would be an injection vector. `undefined`
63
+ * when the field has no type demand (the normal example/default/synthesis path applies).
64
+ */
65
+ function typeDemandedExpression(
66
+ schema: SchemaModel,
67
+ dateType: DateType
68
+ ): SampleExpression | undefined {
69
+ // A nullable field (`type: ['string', 'null']`) wraps the demanding scalar in a
70
+ // union — the demand (and its precedence over any example) applies to the member.
71
+ if (schema.kind === 'union') {
72
+ for (const member of schema.members) {
73
+ const demanded = typeDemandedExpression(member, dateType);
74
+ if (demanded) return demanded;
75
+ }
76
+ return undefined;
77
+ }
78
+ if (schema.kind !== 'scalar') return undefined;
79
+ const format = schema.metadata?.format;
80
+ if (format === 'binary') return new SampleExpression('new Blob([])');
81
+ if (dateType === 'Date') {
82
+ if (format === 'date-time') return new SampleExpression('new Date("2024-01-01T00:00:00Z")');
83
+ if (format === 'date') return new SampleExpression('new Date("2024-01-01")');
84
+ }
85
+ return undefined;
86
+ }
87
+
88
+ /**
89
+ * Split intersection members for sampling: object-shaped members (inline, or refs
90
+ * resolving to objects) merge into ONE synthetic object schema whose conflicting
91
+ * properties are resolved by SPECIFICITY — mirroring TS intersection algebra, where
92
+ * `string & "Apple Pay"` is `"Apple Pay"` regardless of member order. Constraint-only
93
+ * `unknown` members (`not`, unmodeled keywords) are dropped; everything else is
94
+ * returned in `rest` untouched.
95
+ */
96
+ export function splitIntersection(
97
+ members: SchemaModel[],
98
+ byName: Map<string, SchemaModel>
99
+ ): { merged: SchemaModel | undefined; rest: SchemaModel[] } {
100
+ const properties = new Map<string, { schema: SchemaModel; required: boolean; rank: number }>();
101
+ const rest: SchemaModel[] = [];
102
+ let sawObject = false;
103
+ for (const member of members) {
104
+ if (member.kind === 'unknown') continue;
105
+ const resolved = derefChain(member, byName);
106
+ if (resolved?.kind !== 'object') {
107
+ rest.push(member);
108
+ continue;
109
+ }
110
+ sawObject = true;
111
+ for (const property of resolved.properties) {
112
+ const rank = specificity(property.schema, byName, new Set());
113
+ const existing = properties.get(property.name);
114
+ // Higher specificity wins; a tie goes to the later member (extension over base).
115
+ if (existing === undefined || rank >= existing.rank) {
116
+ properties.set(property.name, {
117
+ schema: property.schema,
118
+ required: property.required || (existing?.required ?? false),
119
+ rank,
120
+ });
121
+ }
122
+ }
123
+ }
124
+ if (!sawObject) return { merged: undefined, rest };
125
+ return {
126
+ merged: {
127
+ kind: 'object',
128
+ properties: [...properties.entries()].map(([name, p]) => ({
129
+ name,
130
+ schema: p.schema,
131
+ required: p.required,
132
+ })),
133
+ },
134
+ rest,
135
+ };
136
+ }
137
+
138
+ /** Follow a ref chain to its target (cycle-safe); `undefined` on a miss or cycle. */
139
+ function derefChain(
140
+ schema: SchemaModel,
141
+ byName: Map<string, SchemaModel>
142
+ ): SchemaModel | undefined {
143
+ const seen = new Set<string>();
144
+ let current: SchemaModel | undefined = schema;
145
+ while (current?.kind === 'ref') {
146
+ if (seen.has(current.name)) return undefined;
147
+ seen.add(current.name);
148
+ current = byName.get(current.name);
149
+ }
150
+ return current;
151
+ }
152
+
153
+ /**
154
+ * How narrowly a schema types its values — the winner of an intersection property
155
+ * conflict. Literals and single-value enums (both emitted as literal types) beat
156
+ * enums, which beat everything else; `null`/`unknown` lose to any real shape, and
157
+ * a union ranks just below its narrowest member (so `T | null` loses to `T`).
158
+ */
159
+ function specificity(
160
+ schema: SchemaModel,
161
+ byName: Map<string, SchemaModel>,
162
+ seen: Set<string>
163
+ ): number {
164
+ switch (schema.kind) {
165
+ case 'literal':
166
+ return 40;
167
+ case 'enum':
168
+ return schema.values.length === 1 ? 40 : 30;
169
+ case 'union':
170
+ return Math.max(0, ...schema.members.map((m) => specificity(m, byName, seen))) - 1;
171
+ case 'ref': {
172
+ if (seen.has(schema.name)) return 20;
173
+ const target = byName.get(schema.name);
174
+ return target === undefined
175
+ ? 20
176
+ : specificity(target, byName, new Set(seen).add(schema.name));
177
+ }
178
+ case 'null':
179
+ case 'unknown':
180
+ return 10;
181
+ default:
182
+ return 20;
183
+ }
184
+ }
185
+
186
+ function walk(
187
+ schema: SchemaModel,
188
+ byName: Map<string, SchemaModel>,
189
+ visiting: Set<string>,
190
+ dateType: DateType
191
+ ): unknown {
192
+ const demanded = typeDemandedExpression(schema, dateType);
193
+ if (demanded) return demanded;
194
+
195
+ const meta = schema.metadata;
196
+ // An example/default is honored only when it inhabits the generated type — real specs
197
+ // carry `example: null` on non-nullable fields and defaults outside a narrowed enum
198
+ // (`enum: [cram-md5], default: none`); baking those would not type-check.
199
+ const inhabits = (value: unknown): boolean => {
200
+ if (value === null) {
201
+ return (
202
+ schema.kind === 'null' ||
203
+ (schema.kind === 'union' && schema.members.some((member) => member.kind === 'null'))
204
+ );
205
+ }
206
+ if (schema.kind === 'enum') return (schema.values as unknown[]).includes(value);
207
+ if (schema.kind === 'literal') return value === schema.value;
208
+ return true;
209
+ };
210
+ if (meta?.example !== undefined && inhabits(meta.example)) return meta.example;
211
+ if (meta?.default !== undefined && inhabits(meta.default)) return meta.default;
212
+
213
+ switch (schema.kind) {
214
+ case 'scalar':
215
+ return scalarSample(schema.scalar, meta);
216
+ case 'array': {
217
+ // A cyclic item type collapses the array to `[]` — itself a valid `T[]`.
218
+ const item = walk(schema.items, byName, visiting, dateType);
219
+ return item === CYCLE ? [] : [item];
220
+ }
221
+ case 'object':
222
+ return Object.fromEntries(
223
+ schema.properties.flatMap((p) => {
224
+ const value = walk(p.schema, byName, visiting, dateType);
225
+ // A cyclic optional property is omitted (a null would not satisfy `T | undefined`);
226
+ // a cyclic required property is uninhabitable, so null is the only stand-in.
227
+ if (value === CYCLE) return p.required ? [[p.name, null]] : [];
228
+ return [[p.name, value]];
229
+ })
230
+ );
231
+ case 'record': {
232
+ const value = walk(schema.value, byName, visiting, dateType);
233
+ return value === CYCLE ? {} : { key: value };
234
+ }
235
+ case 'enum':
236
+ return schema.values[0];
237
+ case 'literal':
238
+ return schema.value;
239
+ case 'union': {
240
+ // Pick the first member that is not itself a cycle; if every member cycles the
241
+ // union is uninhabitable, so propagate `CYCLE` for a container/root to absorb.
242
+ for (const member of schema.members) {
243
+ const value = walk(member, byName, visiting, dateType);
244
+ if (value !== CYCLE) return value;
245
+ }
246
+ return schema.members.length > 0 ? CYCLE : null;
247
+ }
248
+ case 'intersection': {
249
+ const { merged, rest } = splitIntersection(schema.members, byName);
250
+ const parts = rest
251
+ .map((member) => walk(member, byName, visiting, dateType))
252
+ .filter((part) => part !== CYCLE);
253
+ if (merged) {
254
+ const value = walk(merged, byName, visiting, dateType);
255
+ const base = isPlainObject(value) ? (value as Record<string, unknown>) : {};
256
+ // Fold in plain-object samples of non-object members (records, omits).
257
+ for (const part of parts) if (isPlainObject(part)) Object.assign(base, part);
258
+ return base;
259
+ }
260
+ const objects = parts.filter(isPlainObject);
261
+ if (objects.length > 0) {
262
+ return objects.reduce<Record<string, unknown>>((acc, part) => Object.assign(acc, part), {});
263
+ }
264
+ // No object member: a scalar-narrowing intersection (e.g. an enum ref constrained
265
+ // by `not`) — the first member's sample IS the value.
266
+ return parts.length > 0 ? parts[0] : {};
267
+ }
268
+ case 'omit': {
269
+ // base is a named schema reference (string), resolve it then drop the listed keys
270
+ const target = byName.get(schema.base);
271
+ if (!target) return null;
272
+ const base = walk(target, byName, visiting, dateType);
273
+ if (isPlainObject(base)) {
274
+ const copy = { ...(base as Record<string, unknown>) };
275
+ for (const key of schema.keys) delete copy[key];
276
+ return copy;
277
+ }
278
+ return base;
279
+ }
280
+ case 'ref': {
281
+ if (visiting.has(schema.name)) return CYCLE;
282
+ const target = byName.get(schema.name);
283
+ if (!target) return null;
284
+ visiting.add(schema.name);
285
+ const result = walk(target, byName, visiting, dateType);
286
+ visiting.delete(schema.name);
287
+ return result;
288
+ }
289
+ case 'null':
290
+ case 'unknown':
291
+ return null;
292
+ }
293
+ }
294
+
295
+ function scalarSample(scalar: ScalarKind, meta: SchemaMetadata | undefined): unknown {
296
+ if (scalar === 'boolean') return true;
297
+ if (scalar === 'integer' || scalar === 'number') return 0;
298
+ // Type-demanding formats (binary, and date/date-time under `dateType: 'Date'`) are
299
+ // handled earlier in `walk` via `typeDemandedExpression`; here the date formats fall
300
+ // through to the ISO-string path (the `dateType: 'string'` types them as `string`).
301
+ switch (meta?.format) {
302
+ case 'email':
303
+ return 'user@example.com';
304
+ case 'uuid':
305
+ return '00000000-0000-4000-8000-000000000000';
306
+ case 'date-time':
307
+ return '2024-01-01T00:00:00Z';
308
+ case 'date':
309
+ return '2024-01-01';
310
+ case 'uri':
311
+ case 'url':
312
+ return 'https://example.com';
313
+ default:
314
+ return 'string';
315
+ }
316
+ }
@@ -0,0 +1,63 @@
1
+ // Ejected from @redocly/client-generator@0.4.0 — the built-in "mock" 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 mock --update`.
5
+ // The value tree the mock/faker emitters build and render: keeps object structure
6
+ // (for intersection merging and `...overrides` spreading) until the final render,
7
+ // where indentation is threaded. Deliberately tiny.
8
+
9
+ import { safeIdent, sanitizeCodeString } from '@redocly/client-generator/printers/typescript';
10
+
11
+ export type MockEntry = { key: string; value: MockValue } | { spread: string };
12
+
13
+ export type MockValue =
14
+ | { kind: 'object'; entries: MockEntry[] }
15
+ | { kind: 'array'; items: MockValue[] }
16
+ | { kind: 'expr'; text: string }
17
+ /** A textual wrapper around a nested value (`faker.helpers.multiple(() => <v>, …)`). */
18
+ | { kind: 'wrap'; before: string; value: MockValue; after: string };
19
+
20
+ export const expr = (text: string): MockValue => ({ kind: 'expr', text });
21
+ export const objectValue = (entries: MockEntry[]): MockValue => ({ kind: 'object', entries });
22
+
23
+ export function isObjectValue(value: MockValue): value is Extract<MockValue, { kind: 'object' }> {
24
+ return value.kind === 'object';
25
+ }
26
+
27
+ /** Spread `<name>` into an object value; non-objects pass through unchanged. */
28
+ export function spreadInto(value: MockValue, name: string): MockValue {
29
+ if (!isObjectValue(value)) return value;
30
+ return objectValue([...value.entries, { spread: name }]);
31
+ }
32
+
33
+ const INDENT = ' ';
34
+
35
+ /** Render at `indent` (the containing line's indent): objects/arrays multiline, printer-style. */
36
+ export function renderMockValue(value: MockValue, indent: string): string {
37
+ switch (value.kind) {
38
+ case 'expr':
39
+ return value.text;
40
+ case 'wrap':
41
+ return `${value.before}${renderMockValue(value.value, indent)}${value.after}`;
42
+ case 'array': {
43
+ if (value.items.length === 0) return '[]';
44
+ const inner = indent + INDENT;
45
+ const lines = value.items.map(
46
+ (item, index) =>
47
+ `${inner}${renderMockValue(item, inner)}${index === value.items.length - 1 ? '' : ','}`
48
+ );
49
+ return `[\n${lines.join('\n')}\n${indent}]`;
50
+ }
51
+ case 'object': {
52
+ if (value.entries.length === 0) return '{}';
53
+ const inner = indent + INDENT;
54
+ const lines = value.entries.map((entry, index) => {
55
+ const comma = index === value.entries.length - 1 ? '' : ',';
56
+ if ('spread' in entry) return `${inner}...${entry.spread}${comma}`;
57
+ const key = safeIdent(entry.key) === entry.key ? entry.key : sanitizeCodeString(entry.key);
58
+ return `${inner}${key}: ${renderMockValue(entry.value, inner)}${comma}`;
59
+ });
60
+ return `{\n${lines.join('\n')}\n${indent}}`;
61
+ }
62
+ }
63
+ }
@@ -0,0 +1,63 @@
1
+ // Ejected from @redocly/client-generator@0.4.0 — the built-in "php" 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 php --update`.
5
+ // The `client` stage: the `Servers` helper class of one static method per
6
+ // declared server.
7
+
8
+ import {
9
+ type ApiModel,
10
+ identifierFor,
11
+ type ServerModel,
12
+ serverUrlParts,
13
+ } from '@redocly/client-generator';
14
+ import type { PhpPrinter } from '@redocly/client-generator/printers/php';
15
+
16
+ import { PHP, phpString, propertyName } from './naming.ts';
17
+
18
+ /** The server URL as a PHP expression: literals concatenated with declared-variable args. */
19
+ function serverUrlExpression(server: ServerModel): string {
20
+ const parts = serverUrlParts(server).map((part) =>
21
+ part.kind === 'literal' ? phpString(part.value) : `${'$'}${propertyName(part.name)}`
22
+ );
23
+ return parts.join(' . ');
24
+ }
25
+
26
+ /** One static method per declared server; server variables become named string arguments. */
27
+ export function writeServers(printer: PhpPrinter, model: ApiModel): void {
28
+ const servers = model.servers ?? [];
29
+ if (servers.length === 0) return;
30
+ const usedNames = new Set<string>();
31
+ printer.line(
32
+ '/** The declared servers; variables default to the values from the description. */'
33
+ );
34
+ printer.line('final class Servers');
35
+ printer.block(
36
+ '{',
37
+ () => {
38
+ servers.forEach((server, index) => {
39
+ let name = identifierFor(server.description ?? `server${index + 1}`, {
40
+ style: 'camel',
41
+ reserved: PHP,
42
+ });
43
+ if (usedNames.has(name)) name = `${name}${index + 1}`;
44
+ usedNames.add(name);
45
+ const params = server.variables.map(
46
+ (variable) =>
47
+ `string ${'$'}${propertyName(variable.name)} = ${phpString(variable.default)}`
48
+ );
49
+ if (index > 0) printer.blank();
50
+ printer.line(`public static function ${name}(${params.join(', ')}): string`);
51
+ printer.block(
52
+ '{',
53
+ () => {
54
+ printer.line(`return ${serverUrlExpression(server)};`);
55
+ },
56
+ '}'
57
+ );
58
+ });
59
+ },
60
+ '}'
61
+ );
62
+ printer.blank();
63
+ }
@@ -0,0 +1,58 @@
1
+ // Ejected from @redocly/client-generator@0.4.0 — the built-in "php" 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 php --update`.
5
+ // The `descriptor` stage: the operations-table array literals — security
6
+ // OR-alternatives, the pagination spec, and envelope-header coerce specs.
7
+
8
+ import {
9
+ type ApiModel,
10
+ headerCoerceType,
11
+ identifierFor,
12
+ type NeutralPaginationRule,
13
+ type OperationModel,
14
+ securityRequirements,
15
+ } from '@redocly/client-generator';
16
+
17
+ import { PHP, phpString } from './naming.ts';
18
+
19
+ /** Security literal for the operations table, denormalized from the model's schemes. */
20
+ export function phpSecurityLiteral(op: OperationModel, model: ApiModel): string | undefined {
21
+ const alternatives = securityRequirements(op, model).map((alternative) => {
22
+ const specs = alternative.map((spec) =>
23
+ spec.kind === 'apiKey'
24
+ ? `['kind' => 'apiKey', 'scheme' => ${phpString(spec.scheme)}, 'name' => ${phpString(spec.name)}, 'in' => ${phpString(spec.in)}]`
25
+ : `['kind' => ${phpString(spec.kind)}, 'scheme' => ${phpString(spec.scheme)}]`
26
+ );
27
+ return `[${specs.join(', ')}]`;
28
+ });
29
+ if (alternatives.length === 0) return undefined;
30
+ return `[${alternatives.join(', ')}]`;
31
+ }
32
+
33
+ export function phpPaginationLiteral(rule: NeutralPaginationRule): string {
34
+ const fields = [
35
+ `'style' => ${phpString(rule.style)}`,
36
+ ...(rule.param !== undefined ? [`'param' => ${phpString(rule.param)}`] : []),
37
+ ...(rule.nextCursor !== undefined ? [`'nextCursor' => ${phpString(rule.nextCursor)}`] : []),
38
+ ...(rule.hasMore !== undefined ? [`'hasMore' => ${phpString(rule.hasMore)}`] : []),
39
+ ...(rule.limitParam !== undefined ? [`'limitParam' => ${phpString(rule.limitParam)}`] : []),
40
+ ...(rule.items !== undefined ? [`'items' => ${phpString(rule.items)}`] : []),
41
+ ];
42
+ return `[${fields.join(', ')}]`;
43
+ }
44
+
45
+ /** Declared response headers as runtime coerce specs: `[wire name, camelCase key, type]`. */
46
+ export function envelopeHeaderSpecs(op: OperationModel, model: ApiModel): string {
47
+ const used = new Set<string>();
48
+ const specs = (op.successResponseHeaders ?? []).map((header) => {
49
+ let key = identifierFor(header.name, { style: 'camel', reserved: PHP });
50
+ let suffix = 2;
51
+ while (used.has(key))
52
+ key = `${identifierFor(header.name, { style: 'camel', reserved: PHP })}_${suffix++}`;
53
+ used.add(key);
54
+ const type = headerCoerceType(header.schema, model);
55
+ return `[${phpString(header.name)}, ${phpString(key)}, ${phpString(type)}]`;
56
+ });
57
+ return `[${specs.join(', ')}]`;
58
+ }