@redocly/client-generator 0.0.0-snapshot.1784554531

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 (250) hide show
  1. package/README.md +506 -0
  2. package/lib/config-file.d.ts +8 -0
  3. package/lib/config-file.d.ts.map +1 -0
  4. package/lib/config-file.js +32 -0
  5. package/lib/config-file.js.map +1 -0
  6. package/lib/config.d.ts +63 -0
  7. package/lib/config.d.ts.map +1 -0
  8. package/lib/config.js +2 -0
  9. package/lib/config.js.map +1 -0
  10. package/lib/emitters/auth.d.ts +14 -0
  11. package/lib/emitters/auth.d.ts.map +1 -0
  12. package/lib/emitters/auth.js +30 -0
  13. package/lib/emitters/auth.js.map +1 -0
  14. package/lib/emitters/client-assembly.d.ts +15 -0
  15. package/lib/emitters/client-assembly.d.ts.map +1 -0
  16. package/lib/emitters/client-assembly.js +299 -0
  17. package/lib/emitters/client-assembly.js.map +1 -0
  18. package/lib/emitters/descriptor.d.ts +22 -0
  19. package/lib/emitters/descriptor.d.ts.map +1 -0
  20. package/lib/emitters/descriptor.js +207 -0
  21. package/lib/emitters/descriptor.js.map +1 -0
  22. package/lib/emitters/emit-options.d.ts +71 -0
  23. package/lib/emitters/emit-options.d.ts.map +1 -0
  24. package/lib/emitters/emit-options.js +28 -0
  25. package/lib/emitters/emit-options.js.map +1 -0
  26. package/lib/emitters/faker.d.ts +11 -0
  27. package/lib/emitters/faker.d.ts.map +1 -0
  28. package/lib/emitters/faker.js +204 -0
  29. package/lib/emitters/faker.js.map +1 -0
  30. package/lib/emitters/identifier.d.ts +28 -0
  31. package/lib/emitters/identifier.d.ts.map +1 -0
  32. package/lib/emitters/identifier.js +94 -0
  33. package/lib/emitters/identifier.js.map +1 -0
  34. package/lib/emitters/inline-runtime.d.ts +11 -0
  35. package/lib/emitters/inline-runtime.d.ts.map +1 -0
  36. package/lib/emitters/inline-runtime.js +97 -0
  37. package/lib/emitters/inline-runtime.js.map +1 -0
  38. package/lib/emitters/jsdoc.d.ts +9 -0
  39. package/lib/emitters/jsdoc.d.ts.map +1 -0
  40. package/lib/emitters/jsdoc.js +83 -0
  41. package/lib/emitters/jsdoc.js.map +1 -0
  42. package/lib/emitters/mock.d.ts +22 -0
  43. package/lib/emitters/mock.d.ts.map +1 -0
  44. package/lib/emitters/mock.js +243 -0
  45. package/lib/emitters/mock.js.map +1 -0
  46. package/lib/emitters/operation-aliases.d.ts +27 -0
  47. package/lib/emitters/operation-aliases.d.ts.map +1 -0
  48. package/lib/emitters/operation-aliases.js +138 -0
  49. package/lib/emitters/operation-aliases.js.map +1 -0
  50. package/lib/emitters/operation-signature.d.ts +23 -0
  51. package/lib/emitters/operation-signature.d.ts.map +1 -0
  52. package/lib/emitters/operation-signature.js +34 -0
  53. package/lib/emitters/operation-signature.js.map +1 -0
  54. package/lib/emitters/operation-types.d.ts +32 -0
  55. package/lib/emitters/operation-types.d.ts.map +1 -0
  56. package/lib/emitters/operation-types.js +117 -0
  57. package/lib/emitters/operation-types.js.map +1 -0
  58. package/lib/emitters/operations.d.ts +39 -0
  59. package/lib/emitters/operations.d.ts.map +1 -0
  60. package/lib/emitters/operations.js +33 -0
  61. package/lib/emitters/operations.js.map +1 -0
  62. package/lib/emitters/pagination.d.ts +69 -0
  63. package/lib/emitters/pagination.d.ts.map +1 -0
  64. package/lib/emitters/pagination.js +223 -0
  65. package/lib/emitters/pagination.js.map +1 -0
  66. package/lib/emitters/runtime-sources.d.ts +16 -0
  67. package/lib/emitters/runtime-sources.d.ts.map +1 -0
  68. package/lib/emitters/runtime-sources.js +16 -0
  69. package/lib/emitters/runtime-sources.js.map +1 -0
  70. package/lib/emitters/sample.d.ts +27 -0
  71. package/lib/emitters/sample.d.ts.map +1 -0
  72. package/lib/emitters/sample.js +161 -0
  73. package/lib/emitters/sample.js.map +1 -0
  74. package/lib/emitters/setup-bake.d.ts +15 -0
  75. package/lib/emitters/setup-bake.d.ts.map +1 -0
  76. package/lib/emitters/setup-bake.js +65 -0
  77. package/lib/emitters/setup-bake.js.map +1 -0
  78. package/lib/emitters/sse.d.ts +10 -0
  79. package/lib/emitters/sse.d.ts.map +1 -0
  80. package/lib/emitters/sse.js +46 -0
  81. package/lib/emitters/sse.js.map +1 -0
  82. package/lib/emitters/support.d.ts +13 -0
  83. package/lib/emitters/support.d.ts.map +1 -0
  84. package/lib/emitters/support.js +21 -0
  85. package/lib/emitters/support.js.map +1 -0
  86. package/lib/emitters/swr.d.ts +10 -0
  87. package/lib/emitters/swr.d.ts.map +1 -0
  88. package/lib/emitters/swr.js +88 -0
  89. package/lib/emitters/swr.js.map +1 -0
  90. package/lib/emitters/tanstack-query.d.ts +11 -0
  91. package/lib/emitters/tanstack-query.d.ts.map +1 -0
  92. package/lib/emitters/tanstack-query.js +68 -0
  93. package/lib/emitters/tanstack-query.js.map +1 -0
  94. package/lib/emitters/transformers.d.ts +11 -0
  95. package/lib/emitters/transformers.d.ts.map +1 -0
  96. package/lib/emitters/transformers.js +334 -0
  97. package/lib/emitters/transformers.js.map +1 -0
  98. package/lib/emitters/ts.d.ts +40 -0
  99. package/lib/emitters/ts.d.ts.map +1 -0
  100. package/lib/emitters/ts.js +104 -0
  101. package/lib/emitters/ts.js.map +1 -0
  102. package/lib/emitters/type-guards.d.ts +21 -0
  103. package/lib/emitters/type-guards.d.ts.map +1 -0
  104. package/lib/emitters/type-guards.js +183 -0
  105. package/lib/emitters/type-guards.js.map +1 -0
  106. package/lib/emitters/types.d.ts +23 -0
  107. package/lib/emitters/types.d.ts.map +1 -0
  108. package/lib/emitters/types.js +127 -0
  109. package/lib/emitters/types.js.map +1 -0
  110. package/lib/emitters/wrapper-support.d.ts +40 -0
  111. package/lib/emitters/wrapper-support.d.ts.map +1 -0
  112. package/lib/emitters/wrapper-support.js +112 -0
  113. package/lib/emitters/wrapper-support.js.map +1 -0
  114. package/lib/emitters/zod.d.ts +13 -0
  115. package/lib/emitters/zod.d.ts.map +1 -0
  116. package/lib/emitters/zod.js +344 -0
  117. package/lib/emitters/zod.js.map +1 -0
  118. package/lib/errors.d.ts +4 -0
  119. package/lib/errors.d.ts.map +1 -0
  120. package/lib/errors.js +7 -0
  121. package/lib/errors.js.map +1 -0
  122. package/lib/generators/anchor.d.ts +9 -0
  123. package/lib/generators/anchor.d.ts.map +1 -0
  124. package/lib/generators/anchor.js +10 -0
  125. package/lib/generators/anchor.js.map +1 -0
  126. package/lib/generators/index.d.ts +15 -0
  127. package/lib/generators/index.d.ts.map +1 -0
  128. package/lib/generators/index.js +62 -0
  129. package/lib/generators/index.js.map +1 -0
  130. package/lib/generators/mock.d.ts +9 -0
  131. package/lib/generators/mock.d.ts.map +1 -0
  132. package/lib/generators/mock.js +23 -0
  133. package/lib/generators/mock.js.map +1 -0
  134. package/lib/generators/resolve.d.ts +19 -0
  135. package/lib/generators/resolve.d.ts.map +1 -0
  136. package/lib/generators/resolve.js +68 -0
  137. package/lib/generators/resolve.js.map +1 -0
  138. package/lib/generators/sdk.d.ts +12 -0
  139. package/lib/generators/sdk.d.ts.map +1 -0
  140. package/lib/generators/sdk.js +26 -0
  141. package/lib/generators/sdk.js.map +1 -0
  142. package/lib/generators/swr.d.ts +15 -0
  143. package/lib/generators/swr.d.ts.map +1 -0
  144. package/lib/generators/swr.js +27 -0
  145. package/lib/generators/swr.js.map +1 -0
  146. package/lib/generators/tanstack-query.d.ts +17 -0
  147. package/lib/generators/tanstack-query.d.ts.map +1 -0
  148. package/lib/generators/tanstack-query.js +30 -0
  149. package/lib/generators/tanstack-query.js.map +1 -0
  150. package/lib/generators/transformers.d.ts +19 -0
  151. package/lib/generators/transformers.d.ts.map +1 -0
  152. package/lib/generators/transformers.js +28 -0
  153. package/lib/generators/transformers.js.map +1 -0
  154. package/lib/generators/types.d.ts +66 -0
  155. package/lib/generators/types.d.ts.map +1 -0
  156. package/lib/generators/types.js +2 -0
  157. package/lib/generators/types.js.map +1 -0
  158. package/lib/generators/zod.d.ts +14 -0
  159. package/lib/generators/zod.d.ts.map +1 -0
  160. package/lib/generators/zod.js +23 -0
  161. package/lib/generators/zod.js.map +1 -0
  162. package/lib/index.d.ts +29 -0
  163. package/lib/index.d.ts.map +1 -0
  164. package/lib/index.js +119 -0
  165. package/lib/index.js.map +1 -0
  166. package/lib/intermediate-representation/build.d.ts +4 -0
  167. package/lib/intermediate-representation/build.d.ts.map +1 -0
  168. package/lib/intermediate-representation/build.js +761 -0
  169. package/lib/intermediate-representation/build.js.map +1 -0
  170. package/lib/intermediate-representation/model.d.ts +275 -0
  171. package/lib/intermediate-representation/model.d.ts.map +1 -0
  172. package/lib/intermediate-representation/model.js +5 -0
  173. package/lib/intermediate-representation/model.js.map +1 -0
  174. package/lib/intermediate-representation/normalize-swagger2.d.ts +10 -0
  175. package/lib/intermediate-representation/normalize-swagger2.d.ts.map +1 -0
  176. package/lib/intermediate-representation/normalize-swagger2.js +210 -0
  177. package/lib/intermediate-representation/normalize-swagger2.js.map +1 -0
  178. package/lib/intermediate-representation/sanitize-identifiers.d.ts +30 -0
  179. package/lib/intermediate-representation/sanitize-identifiers.d.ts.map +1 -0
  180. package/lib/intermediate-representation/sanitize-identifiers.js +153 -0
  181. package/lib/intermediate-representation/sanitize-identifiers.js.map +1 -0
  182. package/lib/loader.d.ts +4 -0
  183. package/lib/loader.d.ts.map +1 -0
  184. package/lib/loader.js +14 -0
  185. package/lib/loader.js.map +1 -0
  186. package/lib/plugin.d.ts +19 -0
  187. package/lib/plugin.d.ts.map +1 -0
  188. package/lib/plugin.js +41 -0
  189. package/lib/plugin.js.map +1 -0
  190. package/lib/runtime/auth.d.ts +15 -0
  191. package/lib/runtime/auth.d.ts.map +1 -0
  192. package/lib/runtime/auth.js +67 -0
  193. package/lib/runtime/auth.js.map +1 -0
  194. package/lib/runtime/create-client.d.ts +35 -0
  195. package/lib/runtime/create-client.d.ts.map +1 -0
  196. package/lib/runtime/create-client.js +215 -0
  197. package/lib/runtime/create-client.js.map +1 -0
  198. package/lib/runtime/errors.d.ts +11 -0
  199. package/lib/runtime/errors.d.ts.map +1 -0
  200. package/lib/runtime/errors.js +25 -0
  201. package/lib/runtime/errors.js.map +1 -0
  202. package/lib/runtime/index.d.ts +14 -0
  203. package/lib/runtime/index.d.ts.map +1 -0
  204. package/lib/runtime/index.js +24 -0
  205. package/lib/runtime/index.js.map +1 -0
  206. package/lib/runtime/multipart.d.ts +9 -0
  207. package/lib/runtime/multipart.d.ts.map +1 -0
  208. package/lib/runtime/multipart.js +31 -0
  209. package/lib/runtime/multipart.js.map +1 -0
  210. package/lib/runtime/paginate.d.ts +36 -0
  211. package/lib/runtime/paginate.d.ts.map +1 -0
  212. package/lib/runtime/paginate.js +99 -0
  213. package/lib/runtime/paginate.js.map +1 -0
  214. package/lib/runtime/parse.d.ts +9 -0
  215. package/lib/runtime/parse.d.ts.map +1 -0
  216. package/lib/runtime/parse.js +37 -0
  217. package/lib/runtime/parse.js.map +1 -0
  218. package/lib/runtime/retry.d.ts +15 -0
  219. package/lib/runtime/retry.d.ts.map +1 -0
  220. package/lib/runtime/retry.js +51 -0
  221. package/lib/runtime/retry.js.map +1 -0
  222. package/lib/runtime/send.d.ts +31 -0
  223. package/lib/runtime/send.d.ts.map +1 -0
  224. package/lib/runtime/send.js +138 -0
  225. package/lib/runtime/send.js.map +1 -0
  226. package/lib/runtime/setup.d.ts +11 -0
  227. package/lib/runtime/setup.d.ts.map +1 -0
  228. package/lib/runtime/setup.js +13 -0
  229. package/lib/runtime/setup.js.map +1 -0
  230. package/lib/runtime/sse.d.ts +21 -0
  231. package/lib/runtime/sse.d.ts.map +1 -0
  232. package/lib/runtime/sse.js +163 -0
  233. package/lib/runtime/sse.js.map +1 -0
  234. package/lib/runtime/types.d.ts +232 -0
  235. package/lib/runtime/types.d.ts.map +1 -0
  236. package/lib/runtime/types.js +9 -0
  237. package/lib/runtime/types.js.map +1 -0
  238. package/lib/runtime/url.d.ts +25 -0
  239. package/lib/runtime/url.d.ts.map +1 -0
  240. package/lib/runtime/url.js +97 -0
  241. package/lib/runtime/url.js.map +1 -0
  242. package/lib/runtime-contract.d.ts +27 -0
  243. package/lib/runtime-contract.d.ts.map +1 -0
  244. package/lib/runtime-contract.js +14 -0
  245. package/lib/runtime-contract.js.map +1 -0
  246. package/lib/types.d.ts +118 -0
  247. package/lib/types.d.ts.map +1 -0
  248. package/lib/types.js +2 -0
  249. package/lib/types.js.map +1 -0
  250. package/package.json +59 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operation-signature.js","sourceRoot":"","sources":["../../src/emitters/operation-signature.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,oFAAoF;AACpF,qFAAqF;AACrF,4FAA4F;AAG5F,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAoB1C,yEAAyE;AACzE,MAAM,UAAU,kBAAkB,CAAC,EAAkB;IACnD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAU,CAAC,CAAC,CAAC;IACvE,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QACtD,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAE7F,MAAM,QAAQ,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;IACxC,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9C,OAAO;QACL,UAAU;QACV,QAAQ;QACR,OAAO;QACP,UAAU;QACV,SAAS,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,IAAI,OAAO,IAAI,UAAU;QACrE,YAAY,EACV,UAAU,CAAC,MAAM,GAAG,CAAC;YACrB,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;YACtC,CAAC,EAAE,CAAC,WAAW,EAAE,QAAQ,IAAI,KAAK,CAAC;YACnC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;QACzC,iBAAiB,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW;KACrD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,32 @@
1
+ import type { ParamModel, RequestBodyModel, ResponseBodyModel } from '../intermediate-representation/model.js';
2
+ import { ts } from './ts.js';
3
+ import { type DateType } from './types.js';
4
+ /** A `<name>: <type>` parameter, defaulting to `= {}` when `withDefault`. */
5
+ export declare function simpleParam(name: string, type: ts.TypeNode, withDefault: boolean): ts.ParameterDeclaration;
6
+ /**
7
+ * A `<slot>: { … }` argument bundling `params` into one object, each property
8
+ * carrying its own JSDoc (description + metadata). Defaults to `= {}` when every
9
+ * property is optional. Shared by the query `params` and the operation `headers`
10
+ * slots, which have the identical layout.
11
+ */
12
+ export declare function renderParamsObjectArg(slot: string, params: ParamModel[], dateType: DateType): ts.ParameterDeclaration;
13
+ /** The `{ … }` type literal for a params object (query or headers), with per-prop JSDoc. */
14
+ export declare function paramsTypeLiteral(params: ParamModel[], dateType: DateType): ts.TypeLiteralNode;
15
+ /** A bare identifier key when valid, a quoted string-literal key otherwise. */
16
+ export declare function propertyKey(safe: string): ts.PropertyName;
17
+ /**
18
+ * A multipart body whose schema is a concrete object — the case worth typing. Such a body
19
+ * is emitted as its object shape (binary fields → `Blob`); the runtime serializes it to
20
+ * `FormData` (`runtime/multipart.ts`) after the onRequest chain. Multipart bodies with a
21
+ * non-object schema can't be typed field-by-field, so they keep the raw `FormData` escape hatch.
22
+ */
23
+ export declare function isTypedMultipart(rb: RequestBodyModel): boolean;
24
+ /** The request-body TS type: special wrapper types per content-type, else the schema. */
25
+ export declare function bodyTypeNode(rb: RequestBodyModel, dateType: DateType): ts.TypeNode;
26
+ /** The deduped error-response body type nodes (by printed form), or `[]` when none. */
27
+ export declare function errorTypeNodes(responses: ResponseBodyModel[], dateType: DateType): ts.TypeNode[];
28
+ export declare function computeResponse(responses: ResponseBodyModel[], dateType: DateType): {
29
+ responseType: ts.TypeNode;
30
+ responseKind: 'json' | 'blob' | 'text' | 'void';
31
+ };
32
+ //# sourceMappingURL=operation-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operation-types.d.ts","sourceRoot":"","sources":["../../src/emitters/operation-types.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,yCAAyC,CAAC;AAGjD,OAAO,EAAqB,EAAE,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,KAAK,QAAQ,EAAoB,MAAM,YAAY,CAAC;AAI7D,6EAA6E;AAC7E,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,EAAE,CAAC,QAAQ,EACjB,WAAW,EAAE,OAAO,GACnB,EAAE,CAAC,oBAAoB,CASzB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,UAAU,EAAE,EACpB,QAAQ,EAAE,QAAQ,GACjB,EAAE,CAAC,oBAAoB,CAEzB;AAED,4FAA4F;AAC5F,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,QAAQ,GAAG,EAAE,CAAC,eAAe,CAa9F;AAED,+EAA+E;AAC/E,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,EAAE,CAAC,YAAY,CAIzD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAE9D;AAED,yFAAyF;AACzF,wBAAgB,YAAY,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAelF;AAED,uFAAuF;AACvF,wBAAgB,cAAc,CAAC,SAAS,EAAE,iBAAiB,EAAE,EAAE,QAAQ,EAAE,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAWhG;AAED,wBAAgB,eAAe,CAC7B,SAAS,EAAE,iBAAiB,EAAE,EAC9B,QAAQ,EAAE,QAAQ,GACjB;IACD,YAAY,EAAE,EAAE,CAAC,QAAQ,CAAC;IAC1B,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;CACjD,CAqCA"}
@@ -0,0 +1,117 @@
1
+ // TypeScript type/parameter builders shared by the operation emitter and the operation-alias
2
+ // builders: turn an operation's params / body / responses into `ts` type and parameter nodes.
3
+ // Leaf module — depends only on the IR types and the codegen foundation, never back on operations.ts.
4
+ import { safeIdent } from './identifier.js';
5
+ import { jsdocText } from './jsdoc.js';
6
+ import { jsdoc, printNodes, ts } from './ts.js';
7
+ import { schemaToTypeNode } from './types.js';
8
+ const { factory } = ts;
9
+ /** A `<name>: <type>` parameter, defaulting to `= {}` when `withDefault`. */
10
+ export function simpleParam(name, type, withDefault) {
11
+ return factory.createParameterDeclaration(undefined, undefined, name, undefined, type, withDefault ? factory.createObjectLiteralExpression([], false) : undefined);
12
+ }
13
+ /**
14
+ * A `<slot>: { … }` argument bundling `params` into one object, each property
15
+ * carrying its own JSDoc (description + metadata). Defaults to `= {}` when every
16
+ * property is optional. Shared by the query `params` and the operation `headers`
17
+ * slots, which have the identical layout.
18
+ */
19
+ export function renderParamsObjectArg(slot, params, dateType) {
20
+ return simpleParam(slot, paramsTypeLiteral(params, dateType), !params.some((p) => p.required));
21
+ }
22
+ /** The `{ … }` type literal for a params object (query or headers), with per-prop JSDoc. */
23
+ export function paramsTypeLiteral(params, dateType) {
24
+ return factory.createTypeLiteralNode(params.map((p) => {
25
+ const sig = factory.createPropertySignature(undefined, propertyKey(safeIdent(p.name)), p.required ? undefined : factory.createToken(ts.SyntaxKind.QuestionToken), schemaToTypeNode(p.schema, dateType));
26
+ const doc = jsdocText(p.description, p.schema.metadata);
27
+ return doc === undefined ? sig : jsdoc(sig, doc);
28
+ }));
29
+ }
30
+ /** A bare identifier key when valid, a quoted string-literal key otherwise. */
31
+ export function propertyKey(safe) {
32
+ return safe.startsWith('"')
33
+ ? factory.createStringLiteral(JSON.parse(safe))
34
+ : factory.createIdentifier(safe);
35
+ }
36
+ /**
37
+ * A multipart body whose schema is a concrete object — the case worth typing. Such a body
38
+ * is emitted as its object shape (binary fields → `Blob`); the runtime serializes it to
39
+ * `FormData` (`runtime/multipart.ts`) after the onRequest chain. Multipart bodies with a
40
+ * non-object schema can't be typed field-by-field, so they keep the raw `FormData` escape hatch.
41
+ */
42
+ export function isTypedMultipart(rb) {
43
+ return rb.contentType === 'multipart/form-data' && rb.schema.kind === 'object';
44
+ }
45
+ /** The request-body TS type: special wrapper types per content-type, else the schema. */
46
+ export function bodyTypeNode(rb, dateType) {
47
+ if (isTypedMultipart(rb))
48
+ return schemaToTypeNode(rb.schema, dateType);
49
+ switch (rb.contentType) {
50
+ case 'multipart/form-data':
51
+ return factory.createTypeReferenceNode('FormData');
52
+ case 'application/x-www-form-urlencoded':
53
+ return factory.createTypeReferenceNode('URLSearchParams');
54
+ case 'application/octet-stream':
55
+ return factory.createUnionTypeNode([
56
+ factory.createTypeReferenceNode('Blob'),
57
+ factory.createTypeReferenceNode('ArrayBuffer'),
58
+ ]);
59
+ default:
60
+ return schemaToTypeNode(rb.schema, dateType);
61
+ }
62
+ }
63
+ /** The deduped error-response body type nodes (by printed form), or `[]` when none. */
64
+ export function errorTypeNodes(responses, dateType) {
65
+ const seen = new Set();
66
+ const nodes = [];
67
+ for (const r of responses) {
68
+ const node = schemaToTypeNode(r.schema, dateType);
69
+ const key = printNodes([node]);
70
+ if (seen.has(key))
71
+ continue;
72
+ seen.add(key);
73
+ nodes.push(node);
74
+ }
75
+ return nodes;
76
+ }
77
+ export function computeResponse(responses, dateType) {
78
+ if (responses.length === 0)
79
+ return {
80
+ responseType: factory.createKeywordTypeNode(ts.SyntaxKind.VoidKeyword),
81
+ responseKind: 'void',
82
+ };
83
+ // Prefer JSON; fall back to other content types.
84
+ const jsonResponse = responses.find((r) => r.contentType.toLowerCase().includes('json'));
85
+ if (jsonResponse) {
86
+ return { responseType: schemaToTypeNode(jsonResponse.schema, dateType), responseKind: 'json' };
87
+ }
88
+ // No JSON — handle binary/text gracefully.
89
+ const nodes = [];
90
+ const seen = new Set();
91
+ let hasBinary = false;
92
+ let hasText = false;
93
+ for (const r of responses) {
94
+ let node;
95
+ if (r.contentType.startsWith('image/') || r.contentType === 'application/octet-stream') {
96
+ node = factory.createTypeReferenceNode('Blob');
97
+ hasBinary = true;
98
+ }
99
+ else if (r.contentType.startsWith('text/')) {
100
+ node = factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword);
101
+ hasText = true;
102
+ }
103
+ else {
104
+ node = schemaToTypeNode(r.schema, dateType);
105
+ }
106
+ const key = printNodes([node]);
107
+ if (seen.has(key))
108
+ continue;
109
+ seen.add(key);
110
+ nodes.push(node);
111
+ }
112
+ // `nodes` is guaranteed non-empty here: each iteration above always builds one.
113
+ const responseType = nodes.length === 1 ? nodes[0] : factory.createUnionTypeNode(nodes);
114
+ const responseKind = hasBinary ? 'blob' : hasText ? 'text' : 'json';
115
+ return { responseType, responseKind };
116
+ }
117
+ //# sourceMappingURL=operation-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operation-types.js","sourceRoot":"","sources":["../../src/emitters/operation-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { OperationModel, ParamModel } from '../intermediate-representation/model.js';
2
+ import type { ModelPagination } from './pagination.js';
3
+ import { ts } from './ts.js';
4
+ import { type DateType } from './types.js';
5
+ /** Error-handling shape of the generated client: throw on non-2xx, or return a result union. */
6
+ export type ErrorMode = 'throw' | 'result';
7
+ /**
8
+ * How an operation's inputs are passed to the generated call.
9
+ * - `'flat'` (default): path params spread as positional args, then the
10
+ * `params`/`body`/`headers` slots — one exported sugar arrow per operation.
11
+ * - `'grouped'`: the client methods' own shape — a single `args` object bundling
12
+ * every input; the sugar is a plain destructure of the client. The per-call
13
+ * `init: RequestOptions` stays a separate trailing argument in both styles.
14
+ */
15
+ export type ArgsStyle = 'flat' | 'grouped';
16
+ /**
17
+ * The emit configuration every operation shares. Bundling it into one value keeps
18
+ * it out of the positional parameter lists of the operation emitters (which would
19
+ * otherwise thread the same arguments through every layer, inviting transposition
20
+ * bugs). Per-call structural data (response type, ordered path params, …) stays an
21
+ * explicit argument; only this cross-cutting config travels as `ctx`.
22
+ */
23
+ export type EmitContext = {
24
+ argsStyle: ArgsStyle;
25
+ errorMode: ErrorMode;
26
+ dateType: DateType;
27
+ /** Names of every exported schema, used for `<Op>*` alias collision suppression. */
28
+ schemaNames: Set<string>;
29
+ /** Resolved auto-pagination per operation name (absent ⇒ nothing paginates). */
30
+ pagination?: ModelPagination;
31
+ };
32
+ /**
33
+ * The flat sugar's parameter list: path params spread as positional args (in URL
34
+ * template order), then the `params`/`body`/`headers` slots, ending with the
35
+ * trailing `init: RequestOptions` (`SseOptions` for streams). Optional slots
36
+ * default to `= {}` so trailing arguments can be omitted.
37
+ */
38
+ export declare function renderArgList(op: OperationModel, orderedPathParams: ParamModel[], pathParamIdent: Map<string, string>, ctx: EmitContext): ts.ParameterDeclaration[];
39
+ //# sourceMappingURL=operations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/emitters/operations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAC;AAE1F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,KAAK,QAAQ,EAAoB,MAAM,YAAY,CAAC;AAI7D,gGAAgG;AAChG,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE3C;;;;;;;GAOG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;AAE3C;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,oFAAoF;IACpF,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB,gFAAgF;IAChF,UAAU,CAAC,EAAE,eAAe,CAAC;CAC9B,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,EAAE,EAAE,cAAc,EAClB,iBAAiB,EAAE,UAAU,EAAE,EAC/B,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EACnC,GAAG,EAAE,WAAW,GACf,EAAE,CAAC,oBAAoB,EAAE,CAoC3B"}
@@ -0,0 +1,33 @@
1
+ import { bodyTypeNode, renderParamsObjectArg, simpleParam } from './operation-types.js';
2
+ import { isSseOp } from './sse.js';
3
+ import { ts } from './ts.js';
4
+ import { schemaToTypeNode } from './types.js';
5
+ const { factory } = ts;
6
+ /**
7
+ * The flat sugar's parameter list: path params spread as positional args (in URL
8
+ * template order), then the `params`/`body`/`headers` slots, ending with the
9
+ * trailing `init: RequestOptions` (`SseOptions` for streams). Optional slots
10
+ * default to `= {}` so trailing arguments can be omitted.
11
+ */
12
+ export function renderArgList(op, orderedPathParams, pathParamIdent, ctx) {
13
+ const { dateType } = ctx;
14
+ const args = [];
15
+ for (const p of orderedPathParams) {
16
+ args.push(simpleParam(pathParamIdent.get(p.name), schemaToTypeNode(p.schema, dateType), false));
17
+ }
18
+ if (op.queryParams.length > 0)
19
+ args.push(renderParamsObjectArg('params', op.queryParams, dateType));
20
+ if (op.requestBody) {
21
+ const type = bodyTypeNode(op.requestBody, dateType);
22
+ args.push(factory.createParameterDeclaration(undefined, undefined, 'body', op.requestBody.required ? undefined : factory.createToken(ts.SyntaxKind.QuestionToken), type));
23
+ }
24
+ // Operation header params are explicit, typed inputs; security-scheme headers
25
+ // are injected by the runtime and live underneath them.
26
+ if (op.headerParams.length > 0)
27
+ args.push(renderParamsObjectArg('headers', op.headerParams, dateType));
28
+ // SSE ops take per-stream `SseOptions` (reconnect knobs); everyone else the
29
+ // standard per-call `RequestOptions`.
30
+ args.push(simpleParam('init', factory.createTypeReferenceNode(isSseOp(op) ? 'SseOptions' : 'RequestOptions'), true));
31
+ return args;
32
+ }
33
+ //# sourceMappingURL=operations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operations.js","sourceRoot":"","sources":["../../src/emitters/operations.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExF,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAiB,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE7D,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;AAgCvB;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAC3B,EAAkB,EAClB,iBAA+B,EAC/B,cAAmC,EACnC,GAAgB;IAEhB,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC;IACzB,MAAM,IAAI,GAA8B,EAAE,CAAC;IAC3C,KAAK,MAAM,CAAC,IAAI,iBAAiB,EAAE,CAAC;QAClC,IAAI,CAAC,IAAI,CACP,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,CACtF,CAAC;IACJ,CAAC;IACD,IAAI,EAAE,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,EAAE,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;IACvE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACnB,MAAM,IAAI,GAAG,YAAY,CAAC,EAAE,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,IAAI,CACP,OAAO,CAAC,0BAA0B,CAChC,SAAS,EACT,SAAS,EACT,MAAM,EACN,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EACtF,IAAI,CACL,CACF,CAAC;IACJ,CAAC;IACD,8EAA8E;IAC9E,wDAAwD;IACxD,IAAI,EAAE,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,EAAE,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;IACzE,4EAA4E;IAC5E,sCAAsC;IACtC,IAAI,CAAC,IAAI,CACP,WAAW,CACT,MAAM,EACN,OAAO,CAAC,uBAAuB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAgB,CAAC,EAC9E,IAAI,CACL,CACF,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,69 @@
1
+ import { type ApiModel, type OperationModel, type SchemaModel } from '../intermediate-representation/model.js';
2
+ import type { PaginationSpec } from '../runtime/types.js';
3
+ /** The pagination styles the generated runtime can drive. */
4
+ export type PaginationStyle = 'cursor' | 'offset' | 'page';
5
+ /**
6
+ * One user-facing pagination rule — the shared shape of the `x-pagination` operation
7
+ * extension and every `pagination` config rule. `nextCursor` and `items` are RFC 6901
8
+ * JSON pointers (starting with `/`) into the operation's success response.
9
+ */
10
+ export type PaginationRule = {
11
+ /** `cursor` follows a response cursor; `offset`/`page` increment a numeric param. */
12
+ style: PaginationStyle;
13
+ /** Cursor style: the request query param that receives the cursor. */
14
+ cursorParam?: string;
15
+ /** Cursor style: JSON pointer to the next cursor in the response. */
16
+ nextCursor?: string;
17
+ /** Offset/page styles: the request query param the iterator advances. */
18
+ offsetParam?: string;
19
+ /** Optional page-size query param (any style; recorded for tooling). */
20
+ limitParam?: string;
21
+ /** JSON pointer to the page's item array in the response. */
22
+ items: string;
23
+ };
24
+ /**
25
+ * The `pagination` config block: an optional convention rule (the top-level rule
26
+ * fields, applied to every operation it structurally fits when `style` is set), plus
27
+ * per-operation overrides and exclusions. Precedence per operation:
28
+ * `operations[id]` > the spec's `x-pagination` extension > the convention rule.
29
+ */
30
+ export type PaginationConfig = Partial<PaginationRule> & {
31
+ /** operationIds no source may paginate. */
32
+ exclude?: string[];
33
+ /** Per-operation rules, keyed by operationId (beat `x-pagination` and the convention). */
34
+ operations?: Record<string, PaginationRule>;
35
+ };
36
+ /** One operation's resolution: the normalized spec + item element schema, or an error. */
37
+ export type ResolvedPagination = {
38
+ spec?: PaginationSpec;
39
+ itemSchema?: SchemaModel;
40
+ error?: string;
41
+ };
42
+ /** Every paginated operation's spec + item schema, keyed by operation name. */
43
+ export type ModelPagination = Map<string, {
44
+ spec: PaginationSpec;
45
+ itemSchema: SchemaModel;
46
+ }>;
47
+ /**
48
+ * Resolve one operation's pagination across the three sources (per-op config >
49
+ * `x-pagination` > convention); `config.exclude` kills all of them. Returns the
50
+ * normalized spec + the item element schema, `{}` when the operation doesn't paginate
51
+ * (no source, or a convention that doesn't fit), or an `error` for a malformed rule
52
+ * (any source) and for an explicit rule that doesn't fit the operation.
53
+ */
54
+ export declare function resolveOperationPagination(op: OperationModel, model: ApiModel, config: PaginationConfig | undefined): ResolvedPagination;
55
+ /**
56
+ * Resolve pagination for every operation of the model. Errors (malformed rules,
57
+ * explicit rules that don't fit) are aggregated into ONE throw listing every
58
+ * failing operation, so a generate run reports the whole problem set at once.
59
+ */
60
+ export declare function resolveModelPagination(model: ApiModel, config: PaginationConfig | undefined): ModelPagination;
61
+ /**
62
+ * Resolve an RFC 6901 JSON pointer (`~1` → `/`, `~0` → `~`) over a schema, walking the
63
+ * VALUE shape it describes: object property steps by name, record values for any token,
64
+ * array items for numeric tokens, with `ref` steps resolved through the model's named
65
+ * schemas (cycle-guarded). Unions and intersections bail (v1 is strict). Returns
66
+ * `undefined` on any miss — the caller decides whether that is an error.
67
+ */
68
+ export declare function resolveSchemaPointer(schema: SchemaModel, pointer: string, model: ApiModel): SchemaModel | undefined;
69
+ //# sourceMappingURL=pagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../src/emitters/pagination.ts"],"names":[],"mappings":"AAUA,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,KAAK,WAAW,EACjB,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAG1D,6DAA6D;AAC7D,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE3D;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,qFAAqF;IACrF,KAAK,EAAE,eAAe,CAAC;IACvB,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG;IACvD,2CAA2C;IAC3C,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,0FAA0F;IAC1F,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC7C,CAAC;AAEF,0FAA0F;AAC1F,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,+EAA+E;AAC/E,MAAM,MAAM,eAAe,GAAG,GAAG,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,UAAU,EAAE,WAAW,CAAA;CAAE,CAAC,CAAC;AAE7F;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,EAAE,EAAE,cAAc,EAClB,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,gBAAgB,GAAG,SAAS,GACnC,kBAAkB,CAepB;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,gBAAgB,GAAG,SAAS,GACnC,eAAe,CAcjB;AA+GD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,QAAQ,GACd,WAAW,GAAG,SAAS,CAmBzB"}
@@ -0,0 +1,223 @@
1
+ // Auto-pagination resolution: turns config rules and `x-pagination` extensions into the
2
+ // normalized descriptor `PaginationSpec`, statically VERIFYING each rule fits its
3
+ // operation (the advance param is a declared query param whose schema fits the style —
4
+ // string-ish for `cursor`, a numeric scalar for `offset`/`page`; the JSON pointers
5
+ // resolve over the success response schema). A convention rule that doesn't fit silently skips the
6
+ // operation; an explicit rule (per-op config or extension) that doesn't fit — and a
7
+ // malformed rule from ANY source — is a generate-time error. No heuristics, ever.
8
+ import { isPlainObject } from '@redocly/openapi-core';
9
+ import { allOperations, } from '../intermediate-representation/model.js';
10
+ import { isSseOp } from './sse.js';
11
+ /**
12
+ * Resolve one operation's pagination across the three sources (per-op config >
13
+ * `x-pagination` > convention); `config.exclude` kills all of them. Returns the
14
+ * normalized spec + the item element schema, `{}` when the operation doesn't paginate
15
+ * (no source, or a convention that doesn't fit), or an `error` for a malformed rule
16
+ * (any source) and for an explicit rule that doesn't fit the operation.
17
+ */
18
+ export function resolveOperationPagination(op, model, config) {
19
+ const configName = op.specName ?? op.name;
20
+ if (config?.exclude?.includes(configName))
21
+ return {};
22
+ const perOp = config?.operations?.[configName];
23
+ if (perOp !== undefined) {
24
+ return applyRule(op, model, perOp, `pagination.operations["${configName}"]`, true);
25
+ }
26
+ if (op.paginationExtension !== undefined) {
27
+ return applyRule(op, model, op.paginationExtension, 'x-pagination', true);
28
+ }
29
+ if (config?.style !== undefined) {
30
+ const { exclude: _exclude, operations: _operations, ...convention } = config;
31
+ return applyRule(op, model, convention, 'pagination convention', false);
32
+ }
33
+ return {};
34
+ }
35
+ /**
36
+ * Resolve pagination for every operation of the model. Errors (malformed rules,
37
+ * explicit rules that don't fit) are aggregated into ONE throw listing every
38
+ * failing operation, so a generate run reports the whole problem set at once.
39
+ */
40
+ export function resolveModelPagination(model, config) {
41
+ const resolved = new Map();
42
+ const errors = [];
43
+ for (const op of allOperations(model.services)) {
44
+ const result = resolveOperationPagination(op, model, config);
45
+ if (result.error !== undefined)
46
+ errors.push(result.error);
47
+ else if (result.spec !== undefined) {
48
+ resolved.set(op.name, { spec: result.spec, itemSchema: result.itemSchema });
49
+ }
50
+ }
51
+ if (errors.length > 0) {
52
+ throw new Error(['Invalid pagination configuration:', ...errors].join('\n - '));
53
+ }
54
+ return resolved;
55
+ }
56
+ /** Validate the rule's shape and fit, then normalize it into a descriptor spec. */
57
+ function applyRule(op, model, rule, source, explicit) {
58
+ const label = `Pagination for operation "${op.name}" (${source})`;
59
+ // Shape problems are errors from EVERY source — a malformed convention is a config bug.
60
+ const shapeProblem = ruleShapeProblem(rule);
61
+ if (shapeProblem !== undefined)
62
+ return { error: `${label}: ${shapeProblem}` };
63
+ const valid = rule;
64
+ // Fit problems: explicit declarations fail generation; a convention silently skips.
65
+ const misfit = (problem) => explicit ? { error: `${label}: ${problem}` } : {};
66
+ if (isSseOp(op))
67
+ return misfit('the operation is a Server-Sent Events stream');
68
+ const paramField = valid.style === 'cursor' ? 'cursorParam' : 'offsetParam';
69
+ const param = valid.style === 'cursor' ? valid.cursorParam : valid.offsetParam;
70
+ const advance = op.queryParams.find((p) => p.name === param);
71
+ if (!advance) {
72
+ return misfit(`query parameter "${param}" is not declared on the operation`);
73
+ }
74
+ // The advance param must accept what the runtime sends: the response's cursor
75
+ // (string-ish, same predicate as nextCursor) or the incremented number.
76
+ const advanceSchema = deref(advance.schema, model);
77
+ const advanceFits = advanceSchema !== undefined &&
78
+ (valid.style === 'cursor'
79
+ ? isStringish(advanceSchema, model)
80
+ : advanceSchema.kind === 'scalar' &&
81
+ (advanceSchema.scalar === 'number' || advanceSchema.scalar === 'integer'));
82
+ if (!advanceFits) {
83
+ const expected = valid.style === 'cursor' ? 'a string' : 'a number';
84
+ return misfit(`the "${paramField}" query parameter "${param}" must accept ${expected} (got ${describeSchema(advanceSchema)})`);
85
+ }
86
+ // The page the pointers address is the operation's primary JSON success response —
87
+ // the same response `computeResponse` types (JSON preferred over other content types).
88
+ const page = op.successResponses.find((r) => r.contentType.toLowerCase().includes('json'));
89
+ if (!page)
90
+ return misfit('the operation has no JSON success response');
91
+ const itemsTarget = resolveSchemaPointer(page.schema, valid.items, model);
92
+ if (itemsTarget === undefined) {
93
+ return misfit(`the "items" pointer "${valid.items}" does not resolve in the success response schema`);
94
+ }
95
+ if (itemsTarget.kind !== 'array') {
96
+ return misfit(`the "items" pointer "${valid.items}" must point at an array (got ${itemsTarget.kind})`);
97
+ }
98
+ if (valid.style === 'cursor') {
99
+ const cursorTarget = resolveSchemaPointer(page.schema, valid.nextCursor, model);
100
+ if (cursorTarget === undefined) {
101
+ return misfit(`the "nextCursor" pointer "${valid.nextCursor}" does not resolve in the success response schema`);
102
+ }
103
+ if (!isStringish(cursorTarget, model)) {
104
+ return misfit(`the "nextCursor" pointer "${valid.nextCursor}" must point at a string (got ${cursorTarget.kind})`);
105
+ }
106
+ }
107
+ return {
108
+ spec: {
109
+ style: valid.style,
110
+ param,
111
+ ...(valid.limitParam !== undefined ? { limitParam: valid.limitParam } : {}),
112
+ ...(valid.style === 'cursor' ? { nextCursor: valid.nextCursor } : {}),
113
+ items: valid.items,
114
+ },
115
+ itemSchema: itemsTarget.items,
116
+ };
117
+ }
118
+ /**
119
+ * The rule's structural problem, or `undefined` when it is a well-formed
120
+ * `PaginationRule`. Works over `unknown` — the extension is arbitrary spec data and
121
+ * config arrives from YAML, so both are checked field-by-field.
122
+ */
123
+ function ruleShapeProblem(rule) {
124
+ if (!isPlainObject(rule))
125
+ return 'the rule must be an object';
126
+ const { style, cursorParam, nextCursor, offsetParam, limitParam, items } = rule;
127
+ if (style !== 'cursor' && style !== 'offset' && style !== 'page') {
128
+ return `"style" must be one of "cursor" | "offset" | "page" (got ${JSON.stringify(style)})`;
129
+ }
130
+ if (typeof items !== 'string' || !items.startsWith('/')) {
131
+ return '"items" must be a JSON pointer starting with "/"';
132
+ }
133
+ if (style === 'cursor') {
134
+ if (typeof cursorParam !== 'string' || cursorParam === '') {
135
+ return 'cursor style requires a "cursorParam" query parameter name';
136
+ }
137
+ if (typeof nextCursor !== 'string' || !nextCursor.startsWith('/')) {
138
+ return 'cursor style requires a "nextCursor" JSON pointer starting with "/"';
139
+ }
140
+ }
141
+ else if (typeof offsetParam !== 'string' || offsetParam === '') {
142
+ return `${style} style requires an "offsetParam" query parameter name`;
143
+ }
144
+ if (limitParam !== undefined && typeof limitParam !== 'string') {
145
+ return '"limitParam" must be a query parameter name';
146
+ }
147
+ return undefined;
148
+ }
149
+ /**
150
+ * Resolve an RFC 6901 JSON pointer (`~1` → `/`, `~0` → `~`) over a schema, walking the
151
+ * VALUE shape it describes: object property steps by name, record values for any token,
152
+ * array items for numeric tokens, with `ref` steps resolved through the model's named
153
+ * schemas (cycle-guarded). Unions and intersections bail (v1 is strict). Returns
154
+ * `undefined` on any miss — the caller decides whether that is an error.
155
+ */
156
+ export function resolveSchemaPointer(schema, pointer, model) {
157
+ let current = deref(schema, model);
158
+ if (current === undefined || (pointer !== '' && !pointer.startsWith('/')))
159
+ return undefined;
160
+ if (pointer === '')
161
+ return current;
162
+ for (const token of pointer.slice(1).split('/')) {
163
+ const key = token.replaceAll('~1', '/').replaceAll('~0', '~');
164
+ let next;
165
+ if (current.kind === 'object') {
166
+ next = current.properties.find((p) => p.name === key)?.schema;
167
+ }
168
+ else if (current.kind === 'record') {
169
+ next = current.value;
170
+ }
171
+ else if (current.kind === 'array' && /^(0|[1-9]\d*)$/.test(key)) {
172
+ next = current.items;
173
+ }
174
+ if (next === undefined)
175
+ return undefined;
176
+ current = deref(next, model);
177
+ if (current === undefined)
178
+ return undefined;
179
+ }
180
+ return current;
181
+ }
182
+ /** A (dereferenced) schema named for a fit-error message; scalars/enums by their scalar. */
183
+ function describeSchema(schema) {
184
+ if (schema === undefined)
185
+ return 'an unresolvable ref';
186
+ return schema.kind === 'scalar' || schema.kind === 'enum' ? schema.scalar : schema.kind;
187
+ }
188
+ /** Follow a `ref` chain through the model's named schemas; `undefined` on a miss or cycle. */
189
+ function deref(schema, model) {
190
+ const seen = new Set();
191
+ let current = schema;
192
+ while (current.kind === 'ref') {
193
+ const { name } = current;
194
+ if (seen.has(name))
195
+ return undefined;
196
+ seen.add(name);
197
+ const named = model.schemas.find((s) => s.name === name);
198
+ if (named === undefined)
199
+ return undefined;
200
+ current = named.schema;
201
+ }
202
+ return current;
203
+ }
204
+ /**
205
+ * Whether a (dereferenced) schema is string-ish per the cursor contract: a string
206
+ * scalar, an enum of strings, or a literal string — nullable ok (a union whose members
207
+ * are `null` or string-ish leaves; nested unions stay out, v1 is strict).
208
+ */
209
+ function isStringish(schema, model) {
210
+ if (schema.kind === 'scalar' || schema.kind === 'enum')
211
+ return schema.scalar === 'string';
212
+ if (schema.kind === 'literal')
213
+ return typeof schema.value === 'string';
214
+ if (schema.kind === 'union') {
215
+ return schema.members.every((member) => {
216
+ const resolved = deref(member, model);
217
+ return (resolved !== undefined &&
218
+ (resolved.kind === 'null' || (resolved.kind !== 'union' && isStringish(resolved, model))));
219
+ });
220
+ }
221
+ return false;
222
+ }
223
+ //# sourceMappingURL=pagination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/emitters/pagination.ts"],"names":[],"mappings":"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"}