@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,13 @@
1
+ /**
2
+ * Merge a publisher's baked setup (`defineClientSetup({...})`) with the app's config:
3
+ * app config fields win per-field over baked defaults, while middleware composes —
4
+ * baked middleware runs first, then the app's.
5
+ */
6
+ export function mergeSetup(setup, config = {}) {
7
+ return {
8
+ ...setup?.config,
9
+ ...config,
10
+ middleware: [...(setup?.middleware ?? []), ...(config.middleware ?? [])],
11
+ };
12
+ }
13
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/runtime/setup.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,UAAU,CACxB,KAAuE,EACvE,SAAuB,EAAE;IAEzB,OAAO;QACL,GAAG,KAAK,EAAE,MAAM;QAChB,GAAG,MAAM;QACT,UAAU,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;KACzE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { ClientConfig, OperationContext, ServerSentEvent, SseOptions } from './types.js';
2
+ /**
3
+ * A terminally malformed event stream — unparseable JSON `data` or an unbounded frame.
4
+ * A stable bad payload, not a dropped connection, so the stream never reconnects on it.
5
+ */
6
+ export declare class SseParseError extends Error {
7
+ }
8
+ /**
9
+ * Consume a `text/event-stream` operation as typed events (capability module — wired
10
+ * into `createClient`). Auto-reconnects on dropped connections, resuming from the last
11
+ * seen event id via `Last-Event-ID` (backoff: the server's `retry:` value, then
12
+ * `reconnectDelay`, then 1s — exponential with jitter, capped at 30s). A clean stream
13
+ * end flushes a trailing frame and finishes; `break`/abort end the iterator cleanly.
14
+ */
15
+ export declare function sse<T>(config: ClientConfig, op: OperationContext, prepare: () => Promise<{
16
+ url: string;
17
+ init: SseOptions;
18
+ }>, dataKind?: 'json' | 'text'): AsyncGenerator<ServerSentEvent<T>>;
19
+ /** Parse one raw SSE frame (its lines) into an event; returns undefined for comment-only frames. */
20
+ export declare function parseSseFrame(raw: string, dataKind: 'json' | 'text'): ServerSentEvent<unknown> | undefined;
21
+ //# sourceMappingURL=sse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../src/runtime/sse.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAQ9F;;;GAGG;AACH,qBAAa,aAAc,SAAQ,KAAK;CAAG;AAE3C;;;;;;GAMG;AACH,wBAAuB,GAAG,CAAC,CAAC,EAC1B,MAAM,EAAE,YAAY,EACpB,EAAE,EAAE,gBAAgB,EACpB,OAAO,EAAE,MAAM,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC,EACzD,QAAQ,GAAE,MAAM,GAAG,MAAe,GACjC,cAAc,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CA8FpC;AAED,oGAAoG;AACpG,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GAAG,MAAM,GACxB,eAAe,CAAC,OAAO,CAAC,GAAG,SAAS,CAkCtC"}
@@ -0,0 +1,163 @@
1
+ import { ApiError } from './errors.js';
2
+ import { readError } from './parse.js';
3
+ import { sleep } from './retry.js';
4
+ import { send, toHeaderRecord } from './send.js';
5
+ /**
6
+ * A frame delimiter: two consecutive line terminators (each CR, LF, or CRLF, per the SSE
7
+ * spec — so mixed endings like `\n\r\n` are valid boundaries, not just matching pairs).
8
+ */
9
+ const FRAME_DELIMITER = /(?:\r\n|\r|\n){2}/;
10
+ /**
11
+ * A terminally malformed event stream — unparseable JSON `data` or an unbounded frame.
12
+ * A stable bad payload, not a dropped connection, so the stream never reconnects on it.
13
+ */
14
+ export class SseParseError extends Error {
15
+ }
16
+ /**
17
+ * Consume a `text/event-stream` operation as typed events (capability module — wired
18
+ * into `createClient`). Auto-reconnects on dropped connections, resuming from the last
19
+ * seen event id via `Last-Event-ID` (backoff: the server's `retry:` value, then
20
+ * `reconnectDelay`, then 1s — exponential with jitter, capped at 30s). A clean stream
21
+ * end flushes a trailing frame and finishes; `break`/abort end the iterator cleanly.
22
+ */
23
+ export async function* sse(config, op, prepare, dataKind = 'text') {
24
+ let lastEventId;
25
+ let serverRetry;
26
+ let failures = 0;
27
+ while (true) {
28
+ // Re-prepare each attempt so a refresh-style TokenProvider yields a fresh credential
29
+ // on reconnect (the auth is baked into `url` query + `init.headers`). `reconnect`,
30
+ // `reconnectDelay`, and `signal` come from the caller's original options unchanged.
31
+ const { url, init } = await prepare();
32
+ const { reconnect = true, reconnectDelay, ...rest } = init;
33
+ const signal = rest.signal ?? undefined;
34
+ if (signal?.aborted)
35
+ return;
36
+ const headers = {
37
+ Accept: 'text/event-stream',
38
+ ...toHeaderRecord(rest.headers),
39
+ };
40
+ const sendHeaders = lastEventId === undefined ? headers : { ...headers, 'Last-Event-ID': lastEventId };
41
+ try {
42
+ const { response } = await send(config, op, url, { ...rest, method: rest.method ?? 'GET', headers: sendHeaders }, undefined, false, {});
43
+ if (!response.ok) {
44
+ const errorBody = await readError(response);
45
+ throw new ApiError(url, response.status, response.statusText, errorBody);
46
+ }
47
+ failures = 0;
48
+ const body = response.body;
49
+ if (!body)
50
+ return;
51
+ const reader = body.getReader();
52
+ const decoder = new TextDecoder();
53
+ let buffer = '';
54
+ try {
55
+ while (true) {
56
+ const { done, value } = await reader.read();
57
+ buffer += done ? decoder.decode() : decoder.decode(value, { stream: true });
58
+ let match;
59
+ while ((match = buffer.match(FRAME_DELIMITER)) !== null) {
60
+ const index = match.index;
61
+ const raw = buffer.slice(0, index);
62
+ buffer = buffer.slice(index + match[0].length);
63
+ const event = parseSseFrame(raw, dataKind);
64
+ if (event) {
65
+ if (event.id !== undefined)
66
+ lastEventId = event.id;
67
+ if (event.retry !== undefined)
68
+ serverRetry = event.retry;
69
+ yield event;
70
+ }
71
+ }
72
+ if (done) {
73
+ // Stream closed cleanly. Flush a final event that arrived without a trailing
74
+ // delimiter, then finish — a clean end is not a dropped connection, so do not reconnect.
75
+ const event = buffer.length > 0 ? parseSseFrame(buffer, dataKind) : undefined;
76
+ if (event) {
77
+ if (event.id !== undefined)
78
+ lastEventId = event.id;
79
+ if (event.retry !== undefined)
80
+ serverRetry = event.retry;
81
+ yield event;
82
+ }
83
+ return;
84
+ }
85
+ // Bound memory: a server that never sends a frame delimiter would otherwise
86
+ // grow `buffer` without limit. 1 MiB is far above any real SSE frame.
87
+ if (buffer.length > 1048576) {
88
+ throw new SseParseError('SSE frame exceeded 1048576 characters without a delimiter');
89
+ }
90
+ }
91
+ }
92
+ finally {
93
+ await reader.cancel().catch(() => undefined);
94
+ }
95
+ }
96
+ catch (error) {
97
+ if (signal?.aborted)
98
+ return;
99
+ // A non-OK HTTP response (4xx/5xx) or an unparseable JSON payload is a definitive
100
+ // error, not a transient drop — surface it instead of reconnecting in a loop (a
101
+ // stable bad payload would otherwise reconnect forever).
102
+ if (error instanceof ApiError || error instanceof SseParseError)
103
+ throw error;
104
+ // A transport failure (connect/DNS/reset) when opening the request, or a mid-stream
105
+ // read error, is a dropped connection: fall through to backoff/reconnect when enabled.
106
+ if (!reconnect)
107
+ throw error;
108
+ }
109
+ // Only the swallowed-drop path reaches here: reconnect is on and the signal not aborted.
110
+ failures++;
111
+ const base = serverRetry ?? reconnectDelay ?? 1000;
112
+ const delay = Math.min(base * Math.pow(2, failures - 1), 30_000);
113
+ try {
114
+ await sleep(Math.random() * delay, signal);
115
+ }
116
+ catch {
117
+ return; // sleep rejects only on abort — end the iterator cleanly
118
+ }
119
+ }
120
+ }
121
+ /** Parse one raw SSE frame (its lines) into an event; returns undefined for comment-only frames. */
122
+ export function parseSseFrame(raw, dataKind) {
123
+ let event;
124
+ const dataLines = [];
125
+ let id;
126
+ let retry;
127
+ let sawField = false;
128
+ for (const line of raw.split(/\r\n|\n|\r/)) {
129
+ if (line === '' || line.startsWith(':'))
130
+ continue;
131
+ const colon = line.indexOf(':');
132
+ const field = colon === -1 ? line : line.slice(0, colon);
133
+ let val = colon === -1 ? '' : line.slice(colon + 1);
134
+ if (val.startsWith(' '))
135
+ val = val.slice(1);
136
+ sawField = true;
137
+ if (field === 'event')
138
+ event = val;
139
+ else if (field === 'data')
140
+ dataLines.push(val);
141
+ else if (field === 'id')
142
+ id = val;
143
+ else if (field === 'retry') {
144
+ const n = Number(val);
145
+ if (!Number.isNaN(n))
146
+ retry = n;
147
+ }
148
+ }
149
+ if (!sawField)
150
+ return undefined;
151
+ const dataText = dataLines.join('\n');
152
+ let data = dataText;
153
+ if (dataKind === 'json' && dataText !== '') {
154
+ try {
155
+ data = JSON.parse(dataText);
156
+ }
157
+ catch (error) {
158
+ throw new SseParseError(`Failed to parse SSE event data as JSON: ${error instanceof Error ? error.message : String(error)}`);
159
+ }
160
+ }
161
+ return { event, data, id, retry };
162
+ }
163
+ //# sourceMappingURL=sse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse.js","sourceRoot":"","sources":["../../src/runtime/sse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,232 @@
1
+ /**
2
+ * The public type surface of the client runtime — `@redocly/client-generator`'s
3
+ * app-facing runtime module. Pure types, no runtime code (excluded from coverage).
4
+ * The generator emits `OPERATIONS` literals typed
5
+ * `satisfies Record<string, OperationDescriptor>` against this module, so an
6
+ * incompatible runtime/generated pair fails the consumer's build (the semver skew guard).
7
+ */
8
+ /** How one operation parameter is sent: its location plus OpenAPI query-serialization hints. */
9
+ export type ParamSpec = {
10
+ name: string;
11
+ in: 'path' | 'query' | 'header';
12
+ style?: 'form' | 'spaceDelimited' | 'pipeDelimited' | 'deepObject';
13
+ explode?: boolean;
14
+ allowReserved?: boolean;
15
+ };
16
+ /** One security scheme, denormalized onto the operation (`scheme` names the spec's scheme). */
17
+ export type SecuritySpec = {
18
+ scheme: string;
19
+ kind: 'bearer' | 'basic';
20
+ } | {
21
+ scheme: string;
22
+ kind: 'apiKey';
23
+ name: string;
24
+ in: 'header' | 'query' | 'cookie';
25
+ };
26
+ /**
27
+ * How to auto-iterate a paginated operation (drives its `.pages()`/`.items()` members).
28
+ * `nextCursor` and `items` are RFC 6901 JSON pointers into the page (response) value.
29
+ */
30
+ export type PaginationSpec = {
31
+ style: 'cursor' | 'offset' | 'page';
32
+ /** The query param the iterator advances: the cursor (`cursor`) or number (`offset`/`page`). */
33
+ param: string;
34
+ /** Optional page-size query param (recorded for tooling; never set by the runtime). */
35
+ limitParam?: string;
36
+ /** Cursor style only: pointer to the next cursor in the page. */
37
+ nextCursor?: string;
38
+ /** Pointer to the page's item array. */
39
+ items: string;
40
+ };
41
+ /** The frozen data contract between generated code and the runtime: one operation's wire shape. */
42
+ export type OperationDescriptor = {
43
+ id: string;
44
+ method: string;
45
+ path: string;
46
+ tags?: readonly string[];
47
+ params?: readonly ParamSpec[];
48
+ /** `multipart: true` marks a typed object body serialized to FormData by the runtime. */
49
+ body?: {
50
+ contentType: string;
51
+ multipart?: boolean;
52
+ };
53
+ /** Defaults to `'json'` (content-type negotiation on parse). */
54
+ responseKind?: 'json' | 'text' | 'blob' | 'void' | 'sse';
55
+ sseDataKind?: 'json' | 'text';
56
+ /** OR-alternatives, each an AND-set: the runtime applies the first fully-configured one. */
57
+ security?: readonly (readonly SecuritySpec[])[];
58
+ pagination?: PaginationSpec;
59
+ };
60
+ /** A query value: scalars, arrays of scalars, or objects (serialized as deepObject brackets). */
61
+ export type QueryValue = string | number | boolean | null | undefined | Array<string | number | boolean | null | undefined> | Record<string, unknown>;
62
+ /** A credential: a literal, or a (possibly async) function resolved per request (refresh flows). */
63
+ export type TokenProvider = string | (() => string | Promise<string>);
64
+ /** Per-instance credentials, keyed by the scheme kinds the runtime can inject. */
65
+ export type AuthCredentials = {
66
+ bearer?: TokenProvider;
67
+ basic?: {
68
+ username: string;
69
+ password: string;
70
+ };
71
+ apiKey?: Record<string, TokenProvider>;
72
+ };
73
+ /** Backoff shape: 'fixed' = constant delay; 'exponential' = doubling per attempt. */
74
+ export type RetryStrategy = 'fixed' | 'exponential';
75
+ /**
76
+ * The operation's identity, exposed to middleware for targeting (`ctx.operation`).
77
+ * Generated clients instantiate the type parameters with the spec's literal unions
78
+ * (`OperationId`/`OperationPath`/`OperationTag`) so a misspelled operation id in a
79
+ * middleware comparison fails to compile; the string defaults keep every
80
+ * spec-independent consumer (`runtime-contract.ts`, the runtime internals) working
81
+ * with the base shape. `tags` stays mutable (`Tag[]`) so setup-contract types
82
+ * (byte-locked to generated output) remain assignable through middleware callbacks.
83
+ */
84
+ export type OperationContext<Id extends string = string, Path extends string = string, Tag extends string = string> = {
85
+ id: Id;
86
+ path: Path;
87
+ tags: Tag[];
88
+ };
89
+ /** The mutable request context threaded through the middleware chain. */
90
+ export type RequestContext<Op extends OperationContext = OperationContext> = {
91
+ url: string;
92
+ method: string;
93
+ headers: Record<string, string>;
94
+ body?: unknown;
95
+ operation: Op;
96
+ };
97
+ /** The failed attempt handed to a custom `retryOn`: exactly one of `response`/`error` is set. */
98
+ export type RetryContext<Op extends OperationContext = OperationContext> = {
99
+ attempt: number;
100
+ request: RequestContext<Op>;
101
+ response?: Response;
102
+ error?: unknown;
103
+ };
104
+ /** Opt-in retry policy; a per-call override merges field-by-field over the config policy. */
105
+ export type RetryConfig<Op extends OperationContext = OperationContext> = {
106
+ retries?: number;
107
+ retryDelay?: number;
108
+ retryStrategy?: RetryStrategy;
109
+ jitter?: boolean;
110
+ retryOn?: (ctx: RetryContext<Op>) => boolean | Promise<boolean>;
111
+ };
112
+ /**
113
+ * Structural stand-in for the runtime's ApiError so this module stays import-free
114
+ * (pure types); the real `ApiError` class is assignable to it.
115
+ */
116
+ export type ApiErrorLike = globalThis.Error & {
117
+ url: string;
118
+ status: number;
119
+ statusText: string;
120
+ body: unknown;
121
+ };
122
+ /** One interceptor: any subset of the three hooks. */
123
+ export type Middleware<Op extends OperationContext = OperationContext> = {
124
+ onRequest?: (ctx: RequestContext<Op>) => void | Promise<void>;
125
+ onResponse?: (response: Response, ctx: RequestContext<Op>) => Response | void | Promise<Response | void>;
126
+ /** Throw mode only: may map/replace the error. */
127
+ onError?: (error: ApiErrorLike, ctx: RequestContext<Op>) => globalThis.Error | Promise<globalThis.Error>;
128
+ };
129
+ /** Client configuration: transport, defaults, retry policy, middleware, and credentials. */
130
+ export type ClientConfig<Op extends OperationContext = OperationContext> = {
131
+ serverUrl?: string;
132
+ fetch?: typeof fetch;
133
+ headers?: Record<string, string> | (() => Record<string, string> | Promise<Record<string, string>>);
134
+ retry?: RetryConfig<Op>;
135
+ middleware?: Middleware<Op>[];
136
+ auth?: AuthCredentials;
137
+ /** Fixed at generate time by the generator (`'throw'` when omitted); `configure()` ignores it. */
138
+ errorMode?: 'throw' | 'result';
139
+ onRequest?: Middleware<Op>['onRequest'];
140
+ onResponse?: Middleware<Op>['onResponse'];
141
+ onError?: Middleware<Op>['onError'];
142
+ };
143
+ /** Response readers for the per-call `parseAs` override. */
144
+ export type ParseAs = 'auto' | 'json' | 'text' | 'blob' | 'arrayBuffer' | 'formData' | 'stream';
145
+ /** Per-call options: standard `RequestInit` plus a retry override and a forced reader. */
146
+ export type RequestOptions = RequestInit & {
147
+ retry?: RetryConfig;
148
+ parseAs?: ParseAs;
149
+ };
150
+ /** Per-call options for an SSE stream; reconnect defaults to true. */
151
+ export type SseOptions = RequestInit & {
152
+ reconnect?: boolean;
153
+ reconnectDelay?: number;
154
+ };
155
+ /** A single decoded Server-Sent Event with its payload typed from the spec. */
156
+ export type ServerSentEvent<T> = {
157
+ event?: string;
158
+ data: T;
159
+ id?: string;
160
+ retry?: number;
161
+ };
162
+ /** Result-mode return shape: exactly one of `data`/`error` is set. */
163
+ export type Result<TData, TError> = {
164
+ data: TData;
165
+ error: undefined;
166
+ response: Response;
167
+ } | {
168
+ data: undefined;
169
+ error: TError;
170
+ response: Response;
171
+ };
172
+ /**
173
+ * The generated `Ops` type's shape: per-operation args/result, plus `kind: 'sse'` for
174
+ * streams and, for paginated operations, `item` (the page's element type) and — on
175
+ * result-mode clients only — `page` (the RAW page type `.pages()` yields, since
176
+ * iteration unwraps the `Result` envelope the one-shot `result` carries).
177
+ */
178
+ export type OpsShape = Record<string, {
179
+ args: object;
180
+ result: unknown;
181
+ kind?: 'sse';
182
+ item?: unknown;
183
+ page?: unknown;
184
+ }>;
185
+ /** The always-present client members (assigned after the operation loop — they win collisions). */
186
+ export type ClientCore<Op extends OperationContext = OperationContext> = {
187
+ /** Merge into the config; note `middleware` REPLACES the chain (use `use()` to compose). */
188
+ configure(config: ClientConfig<Op>): void;
189
+ /** Append interceptors (composes with baked/publisher middleware). */
190
+ use(...middleware: Middleware<Op>[]): void;
191
+ auth: {
192
+ bearer(token: TokenProvider): void;
193
+ basic(username: string, password: string): void;
194
+ apiKey(scheme: string, value: TokenProvider): void;
195
+ };
196
+ };
197
+ /**
198
+ * The standard TypeScript optionality probe: `{}` has no required members, so
199
+ * `{} extends A` is true exactly when every member of `A` is optional.
200
+ */
201
+ type NoRequiredKeys<A> = {} extends A ? true : false;
202
+ /**
203
+ * The page type `.pages()` yields: the RAW page declared by `page` (the generator
204
+ * writes it only on result-mode paginated entries, whose `result` is the envelope),
205
+ * or the method's own `result` (throw mode — already the raw page).
206
+ */
207
+ type PageOf<Entry extends OpsShape[string]> = Entry extends {
208
+ page: unknown;
209
+ } ? Entry['page'] : Entry['result'];
210
+ /**
211
+ * The auto-pagination members intersected onto a paginated method — present exactly when
212
+ * the Ops entry declares `item` (the generator writes it only for paginated operations).
213
+ * Args optionality mirrors the method's own; `unknown` otherwise (identity under `&`).
214
+ * Iteration is error-mode-agnostic: `.pages()`/`.items()` yield raw pages/items, and a
215
+ * failed page aborts iteration by throwing `ApiError`, even on result-mode clients; the
216
+ * `onError` middleware hook (throw-mode-only) is not invoked.
217
+ */
218
+ type Paginated<Entry extends OpsShape[string]> = 'item' extends keyof Entry ? NoRequiredKeys<Entry['args']> extends true ? {
219
+ pages(args?: Entry['args'], init?: RequestOptions): AsyncGenerator<PageOf<Entry>>;
220
+ items(args?: Entry['args'], init?: RequestOptions): AsyncGenerator<Entry['item']>;
221
+ } : {
222
+ pages(args: Entry['args'], init?: RequestOptions): AsyncGenerator<PageOf<Entry>>;
223
+ items(args: Entry['args'], init?: RequestOptions): AsyncGenerator<Entry['item']>;
224
+ } : unknown;
225
+ /** The typed instance client: one bound method per operation plus the core members. */
226
+ export type Client<Ops extends OpsShape, Op extends OperationContext = OperationContext> = {
227
+ [K in keyof Ops]: Ops[K] extends {
228
+ kind: 'sse';
229
+ } ? NoRequiredKeys<Ops[K]['args']> extends true ? (args?: Ops[K]['args'], init?: SseOptions) => AsyncGenerator<ServerSentEvent<Ops[K]['result']>> : (args: Ops[K]['args'], init?: SseOptions) => AsyncGenerator<ServerSentEvent<Ops[K]['result']>> : (NoRequiredKeys<Ops[K]['args']> extends true ? (args?: Ops[K]['args'], init?: RequestOptions) => Promise<Ops[K]['result']> : (args: Ops[K]['args'], init?: RequestOptions) => Promise<Ops[K]['result']>) & Paginated<Ops[K]>;
230
+ } & ClientCore<Op>;
231
+ export {};
232
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/runtime/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * The public type surface of the client runtime — `@redocly/client-generator`'s
3
+ * app-facing runtime module. Pure types, no runtime code (excluded from coverage).
4
+ * The generator emits `OPERATIONS` literals typed
5
+ * `satisfies Record<string, OperationDescriptor>` against this module, so an
6
+ * incompatible runtime/generated pair fails the consumer's build (the semver skew guard).
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/runtime/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,25 @@
1
+ import type { ParamSpec, QueryValue } from './types.js';
2
+ /**
3
+ * The RESOLVED OpenAPI serialization spec for one query parameter — callers apply the
4
+ * OpenAPI defaults (`style: 'form'`, `explode: true`) before building one.
5
+ */
6
+ export type QueryStyle = {
7
+ style: NonNullable<ParamSpec['style']>;
8
+ explode: boolean;
9
+ allowReserved?: boolean;
10
+ };
11
+ /**
12
+ * Encode everything except the RFC-3986 reserved set, for `allowReserved: true` params —
13
+ * `filter=a/b` survives instead of `filter=a%2Fb`.
14
+ */
15
+ export declare function encodeReserved(value: string): string;
16
+ /** Substitute `{name}` template segments with encoded values; a missing value is a caller bug. */
17
+ export declare function substitutePath(template: string, values: Record<string, unknown>): string;
18
+ /**
19
+ * Build the request URL: `serverUrl` (trailing slash trimmed) + path + serialized query.
20
+ * Query parameters honor their OpenAPI `style`/`explode`/`allowReserved` (from `styles`);
21
+ * without a spec, arrays repeat the key (`form`+`explode`), objects serialize as
22
+ * `deepObject` brackets, and `null`/`undefined` entries are skipped.
23
+ */
24
+ export declare function buildUrl(serverUrl: string, path: string, query?: Record<string, QueryValue>, styles?: Record<string, QueryStyle>): string;
25
+ //# sourceMappingURL=url.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/runtime/url.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExD;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKpD;AAED,kGAAkG;AAClG,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAMxF;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CACtB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EAClC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAClC,MAAM,CA4DR"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Encode everything except the RFC-3986 reserved set, for `allowReserved: true` params —
3
+ * `filter=a/b` survives instead of `filter=a%2Fb`.
4
+ */
5
+ export function encodeReserved(value) {
6
+ return encodeURIComponent(value).replace(/%(3A|2F|3F|23|5B|5D|40|21|24|26|27|28|29|2A|2B|2C|3B|3D)/g, (match) => decodeURIComponent(match));
7
+ }
8
+ /** Substitute `{name}` template segments with encoded values; a missing value is a caller bug. */
9
+ export function substitutePath(template, values) {
10
+ return template.replace(/\{([^{}]+)\}/g, (_match, name) => {
11
+ const value = values[name];
12
+ if (value === undefined)
13
+ throw new Error(`Missing path parameter "${name}"`);
14
+ return encodeURIComponent(String(value));
15
+ });
16
+ }
17
+ /**
18
+ * Build the request URL: `serverUrl` (trailing slash trimmed) + path + serialized query.
19
+ * Query parameters honor their OpenAPI `style`/`explode`/`allowReserved` (from `styles`);
20
+ * without a spec, arrays repeat the key (`form`+`explode`), objects serialize as
21
+ * `deepObject` brackets, and `null`/`undefined` entries are skipped.
22
+ */
23
+ export function buildUrl(serverUrl, path, query, styles) {
24
+ // Trim trailing slashes with a scan, not `/\/+$/` — an anchored `+` regex is
25
+ // quadratic on adversarial many-slash input (the server URL is caller data).
26
+ let end = serverUrl.length;
27
+ while (end > 0 && serverUrl.charCodeAt(end - 1) === 47 /* '/' */)
28
+ end--;
29
+ const url = serverUrl.slice(0, end) + path;
30
+ if (!query)
31
+ return url;
32
+ const params = new URLSearchParams();
33
+ const raw = [];
34
+ for (const [key, value] of Object.entries(query)) {
35
+ if (value === undefined || value === null)
36
+ continue;
37
+ const spec = styles?.[key];
38
+ if (!spec) {
39
+ if (Array.isArray(value)) {
40
+ for (const v of value) {
41
+ if (v !== undefined && v !== null)
42
+ params.append(key, String(v));
43
+ }
44
+ }
45
+ else if (Object(value) === value) {
46
+ // Object-valued query params use `deepObject` style: key[subKey]=subValue.
47
+ for (const [subKey, subValue] of Object.entries(value)) {
48
+ if (subValue !== undefined && subValue !== null) {
49
+ params.append(`${key}[${subKey}]`, String(subValue));
50
+ }
51
+ }
52
+ }
53
+ else {
54
+ params.append(key, String(value));
55
+ }
56
+ continue;
57
+ }
58
+ if (Array.isArray(value)) {
59
+ const items = value.filter((v) => v !== undefined && v !== null).map(String);
60
+ if (spec.style === 'form' && spec.explode) {
61
+ for (const v of items) {
62
+ if (spec.allowReserved)
63
+ raw.push(`${key}=${encodeReserved(v)}`);
64
+ else
65
+ params.append(key, v);
66
+ }
67
+ }
68
+ else {
69
+ // Delimited styles put the LITERAL delimiter on the wire; only the
70
+ // values are encoded. `%20` (not `+`) is the literal space delimiter.
71
+ const delim = spec.style === 'pipeDelimited' ? '|' : spec.style === 'spaceDelimited' ? '%20' : ',';
72
+ const enc = spec.allowReserved ? encodeReserved : encodeURIComponent;
73
+ raw.push(`${encodeURIComponent(key)}=${items.map(enc).join(delim)}`);
74
+ }
75
+ }
76
+ else if (Object(value) === value) {
77
+ // `deepObject` (and any object spec, for now): key[subKey]=subValue.
78
+ for (const [subKey, subValue] of Object.entries(value)) {
79
+ if (subValue !== undefined && subValue !== null) {
80
+ if (spec.allowReserved)
81
+ raw.push(`${key}[${subKey}]=${encodeReserved(String(subValue))}`);
82
+ else
83
+ params.append(`${key}[${subKey}]`, String(subValue));
84
+ }
85
+ }
86
+ }
87
+ else if (spec.allowReserved) {
88
+ raw.push(`${key}=${encodeReserved(String(value))}`);
89
+ }
90
+ else {
91
+ params.append(key, String(value));
92
+ }
93
+ }
94
+ const qs = [params.toString(), ...raw].filter(Boolean).join('&');
95
+ return qs ? `${url}?${qs}` : url;
96
+ }
97
+ //# sourceMappingURL=url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url.js","sourceRoot":"","sources":["../../src/runtime/url.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { Middleware, RequestContext, RetryConfig } from './runtime/types.js';
2
+ export type { Middleware, OperationContext, RequestContext, RetryConfig, RetryContext, RetryStrategy, } from './runtime/types.js';
3
+ /**
4
+ * The spec-independent subset of a client's `ClientConfig` a publisher may bake in
5
+ * (everything except the spec-derived `auth`).
6
+ */
7
+ export type ClientSetupConfig = {
8
+ serverUrl?: string;
9
+ headers?: Record<string, string> | (() => Record<string, string> | Promise<Record<string, string>>);
10
+ fetch?: typeof fetch;
11
+ onRequest?: (ctx: RequestContext) => void | Promise<void>;
12
+ onResponse?: (response: Response, ctx: RequestContext) => Response | void | Promise<Response | void>;
13
+ onError?: (error: Error, ctx: RequestContext) => Error;
14
+ retry?: RetryConfig;
15
+ };
16
+ export type ClientSetup = {
17
+ config?: ClientSetupConfig;
18
+ middleware?: Middleware[];
19
+ };
20
+ /**
21
+ * Identity helper for authoring a `--setup` module: gives full type inference and a stable
22
+ * call the baker recognises. `export default defineClientSetup({ config, middleware })`.
23
+ *
24
+ * @experimental The setup API may change between minor versions until stabilized.
25
+ */
26
+ export declare function defineClientSetup(setup: ClientSetup): ClientSetup;
27
+ //# sourceMappingURL=runtime-contract.d.ts.map