@orpc/server 2.0.0-beta.47 → 2.0.0-beta.49

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 (178) hide show
  1. package/README.md +6 -7
  2. package/dist/adapters/aws-lambda/handler.d.ts +25 -0
  3. package/dist/adapters/aws-lambda/handler.js +24 -0
  4. package/dist/adapters/aws-lambda/index.d.ts +10 -45
  5. package/dist/adapters/aws-lambda/index.js +2 -0
  6. package/dist/adapters/aws-lambda/rpc-handler.d.ts +19 -0
  7. package/dist/adapters/aws-lambda/rpc-handler.js +18 -0
  8. package/dist/adapters/crossws/handler.d.ts +45 -0
  9. package/dist/adapters/crossws/handler.js +60 -0
  10. package/dist/adapters/crossws/index.d.ts +2 -63
  11. package/dist/adapters/crossws/index.js +2 -0
  12. package/dist/adapters/crossws/rpc-handler.d.ts +16 -0
  13. package/dist/adapters/crossws/rpc-handler.js +15 -0
  14. package/dist/adapters/fastify/handler.d.ts +21 -0
  15. package/dist/adapters/fastify/handler.js +20 -0
  16. package/dist/adapters/fastify/index.d.ts +2 -42
  17. package/dist/adapters/fastify/index.js +2 -0
  18. package/dist/adapters/fastify/rpc-handler.d.ts +15 -0
  19. package/dist/adapters/fastify/rpc-handler.js +14 -0
  20. package/dist/adapters/fetch/handler.d.ts +23 -0
  21. package/dist/adapters/fetch/handler.js +22 -0
  22. package/dist/adapters/fetch/index.d.ts +5 -45
  23. package/dist/adapters/fetch/index.js +7 -0
  24. package/dist/adapters/fetch/rpc-handler.d.ts +17 -0
  25. package/dist/adapters/fetch/rpc-handler.js +16 -0
  26. package/dist/adapters/message-port/{index.d.mts → handler.d.ts} +17 -30
  27. package/dist/adapters/message-port/handler.js +86 -0
  28. package/dist/adapters/message-port/index.d.ts +2 -77
  29. package/dist/adapters/message-port/index.js +2 -0
  30. package/dist/adapters/message-port/rpc-handler.d.ts +16 -0
  31. package/dist/adapters/message-port/rpc-handler.js +15 -0
  32. package/dist/adapters/node/handler.d.ts +21 -0
  33. package/dist/adapters/node/handler.js +20 -0
  34. package/dist/adapters/node/index.d.ts +5 -42
  35. package/dist/adapters/node/index.js +7 -0
  36. package/dist/adapters/node/rpc-handler.d.ts +16 -0
  37. package/dist/adapters/node/rpc-handler.js +15 -0
  38. package/dist/adapters/standard/codec.d.ts +16 -0
  39. package/dist/adapters/standard/codec.js +1 -0
  40. package/dist/adapters/standard/handler.d.ts +68 -0
  41. package/dist/adapters/standard/handler.js +205 -0
  42. package/dist/adapters/standard/index.d.ts +6 -95
  43. package/dist/adapters/standard/index.js +5 -0
  44. package/dist/adapters/standard/plugin.d.ts +32 -0
  45. package/dist/adapters/standard/plugin.js +16 -0
  46. package/dist/adapters/standard/rpc-handler-codec.d.ts +46 -0
  47. package/dist/adapters/standard/rpc-handler-codec.js +51 -0
  48. package/dist/adapters/standard/rpc-matcher.d.ts +53 -0
  49. package/dist/adapters/standard/rpc-matcher.js +152 -0
  50. package/dist/adapters/standard/utils.d.ts +10 -0
  51. package/dist/adapters/standard/utils.js +6 -0
  52. package/dist/adapters/standard-peer/index.d.ts +1 -11
  53. package/dist/adapters/standard-peer/index.js +1 -0
  54. package/dist/adapters/standard-peer/utils.d.ts +4 -0
  55. package/dist/adapters/standard-peer/utils.js +7 -0
  56. package/dist/adapters/websocket/{index.d.mts → handler.d.ts} +11 -29
  57. package/dist/adapters/websocket/handler.js +85 -0
  58. package/dist/adapters/websocket/index.d.ts +2 -77
  59. package/dist/adapters/websocket/index.js +2 -0
  60. package/dist/adapters/websocket/rpc-handler.d.ts +16 -0
  61. package/dist/adapters/websocket/rpc-handler.js +15 -0
  62. package/dist/builder-variants.d.ts +226 -0
  63. package/dist/builder-variants.js +1 -0
  64. package/dist/builder.d.ts +127 -0
  65. package/dist/builder.js +226 -0
  66. package/dist/constants.d.ts +2 -0
  67. package/dist/constants.js +2 -0
  68. package/dist/context.d.ts +6 -0
  69. package/dist/context.js +1 -0
  70. package/dist/extensions/callable.d.ts +6 -5
  71. package/dist/extensions/callable.js +7 -0
  72. package/dist/helpers/base64url.d.ts +31 -0
  73. package/dist/helpers/base64url.js +53 -0
  74. package/dist/helpers/cookie.d.ts +51 -0
  75. package/dist/helpers/cookie.js +69 -0
  76. package/dist/helpers/encryption.d.ts +28 -0
  77. package/dist/helpers/encryption.js +80 -0
  78. package/dist/helpers/index.d.ts +4 -167
  79. package/dist/helpers/index.js +4 -0
  80. package/dist/helpers/signing.d.ts +50 -0
  81. package/dist/helpers/signing.js +88 -0
  82. package/dist/implementer-procedure.d.ts +16 -0
  83. package/dist/implementer-procedure.js +44 -0
  84. package/dist/implementer-router.d.ts +40 -0
  85. package/dist/implementer-router.js +117 -0
  86. package/dist/implementer.d.ts +16 -0
  87. package/dist/implementer.js +37 -0
  88. package/dist/index.d.ts +45 -460
  89. package/dist/index.js +48 -0
  90. package/dist/lazy.d.ts +20 -0
  91. package/dist/lazy.js +31 -0
  92. package/dist/middleware-decorated.d.ts +10 -0
  93. package/dist/middleware-decorated.js +71 -0
  94. package/dist/middleware.d.ts +54 -0
  95. package/dist/middleware.js +1 -0
  96. package/dist/plugins/batch.d.ts +102 -0
  97. package/dist/plugins/batch.js +405 -0
  98. package/dist/plugins/cors.d.ts +73 -0
  99. package/dist/plugins/cors.js +112 -0
  100. package/dist/plugins/get-method-csrf-protection.d.ts +23 -0
  101. package/dist/plugins/get-method-csrf-protection.js +64 -0
  102. package/dist/plugins/head-method.d.ts +23 -0
  103. package/dist/plugins/head-method.js +104 -0
  104. package/dist/plugins/index.d.ts +29 -422
  105. package/dist/plugins/index.js +29 -0
  106. package/dist/plugins/method-override.d.ts +38 -0
  107. package/dist/plugins/method-override.js +50 -0
  108. package/dist/plugins/request-compression.d.ts +16 -0
  109. package/dist/plugins/request-compression.js +82 -0
  110. package/dist/plugins/request-headers.d.ts +22 -0
  111. package/dist/plugins/request-headers.js +30 -0
  112. package/dist/{shared/server.CgBF3Vj1.d.ts → plugins/request-limit.d.ts} +4 -8
  113. package/dist/plugins/request-limit.js +68 -0
  114. package/dist/plugins/response-compression.d.ts +59 -0
  115. package/dist/plugins/response-compression.js +209 -0
  116. package/dist/plugins/response-headers.d.ts +30 -0
  117. package/dist/plugins/response-headers.js +47 -0
  118. package/dist/plugins/rethrow.d.ts +33 -0
  119. package/dist/plugins/rethrow.js +59 -0
  120. package/dist/plugins/signal-sync.d.ts +13 -0
  121. package/dist/plugins/signal-sync.js +91 -0
  122. package/dist/plugins/timeout.d.ts +37 -0
  123. package/dist/plugins/timeout.js +59 -0
  124. package/dist/procedure-client.d.ts +19 -0
  125. package/dist/procedure-client.js +175 -0
  126. package/dist/procedure-decorated.d.ts +10 -0
  127. package/dist/procedure-decorated.js +44 -0
  128. package/dist/procedure-utils.d.ts +41 -0
  129. package/dist/procedure-utils.js +49 -0
  130. package/dist/procedure.d.ts +72 -0
  131. package/dist/procedure.js +24 -0
  132. package/dist/router-client.d.ts +23 -0
  133. package/dist/router-client.js +43 -0
  134. package/dist/router-hidden.d.ts +5 -0
  135. package/dist/router-hidden.js +14 -0
  136. package/dist/router-utils.d.ts +48 -0
  137. package/dist/router-utils.js +202 -0
  138. package/dist/{shared/server.Dz7j9BEh.d.ts → router.d.ts} +14 -15
  139. package/dist/router.js +1 -0
  140. package/package.json +84 -86
  141. package/dist/adapters/aws-lambda/index.d.mts +0 -51
  142. package/dist/adapters/aws-lambda/index.mjs +0 -39
  143. package/dist/adapters/crossws/index.d.mts +0 -63
  144. package/dist/adapters/crossws/index.mjs +0 -68
  145. package/dist/adapters/fastify/index.d.mts +0 -42
  146. package/dist/adapters/fastify/index.mjs +0 -39
  147. package/dist/adapters/fetch/index.d.mts +0 -47
  148. package/dist/adapters/fetch/index.mjs +0 -42
  149. package/dist/adapters/message-port/index.mjs +0 -87
  150. package/dist/adapters/node/index.d.mts +0 -44
  151. package/dist/adapters/node/index.mjs +0 -41
  152. package/dist/adapters/standard/index.d.mts +0 -95
  153. package/dist/adapters/standard/index.mjs +0 -8
  154. package/dist/adapters/standard-peer/index.d.mts +0 -11
  155. package/dist/adapters/standard-peer/index.mjs +0 -10
  156. package/dist/adapters/websocket/index.mjs +0 -87
  157. package/dist/extensions/callable.d.mts +0 -10
  158. package/dist/extensions/callable.mjs +0 -11
  159. package/dist/helpers/index.d.mts +0 -167
  160. package/dist/helpers/index.mjs +0 -200
  161. package/dist/index.d.mts +0 -476
  162. package/dist/index.mjs +0 -463
  163. package/dist/plugins/index.d.mts +0 -432
  164. package/dist/plugins/index.mjs +0 -965
  165. package/dist/shared/server.1ExWFMze.mjs +0 -69
  166. package/dist/shared/server.9B1jEm5a.d.mts +0 -105
  167. package/dist/shared/server.BB464y-6.mjs +0 -207
  168. package/dist/shared/server.BC5BIu02.d.mts +0 -73
  169. package/dist/shared/server.BSYGskId.d.ts +0 -14
  170. package/dist/shared/server.BvG3boBj.d.mts +0 -14
  171. package/dist/shared/server.CTV_mC2P.d.mts +0 -34
  172. package/dist/shared/server.CYbIpHbH.mjs +0 -239
  173. package/dist/shared/server.Chq5FpXf.mjs +0 -353
  174. package/dist/shared/server.DFPxP2v3.d.mts +0 -166
  175. package/dist/shared/server.DFPxP2v3.d.ts +0 -166
  176. package/dist/shared/server.DOg7ke6y.d.ts +0 -105
  177. package/dist/shared/server.W91HSRkE.mjs +0 -9
  178. package/dist/shared/server.sBQSgqK3.mjs +0 -41
package/dist/index.mjs DELETED
@@ -1,463 +0,0 @@
1
- import { mergeErrorMap, resolveMetaPlugins, getHiddenMetaPlugins, ProcedureContract } from '@orpc/contract';
2
- export { ValidationError, asyncIteratorObject, defineMeta, error, eventIterator, type } from '@orpc/contract';
3
- import { toArray, bindMethods, isTypescriptObject, resolveMaybeOptionalOptions } from '@orpc/shared';
4
- export { AsyncIteratorClass, asyncIteratorToStream, asyncIteratorToUnproxiedDataStream, asyncIteratorToStream as eventIteratorToStream, asyncIteratorToUnproxiedDataStream as eventIteratorToUnproxiedDataStream, onAsyncIteratorObjectError, onError, onFinish, onReadableStreamError, onStart, onSuccess, streamToAsyncIteratorObject, streamToAsyncIteratorObject as streamToEventIterator } from '@orpc/shared';
5
- import { L as Lazy, P as Procedure, c as createProcedureClient } from './shared/server.BB464y-6.mjs';
6
- export { u as unlazy } from './shared/server.BB464y-6.mjs';
7
- import { D as DecoratedProcedure } from './shared/server.sBQSgqK3.mjs';
8
- import { b as augmentRouter, c as augmentImplementedRouter, d as withHiddenRouterContract, e as createGuardedProcedureLazy, g as getRouter } from './shared/server.CYbIpHbH.mjs';
9
- export { a as DEFAULT_ERROR_STATUS, D as DEFAULT_SUCCESS_STATUS, f as call, r as resolveContractProcedure, u as unlazyRouter, h as walkProcedureContractsAsync, w as walkProcedureContractsSync } from './shared/server.CYbIpHbH.mjs';
10
- import { RECURSIVE_CLIENT_UNWRAP_KEYS } from '@orpc/client';
11
- export { COMMON_ERROR_STATUS_MAP, ORPCError, RPCJsonSerializer, RPCSerializer, isDefinedError, safe, toORPCError } from '@orpc/client';
12
- export { ErrorEvent, getEventMeta, unwrapEvent, withEventMeta } from '@standard-server/core';
13
-
14
- function decorateMiddleware(middleware) {
15
- const decorated = ((...args) => middleware(...args));
16
- decorated["~orpc"] = middleware["~orpc"];
17
- Object.defineProperty(decorated, "name", {
18
- value: middleware.name
19
- });
20
- decorated.adaptInput = (adapt) => {
21
- const mapped = decorateMiddleware(
22
- (opts, input, ...args) => {
23
- return middleware(opts, adapt(input), ...args);
24
- }
25
- );
26
- mapped["~orpc"] = decorated["~orpc"];
27
- Object.defineProperty(mapped, "name", {
28
- value: decorated.name
29
- });
30
- return mapped;
31
- };
32
- decorated.errors = (errors) => {
33
- const newMiddleware = decorateMiddleware(decorated);
34
- newMiddleware["~orpc"] = {
35
- ...decorated["~orpc"],
36
- errorMap: mergeErrorMap(decorated["~orpc"]?.errorMap, errors)
37
- };
38
- return newMiddleware;
39
- };
40
- decorated.use = (usedMiddleware) => {
41
- const merged = decorateMiddleware((opts, ...args) => {
42
- return middleware(
43
- {
44
- ...opts,
45
- async next(nextOpts1) {
46
- const signal = nextOpts1?.signal ?? opts.signal;
47
- const result = await usedMiddleware({
48
- ...opts,
49
- context: { ...opts.context, ...nextOpts1?.context },
50
- signal,
51
- next(nextOpts2, ...args2) {
52
- return opts.next({
53
- context: {
54
- ...nextOpts1?.context,
55
- ...nextOpts2?.context
56
- },
57
- signal: nextOpts2?.signal ?? signal
58
- }, ...args2);
59
- }
60
- }, ...args);
61
- return {
62
- ...result,
63
- context: {
64
- ...nextOpts1?.context,
65
- ...result.context
66
- }
67
- };
68
- }
69
- },
70
- ...args
71
- );
72
- });
73
- merged["~orpc"] = {
74
- ...decorated["~orpc"],
75
- errorMap: mergeErrorMap(usedMiddleware["~orpc"]?.errorMap, decorated["~orpc"]?.errorMap),
76
- metaPlugins: [
77
- ...toArray(decorated["~orpc"]?.metaPlugins),
78
- ...toArray(usedMiddleware["~orpc"]?.metaPlugins)
79
- ]
80
- };
81
- Object.defineProperty(merged, "name", {
82
- value: `${decorated.name} + ${usedMiddleware.name}`
83
- });
84
- return merged;
85
- };
86
- return decorated;
87
- }
88
-
89
- class Builder {
90
- "~orpc";
91
- /**
92
- * Private constructor to prevent direct instantiation.
93
- * Use the static `create` method to initialize a new instance with a safe initial definition.
94
- */
95
- constructor(definition) {
96
- this["~orpc"] = definition;
97
- }
98
- /**
99
- * Creates a fresh builder with an empty definition.
100
- * Prefer the exported `os` instance over calling this directly.
101
- *
102
- * @see {@link https://orpc.dev/docs/procedure | Procedure}
103
- */
104
- static create() {
105
- return new Builder({
106
- errorMap: {},
107
- meta: {},
108
- orderedMiddlewares: []
109
- });
110
- }
111
- /**
112
- * Declares the initial context type that must be provided when executing
113
- * procedures built from this builder.
114
- *
115
- * @see {@link https://orpc.dev/docs/context#initial-context | Context - Initial Context}
116
- */
117
- $context() {
118
- return this;
119
- }
120
- /**
121
- * Overrides the procedure configuration, such as disabling runtime
122
- * input/output validation.
123
- *
124
- * @see {@link https://orpc.dev/docs/recipes/validation-customization | Validation Customization}
125
- */
126
- $config(config) {
127
- return new Builder({
128
- ...this["~orpc"],
129
- ...config
130
- });
131
- }
132
- /**
133
- * Applies metadata plugins to procedures built from this builder.
134
- *
135
- * @see {@link https://orpc.dev/docs/metadata | Metadata}
136
- */
137
- meta(...plugins) {
138
- const [meta, metaPlugins] = resolveMetaPlugins(
139
- this["~orpc"].meta,
140
- this["~orpc"].metaPlugins,
141
- plugins
142
- );
143
- return new Builder({
144
- ...this["~orpc"],
145
- meta,
146
- metaPlugins
147
- });
148
- }
149
- /**
150
- * Defines typesafe errors that procedures built from this builder can throw
151
- * via the `errors` utility in handlers and middleware.
152
- *
153
- * @see {@link https://orpc.dev/docs/error-handling#typesafe-errors | Error Handling - Typesafe Errors}
154
- */
155
- errors(errors) {
156
- let builder = new Builder({
157
- ...this["~orpc"],
158
- errorMap: mergeErrorMap(this["~orpc"].errorMap, errors)
159
- });
160
- const plugins = getHiddenMetaPlugins(errors);
161
- if (plugins) {
162
- builder = builder.meta(...plugins);
163
- }
164
- return builder;
165
- }
166
- /**
167
- * Applies a middleware that runs before the handler of every procedure
168
- * built from this builder.
169
- *
170
- * @see {@link https://orpc.dev/docs/middleware | Middleware}
171
- */
172
- use(middleware) {
173
- let builder = new Builder({
174
- ...this["~orpc"],
175
- errorMap: mergeErrorMap(middleware["~orpc"]?.errorMap ?? {}, this["~orpc"].errorMap),
176
- orderedMiddlewares: [...this["~orpc"].orderedMiddlewares, {
177
- middleware,
178
- inputSchemasLengthAtUse: this["~orpc"].inputSchemas?.length,
179
- outputSchemasLengthAtUse: this["~orpc"].outputSchemas?.length
180
- }]
181
- });
182
- if (middleware["~orpc"]?.metaPlugins) {
183
- builder = builder.meta(...middleware["~orpc"]?.metaPlugins);
184
- }
185
- return builder;
186
- }
187
- /**
188
- * Creates a standalone middleware that can be composed and applied to any
189
- * compatible builder or procedure with `.use`.
190
- *
191
- * @see {@link https://orpc.dev/docs/middleware | Middleware}
192
- */
193
- middleware(middleware) {
194
- const allMiddlewares = [
195
- ...this["~orpc"].orderedMiddlewares.map(({ middleware: middleware2 }) => middleware2),
196
- middleware
197
- ];
198
- let current = decorateMiddleware(allMiddlewares.shift());
199
- for (const mid of allMiddlewares) {
200
- current = current.use(mid);
201
- }
202
- current["~orpc"] = {
203
- ...current["~orpc"],
204
- errorMap: this["~orpc"].errorMap,
205
- metaPlugins: [
206
- ...toArray(this["~orpc"].metaPlugins),
207
- ...toArray(middleware["~orpc"]?.metaPlugins)
208
- ]
209
- };
210
- return current;
211
- }
212
- /**
213
- * Defines the input schema used to validate and type the procedure input.
214
- *
215
- * @see {@link https://orpc.dev/docs/procedure#inputoutput-validation | Procedure - Input/Output Validation}
216
- */
217
- input(schema) {
218
- let builder = new Builder({
219
- ...this["~orpc"],
220
- inputSchemas: [...toArray(this["~orpc"].inputSchemas), schema]
221
- });
222
- const plugins = getHiddenMetaPlugins(schema);
223
- if (plugins) {
224
- builder = builder.meta(...plugins);
225
- }
226
- return builder;
227
- }
228
- /**
229
- * Defines the output schema used to validate and type the procedure output.
230
- *
231
- * @see {@link https://orpc.dev/docs/procedure#inputoutput-validation | Procedure - Input/Output Validation}
232
- */
233
- output(schema) {
234
- let builder = new Builder({
235
- ...this["~orpc"],
236
- outputSchemas: [...toArray(this["~orpc"].outputSchemas), schema]
237
- });
238
- const plugins = getHiddenMetaPlugins(schema);
239
- if (plugins) {
240
- builder = builder.meta(...plugins);
241
- }
242
- return builder;
243
- }
244
- /**
245
- * Defines the function that implements the procedure and completes the
246
- * chain, returning a callable procedure.
247
- *
248
- * @see {@link https://orpc.dev/docs/procedure | Procedure}
249
- */
250
- handler(handler) {
251
- let procedure = new DecoratedProcedure({
252
- ...this["~orpc"],
253
- handler
254
- });
255
- const plugins = getHiddenMetaPlugins(handler);
256
- if (plugins) {
257
- procedure = procedure.meta(...plugins);
258
- }
259
- return procedure;
260
- }
261
- /**
262
- * Applies the builder's middleware, errors, and metadata to every procedure
263
- * in the given router.
264
- *
265
- * @see {@link https://orpc.dev/docs/router#extending-router | Router - Extending Router}
266
- */
267
- router(router) {
268
- return augmentRouter(router, {
269
- ...this["~orpc"],
270
- middlewares: this["~orpc"].orderedMiddlewares.map(({ middleware }) => middleware)
271
- });
272
- }
273
- /**
274
- * Like `.router`, but loads the router lazily on first access, which helps
275
- * reduce startup time for large applications.
276
- *
277
- * @see {@link https://orpc.dev/docs/router#lazy-router | Router - Lazy Router}
278
- */
279
- lazy(loader) {
280
- return new Lazy({
281
- loader: async () => {
282
- const { default: router } = await loader();
283
- return {
284
- default: this.router(router)
285
- };
286
- },
287
- meta: this["~orpc"].meta,
288
- metaPlugins: this["~orpc"].metaPlugins
289
- });
290
- }
291
- }
292
- const os = Builder.create();
293
-
294
- class ProcedureImplementer {
295
- "~orpc";
296
- constructor(definition) {
297
- this["~orpc"] = definition;
298
- }
299
- "use"(middleware) {
300
- return new ProcedureImplementer({
301
- ...this["~orpc"],
302
- orderedMiddlewares: [...this["~orpc"].orderedMiddlewares, {
303
- middleware,
304
- inputSchemasLengthAtUse: this["~orpc"].inputSchemas?.length,
305
- outputSchemasLengthAtUse: this["~orpc"].outputSchemas?.length
306
- }]
307
- });
308
- }
309
- "handler"(handler) {
310
- return new ImplementedProcedure({
311
- ...this["~orpc"],
312
- handler
313
- });
314
- }
315
- }
316
- class ImplementedProcedure extends Procedure {
317
- use(middleware) {
318
- return new ImplementedProcedure({
319
- ...this["~orpc"],
320
- orderedMiddlewares: [...this["~orpc"].orderedMiddlewares, {
321
- middleware,
322
- inputSchemasLengthAtUse: this["~orpc"].inputSchemas?.length,
323
- outputSchemasLengthAtUse: this["~orpc"].outputSchemas?.length
324
- }]
325
- });
326
- }
327
- }
328
-
329
- class SharedRouterImplementer {
330
- constructor(contract, config, middlewares) {
331
- this.contract = contract;
332
- this.config = config;
333
- this.middlewares = middlewares;
334
- }
335
- static create(contract, config, middlewares = []) {
336
- return new SharedRouterImplementer(
337
- contract,
338
- config,
339
- middlewares
340
- );
341
- }
342
- use(middleware) {
343
- return createRouterImplementerInternal(this.contract, this.config, [...this.middlewares, middleware]);
344
- }
345
- middleware(middleware) {
346
- const allMiddlewares = [
347
- ...this.middlewares,
348
- middleware
349
- ];
350
- let current = decorateMiddleware(allMiddlewares.shift());
351
- for (const mid of allMiddlewares) {
352
- current = current.use(mid);
353
- }
354
- return current;
355
- }
356
- router(router) {
357
- if (this.middlewares.length) {
358
- router = augmentImplementedRouter(router, {
359
- ...this.config,
360
- middlewares: this.middlewares
361
- });
362
- }
363
- return withHiddenRouterContract(router, this.contract);
364
- }
365
- lazy(loader) {
366
- return new Lazy({
367
- loader: async () => {
368
- const { default: router } = await loader();
369
- return { default: this.router(router) };
370
- },
371
- meta: {}
372
- });
373
- }
374
- }
375
- function createRouterImplementer(contract, config) {
376
- return createRouterImplementerInternal(contract, config, []);
377
- }
378
- function createRouterImplementerInternal(contract, config, middlewares) {
379
- if (contract instanceof ProcedureContract) {
380
- return new ProcedureImplementer({
381
- ...config,
382
- ...contract["~orpc"],
383
- orderedMiddlewares: middlewares.map((middleware) => ({ middleware }))
384
- });
385
- }
386
- const implementer = {};
387
- for (const [key, child] of Object.entries(contract)) {
388
- implementer[key] = createRouterImplementerInternal(child, config, middlewares);
389
- }
390
- const shared = bindMethods(SharedRouterImplementer.create(contract, config, middlewares));
391
- for (const [key, method] of Object.entries(shared)) {
392
- if (key in implementer) {
393
- const child = implementer[key];
394
- implementer[key] = new Proxy(method, {
395
- get(_, p) {
396
- return Reflect.get(child, p);
397
- }
398
- });
399
- } else {
400
- implementer[key] = method;
401
- }
402
- }
403
- return implementer;
404
- }
405
-
406
- function implement(contract, config = {}) {
407
- const routerImplementer = createRouterImplementer(contract, config);
408
- const implementer = new Proxy(routerImplementer, {
409
- get(_, p) {
410
- let method;
411
- if (p === "$context") {
412
- method = () => implementer;
413
- } else if (p === "$config") {
414
- method = (incoming) => implement(contract, { ...config, ...incoming });
415
- }
416
- const value = Reflect.get(routerImplementer, p);
417
- if (method) {
418
- if (!isTypescriptObject(value)) {
419
- return method;
420
- }
421
- return new Proxy(method, {
422
- get(_2, p2) {
423
- return Reflect.get(value, p2);
424
- }
425
- });
426
- }
427
- return value;
428
- }
429
- });
430
- return implementer;
431
- }
432
-
433
- function createRouterClient(router, ...rest) {
434
- const options = resolveMaybeOptionalOptions(rest);
435
- if (router instanceof Procedure) {
436
- return createProcedureClient(router, options);
437
- }
438
- const procedureCaller = router instanceof Lazy ? createProcedureClient(createGuardedProcedureLazy(router), options) : {};
439
- const cache = /* @__PURE__ */ new Map();
440
- const recursive = new Proxy(procedureCaller, {
441
- get(target, key) {
442
- if (typeof key !== "string" || router instanceof Lazy && RECURSIVE_CLIENT_UNWRAP_KEYS.has(key)) {
443
- return Reflect.get(target, key);
444
- }
445
- let nextClient = cache.get(key);
446
- if (nextClient === void 0) {
447
- const next = getRouter(router, [key]);
448
- if (!next) {
449
- return Reflect.get(target, key);
450
- }
451
- nextClient = createRouterClient(next, {
452
- ...options,
453
- path: [...toArray(options.path), key]
454
- });
455
- cache.set(key, nextClient);
456
- }
457
- return nextClient;
458
- }
459
- });
460
- return recursive;
461
- }
462
-
463
- export { Builder, DecoratedProcedure, ImplementedProcedure, Lazy, Procedure, ProcedureImplementer, SharedRouterImplementer, createProcedureClient, createRouterClient, getRouter, implement, os };