@orpc/server 0.0.0-next.4555a17 → 0.0.0-next.4e27480

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 (58) hide show
  1. package/dist/chunk-GK2Z6B6W.js +230 -0
  2. package/dist/chunk-SXUFCJBY.js +301 -0
  3. package/dist/chunk-WUOGVGWG.js +1 -0
  4. package/dist/fetch.js +11 -107
  5. package/dist/hono.js +30 -0
  6. package/dist/index.js +890 -294
  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-with-errors-middlewares.d.ts +51 -0
  24. package/dist/src/builder-with-errors.d.ts +52 -0
  25. package/dist/src/builder-with-middlewares.d.ts +48 -0
  26. package/dist/src/builder.d.ts +42 -47
  27. package/dist/src/config.d.ts +6 -0
  28. package/dist/src/context.d.ts +11 -0
  29. package/dist/src/error.d.ts +10 -0
  30. package/dist/src/hidden.d.ts +6 -0
  31. package/dist/src/implementer-chainable.d.ts +14 -0
  32. package/dist/src/index.d.ts +13 -4
  33. package/dist/src/lazy-decorated.d.ts +7 -0
  34. package/dist/src/lazy-utils.d.ts +4 -0
  35. package/dist/src/lazy.d.ts +6 -11
  36. package/dist/src/middleware-decorated.d.ts +10 -0
  37. package/dist/src/middleware.d.ts +22 -12
  38. package/dist/src/procedure-builder-with-input.d.ts +34 -0
  39. package/dist/src/procedure-builder-with-output.d.ts +33 -0
  40. package/dist/src/procedure-builder.d.ts +24 -28
  41. package/dist/src/procedure-client.d.ts +22 -0
  42. package/dist/src/procedure-decorated.d.ts +26 -0
  43. package/dist/src/procedure-implementer.d.ts +19 -19
  44. package/dist/src/procedure-utils.d.ts +17 -0
  45. package/dist/src/procedure.d.ts +39 -26
  46. package/dist/src/router-builder.d.ts +29 -23
  47. package/dist/src/router-client.d.ts +26 -0
  48. package/dist/src/router-implementer.d.ts +18 -20
  49. package/dist/src/router.d.ts +11 -15
  50. package/dist/src/types.d.ts +8 -8
  51. package/package.json +22 -10
  52. package/dist/chunk-VARUID7X.js +0 -273
  53. package/dist/src/fetch/handle.d.ts +0 -7
  54. package/dist/src/fetch/handler.d.ts +0 -3
  55. package/dist/src/fetch/index.d.ts +0 -4
  56. package/dist/src/fetch/types.d.ts +0 -28
  57. package/dist/src/procedure-caller.d.ts +0 -26
  58. package/dist/src/router-caller.d.ts +0 -25
package/dist/index.js CHANGED
@@ -1,415 +1,999 @@
1
1
  import {
2
2
  LAZY_LOADER_SYMBOL,
3
3
  Procedure,
4
- createFlattenLazy,
5
- createLazy,
6
- createProcedureCaller,
7
- decorateLazy,
8
- decorateMiddleware,
9
- decorateProcedure,
4
+ createORPCErrorConstructorMap,
5
+ createProcedureClient,
6
+ flatLazy,
7
+ getRouterChild,
10
8
  isLazy,
11
9
  isProcedure,
12
- loadLazy,
13
- loadProcedure,
14
- mergeContext
15
- } from "./chunk-VARUID7X.js";
10
+ lazy,
11
+ mergeContext,
12
+ middlewareOutputFn,
13
+ unlazy
14
+ } from "./chunk-GK2Z6B6W.js";
16
15
 
17
16
  // src/builder.ts
18
- import {
19
- ContractProcedure,
20
- isContractProcedure as isContractProcedure2
21
- } from "@orpc/contract";
17
+ import { ContractProcedure as ContractProcedure4 } from "@orpc/contract";
18
+
19
+ // src/builder-with-errors.ts
20
+ import { ContractProcedure as ContractProcedure2 } from "@orpc/contract";
21
+
22
+ // src/builder-with-errors-middlewares.ts
23
+ import { ContractProcedure } from "@orpc/contract";
22
24
 
23
25
  // src/procedure-builder.ts
24
- import {
25
- DecoratedContractProcedure as DecoratedContractProcedure2
26
- } from "@orpc/contract";
26
+ import { ContractProcedureBuilder, DecoratedContractProcedure as DecoratedContractProcedure4 } from "@orpc/contract";
27
27
 
28
- // src/router-builder.ts
28
+ // src/procedure-builder-with-input.ts
29
+ import { ContractProcedureBuilderWithInput, DecoratedContractProcedure as DecoratedContractProcedure2 } from "@orpc/contract";
30
+
31
+ // src/middleware-decorated.ts
32
+ function decorateMiddleware(middleware) {
33
+ const decorated = middleware;
34
+ decorated.mapInput = (mapInput) => {
35
+ const mapped = decorateMiddleware(
36
+ (options, input, ...rest) => middleware(options, mapInput(input), ...rest)
37
+ );
38
+ return mapped;
39
+ };
40
+ decorated.concat = (concatMiddleware, mapInput) => {
41
+ const mapped = mapInput ? decorateMiddleware(concatMiddleware).mapInput(mapInput) : concatMiddleware;
42
+ const concatted = decorateMiddleware((options, input, output, ...rest) => {
43
+ const next = async (nextOptions) => {
44
+ return mapped({ ...options, context: mergeContext(nextOptions.context, options.context) }, input, output, ...rest);
45
+ };
46
+ const merged = middleware({ ...options, next }, input, output, ...rest);
47
+ return merged;
48
+ });
49
+ return concatted;
50
+ };
51
+ return decorated;
52
+ }
53
+
54
+ // src/procedure-decorated.ts
29
55
  import { DecoratedContractProcedure } 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');
56
+ var DecoratedProcedure = class _DecoratedProcedure extends Procedure {
57
+ static decorate(procedure) {
58
+ if (procedure instanceof _DecoratedProcedure) {
59
+ return procedure;
36
60
  }
61
+ return new _DecoratedProcedure(procedure["~orpc"]);
37
62
  }
38
63
  prefix(prefix) {
39
- return new _RouterBuilder({
40
- ...this.zz$rb,
41
- prefix: `${this.zz$rb.prefix ?? ""}${prefix}`
64
+ return new _DecoratedProcedure({
65
+ ...this["~orpc"],
66
+ contract: DecoratedContractProcedure.decorate(this["~orpc"].contract).prefix(prefix)
42
67
  });
43
68
  }
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]
69
+ route(route) {
70
+ return new _DecoratedProcedure({
71
+ ...this["~orpc"],
72
+ contract: DecoratedContractProcedure.decorate(this["~orpc"].contract).route(route)
73
+ });
74
+ }
75
+ errors(errors) {
76
+ return new _DecoratedProcedure({
77
+ ...this["~orpc"],
78
+ contract: DecoratedContractProcedure.decorate(this["~orpc"].contract).errors(errors)
50
79
  });
51
80
  }
52
81
  use(middleware, mapInput) {
53
82
  const middleware_ = mapInput ? decorateMiddleware(middleware).mapInput(mapInput) : middleware;
54
- return new _RouterBuilder({
55
- ...this.zz$rb,
56
- middlewares: [...this.zz$rb.middlewares || [], middleware_]
83
+ return new _DecoratedProcedure({
84
+ ...this["~orpc"],
85
+ middlewares: [...this["~orpc"].middlewares, middleware_]
57
86
  });
58
87
  }
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
88
+ unshiftTag(...tags) {
89
+ return new _DecoratedProcedure({
90
+ ...this["~orpc"],
91
+ contract: DecoratedContractProcedure.decorate(this["~orpc"].contract).unshiftTag(...tags)
65
92
  });
66
- return handled;
67
93
  }
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
94
+ unshiftMiddleware(...middlewares) {
95
+ const castedMiddlewares = middlewares;
96
+ if (this["~orpc"].middlewares.length) {
97
+ let min = 0;
98
+ for (let i = 0; i < this["~orpc"].middlewares.length; i++) {
99
+ const index = castedMiddlewares.indexOf(this["~orpc"].middlewares[i], min);
100
+ if (index === -1) {
101
+ castedMiddlewares.push(...this["~orpc"].middlewares.slice(i));
102
+ break;
103
+ }
104
+ min = index + 1;
105
+ }
106
+ }
107
+ const numNewMiddlewares = castedMiddlewares.length - this["~orpc"].middlewares.length;
108
+ return new _DecoratedProcedure({
109
+ ...this["~orpc"],
110
+ inputValidationIndex: this["~orpc"].inputValidationIndex + numNewMiddlewares,
111
+ outputValidationIndex: this["~orpc"].outputValidationIndex + numNewMiddlewares,
112
+ middlewares: castedMiddlewares
113
+ });
114
+ }
115
+ /**
116
+ * Make this procedure callable (works like a function while still being a procedure).
117
+ */
118
+ callable(...rest) {
119
+ return Object.assign(createProcedureClient(this, ...rest), {
120
+ "~type": "Procedure",
121
+ "~orpc": this["~orpc"]
74
122
  });
75
- return lazy;
123
+ }
124
+ /**
125
+ * Make this procedure compatible with server action (the same as .callable, but the type is compatible with server action).
126
+ */
127
+ actionable(...rest) {
128
+ return this.callable(...rest);
76
129
  }
77
130
  };
78
- function adaptRouter(options) {
79
- if (isProcedure(options.routerOrChild)) {
80
- return adaptProcedure({
81
- ...options,
82
- procedure: options.routerOrChild
131
+
132
+ // src/procedure-implementer.ts
133
+ var ProcedureImplementer = class _ProcedureImplementer {
134
+ "~type" = "ProcedureImplementer";
135
+ "~orpc";
136
+ constructor(def) {
137
+ this["~orpc"] = def;
138
+ }
139
+ use(middleware, mapInput) {
140
+ const mappedMiddleware = mapInput ? decorateMiddleware(middleware).mapInput(mapInput) : middleware;
141
+ return new _ProcedureImplementer({
142
+ ...this["~orpc"],
143
+ middlewares: [...this["~orpc"].middlewares, mappedMiddleware]
83
144
  });
84
145
  }
85
- if (isLazy(options.routerOrChild)) {
86
- return adaptLazyRouter({
87
- ...options,
88
- current: options.routerOrChild
146
+ handler(handler) {
147
+ return new DecoratedProcedure({
148
+ ...this["~orpc"],
149
+ handler
89
150
  });
90
151
  }
91
- const handled = {};
92
- for (const key in options.routerOrChild) {
93
- handled[key] = adaptRouter({
94
- ...options,
95
- routerOrChild: options.routerOrChild[key]
152
+ };
153
+
154
+ // src/procedure-builder-with-input.ts
155
+ var ProcedureBuilderWithInput = class _ProcedureBuilderWithInput {
156
+ "~type" = "ProcedureBuilderWithInput";
157
+ "~orpc";
158
+ constructor(def) {
159
+ this["~orpc"] = def;
160
+ }
161
+ errors(errors) {
162
+ return new _ProcedureBuilderWithInput({
163
+ ...this["~orpc"],
164
+ contract: DecoratedContractProcedure2.decorate(this["~orpc"].contract).errors(errors)
96
165
  });
97
166
  }
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 = `${options.current[LAZY_ROUTER_PREFIX_SYMBOL]}${lazyRouterPrefix ?? ""}`;
167
+ route(route) {
168
+ return new _ProcedureBuilderWithInput({
169
+ ...this["~orpc"],
170
+ contract: DecoratedContractProcedure2.decorate(this["~orpc"].contract).route(route)
171
+ });
172
+ }
173
+ use(middleware, mapInput) {
174
+ const maybeWithMapInput = mapInput ? decorateMiddleware(middleware).mapInput(mapInput) : middleware;
175
+ return new _ProcedureBuilderWithInput({
176
+ ...this["~orpc"],
177
+ outputValidationIndex: this["~orpc"].outputValidationIndex + 1,
178
+ middlewares: [...this["~orpc"].middlewares, maybeWithMapInput]
179
+ });
180
+ }
181
+ output(schema, example) {
182
+ return new ProcedureImplementer({
183
+ ...this["~orpc"],
184
+ contract: new ContractProcedureBuilderWithInput(this["~orpc"].contract["~orpc"]).output(schema, example)
185
+ });
186
+ }
187
+ handler(handler) {
188
+ return new DecoratedProcedure({
189
+ ...this["~orpc"],
190
+ handler
191
+ });
192
+ }
193
+ };
194
+
195
+ // src/procedure-builder-with-output.ts
196
+ import { ContractProcedureBuilderWithOutput, DecoratedContractProcedure as DecoratedContractProcedure3 } from "@orpc/contract";
197
+ var ProcedureBuilderWithOutput = class _ProcedureBuilderWithOutput {
198
+ "~type" = "ProcedureBuilderWithOutput";
199
+ "~orpc";
200
+ constructor(def) {
201
+ this["~orpc"] = def;
202
+ }
203
+ errors(errors) {
204
+ return new _ProcedureBuilderWithOutput({
205
+ ...this["~orpc"],
206
+ contract: DecoratedContractProcedure3.decorate(this["~orpc"].contract).errors(errors)
207
+ });
208
+ }
209
+ route(route) {
210
+ return new _ProcedureBuilderWithOutput({
211
+ ...this["~orpc"],
212
+ contract: DecoratedContractProcedure3.decorate(this["~orpc"].contract).route(route)
213
+ });
214
+ }
215
+ use(middleware) {
216
+ return new _ProcedureBuilderWithOutput({
217
+ ...this["~orpc"],
218
+ inputValidationIndex: this["~orpc"].inputValidationIndex + 1,
219
+ middlewares: [...this["~orpc"].middlewares, middleware]
220
+ });
221
+ }
222
+ input(schema, example) {
223
+ return new ProcedureImplementer({
224
+ ...this["~orpc"],
225
+ contract: new ContractProcedureBuilderWithOutput(this["~orpc"].contract["~orpc"]).input(schema, example)
226
+ });
227
+ }
228
+ handler(handler) {
229
+ return new DecoratedProcedure({
230
+ ...this["~orpc"],
231
+ handler
232
+ });
233
+ }
234
+ };
235
+
236
+ // src/procedure-builder.ts
237
+ var ProcedureBuilder = class _ProcedureBuilder {
238
+ "~type" = "ProcedureBuilder";
239
+ "~orpc";
240
+ constructor(def) {
241
+ this["~orpc"] = def;
242
+ }
243
+ errors(errors) {
244
+ return new _ProcedureBuilder({
245
+ ...this["~orpc"],
246
+ contract: DecoratedContractProcedure4.decorate(this["~orpc"].contract).errors(errors)
247
+ });
248
+ }
249
+ route(route) {
250
+ return new _ProcedureBuilder({
251
+ ...this["~orpc"],
252
+ contract: DecoratedContractProcedure4.decorate(this["~orpc"].contract).route(route)
253
+ });
254
+ }
255
+ use(middleware) {
256
+ return new _ProcedureBuilder({
257
+ ...this["~orpc"],
258
+ inputValidationIndex: this["~orpc"].inputValidationIndex + 1,
259
+ outputValidationIndex: this["~orpc"].outputValidationIndex + 1,
260
+ middlewares: [...this["~orpc"].middlewares, middleware]
261
+ });
262
+ }
263
+ input(schema, example) {
264
+ return new ProcedureBuilderWithInput({
265
+ ...this["~orpc"],
266
+ contract: new ContractProcedureBuilder(this["~orpc"].contract["~orpc"]).input(schema, example)
267
+ });
268
+ }
269
+ output(schema, example) {
270
+ return new ProcedureBuilderWithOutput({
271
+ ...this["~orpc"],
272
+ contract: new ContractProcedureBuilder(this["~orpc"].contract["~orpc"]).output(schema, example)
273
+ });
274
+ }
275
+ handler(handler) {
276
+ return new DecoratedProcedure({
277
+ ...this["~orpc"],
278
+ handler
279
+ });
113
280
  }
114
- const decoratedLazy = Object.assign(decorateLazy(createLazy(loader)), {
115
- [LAZY_ROUTER_PREFIX_SYMBOL]: lazyRouterPrefix
281
+ };
282
+
283
+ // src/hidden.ts
284
+ var ROUTER_CONTRACT_SYMBOL = Symbol("ORPC_ROUTER_CONTRACT");
285
+ function setRouterContract(obj, contract) {
286
+ return new Proxy(obj, {
287
+ get(target, key) {
288
+ if (key === ROUTER_CONTRACT_SYMBOL) {
289
+ return contract;
290
+ }
291
+ return Reflect.get(target, key);
292
+ }
116
293
  });
117
- const recursive = new Proxy(decoratedLazy, {
294
+ }
295
+ function getRouterContract(obj) {
296
+ return obj[ROUTER_CONTRACT_SYMBOL];
297
+ }
298
+ var LAZY_ROUTER_PREFIX_SYMBOL = Symbol("ORPC_LAZY_ROUTER_PREFIX");
299
+ function deepSetLazyRouterPrefix(router, prefix) {
300
+ return new Proxy(router, {
118
301
  get(target, key) {
119
- if (typeof key !== "string") {
120
- return Reflect.get(target, key);
302
+ if (key !== LAZY_ROUTER_PREFIX_SYMBOL) {
303
+ const val = Reflect.get(target, key);
304
+ if (val && (typeof val === "object" || typeof val === "function")) {
305
+ return deepSetLazyRouterPrefix(val, prefix);
306
+ }
307
+ return val;
121
308
  }
122
- return adaptLazyRouter({
123
- ...options,
124
- current: createLazy(async () => {
125
- const current = (await loadLazy(options.current)).default;
126
- return { default: current[key] };
127
- })
128
- });
309
+ return prefix;
129
310
  }
130
311
  });
131
- return recursive;
132
312
  }
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
- ).pushTag(...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
313
+ function getLazyRouterPrefix(obj) {
314
+ return obj[LAZY_ROUTER_PREFIX_SYMBOL];
315
+ }
316
+
317
+ // src/lazy-decorated.ts
318
+ function decorateLazy(lazied) {
319
+ const flattenLazy = flatLazy(lazied);
320
+ const recursive = new Proxy(flattenLazy, {
321
+ get(target, key) {
322
+ if (typeof key !== "string") {
323
+ return Reflect.get(target, key);
324
+ }
325
+ const next = getRouterChild(flattenLazy, key);
326
+ return decorateLazy(next);
153
327
  }
154
328
  });
329
+ return recursive;
155
330
  }
156
331
 
157
- // src/procedure-implementer.ts
158
- var ProcedureImplementer = class _ProcedureImplementer {
159
- constructor(zz$pi) {
160
- this.zz$pi = zz$pi;
332
+ // src/router-builder.ts
333
+ var RouterBuilder = class _RouterBuilder {
334
+ "~type" = "RouterBuilder";
335
+ "~orpc";
336
+ constructor(def) {
337
+ this["~orpc"] = def;
338
+ if (def.prefix && def.prefix.includes("{")) {
339
+ throw new Error(`
340
+ Dynamic routing in prefix not supported yet.
341
+ Please remove "{" from "${def.prefix}".
342
+ `);
343
+ }
161
344
  }
162
- 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_]
345
+ prefix(prefix) {
346
+ return new _RouterBuilder({
347
+ ...this["~orpc"],
348
+ prefix: `${this["~orpc"].prefix ?? ""}${prefix}`
167
349
  });
168
350
  }
169
- func(func) {
170
- return decorateProcedure({
171
- zz$p: {
172
- middlewares: this.zz$pi.middlewares,
173
- contract: this.zz$pi.contract,
174
- func
351
+ tag(...tags) {
352
+ return new _RouterBuilder({
353
+ ...this["~orpc"],
354
+ tags: [...this["~orpc"].tags ?? [], ...tags]
355
+ });
356
+ }
357
+ errors(errors) {
358
+ return new _RouterBuilder({
359
+ ...this["~orpc"],
360
+ errorMap: {
361
+ ...this["~orpc"].errorMap,
362
+ ...errors
175
363
  }
176
364
  });
177
365
  }
366
+ use(middleware) {
367
+ return new _RouterBuilder({
368
+ ...this["~orpc"],
369
+ middlewares: [...this["~orpc"].middlewares, middleware]
370
+ });
371
+ }
372
+ router(router) {
373
+ const adapted = adapt(router, this["~orpc"]);
374
+ return adapted;
375
+ }
178
376
  lazy(loader) {
179
- return new RouterBuilder(this.zz$pi).lazy(loader);
377
+ const adapted = adapt(flatLazy(lazy(loader)), this["~orpc"]);
378
+ return adapted;
180
379
  }
181
380
  };
381
+ function adapt(item, options) {
382
+ if (isLazy(item)) {
383
+ const adaptedLazy = decorateLazy(lazy(async () => {
384
+ const routerOrProcedure = (await unlazy(item)).default;
385
+ const adapted2 = adapt(routerOrProcedure, options);
386
+ return { default: adapted2 };
387
+ }));
388
+ const lazyPrefix = getLazyRouterPrefix(item);
389
+ if (options.prefix || lazyPrefix) {
390
+ const prefixed = deepSetLazyRouterPrefix(adaptedLazy, `${options.prefix ?? ""}${lazyPrefix ?? ""}`);
391
+ return prefixed;
392
+ }
393
+ return adaptedLazy;
394
+ }
395
+ if (isProcedure(item)) {
396
+ let decorated = DecoratedProcedure.decorate(item);
397
+ if (options.tags?.length) {
398
+ decorated = decorated.unshiftTag(...options.tags);
399
+ }
400
+ if (options.prefix) {
401
+ decorated = decorated.prefix(options.prefix);
402
+ }
403
+ if (options.middlewares?.length) {
404
+ decorated = decorated.unshiftMiddleware(...options.middlewares);
405
+ }
406
+ if (Object.keys(options.errorMap).length) {
407
+ decorated = decorated.errors(options.errorMap);
408
+ }
409
+ return decorated;
410
+ }
411
+ const adapted = {};
412
+ for (const key in item) {
413
+ adapted[key] = adapt(item[key], options);
414
+ }
415
+ return adapted;
416
+ }
182
417
 
183
- // src/procedure-builder.ts
184
- var ProcedureBuilder = class _ProcedureBuilder {
185
- constructor(zz$pb) {
186
- this.zz$pb = zz$pb;
418
+ // src/builder-with-errors-middlewares.ts
419
+ var BuilderWithErrorsMiddlewares = class _BuilderWithErrorsMiddlewares {
420
+ "~type" = "BuilderWithErrorsMiddlewares";
421
+ "~orpc";
422
+ constructor(def) {
423
+ this["~orpc"] = def;
187
424
  }
188
- /**
189
- * Self chainable
190
- */
191
- route(opts) {
192
- return new _ProcedureBuilder({
193
- ...this.zz$pb,
194
- contract: DecoratedContractProcedure2.decorate(this.zz$pb.contract).route(
195
- opts
196
- )
425
+ errors(errors) {
426
+ return new _BuilderWithErrorsMiddlewares({
427
+ ...this["~orpc"],
428
+ errorMap: {
429
+ ...this["~orpc"].errorMap,
430
+ ...errors
431
+ }
432
+ });
433
+ }
434
+ use(middleware) {
435
+ return new _BuilderWithErrorsMiddlewares({
436
+ ...this["~orpc"],
437
+ inputValidationIndex: this["~orpc"].inputValidationIndex + 1,
438
+ outputValidationIndex: this["~orpc"].outputValidationIndex + 1,
439
+ middlewares: [...this["~orpc"].middlewares, middleware]
440
+ // FIXME: I believe we can remove `as any` here
441
+ });
442
+ }
443
+ route(route) {
444
+ return new ProcedureBuilder({
445
+ ...this["~orpc"],
446
+ contract: new ContractProcedure({
447
+ route: {
448
+ ...this["~orpc"].config.initialRoute,
449
+ ...route
450
+ },
451
+ InputSchema: void 0,
452
+ OutputSchema: void 0,
453
+ errorMap: this["~orpc"].errorMap
454
+ })
197
455
  });
198
456
  }
199
457
  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
- )
458
+ return new ProcedureBuilderWithInput({
459
+ ...this["~orpc"],
460
+ contract: new ContractProcedure({
461
+ route: this["~orpc"].config.initialRoute,
462
+ OutputSchema: void 0,
463
+ InputSchema: schema,
464
+ inputExample: example,
465
+ errorMap: this["~orpc"].errorMap
466
+ })
206
467
  });
207
468
  }
208
469
  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
- )
470
+ return new ProcedureBuilderWithOutput({
471
+ ...this["~orpc"],
472
+ contract: new ContractProcedure({
473
+ route: this["~orpc"].config.initialRoute,
474
+ InputSchema: void 0,
475
+ OutputSchema: schema,
476
+ outputExample: example,
477
+ errorMap: this["~orpc"].errorMap
478
+ })
215
479
  });
216
480
  }
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);
481
+ handler(handler) {
482
+ return new DecoratedProcedure({
483
+ ...this["~orpc"],
484
+ contract: new ContractProcedure({
485
+ route: this["~orpc"].config.initialRoute,
486
+ InputSchema: void 0,
487
+ OutputSchema: void 0,
488
+ errorMap: this["~orpc"].errorMap
489
+ }),
490
+ handler
491
+ });
228
492
  }
229
- /**
230
- * Convert to Procedure
231
- */
232
- func(func) {
233
- return decorateProcedure({
234
- zz$p: {
235
- middlewares: this.zz$pb.middlewares,
236
- contract: this.zz$pb.contract,
237
- func
493
+ prefix(prefix) {
494
+ return new RouterBuilder({
495
+ ...this["~orpc"],
496
+ prefix
497
+ });
498
+ }
499
+ tag(...tags) {
500
+ return new RouterBuilder({
501
+ ...this["~orpc"],
502
+ tags
503
+ });
504
+ }
505
+ router(router) {
506
+ return new RouterBuilder(this["~orpc"]).router(router);
507
+ }
508
+ lazy(loader) {
509
+ return new RouterBuilder(this["~orpc"]).lazy(loader);
510
+ }
511
+ };
512
+
513
+ // src/config.ts
514
+ var DEFAULT_CONFIG = {
515
+ initialInputValidationIndex: 0,
516
+ initialOutputValidationIndex: 0
517
+ };
518
+ function fallbackConfig(key, value) {
519
+ if (value === void 0) {
520
+ return DEFAULT_CONFIG[key];
521
+ }
522
+ return value;
523
+ }
524
+
525
+ // src/builder-with-errors.ts
526
+ var BuilderWithErrors = class _BuilderWithErrors {
527
+ "~type" = "BuilderWithErrors";
528
+ "~orpc";
529
+ constructor(def) {
530
+ this["~orpc"] = def;
531
+ }
532
+ config(config) {
533
+ return new _BuilderWithErrors({
534
+ ...this["~orpc"],
535
+ config: {
536
+ ...this["~orpc"].config,
537
+ ...config
538
+ }
539
+ });
540
+ }
541
+ context() {
542
+ return this;
543
+ }
544
+ errors(errors) {
545
+ return new _BuilderWithErrors({
546
+ ...this["~orpc"],
547
+ errorMap: {
548
+ ...this["~orpc"].errorMap,
549
+ ...errors
238
550
  }
239
551
  });
240
552
  }
553
+ middleware(middleware) {
554
+ return decorateMiddleware(middleware);
555
+ }
556
+ use(middleware) {
557
+ return new BuilderWithErrorsMiddlewares({
558
+ ...this["~orpc"],
559
+ inputValidationIndex: fallbackConfig("initialInputValidationIndex", this["~orpc"].config.initialInputValidationIndex) + 1,
560
+ outputValidationIndex: fallbackConfig("initialOutputValidationIndex", this["~orpc"].config.initialOutputValidationIndex) + 1,
561
+ middlewares: [middleware]
562
+ // FIXME: I believe we can remove `as any` here
563
+ });
564
+ }
565
+ route(route) {
566
+ return new ProcedureBuilder({
567
+ middlewares: [],
568
+ inputValidationIndex: fallbackConfig("initialInputValidationIndex", this["~orpc"].config.initialInputValidationIndex),
569
+ outputValidationIndex: fallbackConfig("initialOutputValidationIndex", this["~orpc"].config.initialOutputValidationIndex),
570
+ contract: new ContractProcedure2({
571
+ route: {
572
+ ...this["~orpc"].config.initialRoute,
573
+ ...route
574
+ },
575
+ InputSchema: void 0,
576
+ OutputSchema: void 0,
577
+ errorMap: this["~orpc"].errorMap
578
+ })
579
+ });
580
+ }
581
+ input(schema, example) {
582
+ return new ProcedureBuilderWithInput({
583
+ middlewares: [],
584
+ inputValidationIndex: fallbackConfig("initialInputValidationIndex", this["~orpc"].config.initialInputValidationIndex),
585
+ outputValidationIndex: fallbackConfig("initialOutputValidationIndex", this["~orpc"].config.initialOutputValidationIndex),
586
+ contract: new ContractProcedure2({
587
+ route: this["~orpc"].config.initialRoute,
588
+ OutputSchema: void 0,
589
+ InputSchema: schema,
590
+ inputExample: example,
591
+ errorMap: this["~orpc"].errorMap
592
+ })
593
+ });
594
+ }
595
+ output(schema, example) {
596
+ return new ProcedureBuilderWithOutput({
597
+ middlewares: [],
598
+ inputValidationIndex: fallbackConfig("initialInputValidationIndex", this["~orpc"].config.initialInputValidationIndex),
599
+ outputValidationIndex: fallbackConfig("initialOutputValidationIndex", this["~orpc"].config.initialOutputValidationIndex),
600
+ contract: new ContractProcedure2({
601
+ route: this["~orpc"].config.initialRoute,
602
+ InputSchema: void 0,
603
+ OutputSchema: schema,
604
+ outputExample: example,
605
+ errorMap: this["~orpc"].errorMap
606
+ })
607
+ });
608
+ }
609
+ handler(handler) {
610
+ return new DecoratedProcedure({
611
+ middlewares: [],
612
+ inputValidationIndex: fallbackConfig("initialInputValidationIndex", this["~orpc"].config.initialInputValidationIndex),
613
+ outputValidationIndex: fallbackConfig("initialOutputValidationIndex", this["~orpc"].config.initialOutputValidationIndex),
614
+ contract: new ContractProcedure2({
615
+ route: this["~orpc"].config.initialRoute,
616
+ InputSchema: void 0,
617
+ OutputSchema: void 0,
618
+ errorMap: this["~orpc"].errorMap
619
+ }),
620
+ handler
621
+ });
622
+ }
623
+ prefix(prefix) {
624
+ return new RouterBuilder({
625
+ middlewares: [],
626
+ errorMap: this["~orpc"].errorMap,
627
+ prefix
628
+ });
629
+ }
630
+ tag(...tags) {
631
+ return new RouterBuilder({
632
+ middlewares: [],
633
+ errorMap: this["~orpc"].errorMap,
634
+ tags
635
+ });
636
+ }
637
+ router(router) {
638
+ return new RouterBuilder({
639
+ middlewares: [],
640
+ ...this["~orpc"]
641
+ }).router(router);
642
+ }
643
+ lazy(loader) {
644
+ return new RouterBuilder({
645
+ middlewares: [],
646
+ ...this["~orpc"]
647
+ }).lazy(loader);
648
+ }
241
649
  };
242
650
 
243
- // src/router-implementer.ts
651
+ // src/builder-with-middlewares.ts
652
+ import { ContractProcedure as ContractProcedure3 } from "@orpc/contract";
653
+
654
+ // src/implementer-chainable.ts
244
655
  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;
656
+ import { createCallableObject } from "@orpc/shared";
657
+
658
+ // src/router-implementer.ts
659
+ var RouterImplementer = class _RouterImplementer {
660
+ "~type" = "RouterImplementer";
661
+ "~orpc";
662
+ constructor(def) {
663
+ this["~orpc"] = def;
249
664
  }
250
- router(router) {
251
- return Object.assign(new RouterBuilder({}).router(router), {
252
- [ROUTER_CONTRACT_SYMBOL]: this.zz$ri.contract
665
+ use(middleware) {
666
+ return new _RouterImplementer({
667
+ ...this["~orpc"],
668
+ middlewares: [...this["~orpc"].middlewares ?? [], middleware]
253
669
  });
254
670
  }
671
+ router(router) {
672
+ const adapted = new RouterBuilder({
673
+ ...this["~orpc"],
674
+ errorMap: {}
675
+ }).router(router);
676
+ const contracted = setRouterContract(adapted, this["~orpc"].contract);
677
+ return contracted;
678
+ }
255
679
  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
260
- });
680
+ const adapted = new RouterBuilder({
681
+ ...this["~orpc"],
682
+ errorMap: {}
683
+ }).lazy(loader);
684
+ const contracted = setRouterContract(adapted, this["~orpc"].contract);
685
+ return contracted;
261
686
  }
262
687
  };
263
- function chainRouterImplementer(contract, middlewares) {
264
- const result = {};
688
+
689
+ // src/implementer-chainable.ts
690
+ function createChainableImplementer(contract, options) {
691
+ if (isContractProcedure(contract)) {
692
+ const implementer = new ProcedureImplementer({
693
+ contract,
694
+ middlewares: options.middlewares,
695
+ inputValidationIndex: options.inputValidationIndex,
696
+ outputValidationIndex: options.outputValidationIndex
697
+ });
698
+ return implementer;
699
+ }
700
+ const chainable = {};
265
701
  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
- }
702
+ chainable[key] = createChainableImplementer(contract[key], options);
275
703
  }
276
- const implementer = new RouterImplementer({ contract });
277
- return Object.assign(implementer, result);
704
+ const routerImplementer = new RouterImplementer({
705
+ contract,
706
+ middlewares: options.middlewares
707
+ });
708
+ const merged = new Proxy(chainable, {
709
+ get(target, key) {
710
+ const next = Reflect.get(target, key);
711
+ const method = Reflect.get(routerImplementer, key);
712
+ if (typeof key !== "string" || typeof method !== "function") {
713
+ return next;
714
+ }
715
+ if (!next) {
716
+ return method.bind(routerImplementer);
717
+ }
718
+ return createCallableObject(next, method.bind(routerImplementer));
719
+ }
720
+ });
721
+ return merged;
278
722
  }
279
723
 
280
- // src/builder.ts
281
- var Builder = class _Builder {
282
- constructor(zz$b = {}) {
283
- this.zz$b = zz$b;
724
+ // src/builder-with-middlewares.ts
725
+ var BuilderWithMiddlewares = class _BuilderWithMiddlewares {
726
+ "~type" = "BuilderHasMiddlewares";
727
+ "~orpc";
728
+ constructor(def) {
729
+ this["~orpc"] = def;
284
730
  }
285
- /**
286
- * Self chainable
287
- */
288
- context() {
289
- return this;
731
+ use(middleware) {
732
+ return new _BuilderWithMiddlewares({
733
+ ...this["~orpc"],
734
+ inputValidationIndex: this["~orpc"].inputValidationIndex + 1,
735
+ outputValidationIndex: this["~orpc"].outputValidationIndex + 1,
736
+ middlewares: [...this["~orpc"].middlewares, middleware]
737
+ });
290
738
  }
291
- use(middleware, mapInput) {
292
- const middleware_ = mapInput ? decorateMiddleware(middleware).mapInput(mapInput) : middleware;
293
- return new _Builder({
294
- ...this.zz$b,
295
- middlewares: [...this.zz$b.middlewares || [], middleware_]
739
+ errors(errors) {
740
+ return new BuilderWithErrorsMiddlewares({
741
+ ...this["~orpc"],
742
+ errorMap: errors
296
743
  });
297
744
  }
298
- /**
299
- * Convert to ContractProcedureBuilder
300
- */
301
745
  route(route) {
302
746
  return new ProcedureBuilder({
303
- middlewares: this.zz$b.middlewares,
304
- contract: new ContractProcedure({
305
- route,
747
+ ...this["~orpc"],
748
+ contract: new ContractProcedure3({
749
+ route: {
750
+ ...this["~orpc"].config.initialRoute,
751
+ ...route
752
+ },
306
753
  InputSchema: void 0,
307
- OutputSchema: void 0
754
+ OutputSchema: void 0,
755
+ errorMap: {}
308
756
  })
309
757
  });
310
758
  }
311
759
  input(schema, example) {
312
- return new ProcedureBuilder({
313
- middlewares: this.zz$b.middlewares,
314
- contract: new ContractProcedure({
760
+ return new ProcedureBuilderWithInput({
761
+ ...this["~orpc"],
762
+ contract: new ContractProcedure3({
763
+ route: this["~orpc"].config.initialRoute,
315
764
  OutputSchema: void 0,
316
765
  InputSchema: schema,
317
- inputExample: example
766
+ inputExample: example,
767
+ errorMap: {}
318
768
  })
319
769
  });
320
770
  }
321
771
  output(schema, example) {
322
- return new ProcedureBuilder({
323
- middlewares: this.zz$b.middlewares,
324
- contract: new ContractProcedure({
772
+ return new ProcedureBuilderWithOutput({
773
+ ...this["~orpc"],
774
+ contract: new ContractProcedure3({
775
+ route: this["~orpc"].config.initialRoute,
325
776
  InputSchema: void 0,
326
777
  OutputSchema: schema,
327
- outputExample: example
778
+ outputExample: example,
779
+ errorMap: {}
328
780
  })
329
781
  });
330
782
  }
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
- }
783
+ handler(handler) {
784
+ return new DecoratedProcedure({
785
+ ...this["~orpc"],
786
+ contract: new ContractProcedure3({
787
+ route: this["~orpc"].config.initialRoute,
788
+ InputSchema: void 0,
789
+ OutputSchema: void 0,
790
+ errorMap: {}
791
+ }),
792
+ handler
344
793
  });
345
794
  }
346
- /**
347
- * Convert to ProcedureImplementer | RouterBuilder
348
- */
795
+ prefix(prefix) {
796
+ return new RouterBuilder({
797
+ middlewares: this["~orpc"].middlewares,
798
+ errorMap: {},
799
+ prefix
800
+ });
801
+ }
802
+ tag(...tags) {
803
+ return new RouterBuilder({
804
+ middlewares: this["~orpc"].middlewares,
805
+ errorMap: {},
806
+ tags
807
+ });
808
+ }
809
+ router(router) {
810
+ return new RouterBuilder({
811
+ errorMap: {},
812
+ ...this["~orpc"]
813
+ }).router(router);
814
+ }
815
+ lazy(loader) {
816
+ return new RouterBuilder({
817
+ errorMap: {},
818
+ ...this["~orpc"]
819
+ }).lazy(loader);
820
+ }
349
821
  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
- );
822
+ return createChainableImplementer(contract, this["~orpc"]);
823
+ }
824
+ };
825
+
826
+ // src/builder.ts
827
+ var Builder = class _Builder {
828
+ "~type" = "Builder";
829
+ "~orpc";
830
+ constructor(def) {
831
+ this["~orpc"] = def;
832
+ }
833
+ config(config) {
834
+ return new _Builder({
835
+ ...this["~orpc"],
836
+ config: {
837
+ ...this["~orpc"].config,
838
+ ...config
839
+ }
840
+ });
841
+ }
842
+ context() {
843
+ return this;
360
844
  }
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
845
  middleware(middleware) {
367
846
  return decorateMiddleware(middleware);
368
847
  }
848
+ errors(errors) {
849
+ return new BuilderWithErrors({
850
+ ...this["~orpc"],
851
+ errorMap: errors
852
+ });
853
+ }
854
+ use(middleware) {
855
+ return new BuilderWithMiddlewares({
856
+ ...this["~orpc"],
857
+ inputValidationIndex: fallbackConfig("initialInputValidationIndex", this["~orpc"].config.initialInputValidationIndex) + 1,
858
+ outputValidationIndex: fallbackConfig("initialOutputValidationIndex", this["~orpc"].config.initialOutputValidationIndex) + 1,
859
+ middlewares: [middleware]
860
+ // FIXME: I believe we can remove `as any` here
861
+ });
862
+ }
863
+ route(route) {
864
+ return new ProcedureBuilder({
865
+ middlewares: [],
866
+ inputValidationIndex: fallbackConfig("initialInputValidationIndex", this["~orpc"].config.initialInputValidationIndex),
867
+ outputValidationIndex: fallbackConfig("initialOutputValidationIndex", this["~orpc"].config.initialOutputValidationIndex),
868
+ contract: new ContractProcedure4({
869
+ route: {
870
+ ...this["~orpc"].config.initialRoute,
871
+ ...route
872
+ },
873
+ InputSchema: void 0,
874
+ OutputSchema: void 0,
875
+ errorMap: {}
876
+ })
877
+ });
878
+ }
879
+ input(schema, example) {
880
+ return new ProcedureBuilderWithInput({
881
+ middlewares: [],
882
+ inputValidationIndex: fallbackConfig("initialInputValidationIndex", this["~orpc"].config.initialInputValidationIndex),
883
+ outputValidationIndex: fallbackConfig("initialOutputValidationIndex", this["~orpc"].config.initialOutputValidationIndex),
884
+ contract: new ContractProcedure4({
885
+ route: this["~orpc"].config.initialRoute,
886
+ OutputSchema: void 0,
887
+ InputSchema: schema,
888
+ inputExample: example,
889
+ errorMap: {}
890
+ })
891
+ });
892
+ }
893
+ output(schema, example) {
894
+ return new ProcedureBuilderWithOutput({
895
+ middlewares: [],
896
+ inputValidationIndex: fallbackConfig("initialInputValidationIndex", this["~orpc"].config.initialInputValidationIndex),
897
+ outputValidationIndex: fallbackConfig("initialOutputValidationIndex", this["~orpc"].config.initialOutputValidationIndex),
898
+ contract: new ContractProcedure4({
899
+ route: this["~orpc"].config.initialRoute,
900
+ InputSchema: void 0,
901
+ OutputSchema: schema,
902
+ outputExample: example,
903
+ errorMap: {}
904
+ })
905
+ });
906
+ }
907
+ handler(handler) {
908
+ return new DecoratedProcedure({
909
+ middlewares: [],
910
+ inputValidationIndex: fallbackConfig("initialInputValidationIndex", this["~orpc"].config.initialInputValidationIndex),
911
+ outputValidationIndex: fallbackConfig("initialOutputValidationIndex", this["~orpc"].config.initialOutputValidationIndex),
912
+ contract: new ContractProcedure4({
913
+ route: this["~orpc"].config.initialRoute,
914
+ InputSchema: void 0,
915
+ OutputSchema: void 0,
916
+ errorMap: {}
917
+ }),
918
+ handler
919
+ });
920
+ }
369
921
  prefix(prefix) {
370
922
  return new RouterBuilder({
371
- ...this.zz$b,
923
+ middlewares: [],
924
+ errorMap: {},
372
925
  prefix
373
926
  });
374
927
  }
375
- tags(...tags) {
928
+ tag(...tags) {
376
929
  return new RouterBuilder({
377
- ...this.zz$b,
930
+ middlewares: [],
931
+ errorMap: {},
378
932
  tags
379
933
  });
380
934
  }
381
- /**
382
- * Create DecoratedRouter
383
- */
384
935
  router(router) {
385
- return new RouterBuilder(this.zz$b).router(router);
936
+ return new RouterBuilder({
937
+ middlewares: [],
938
+ errorMap: []
939
+ }).router(router);
386
940
  }
387
941
  lazy(loader) {
388
- return new RouterBuilder(this.zz$b).lazy(loader);
942
+ return new RouterBuilder({
943
+ middlewares: [],
944
+ errorMap: {}
945
+ }).lazy(loader);
946
+ }
947
+ contract(contract) {
948
+ return createChainableImplementer(contract, {
949
+ middlewares: [],
950
+ inputValidationIndex: 0,
951
+ outputValidationIndex: 0
952
+ });
389
953
  }
390
954
  };
391
955
 
392
- // src/router-caller.ts
393
- function createRouterCaller(options) {
394
- return createRouterCallerInternal(options);
956
+ // src/procedure-utils.ts
957
+ function call(procedure, input, ...rest) {
958
+ return createProcedureClient(procedure, ...rest)(input);
395
959
  }
396
- function createRouterCallerInternal(options) {
397
- const procedureCaller = isLazy(options.router) || isProcedure(options.router) ? createProcedureCaller({
398
- ...options,
399
- procedure: options.router,
400
- context: options.context,
401
- path: options.basePath
402
- }) : {};
960
+
961
+ // src/lazy-utils.ts
962
+ function createLazyProcedureFormAnyLazy(lazied) {
963
+ const lazyProcedure = lazy(async () => {
964
+ const { default: maybeProcedure } = await unlazy(flatLazy(lazied));
965
+ if (!isProcedure(maybeProcedure)) {
966
+ throw new Error(`
967
+ Expected a lazy<procedure> but got lazy<unknown>.
968
+ This should be caught by TypeScript compilation.
969
+ Please report this issue if this makes you feel uncomfortable.
970
+ `);
971
+ }
972
+ return { default: maybeProcedure };
973
+ });
974
+ return lazyProcedure;
975
+ }
976
+
977
+ // src/router-client.ts
978
+ function createRouterClient(router, ...rest) {
979
+ if (isProcedure(router)) {
980
+ const caller = createProcedureClient(router, ...rest);
981
+ return caller;
982
+ }
983
+ const procedureCaller = isLazy(router) ? createProcedureClient(createLazyProcedureFormAnyLazy(router), ...rest) : {};
403
984
  const recursive = new Proxy(procedureCaller, {
404
985
  get(target, key) {
405
986
  if (typeof key !== "string") {
406
987
  return Reflect.get(target, key);
407
988
  }
408
- const next = options.router[key];
409
- return createRouterCallerInternal({
989
+ const next = getRouterChild(router, key);
990
+ if (!next) {
991
+ return Reflect.get(target, key);
992
+ }
993
+ const [options] = rest;
994
+ return createRouterClient(next, {
410
995
  ...options,
411
- router: next,
412
- basePath: [...options.basePath ?? [], key]
996
+ path: [...options?.path ?? [], key]
413
997
  });
414
998
  }
415
999
  });
@@ -417,31 +1001,43 @@ function createRouterCallerInternal(options) {
417
1001
  }
418
1002
 
419
1003
  // src/index.ts
420
- export * from "@orpc/shared/error";
421
- var os = new Builder();
1004
+ import { isDefinedError, ORPCError, safe, type } from "@orpc/contract";
1005
+ var os = new Builder({
1006
+ config: {}
1007
+ });
422
1008
  export {
423
1009
  Builder,
1010
+ DecoratedProcedure,
424
1011
  LAZY_LOADER_SYMBOL,
425
- LAZY_ROUTER_PREFIX_SYMBOL,
1012
+ ORPCError,
426
1013
  Procedure,
427
1014
  ProcedureBuilder,
428
1015
  ProcedureImplementer,
429
- ROUTER_CONTRACT_SYMBOL,
430
1016
  RouterBuilder,
431
1017
  RouterImplementer,
432
- chainRouterImplementer,
433
- createFlattenLazy,
434
- createLazy,
435
- createProcedureCaller,
436
- createRouterCaller,
1018
+ call,
1019
+ createChainableImplementer,
1020
+ createORPCErrorConstructorMap,
1021
+ createProcedureClient,
1022
+ createRouterClient,
437
1023
  decorateLazy,
438
1024
  decorateMiddleware,
439
- decorateProcedure,
1025
+ deepSetLazyRouterPrefix,
1026
+ fallbackConfig,
1027
+ flatLazy,
1028
+ getLazyRouterPrefix,
1029
+ getRouterChild,
1030
+ getRouterContract,
1031
+ isDefinedError,
440
1032
  isLazy,
441
1033
  isProcedure,
442
- loadLazy,
443
- loadProcedure,
1034
+ lazy,
444
1035
  mergeContext,
445
- os
1036
+ middlewareOutputFn,
1037
+ os,
1038
+ safe,
1039
+ setRouterContract,
1040
+ type,
1041
+ unlazy
446
1042
  };
447
1043
  //# sourceMappingURL=index.js.map