@orpc/server 0.0.0-next.8b5a6d6 → 0.0.0-next.8f101b9

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 (57) hide show
  1. package/dist/chunk-ESTRJAOX.js +299 -0
  2. package/dist/chunk-KK4SDLC7.js +320 -0
  3. package/dist/chunk-WUOGVGWG.js +1 -0
  4. package/dist/fetch.js +11 -108
  5. package/dist/hono.js +30 -0
  6. package/dist/index.js +298 -375
  7. package/dist/next.js +36 -0
  8. package/dist/node.js +87 -0
  9. package/dist/src/adapters/fetch/index.d.ts +6 -0
  10. package/dist/src/adapters/fetch/orpc-handler.d.ts +20 -0
  11. package/dist/src/adapters/fetch/orpc-payload-codec.d.ts +16 -0
  12. package/dist/src/adapters/fetch/orpc-procedure-matcher.d.ts +12 -0
  13. package/dist/src/adapters/fetch/super-json.d.ts +12 -0
  14. package/dist/src/adapters/fetch/types.d.ts +21 -0
  15. package/dist/src/adapters/hono/index.d.ts +3 -0
  16. package/dist/src/adapters/hono/middleware.d.ts +12 -0
  17. package/dist/src/adapters/next/index.d.ts +3 -0
  18. package/dist/src/adapters/next/serve.d.ts +19 -0
  19. package/dist/src/adapters/node/index.d.ts +5 -0
  20. package/dist/src/adapters/node/orpc-handler.d.ts +12 -0
  21. package/dist/src/adapters/node/request-listener.d.ts +28 -0
  22. package/dist/src/adapters/node/types.d.ts +22 -0
  23. package/dist/src/builder-variants.d.ts +74 -0
  24. package/dist/src/builder.d.ts +46 -42
  25. package/dist/src/config.d.ts +6 -0
  26. package/dist/src/context.d.ts +9 -0
  27. package/dist/src/hidden.d.ts +8 -0
  28. package/dist/src/implementer-procedure.d.ts +30 -0
  29. package/dist/src/implementer-variants.d.ts +16 -0
  30. package/dist/src/implementer.d.ts +27 -0
  31. package/dist/src/index.d.ts +15 -11
  32. package/dist/src/lazy-utils.d.ts +6 -0
  33. package/dist/src/lazy.d.ts +13 -14
  34. package/dist/src/middleware-decorated.d.ts +10 -0
  35. package/dist/src/middleware-utils.d.ts +5 -0
  36. package/dist/src/middleware.d.ts +28 -17
  37. package/dist/src/procedure-client.d.ts +20 -0
  38. package/dist/src/procedure-decorated.d.ts +21 -0
  39. package/dist/src/procedure-utils.d.ts +17 -0
  40. package/dist/src/procedure.d.ts +25 -28
  41. package/dist/src/router-accessible-lazy.d.ts +8 -0
  42. package/dist/src/router-client.d.ts +22 -0
  43. package/dist/src/router.d.ts +25 -17
  44. package/package.json +22 -11
  45. package/dist/chunk-3JMSDC5L.js +0 -274
  46. package/dist/src/fetch/handle.d.ts +0 -7
  47. package/dist/src/fetch/handler.d.ts +0 -3
  48. package/dist/src/fetch/index.d.ts +0 -4
  49. package/dist/src/fetch/types.d.ts +0 -28
  50. package/dist/src/procedure-builder.d.ts +0 -31
  51. package/dist/src/procedure-caller.d.ts +0 -26
  52. package/dist/src/procedure-implementer.d.ts +0 -22
  53. package/dist/src/router-builder.d.ts +0 -27
  54. package/dist/src/router-caller.d.ts +0 -25
  55. package/dist/src/router-implementer.d.ts +0 -24
  56. package/dist/src/types.d.ts +0 -14
  57. package/dist/src/utils.d.ts +0 -3
package/dist/index.js CHANGED
@@ -1,434 +1,351 @@
1
1
  import {
2
2
  LAZY_LOADER_SYMBOL,
3
3
  Procedure,
4
- createFlattenLazy,
5
- createLazy,
6
- createProcedureCaller,
7
- decorateLazy,
8
- decorateMiddleware,
9
- decorateProcedure,
4
+ adaptRouter,
5
+ addMiddleware,
6
+ createAccessibleLazyRouter,
7
+ createLazyProcedureFormAnyLazy,
8
+ createProcedureClient,
9
+ deepSetLazyRouterPrefix,
10
+ flatLazy,
11
+ getLazyRouterPrefix,
12
+ getRouterChild,
13
+ getRouterContract,
10
14
  isLazy,
11
15
  isProcedure,
12
- loadLazy,
13
- loadProcedure,
14
- mergeContext
15
- } from "./chunk-3JMSDC5L.js";
16
+ lazy,
17
+ middlewareOutputFn,
18
+ setRouterContract,
19
+ unlazy
20
+ } from "./chunk-KK4SDLC7.js";
16
21
 
17
22
  // src/builder.ts
18
- import {
19
- ContractProcedure,
20
- isContractProcedure as isContractProcedure2
21
- } from "@orpc/contract";
23
+ import { mergeErrorMap as mergeErrorMap2, mergeMeta as mergeMeta2, mergePrefix, mergeRoute as mergeRoute2, mergeTags } from "@orpc/contract";
22
24
 
23
- // src/procedure-builder.ts
24
- import {
25
- DecoratedContractProcedure as DecoratedContractProcedure2
26
- } from "@orpc/contract";
27
-
28
- // src/router-builder.ts
29
- import { DecoratedContractProcedure, prefixHTTPPath } from "@orpc/contract";
30
- var LAZY_ROUTER_PREFIX_SYMBOL = Symbol("ORPC_LAZY_ROUTER_PREFIX");
31
- var RouterBuilder = class _RouterBuilder {
32
- constructor(zz$rb) {
33
- this.zz$rb = zz$rb;
34
- if (zz$rb.prefix && zz$rb.prefix.includes("{")) {
35
- throw new Error('Prefix cannot contain "{" for dynamic routing');
36
- }
37
- }
38
- prefix(prefix) {
39
- return new _RouterBuilder({
40
- ...this.zz$rb,
41
- prefix: `${this.zz$rb.prefix ?? ""}${prefix}`
42
- });
43
- }
44
- tags(...tags) {
45
- if (!tags.length)
46
- return this;
47
- return new _RouterBuilder({
48
- ...this.zz$rb,
49
- tags: [...this.zz$rb.tags ?? [], ...tags]
50
- });
51
- }
52
- use(middleware, mapInput) {
53
- const middleware_ = mapInput ? decorateMiddleware(middleware).mapInput(mapInput) : middleware;
54
- return new _RouterBuilder({
55
- ...this.zz$rb,
56
- middlewares: [...this.zz$rb.middlewares || [], middleware_]
57
- });
58
- }
59
- router(router) {
60
- const handled = adaptRouter({
61
- routerOrChild: router,
62
- middlewares: this.zz$rb.middlewares,
63
- tags: this.zz$rb.tags,
64
- prefix: this.zz$rb.prefix
65
- });
66
- return handled;
25
+ // src/config.ts
26
+ var DEFAULT_CONFIG = {
27
+ initialInputValidationIndex: 0,
28
+ initialOutputValidationIndex: 0
29
+ };
30
+ function fallbackConfig(key, value) {
31
+ if (value === void 0) {
32
+ return DEFAULT_CONFIG[key];
67
33
  }
68
- lazy(loader) {
69
- const lazy = adaptLazyRouter({
70
- current: createLazy(loader),
71
- middlewares: this.zz$rb.middlewares,
72
- tags: this.zz$rb.tags,
73
- prefix: this.zz$rb.prefix
34
+ return value;
35
+ }
36
+
37
+ // src/middleware-decorated.ts
38
+ function decorateMiddleware(middleware) {
39
+ const decorated = middleware;
40
+ decorated.mapInput = (mapInput) => {
41
+ const mapped = decorateMiddleware(
42
+ (options, input, ...rest) => middleware(options, mapInput(input), ...rest)
43
+ );
44
+ return mapped;
45
+ };
46
+ decorated.concat = (concatMiddleware, mapInput) => {
47
+ const mapped = mapInput ? decorateMiddleware(concatMiddleware).mapInput(mapInput) : concatMiddleware;
48
+ const concatted = decorateMiddleware((options, input, output, ...rest) => {
49
+ const next = async (...[nextOptions]) => {
50
+ return mapped({ ...options, context: { ...nextOptions?.context, ...options.context } }, input, output, ...rest);
51
+ };
52
+ const merged = middleware({ ...options, next }, input, output, ...rest);
53
+ return merged;
74
54
  });
75
- return lazy;
76
- }
77
- };
78
- function adaptRouter(options) {
79
- if (isProcedure(options.routerOrChild)) {
80
- return adaptProcedure({
81
- ...options,
82
- procedure: options.routerOrChild
55
+ return concatted;
56
+ };
57
+ return decorated;
58
+ }
59
+
60
+ // src/procedure-decorated.ts
61
+ import { mergeErrorMap, mergeMeta, mergeRoute } from "@orpc/contract";
62
+ var DecoratedProcedure = class _DecoratedProcedure extends Procedure {
63
+ errors(errors) {
64
+ return new _DecoratedProcedure({
65
+ ...this["~orpc"],
66
+ errorMap: mergeErrorMap(this["~orpc"].errorMap, errors)
83
67
  });
84
68
  }
85
- if (isLazy(options.routerOrChild)) {
86
- return adaptLazyRouter({
87
- ...options,
88
- current: options.routerOrChild
69
+ meta(meta) {
70
+ return new _DecoratedProcedure({
71
+ ...this["~orpc"],
72
+ meta: mergeMeta(this["~orpc"].meta, meta)
89
73
  });
90
74
  }
91
- const handled = {};
92
- for (const key in options.routerOrChild) {
93
- handled[key] = adaptRouter({
94
- ...options,
95
- routerOrChild: options.routerOrChild[key]
75
+ route(route) {
76
+ return new _DecoratedProcedure({
77
+ ...this["~orpc"],
78
+ route: mergeRoute(this["~orpc"].route, route)
96
79
  });
97
80
  }
98
- return handled;
99
- }
100
- function adaptLazyRouter(options) {
101
- const loader = async () => {
102
- const current = (await loadLazy(options.current)).default;
103
- return {
104
- default: adaptRouter({
105
- ...options,
106
- routerOrChild: current
107
- })
108
- };
109
- };
110
- let lazyRouterPrefix = options.prefix;
111
- if (LAZY_ROUTER_PREFIX_SYMBOL in options.current && typeof options.current[LAZY_ROUTER_PREFIX_SYMBOL] === "string") {
112
- lazyRouterPrefix = lazyRouterPrefix ? prefixHTTPPath(options.current[LAZY_ROUTER_PREFIX_SYMBOL], lazyRouterPrefix) : options.current[LAZY_ROUTER_PREFIX_SYMBOL];
113
- }
114
- const decoratedLazy = Object.assign(decorateLazy(createLazy(loader)), {
115
- [LAZY_ROUTER_PREFIX_SYMBOL]: lazyRouterPrefix
116
- });
117
- const recursive = new Proxy(decoratedLazy, {
118
- get(target, key) {
119
- if (typeof key !== "string") {
120
- return Reflect.get(target, key);
121
- }
122
- return adaptLazyRouter({
123
- ...options,
124
- current: createLazy(async () => {
125
- const current = (await loadLazy(options.current)).default;
126
- return { default: current[key] };
127
- })
128
- });
129
- }
130
- });
131
- return recursive;
132
- }
133
- function adaptProcedure(options) {
134
- const builderMiddlewares = options.middlewares ?? [];
135
- const procedureMiddlewares = options.procedure.zz$p.middlewares ?? [];
136
- const middlewares = [
137
- ...builderMiddlewares,
138
- ...procedureMiddlewares.filter(
139
- (item) => !builderMiddlewares.includes(item)
140
- )
141
- ];
142
- let contract = DecoratedContractProcedure.decorate(
143
- options.procedure.zz$p.contract
144
- ).addTags(...options.tags ?? []);
145
- if (options.prefix) {
146
- contract = contract.prefix(options.prefix);
147
- }
148
- return decorateProcedure({
149
- zz$p: {
150
- ...options.procedure.zz$p,
151
- contract,
152
- middlewares
153
- }
154
- });
155
- }
156
-
157
- // src/procedure-implementer.ts
158
- var ProcedureImplementer = class _ProcedureImplementer {
159
- constructor(zz$pi) {
160
- this.zz$pi = zz$pi;
161
- }
162
81
  use(middleware, mapInput) {
163
- const middleware_ = mapInput ? decorateMiddleware(middleware).mapInput(mapInput) : middleware;
164
- return new _ProcedureImplementer({
165
- ...this.zz$pi,
166
- middlewares: [...this.zz$pi.middlewares ?? [], middleware_]
82
+ const mapped = mapInput ? decorateMiddleware(middleware).mapInput(mapInput) : middleware;
83
+ return new _DecoratedProcedure({
84
+ ...this["~orpc"],
85
+ middlewares: addMiddleware(this["~orpc"].middlewares, mapped)
167
86
  });
168
87
  }
169
- func(func) {
170
- return decorateProcedure({
171
- zz$p: {
172
- middlewares: this.zz$pi.middlewares,
173
- contract: this.zz$pi.contract,
174
- func
175
- }
88
+ /**
89
+ * Make this procedure callable (works like a function while still being a procedure).
90
+ */
91
+ callable(...rest) {
92
+ return Object.assign(createProcedureClient(this, ...rest), {
93
+ "~type": "Procedure",
94
+ "~orpc": this["~orpc"]
176
95
  });
177
96
  }
178
- lazy(loader) {
179
- return new RouterBuilder(this.zz$pi).lazy(loader);
97
+ /**
98
+ * Make this procedure compatible with server action (the same as .callable, but the type is compatible with server action).
99
+ */
100
+ actionable(...rest) {
101
+ return this.callable(...rest);
180
102
  }
181
103
  };
182
104
 
183
- // src/procedure-builder.ts
184
- var ProcedureBuilder = class _ProcedureBuilder {
185
- constructor(zz$pb) {
186
- this.zz$pb = zz$pb;
105
+ // src/builder.ts
106
+ var Builder = class _Builder {
107
+ "~orpc";
108
+ constructor(def) {
109
+ this["~orpc"] = def;
187
110
  }
188
111
  /**
189
- * Self chainable
112
+ * Reset config
190
113
  */
191
- route(opts) {
192
- return new _ProcedureBuilder({
193
- ...this.zz$pb,
194
- contract: DecoratedContractProcedure2.decorate(this.zz$pb.contract).route(
195
- opts
196
- )
114
+ $config(config) {
115
+ const inputValidationCount = this["~orpc"].inputValidationIndex - fallbackConfig("initialInputValidationIndex", this["~orpc"].config.initialInputValidationIndex);
116
+ const outputValidationCount = this["~orpc"].outputValidationIndex - fallbackConfig("initialOutputValidationIndex", this["~orpc"].config.initialOutputValidationIndex);
117
+ return new _Builder({
118
+ ...this["~orpc"],
119
+ config,
120
+ inputValidationIndex: fallbackConfig("initialInputValidationIndex", config.initialInputValidationIndex) + inputValidationCount,
121
+ outputValidationIndex: fallbackConfig("initialOutputValidationIndex", config.initialOutputValidationIndex) + outputValidationCount
197
122
  });
198
123
  }
199
- input(schema, example) {
200
- return new _ProcedureBuilder({
201
- ...this.zz$pb,
202
- contract: DecoratedContractProcedure2.decorate(this.zz$pb.contract).input(
203
- schema,
204
- example
205
- )
124
+ /**
125
+ * Reset initial context
126
+ */
127
+ $context() {
128
+ return new _Builder({
129
+ ...this["~orpc"],
130
+ middlewares: [],
131
+ inputValidationIndex: fallbackConfig("initialInputValidationIndex", this["~orpc"].config.initialInputValidationIndex),
132
+ outputValidationIndex: fallbackConfig("initialOutputValidationIndex", this["~orpc"].config.initialOutputValidationIndex)
206
133
  });
207
134
  }
208
- output(schema, example) {
209
- return new _ProcedureBuilder({
210
- ...this.zz$pb,
211
- contract: DecoratedContractProcedure2.decorate(this.zz$pb.contract).output(
212
- schema,
213
- example
214
- )
135
+ /**
136
+ * Reset initial meta
137
+ */
138
+ $meta(initialMeta) {
139
+ return new _Builder({
140
+ ...this["~orpc"],
141
+ meta: initialMeta
215
142
  });
216
143
  }
217
- use(middleware, mapInput) {
218
- if (!mapInput) {
219
- return new ProcedureImplementer({
220
- contract: this.zz$pb.contract,
221
- middlewares: this.zz$pb.middlewares
222
- }).use(middleware);
223
- }
224
- return new ProcedureImplementer({
225
- contract: this.zz$pb.contract,
226
- middlewares: this.zz$pb.middlewares
227
- }).use(middleware, mapInput);
228
- }
229
144
  /**
230
- * Convert to Procedure
145
+ * Reset initial route
231
146
  */
232
- func(func) {
233
- return decorateProcedure({
234
- zz$p: {
235
- middlewares: this.zz$pb.middlewares,
236
- contract: this.zz$pb.contract,
237
- func
238
- }
147
+ $route(initialRoute) {
148
+ return new _Builder({
149
+ ...this["~orpc"],
150
+ route: initialRoute
239
151
  });
240
152
  }
241
- };
242
-
243
- // src/router-implementer.ts
244
- import { isContractProcedure } from "@orpc/contract";
245
- var ROUTER_CONTRACT_SYMBOL = Symbol("ORPC_ROUTER_CONTRACT");
246
- var RouterImplementer = class {
247
- constructor(zz$ri) {
248
- this.zz$ri = zz$ri;
249
- }
250
- router(router) {
251
- return Object.assign(new RouterBuilder({}).router(router), {
252
- [ROUTER_CONTRACT_SYMBOL]: this.zz$ri.contract
253
- });
153
+ middleware(middleware) {
154
+ return decorateMiddleware(middleware);
254
155
  }
255
- lazy(loader) {
256
- const lazy = createLazy(loader);
257
- const decorated = decorateLazy(lazy);
258
- return Object.assign(decorated, {
259
- [ROUTER_CONTRACT_SYMBOL]: this.zz$ri.contract
156
+ errors(errors) {
157
+ return new _Builder({
158
+ ...this["~orpc"],
159
+ errorMap: mergeErrorMap2(this["~orpc"].errorMap, errors)
260
160
  });
261
161
  }
262
- };
263
- function chainRouterImplementer(contract, middlewares) {
264
- const result = {};
265
- for (const key in contract) {
266
- const item = contract[key];
267
- if (isContractProcedure(item)) {
268
- result[key] = new ProcedureImplementer({
269
- contract: item,
270
- middlewares
271
- });
272
- } else {
273
- result[key] = chainRouterImplementer(item, middlewares);
274
- }
275
- }
276
- const implementer = new RouterImplementer({ contract });
277
- return Object.assign(implementer, result);
278
- }
279
-
280
- // src/builder.ts
281
- var Builder = class _Builder {
282
- constructor(zz$b = {}) {
283
- this.zz$b = zz$b;
284
- }
285
- /**
286
- * Self chainable
287
- */
288
- context() {
289
- return this;
290
- }
291
162
  use(middleware, mapInput) {
292
- const middleware_ = mapInput ? decorateMiddleware(middleware).mapInput(mapInput) : middleware;
163
+ const mapped = mapInput ? decorateMiddleware(middleware).mapInput(mapInput) : middleware;
293
164
  return new _Builder({
294
- ...this.zz$b,
295
- middlewares: [...this.zz$b.middlewares || [], middleware_]
165
+ ...this["~orpc"],
166
+ middlewares: addMiddleware(this["~orpc"].middlewares, mapped)
296
167
  });
297
168
  }
298
- /**
299
- * Convert to ContractProcedureBuilder
300
- */
301
- route(opts) {
302
- return new ProcedureBuilder({
303
- middlewares: this.zz$b.middlewares,
304
- contract: new ContractProcedure({
305
- ...opts,
306
- InputSchema: void 0,
307
- OutputSchema: void 0
308
- })
169
+ meta(meta) {
170
+ return new _Builder({
171
+ ...this["~orpc"],
172
+ meta: mergeMeta2(this["~orpc"].meta, meta)
309
173
  });
310
174
  }
311
- input(schema, example) {
312
- return new ProcedureBuilder({
313
- middlewares: this.zz$b.middlewares,
314
- contract: new ContractProcedure({
315
- OutputSchema: void 0,
316
- InputSchema: schema,
317
- inputExample: example
318
- })
175
+ route(route) {
176
+ return new _Builder({
177
+ ...this["~orpc"],
178
+ route: mergeRoute2(this["~orpc"].route, route)
319
179
  });
320
180
  }
321
- output(schema, example) {
322
- return new ProcedureBuilder({
323
- middlewares: this.zz$b.middlewares,
324
- contract: new ContractProcedure({
325
- InputSchema: void 0,
326
- OutputSchema: schema,
327
- outputExample: example
328
- })
181
+ input(schema) {
182
+ return new _Builder({
183
+ ...this["~orpc"],
184
+ inputSchema: schema,
185
+ inputValidationIndex: fallbackConfig("initialInputValidationIndex", this["~orpc"].config.initialInputValidationIndex) + this["~orpc"].middlewares.length
329
186
  });
330
187
  }
331
- /**
332
- * Convert to Procedure
333
- */
334
- func(func) {
335
- return decorateProcedure({
336
- zz$p: {
337
- middlewares: this.zz$b.middlewares,
338
- contract: new ContractProcedure({
339
- InputSchema: void 0,
340
- OutputSchema: void 0
341
- }),
342
- func
343
- }
188
+ output(schema) {
189
+ return new _Builder({
190
+ ...this["~orpc"],
191
+ outputSchema: schema,
192
+ outputValidationIndex: fallbackConfig("initialOutputValidationIndex", this["~orpc"].config.initialOutputValidationIndex) + this["~orpc"].middlewares.length
344
193
  });
345
194
  }
346
- /**
347
- * Convert to ProcedureImplementer | RouterBuilder
348
- */
349
- contract(contract) {
350
- if (isContractProcedure2(contract)) {
351
- return new ProcedureImplementer({
352
- contract,
353
- middlewares: this.zz$b.middlewares
354
- });
355
- }
356
- return chainRouterImplementer(
357
- contract,
358
- this.zz$b.middlewares
359
- );
360
- }
361
- /**
362
- * Create ExtendedMiddleware
363
- */
364
- // TODO: TOutput always any, infer not work at all, because TOutput used inside middleware params,
365
- // solution (maybe): create new generic for .output() method
366
- middleware(middleware) {
367
- return decorateMiddleware(middleware);
195
+ handler(handler) {
196
+ return new DecoratedProcedure({
197
+ ...this["~orpc"],
198
+ handler
199
+ });
368
200
  }
369
201
  prefix(prefix) {
370
- return new RouterBuilder({
371
- ...this.zz$b,
372
- prefix
202
+ return new _Builder({
203
+ ...this["~orpc"],
204
+ prefix: mergePrefix(this["~orpc"].prefix, prefix)
373
205
  });
374
206
  }
375
- tags(...tags) {
376
- return new RouterBuilder({
377
- ...this.zz$b,
378
- tags
207
+ tag(...tags) {
208
+ return new _Builder({
209
+ ...this["~orpc"],
210
+ tags: mergeTags(this["~orpc"].tags, tags)
379
211
  });
380
212
  }
381
- /**
382
- * Create DecoratedRouter
383
- */
384
213
  router(router) {
385
- return new RouterBuilder(this.zz$b).router(router);
214
+ return adaptRouter(router, this["~orpc"]);
386
215
  }
387
216
  lazy(loader) {
388
- return new RouterBuilder(this.zz$b).lazy(loader);
217
+ return adaptRouter(flatLazy(lazy(loader)), this["~orpc"]);
389
218
  }
390
219
  };
220
+ var os = new Builder({
221
+ config: {},
222
+ route: {},
223
+ meta: {},
224
+ errorMap: {},
225
+ inputSchema: void 0,
226
+ outputSchema: void 0,
227
+ inputValidationIndex: fallbackConfig("initialInputValidationIndex"),
228
+ outputValidationIndex: fallbackConfig("initialOutputValidationIndex"),
229
+ middlewares: []
230
+ });
391
231
 
392
- // src/router.ts
393
- import {
394
- isContractProcedure as isContractProcedure3
395
- } from "@orpc/contract";
396
- function toContractRouter(router) {
397
- const contract = {};
398
- for (const key in router) {
399
- const item = router[key];
400
- if (isContractProcedure3(item)) {
401
- contract[key] = item;
402
- } else if (isProcedure(item)) {
403
- contract[key] = item.zz$p.contract;
404
- } else {
405
- contract[key] = toContractRouter(item);
232
+ // src/context.ts
233
+ function mergeContext(context, other) {
234
+ return { ...context, ...other };
235
+ }
236
+
237
+ // src/implementer.ts
238
+ import { isContractProcedure } from "@orpc/contract";
239
+ function implementerInternal(contract, config, middlewares) {
240
+ if (isContractProcedure(contract)) {
241
+ const impl2 = new Builder({
242
+ ...contract["~orpc"],
243
+ config,
244
+ middlewares,
245
+ inputValidationIndex: fallbackConfig("initialInputValidationIndex", config?.initialInputValidationIndex) + middlewares.length,
246
+ outputValidationIndex: fallbackConfig("initialOutputValidationIndex", config?.initialOutputValidationIndex) + middlewares.length
247
+ });
248
+ return impl2;
249
+ }
250
+ const impl = new Proxy(contract, {
251
+ get: (target, key) => {
252
+ let method;
253
+ if (key === "middleware") {
254
+ method = (mid) => decorateMiddleware(mid);
255
+ } else if (key === "use") {
256
+ method = (mid) => {
257
+ return implementerInternal(
258
+ contract,
259
+ config,
260
+ addMiddleware(middlewares, mid)
261
+ );
262
+ };
263
+ } else if (key === "router") {
264
+ method = (router) => {
265
+ const adapted = adaptRouter(router, {
266
+ middlewares,
267
+ errorMap: {}
268
+ });
269
+ return setRouterContract(adapted, contract);
270
+ };
271
+ } else if (key === "lazy") {
272
+ method = (loader) => {
273
+ const adapted = adaptRouter(flatLazy(lazy(loader)), {
274
+ middlewares,
275
+ errorMap: {}
276
+ });
277
+ return setRouterContract(adapted, contract);
278
+ };
279
+ }
280
+ const next = Reflect.get(target, key);
281
+ if (!next || typeof next !== "function" && typeof next !== "object") {
282
+ return method ?? next;
283
+ }
284
+ const nextImpl = implementerInternal(next, config, middlewares);
285
+ if (method) {
286
+ return new Proxy(method, {
287
+ get(_, key2) {
288
+ return Reflect.get(nextImpl, key2);
289
+ }
290
+ });
291
+ }
292
+ return nextImpl;
406
293
  }
407
- }
408
- return contract;
294
+ });
295
+ return impl;
296
+ }
297
+ function implement(contract, config = {}) {
298
+ const implInternal = implementerInternal(contract, config, []);
299
+ const impl = new Proxy(implInternal, {
300
+ get: (target, key) => {
301
+ let method;
302
+ if (key === "$context") {
303
+ method = () => impl;
304
+ } else if (key === "$config") {
305
+ method = (config2) => implement(contract, config2);
306
+ }
307
+ const next = Reflect.get(target, key);
308
+ if (!next || typeof next !== "function" && typeof next !== "object") {
309
+ return method ?? next;
310
+ }
311
+ if (method) {
312
+ return new Proxy(method, {
313
+ get(_, key2) {
314
+ return Reflect.get(next, key2);
315
+ }
316
+ });
317
+ }
318
+ return next;
319
+ }
320
+ });
321
+ return impl;
409
322
  }
410
323
 
411
- // src/router-caller.ts
412
- function createRouterCaller(options) {
413
- return createRouterCallerInternal(options);
324
+ // src/procedure-utils.ts
325
+ function call(procedure, input, ...rest) {
326
+ return createProcedureClient(procedure, ...rest)(input);
414
327
  }
415
- function createRouterCallerInternal(options) {
416
- const procedureCaller = isLazy(options.router) || isProcedure(options.router) ? createProcedureCaller({
417
- ...options,
418
- procedure: options.router,
419
- context: options.context,
420
- path: options.basePath
421
- }) : {};
328
+
329
+ // src/router-client.ts
330
+ function createRouterClient(router, ...rest) {
331
+ if (isProcedure(router)) {
332
+ const caller = createProcedureClient(router, ...rest);
333
+ return caller;
334
+ }
335
+ const procedureCaller = isLazy(router) ? createProcedureClient(createLazyProcedureFormAnyLazy(router), ...rest) : {};
422
336
  const recursive = new Proxy(procedureCaller, {
423
337
  get(target, key) {
424
338
  if (typeof key !== "string") {
425
339
  return Reflect.get(target, key);
426
340
  }
427
- const next = options.router[key];
428
- return createRouterCallerInternal({
341
+ const next = getRouterChild(router, key);
342
+ if (!next) {
343
+ return Reflect.get(target, key);
344
+ }
345
+ const [options] = rest;
346
+ return createRouterClient(next, {
429
347
  ...options,
430
- router: next,
431
- basePath: [...options.basePath ?? [], key]
348
+ path: [...options?.path ?? [], key]
432
349
  });
433
350
  }
434
351
  });
@@ -436,32 +353,38 @@ function createRouterCallerInternal(options) {
436
353
  }
437
354
 
438
355
  // src/index.ts
439
- export * from "@orpc/shared/error";
440
- var os = new Builder();
356
+ import { isDefinedError, ORPCError, safe, type } from "@orpc/contract";
441
357
  export {
442
358
  Builder,
359
+ DecoratedProcedure,
443
360
  LAZY_LOADER_SYMBOL,
444
- LAZY_ROUTER_PREFIX_SYMBOL,
361
+ ORPCError,
445
362
  Procedure,
446
- ProcedureBuilder,
447
- ProcedureImplementer,
448
- ROUTER_CONTRACT_SYMBOL,
449
- RouterBuilder,
450
- RouterImplementer,
451
- chainRouterImplementer,
452
- createFlattenLazy,
453
- createLazy,
454
- createProcedureCaller,
455
- createRouterCaller,
456
- decorateLazy,
363
+ adaptRouter,
364
+ call,
365
+ createAccessibleLazyRouter,
366
+ createLazyProcedureFormAnyLazy,
367
+ createProcedureClient,
368
+ createRouterClient,
457
369
  decorateMiddleware,
458
- decorateProcedure,
370
+ deepSetLazyRouterPrefix,
371
+ fallbackConfig,
372
+ flatLazy,
373
+ getLazyRouterPrefix,
374
+ getRouterChild,
375
+ getRouterContract,
376
+ implement,
377
+ implementerInternal,
378
+ isDefinedError,
459
379
  isLazy,
460
380
  isProcedure,
461
- loadLazy,
462
- loadProcedure,
381
+ lazy,
463
382
  mergeContext,
383
+ middlewareOutputFn,
464
384
  os,
465
- toContractRouter
385
+ safe,
386
+ setRouterContract,
387
+ type,
388
+ unlazy
466
389
  };
467
390
  //# sourceMappingURL=index.js.map