@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
@@ -6,12 +6,10 @@
6
6
  //
7
7
  // Pairs with the sdk generated under `dateType: 'Date'`; the client itself
8
8
  // stays zero-dep (Date is standard). Transformers compose across refs:
9
- // `transformPet` calls `transformPerson(data["owner"])` when `Pet.owner` is a
10
- // `Person` that has dates.
11
- import { safeIdent } from './identifier.js';
12
- import { pascalCase } from './support.js';
13
- import { arrow, exportConstStatement, parseStatements, printStatements, ts } from './ts.js';
14
- const { factory } = ts;
9
+ // `transformPet` calls `transformOwner(data["owner"])` when `Pet.owner` is an
10
+ // `Owner` that has dates. Source-text templates throughout.
11
+ import { pascalCase, safeIdent } from '@redocly/client-generator/printers/typescript';
12
+ const INDENT = ' ';
15
13
  /** `transform<Name>` — the function bound to a named schema. */
16
14
  function transformName(name) {
17
15
  return `transform${pascalCase(name)}`;
@@ -23,6 +21,13 @@ function transformName(name) {
23
21
  const WRITABLE_DECL = 'type __Writable<T> = { -readonly [K in keyof T]: T[K] };';
24
22
  /** Set by `writableLhs` during a render; `renderTransformersModule` resets and reads it. */
25
23
  let writableUsed = false;
24
+ function ident(name) {
25
+ return { text: name, path: [name] };
26
+ }
27
+ /** `<target>["key"]` — bracket access, robust for any (incl. non-identifier) key. */
28
+ function index(target, key) {
29
+ return { text: `${target.text}[${JSON.stringify(key)}]`, path: [...target.path, key] };
30
+ }
26
31
  /**
27
32
  * Whether transforming a value of `schema` REPLACES it (so the result must be
28
33
  * assigned back) rather than mutating it in place: date scalars, arrays of
@@ -81,80 +86,51 @@ function hasDates(schema, byName, seen) {
81
86
  return false;
82
87
  }
83
88
  }
84
- /** `<target>["key"]` — bracket access, robust for any (incl. non-identifier) key. */
85
- function index(target, key) {
86
- return factory.createElementAccessExpression(target, factory.createStringLiteral(key));
87
- }
88
- /** `new Date(<arg>)`. */
89
- function newDate(arg) {
90
- return factory.createNewExpression(factory.createIdentifier('Date'), undefined, [arg]);
91
- }
92
- /** `typeof <expr> === "string"`. */
93
- function isStringGuard(expr) {
94
- return factory.createBinaryExpression(factory.createTypeOfExpression(expr), factory.createToken(ts.SyntaxKind.EqualsEqualsEqualsToken), factory.createStringLiteral('string'));
95
- }
96
- /** `Array.isArray(<expr>)`. */
97
- function isArrayGuard(expr) {
98
- return factory.createCallExpression(factory.createPropertyAccessExpression(factory.createIdentifier('Array'), 'isArray'), undefined, [expr]);
99
- }
100
- /** `<expr> && typeof <expr> === "object"` — truthy and a (non-null) object. */
101
- function isObjectGuard(expr) {
102
- return factory.createBinaryExpression(expr, factory.createToken(ts.SyntaxKind.AmpersandAmpersandToken), factory.createBinaryExpression(factory.createTypeOfExpression(expr), factory.createToken(ts.SyntaxKind.EqualsEqualsEqualsToken), factory.createStringLiteral('object')));
103
- }
104
- /** `<expr> as <Type>` — a type assertion, to satisfy a union-narrowing transform. */
105
- function asType(expr, typeName) {
106
- return factory.createAsExpression(expr, factory.createTypeReferenceNode(typeName));
107
- }
108
- /** `if (<cond>) <then>;`. */
109
- function ifThen(cond, then) {
110
- return factory.createIfStatement(cond, then);
111
- }
112
- function exprStatement(expr) {
113
- return factory.createExpressionStatement(expr);
89
+ /**
90
+ * `if (<cond>) …` — a brace-less single-statement `then` prints on the next line one
91
+ * level deeper (`block: false`), a braced one wraps in `{ … }` (`block: true`);
92
+ * `then` receives the indent its lines must start at.
93
+ */
94
+ function ifThen(cond, then, indent, block = false) {
95
+ if (block)
96
+ return [`${indent}if (${cond}) {`, ...then(indent + INDENT), `${indent}}`];
97
+ return [`${indent}if (${cond})`, ...then(indent + INDENT)];
114
98
  }
115
99
  /** `<target> = <value>;` — the LHS cast writable when it is a `readonly` property. */
116
100
  function assign(target, value, readonlyLhs = false) {
117
- const lhs = readonlyLhs ? writableLhs(target) : target;
118
- return exprStatement(factory.createBinaryExpression(lhs, factory.createToken(ts.SyntaxKind.EqualsToken), value));
101
+ const lhs = readonlyLhs ? writableLhs(target) : target.text;
102
+ return (indent) => [`${indent}${lhs} = ${value};`];
103
+ }
104
+ function statement(expr) {
105
+ return (indent) => [`${indent}${expr};`];
119
106
  }
120
107
  /**
121
108
  * The write target for a `readonly`-typed property:
122
109
  * `(recv as __Writable<NonNullable<typeof recv>>)["key"]`. `readonly` is shallow —
123
110
  * it blocks only the direct assignment — so nested writes stay uncast.
124
111
  */
125
- function writableLhs(lhs) {
126
- if (!ts.isElementAccessExpression(lhs))
127
- return lhs; // a parameter reassignment is never readonly
112
+ function writableLhs(target) {
113
+ if (target.path.length < 2)
114
+ return target.text; // a parameter reassignment is never readonly
128
115
  writableUsed = true;
129
- const receiver = factory.createParenthesizedExpression(factory.createAsExpression(lhs.expression, factory.createTypeReferenceNode('__Writable', [nonNullTypeOf(lhs.expression)])));
130
- return factory.createElementAccessExpression(receiver, lhs.argumentExpression);
116
+ const receiver = {
117
+ text: target.text.slice(0, target.text.lastIndexOf('[')),
118
+ path: target.path.slice(0, -1),
119
+ };
120
+ const key = target.path[target.path.length - 1];
121
+ return `(${receiver.text} as __Writable<${nonNullTypeOf(receiver)}>)[${JSON.stringify(key)}]`;
131
122
  }
132
123
  /**
133
- * `NonNullable<typeof <expr>>` for the expression chains this emitter builds
134
- * (an identifier indexed by string-literal keys), with `NonNullable` applied at
135
- * every step so optional intermediate properties don't poison the indexed type.
124
+ * `NonNullable<typeof <expr>>` for the access paths this emitter builds, with
125
+ * `NonNullable` applied at every step so optional intermediate properties don't
126
+ * poison the indexed type.
136
127
  */
137
- function nonNullTypeOf(expr) {
138
- let base;
139
- if (ts.isIdentifier(expr)) {
140
- base = factory.createTypeQueryNode(expr);
141
- }
142
- else if (ts.isElementAccessExpression(expr) && ts.isStringLiteral(expr.argumentExpression)) {
143
- base = factory.createIndexedAccessTypeNode(nonNullTypeOf(expr.expression), factory.createLiteralTypeNode(factory.createStringLiteral(expr.argumentExpression.text)));
128
+ function nonNullTypeOf(target) {
129
+ let type = `typeof ${target.path[0]}`;
130
+ for (const key of target.path.slice(1)) {
131
+ type = `NonNullable<${type}>[${JSON.stringify(key)}]`;
144
132
  }
145
- else {
146
- // Every write target is built here from `data`/loop identifiers + string-literal
147
- // element access (`index`), so any other shape is an emitter bug.
148
- throw new Error('transformers: unsupported write-target expression');
149
- }
150
- return factory.createTypeReferenceNode('NonNullable', [base]);
151
- }
152
- /** `<recv>.<method>(<args>)`. */
153
- function method(recv, name, args) {
154
- return factory.createCallExpression(factory.createPropertyAccessExpression(recv, name), undefined, args);
155
- }
156
- function param(name) {
157
- return factory.createParameterDeclaration(undefined, undefined, name);
133
+ return `NonNullable<${type}>`;
158
134
  }
159
135
  /** Next nested loop variable: `item`, `item2`, `item3`, … (avoids shadowing). */
160
136
  function nextItemVar(current) {
@@ -163,45 +139,40 @@ function nextItemVar(current) {
163
139
  return `item${Number(current.slice('item'.length)) + 1}`;
164
140
  }
165
141
  /**
166
- * Conversion statements that, given the runtime value at `target` typed by
167
- * `schema`, rewrite date leaves in place. Each branch self-gates by returning
168
- * `[]` when nothing under it carries a date, so callers need no pre-check.
169
- * `seen` follows refs and guards cycles; `itemVar` names nested loop variables.
170
- *
171
- * Covers the shapes a date can hide in: date scalars, arrays of them, refs to
172
- * date-bearing schemas (composed via `transform<Ref>`), arrays of such refs,
173
- * records, nested inline objects, and the date-bearing members of a
174
- * union/intersection.
142
+ * Conversion lines that, given the runtime value at `target` typed by `schema`,
143
+ * rewrite date leaves in place. Each branch self-gates by returning `[]` when
144
+ * nothing under it carries a date, so callers need no pre-check. `seen` follows
145
+ * refs and guards cycles; `itemVar` names nested loop variables.
175
146
  */
176
- function convert(target, schema, byName, seen, itemVar, readonlyLhs = false) {
147
+ function convert(target, schema, byName, seen, itemVar, indent, readonlyLhs = false) {
177
148
  if (isDateScalar(schema)) {
178
- return [ifThen(isStringGuard(target), assign(target, newDate(target), readonlyLhs))];
149
+ return ifThen(`typeof ${target.text} === "string"`, assign(target, `new Date(${target.text})`, readonlyLhs), indent);
179
150
  }
180
151
  switch (schema.kind) {
181
152
  case 'ref':
182
- return convertRef(target, schema.name, byName, seen, readonlyLhs);
153
+ return convertRef(target, schema.name, byName, seen, indent, readonlyLhs);
183
154
  case 'object': {
184
- const stmts = [];
155
+ const lines = [];
185
156
  for (const p of schema.properties) {
186
- stmts.push(...convertProperty(index(target, p.name), p.schema, byName, seen, itemVar, p.readOnly === true));
157
+ lines.push(...convertProperty(index(target, p.name), p.schema, byName, seen, itemVar, indent, p.readOnly === true));
187
158
  }
188
- return stmts;
159
+ return lines;
189
160
  }
190
161
  case 'array':
191
- return convertArray(target, schema.items, byName, seen, itemVar, readonlyLhs);
162
+ return convertArray(target, schema.items, byName, seen, itemVar, indent, readonlyLhs);
192
163
  case 'record':
193
- return convertCollection(target, schema.value, byName, seen, itemVar, true);
164
+ return convertCollection(target, schema.value, byName, seen, itemVar, indent, true);
194
165
  case 'intersection': {
195
166
  // An intersection value satisfies *every* member type, so each member's
196
167
  // transform applies directly to `target` with no narrowing needed.
197
- const stmts = [];
168
+ const lines = [];
198
169
  for (const m of schema.members) {
199
- stmts.push(...convert(target, m, byName, seen, itemVar, readonlyLhs));
170
+ lines.push(...convert(target, m, byName, seen, itemVar, indent, readonlyLhs));
200
171
  }
201
- return stmts;
172
+ return lines;
202
173
  }
203
174
  case 'union':
204
- return convertUnion(target, schema.members, byName, seen, itemVar, readonlyLhs);
175
+ return convertUnion(target, schema.members, byName, seen, itemVar, indent, readonlyLhs);
205
176
  default:
206
177
  return [];
207
178
  }
@@ -220,30 +191,34 @@ function convert(target, schema, byName, seen, itemVar, readonlyLhs = false) {
220
191
  * members keep their `typeof === "string"` guard (their type is `Date` under
221
192
  * `--date-type Date`, so the assignment type-checks).
222
193
  */
223
- function convertUnion(target, members, byName, seen, itemVar, readonlyLhs = false) {
224
- const stmts = [];
194
+ function convertUnion(target, members, byName, seen, itemVar, indent, readonlyLhs = false) {
195
+ const lines = [];
196
+ const guardedIndent = indent + INDENT;
225
197
  const objectGuarded = [];
226
198
  for (const m of members) {
227
199
  if (isDateScalar(m)) {
228
- stmts.push(...convert(target, m, byName, seen, itemVar, readonlyLhs));
200
+ lines.push(...convert(target, m, byName, seen, itemVar, indent, readonlyLhs));
229
201
  }
230
202
  else if (m.kind === 'ref') {
231
203
  if (!hasDates(m, byName, seen))
232
204
  continue;
233
- const call = factory.createCallExpression(factory.createIdentifier(transformName(m.name)), undefined, [asType(target, m.name)]);
205
+ const call = `${transformName(m.name)}(${target.text} as ${m.name})`;
234
206
  // A replace-by-value ref (scalar dates) must be assigned back; an object
235
207
  // ref mutates in place, so its return can be dropped.
236
- objectGuarded.push(needsReassign(m, byName, seen) ? assign(target, call, readonlyLhs) : exprStatement(call));
208
+ const build = needsReassign(m, byName, seen)
209
+ ? assign(target, call, readonlyLhs)
210
+ : statement(call);
211
+ objectGuarded.push(...build(guardedIndent));
237
212
  }
238
213
  else {
239
214
  // Object/array/record members: recurse under the shared object guard.
240
- objectGuarded.push(...convert(target, m, byName, seen, itemVar, readonlyLhs));
215
+ objectGuarded.push(...convert(target, m, byName, seen, itemVar, guardedIndent, readonlyLhs));
241
216
  }
242
217
  }
243
218
  if (objectGuarded.length > 0) {
244
- stmts.push(ifThen(isObjectGuard(target), factory.createBlock(objectGuarded, true)));
219
+ lines.push(...ifThen(`${target.text} && typeof ${target.text} === "object"`, () => objectGuarded, indent, true));
245
220
  }
246
- return stmts;
221
+ return lines;
247
222
  }
248
223
  /**
249
224
  * A ref position, emitted only when the ref target carries dates (so the
@@ -252,29 +227,30 @@ function convertUnion(target, members, byName, seen, itemVar, readonlyLhs = fals
252
227
  * scalar (or an array/union of them) is replace-by-value, so its result is
253
228
  * assigned back: `if (<target>) <target> = transform<Ref>(<target>);`.
254
229
  */
255
- function convertRef(target, name, byName, seen, readonlyLhs = false) {
230
+ function convertRef(target, name, byName, seen, indent, readonlyLhs = false) {
256
231
  const ref = { kind: 'ref', name };
257
232
  if (!hasDates(ref, byName, seen))
258
233
  return [];
259
- const call = factory.createCallExpression(factory.createIdentifier(transformName(name)), undefined, [target]);
260
- return [
261
- ifThen(target, needsReassign(ref, byName, seen) ? assign(target, call, readonlyLhs) : exprStatement(call)),
262
- ];
234
+ const call = `${transformName(name)}(${target.text})`;
235
+ return ifThen(target.text, needsReassign(ref, byName, seen) ? assign(target, call, readonlyLhs) : statement(call), indent);
263
236
  }
264
237
  /**
265
238
  * A property position: a nested inline object guards presence and recurses
266
239
  * inside a block; everything else (scalars, refs, arrays, …) delegates to
267
240
  * `convert`, which guards itself.
268
241
  */
269
- function convertProperty(target, schema, byName, seen, itemVar, readonlyLhs = false) {
270
- if (schema.kind === 'ref')
271
- return convertRef(target, schema.name, byName, seen, readonlyLhs);
242
+ function convertProperty(target, schema, byName, seen, itemVar, indent, readonlyLhs = false) {
243
+ if (schema.kind === 'ref') {
244
+ return convertRef(target, schema.name, byName, seen, indent, readonlyLhs);
245
+ }
272
246
  if (schema.kind === 'object') {
273
247
  // Nested writes go one level inside — `readonly` is shallow, so no cast needed.
274
- const inner = convert(target, schema, byName, seen, itemVar);
275
- return inner.length === 0 ? [] : [ifThen(target, factory.createBlock(inner, true))];
248
+ const inner = convert(target, schema, byName, seen, itemVar, indent + INDENT);
249
+ if (inner.length === 0)
250
+ return [];
251
+ return ifThen(target.text, () => inner, indent, true);
276
252
  }
277
- return convert(target, schema, byName, seen, itemVar, readonlyLhs);
253
+ return convert(target, schema, byName, seen, itemVar, indent, readonlyLhs);
278
254
  }
279
255
  /**
280
256
  * A "replace-by-value" element is one a transform must overwrite wholesale
@@ -282,29 +258,24 @@ function convertProperty(target, schema, byName, seen, itemVar, readonlyLhs = fa
282
258
  * such elements (`v.map(...)`). Returns the expression that yields the replaced
283
259
  * value for the element bound to `value`, or `null` when the element instead
284
260
  * mutates in place (object/ref/record). Recurses for arrays-of-arrays.
285
- *
286
- * Reassigning a loop *variable* is a no-op, so date scalars (and arrays of
287
- * them) can only be converted by reassigning their container slot — an array
288
- * via `slot = slot.map(...)`, a record via per-key assignment. This builds the
289
- * per-element value for those write-backs.
290
261
  */
291
262
  function replacer(value, element, byName, seen, depth = 0) {
292
263
  if (isDateScalar(element))
293
- return newDate(value);
264
+ return `new Date(${value})`;
294
265
  // A ref resolving to a replace-by-value shape (a scalar-date named schema):
295
266
  // its sibling transform returns the converted value — `transform<Ref>(v)`.
296
267
  if (element.kind === 'ref' && needsReassign(element, byName, seen)) {
297
- return factory.createCallExpression(factory.createIdentifier(transformName(element.name)), undefined, [value]);
268
+ return `${transformName(element.name)}(${value})`;
298
269
  }
299
270
  if (element.kind === 'array') {
300
271
  // Map var for the level below: `v` over the scalar leaf, else `row`, `row2`,
301
272
  // … per array level — distinct names by depth avoid shadowing. Yields
302
- // `.map((v) => new Date(v))` and `.map((row) => row.map((v) => new Date(v)))`.
273
+ // `.map(v => new Date(v))` and `.map(row => row.map(v => new Date(v)))`.
303
274
  const varName = element.items.kind === 'array' ? rowVar(depth + 1) : 'v';
304
- const inner = replacer(factory.createIdentifier(varName), element.items, byName, seen, depth + 1);
275
+ const inner = replacer(varName, element.items, byName, seen, depth + 1);
305
276
  if (inner === null)
306
277
  return null;
307
- return method(value, 'map', [arrow([param(varName)], inner)]);
278
+ return `${value}.map(${varName} => ${inner})`;
308
279
  }
309
280
  return null;
310
281
  }
@@ -313,27 +284,22 @@ function rowVar(depth) {
313
284
  return depth <= 1 ? 'row' : `row${depth}`;
314
285
  }
315
286
  /** Conversions for `target` being an array whose elements are typed by `items`. */
316
- function convertArray(target, items, byName, seen, itemVar, readonlyLhs = false) {
287
+ function convertArray(target, items, byName, seen, itemVar, indent, readonlyLhs = false) {
317
288
  // Date scalars / arrays-of-date-scalars are replace-by-value: map over the
318
289
  // array and reassign the slot (reassigning a loop var would be lost).
319
290
  const varName = items.kind === 'array' ? rowVar(1) : 'v';
320
- const mapped = replacer(factory.createIdentifier(varName), items, byName, seen, 1);
291
+ const mapped = replacer(varName, items, byName, seen, 1);
321
292
  if (mapped !== null) {
322
- // `if (Array.isArray(t)) t = t.map((v) => new Date(v));` (or nested `row`)
323
- return [
324
- ifThen(isArrayGuard(target), assign(target, method(target, 'map', [arrow([param(varName)], mapped)]), readonlyLhs)),
325
- ];
293
+ // `if (Array.isArray(t)) t = t.map(v => new Date(v));` (or nested `row`)
294
+ return ifThen(`Array.isArray(${target.text})`, assign(target, `${target.text}.map(${varName} => ${mapped})`, readonlyLhs), indent);
326
295
  }
327
296
  if (items.kind === 'ref') {
328
297
  if (!hasDates(items, byName, seen))
329
298
  return [];
330
299
  // `if (Array.isArray(t)) t.forEach(transformRef);`
331
- const forEach = method(target, 'forEach', [
332
- factory.createIdentifier(transformName(items.name)),
333
- ]);
334
- return [ifThen(isArrayGuard(target), exprStatement(forEach))];
300
+ return ifThen(`Array.isArray(${target.text})`, statement(`${target.text}.forEach(${transformName(items.name)})`), indent);
335
301
  }
336
- return convertCollection(target, items, byName, seen, itemVar, false);
302
+ return convertCollection(target, items, byName, seen, itemVar, indent, false);
337
303
  }
338
304
  /**
339
305
  * Iterate a collection (array or record) of mutate-in-place elements (objects,
@@ -344,53 +310,47 @@ function convertArray(target, items, byName, seen, itemVar, readonlyLhs = false)
344
310
  * Replace-by-value elements (date scalars) never reach the array path here —
345
311
  * `convertArray` handles them via map-and-reassign. A *record* of date scalars
346
312
  * does land here: a `forEach` loop variable can't write back, so we iterate the
347
- * keys and assign back into the record (`rec[k] = new Date(rec[k])`).
313
+ * keys and assign back into the record (`rec[__k] = new Date(rec[__k])`).
348
314
  */
349
- function convertCollection(target, element, byName, seen, itemVar, isRecord) {
315
+ function convertCollection(target, element, byName, seen, itemVar, indent, isRecord) {
350
316
  if (isRecord) {
351
317
  // Replace-by-value elements (date scalars, arrays of them) can't be written
352
318
  // through a `forEach` loop var, so iterate the keys and assign back into the
353
319
  // record slot. Date scalars are string-guarded; nested arrays array-guarded.
354
- const slot = factory.createElementAccessExpression(target, factory.createIdentifier('__k'));
355
- const replaced = replacer(slot, element, byName, seen);
320
+ const slot = { text: `${target.text}[__k]`, path: [...target.path, '__k'] };
321
+ const replaced = replacer(slot.text, element, byName, seen);
356
322
  if (replaced !== null) {
357
- const guard = isDateScalar(element) ? isStringGuard(slot) : isArrayGuard(slot);
358
- return [ifThen(target, keyLoop(target, ifThen(guard, assign(slot, replaced))))];
323
+ const guard = isDateScalar(element)
324
+ ? `typeof ${slot.text} === "string"`
325
+ : `Array.isArray(${slot.text})`;
326
+ return ifThen(target.text, (loopIndent) => [
327
+ `${loopIndent}for (const __k of Object.keys(${target.text}))`,
328
+ ...ifThen(guard, (inner) => [`${inner}${slot.text} = ${replaced};`], loopIndent + INDENT),
329
+ ], indent);
359
330
  }
360
331
  }
361
332
  const next = nextItemVar(itemVar);
362
- const body = convert(factory.createIdentifier(next), element, byName, seen, next);
333
+ // The loop sits one `if` level in, and the forEach body one more.
334
+ const body = convert(ident(next), element, byName, seen, next, indent + INDENT + INDENT);
363
335
  if (body.length === 0)
364
336
  return [];
365
- const iterable = isRecord
366
- ? method(factory.createIdentifier('Object'), 'values', [target])
367
- : target;
368
- const forEach = method(iterable, 'forEach', [
369
- arrow([param(next)], factory.createBlock(body, true)),
370
- ]);
371
- return [ifThen(isRecord ? target : isArrayGuard(target), exprStatement(forEach))];
372
- }
373
- /** `for (const __k of Object.keys(<target>)) <body>`. */
374
- function keyLoop(target, body) {
375
- return factory.createForOfStatement(undefined, factory.createVariableDeclarationList([factory.createVariableDeclaration('__k')], ts.NodeFlags.Const), method(factory.createIdentifier('Object'), 'keys', [target]), body);
337
+ const iterable = isRecord ? `Object.values(${target.text})` : target.text;
338
+ return ifThen(isRecord ? target.text : `Array.isArray(${target.text})`, (inner) => [`${inner}${iterable}.forEach(${next} => {`, ...body, `${inner}});`], indent);
376
339
  }
377
340
  /** `export const transform<Name> = (data: <Name>): <Name> => { … };`. */
378
- function transformStatement(named, byName) {
341
+ function transformBlock(named, byName) {
379
342
  // The sdk exports the type verbatim; only the `transform<Pascal>` NAME is PascalCased.
380
343
  const typeName = named.name;
381
- const data = factory.createIdentifier('data');
344
+ const data = ident('data');
382
345
  const body = named.schema.kind === 'ref'
383
- ? convertRef(data, named.schema.name, byName, new Set())
384
- : convert(data, named.schema, byName, new Set(), 'data');
385
- const fn = arrow([
386
- factory.createParameterDeclaration(undefined, undefined, 'data', undefined, factory.createTypeReferenceNode(typeName)),
387
- ], factory.createBlock([...body, factory.createReturnStatement(data)], true));
388
- const typed = factory.createArrowFunction(fn.modifiers, fn.typeParameters, fn.parameters, factory.createTypeReferenceNode(typeName), fn.equalsGreaterThanToken, fn.body);
389
- return exportConstStatement(transformName(named.name), typed);
390
- }
391
- /** `import type { <Name>, … } from "<module>";`. */
392
- function typeImport(names, module) {
393
- return factory.createImportDeclaration(undefined, factory.createImportClause(true, undefined, factory.createNamedImports(names.map((n) => factory.createImportSpecifier(false, undefined, factory.createIdentifier(safeIdent(n)))))), factory.createStringLiteral(module));
346
+ ? convertRef(data, named.schema.name, byName, new Set(), INDENT)
347
+ : convert(data, named.schema, byName, new Set(), 'data', INDENT);
348
+ return [
349
+ `export const ${transformName(named.name)} = (data: ${typeName}): ${typeName} => {`,
350
+ ...body,
351
+ `${INDENT}return data;`,
352
+ '};',
353
+ ].join('\n');
394
354
  }
395
355
  /**
396
356
  * Render the transformers module. Emits one `transform<Name>` per named schema
@@ -403,14 +363,14 @@ export function renderTransformersModule(model, opts) {
403
363
  const dated = model.schemas.filter((s) => hasDates(s.schema, byName, new Set()));
404
364
  if (dated.length === 0)
405
365
  return '';
406
- const types = dated.map((s) => s.name);
366
+ const types = dated.map((s) => safeIdent(s.name)).join(', ');
407
367
  writableUsed = false; // reset the per-render flag `writableLhs` sets
408
- const transforms = dated.map((s) => transformStatement(s, byName));
409
- const statements = [
410
- typeImport(types, opts.sdkModule),
411
- ...(writableUsed ? parseStatements(WRITABLE_DECL) : []),
368
+ const transforms = dated.map((s) => transformBlock(s, byName));
369
+ const blocks = [
370
+ `import type { ${types} } from ${JSON.stringify(opts.sdkModule)};`,
371
+ ...(writableUsed ? [WRITABLE_DECL] : []),
412
372
  ...transforms,
413
373
  ];
414
- return printStatements(statements);
374
+ return blocks.join('\n\n');
415
375
  }
416
- //# sourceMappingURL=transformers.js.map
376
+ //# sourceMappingURL=render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../../src/generators/transformers/render.ts"],"names":[],"mappings":"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"}