@orpc/server 0.0.0-next.4220427 → 0.0.0-next.44bdf93

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. package/dist/{chunk-DNG2IB3R.js → chunk-GK2Z6B6W.js} +38 -35
  2. package/dist/{chunk-V3I7RIRY.js → chunk-SXUFCJBY.js} +5 -6
  3. package/dist/fetch.js +4 -4
  4. package/dist/hono.js +4 -4
  5. package/dist/index.js +614 -172
  6. package/dist/next.js +4 -4
  7. package/dist/node.js +6 -6
  8. package/dist/src/adapters/fetch/orpc-handler.d.ts +3 -3
  9. package/dist/src/adapters/node/orpc-handler.d.ts +3 -3
  10. package/dist/src/builder-with-errors-middlewares.d.ts +50 -0
  11. package/dist/src/builder-with-errors.d.ts +49 -0
  12. package/dist/src/builder-with-middlewares.d.ts +47 -0
  13. package/dist/src/builder.d.ts +30 -23
  14. package/dist/src/context.d.ts +11 -0
  15. package/dist/src/error.d.ts +1 -1
  16. package/dist/src/hidden.d.ts +2 -2
  17. package/dist/src/implementer-chainable.d.ts +7 -3
  18. package/dist/src/index.d.ts +3 -2
  19. package/dist/src/lazy-decorated.d.ts +3 -6
  20. package/dist/src/middleware-decorated.d.ts +2 -1
  21. package/dist/src/middleware.d.ts +1 -0
  22. package/dist/src/procedure-builder-with-input.d.ts +34 -0
  23. package/dist/src/procedure-builder-with-output.d.ts +33 -0
  24. package/dist/src/procedure-builder.d.ts +21 -18
  25. package/dist/src/procedure-client.d.ts +7 -19
  26. package/dist/src/procedure-decorated.d.ts +21 -10
  27. package/dist/src/procedure-implementer.d.ts +7 -4
  28. package/dist/src/procedure-utils.d.ts +17 -0
  29. package/dist/src/procedure.d.ts +4 -2
  30. package/dist/src/router-builder.d.ts +19 -15
  31. package/dist/src/router-client.d.ts +7 -6
  32. package/dist/src/router-implementer.d.ts +7 -6
  33. package/dist/src/router.d.ts +3 -3
  34. package/package.json +3 -3
package/dist/index.js CHANGED
@@ -9,15 +9,24 @@ import {
9
9
  isProcedure,
10
10
  lazy,
11
11
  mergeContext,
12
+ middlewareOutputFn,
12
13
  unlazy
13
- } from "./chunk-DNG2IB3R.js";
14
+ } from "./chunk-GK2Z6B6W.js";
14
15
 
15
16
  // src/builder.ts
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
16
23
  import { ContractProcedure } from "@orpc/contract";
17
24
 
18
- // src/implementer-chainable.ts
19
- import { isContractProcedure } from "@orpc/contract";
20
- import { createCallableObject } from "@orpc/shared";
25
+ // src/procedure-builder.ts
26
+ import { ContractProcedureBuilder, DecoratedContractProcedure as DecoratedContractProcedure4 } from "@orpc/contract";
27
+
28
+ // src/procedure-builder-with-input.ts
29
+ import { ContractProcedureBuilderWithInput, DecoratedContractProcedure as DecoratedContractProcedure2 } from "@orpc/contract";
21
30
 
22
31
  // src/middleware-decorated.ts
23
32
  function decorateMiddleware(middleware) {
@@ -44,58 +53,81 @@ function decorateMiddleware(middleware) {
44
53
 
45
54
  // src/procedure-decorated.ts
46
55
  import { DecoratedContractProcedure } from "@orpc/contract";
47
- function decorateProcedure(procedure) {
48
- const caller = createProcedureClient({
49
- procedure,
50
- context: void 0
51
- });
52
- const decorated = caller;
53
- decorated["~type"] = procedure["~type"];
54
- decorated["~orpc"] = procedure["~orpc"];
55
- decorated.prefix = (prefix) => {
56
- return decorateProcedure(new Procedure({
57
- ...procedure["~orpc"],
58
- contract: DecoratedContractProcedure.decorate(procedure["~orpc"].contract).prefix(prefix)
59
- }));
60
- };
61
- decorated.route = (route) => {
62
- return decorateProcedure(new Procedure({
63
- ...procedure["~orpc"],
64
- contract: DecoratedContractProcedure.decorate(procedure["~orpc"].contract).route(route)
65
- }));
66
- };
67
- decorated.use = (middleware, mapInput) => {
56
+ var DecoratedProcedure = class _DecoratedProcedure extends Procedure {
57
+ static decorate(procedure) {
58
+ if (procedure instanceof _DecoratedProcedure) {
59
+ return procedure;
60
+ }
61
+ return new _DecoratedProcedure(procedure["~orpc"]);
62
+ }
63
+ prefix(prefix) {
64
+ return new _DecoratedProcedure({
65
+ ...this["~orpc"],
66
+ contract: DecoratedContractProcedure.decorate(this["~orpc"].contract).prefix(prefix)
67
+ });
68
+ }
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)
79
+ });
80
+ }
81
+ use(middleware, mapInput) {
68
82
  const middleware_ = mapInput ? decorateMiddleware(middleware).mapInput(mapInput) : middleware;
69
- return decorateProcedure(new Procedure({
70
- ...procedure["~orpc"],
71
- middlewares: [...procedure["~orpc"].middlewares ?? [], middleware_]
72
- }));
73
- };
74
- decorated.unshiftTag = (...tags) => {
75
- return decorateProcedure(new Procedure({
76
- ...procedure["~orpc"],
77
- contract: DecoratedContractProcedure.decorate(procedure["~orpc"].contract).unshiftTag(...tags)
78
- }));
79
- };
80
- decorated.unshiftMiddleware = (...middlewares) => {
81
- if (procedure["~orpc"].middlewares?.length) {
83
+ return new _DecoratedProcedure({
84
+ ...this["~orpc"],
85
+ middlewares: [...this["~orpc"].middlewares, middleware_]
86
+ });
87
+ }
88
+ unshiftTag(...tags) {
89
+ return new _DecoratedProcedure({
90
+ ...this["~orpc"],
91
+ contract: DecoratedContractProcedure.decorate(this["~orpc"].contract).unshiftTag(...tags)
92
+ });
93
+ }
94
+ unshiftMiddleware(...middlewares) {
95
+ const castedMiddlewares = middlewares;
96
+ if (this["~orpc"].middlewares.length) {
82
97
  let min = 0;
83
- for (let i = 0; i < procedure["~orpc"].middlewares.length; i++) {
84
- const index = middlewares.indexOf(procedure["~orpc"].middlewares[i], min);
98
+ for (let i = 0; i < this["~orpc"].middlewares.length; i++) {
99
+ const index = castedMiddlewares.indexOf(this["~orpc"].middlewares[i], min);
85
100
  if (index === -1) {
86
- middlewares.push(...procedure["~orpc"].middlewares.slice(i));
101
+ castedMiddlewares.push(...this["~orpc"].middlewares.slice(i));
87
102
  break;
88
103
  }
89
104
  min = index + 1;
90
105
  }
91
106
  }
92
- return decorateProcedure(new Procedure({
93
- ...procedure["~orpc"],
94
- middlewares
95
- }));
96
- };
97
- return decorated;
98
- }
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"]
122
+ });
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);
129
+ }
130
+ };
99
131
 
100
132
  // src/procedure-implementer.ts
101
133
  var ProcedureImplementer = class _ProcedureImplementer {
@@ -108,15 +140,143 @@ var ProcedureImplementer = class _ProcedureImplementer {
108
140
  const mappedMiddleware = mapInput ? decorateMiddleware(middleware).mapInput(mapInput) : middleware;
109
141
  return new _ProcedureImplementer({
110
142
  ...this["~orpc"],
111
- middlewares: [...this["~orpc"].middlewares ?? [], mappedMiddleware]
143
+ middlewares: [...this["~orpc"].middlewares, mappedMiddleware]
112
144
  });
113
145
  }
114
146
  handler(handler) {
115
- return decorateProcedure(new Procedure({
116
- middlewares: this["~orpc"].middlewares,
117
- contract: this["~orpc"].contract,
147
+ return new DecoratedProcedure({
148
+ ...this["~orpc"],
118
149
  handler
119
- }));
150
+ });
151
+ }
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)
165
+ });
166
+ }
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
+ });
120
280
  }
121
281
  };
122
282
 
@@ -154,31 +314,10 @@ function getLazyRouterPrefix(obj) {
154
314
  return obj[LAZY_ROUTER_PREFIX_SYMBOL];
155
315
  }
156
316
 
157
- // src/lazy-utils.ts
158
- function createLazyProcedureFormAnyLazy(lazied) {
159
- const lazyProcedure = lazy(async () => {
160
- const { default: maybeProcedure } = await unlazy(flatLazy(lazied));
161
- if (!isProcedure(maybeProcedure)) {
162
- throw new Error(`
163
- Expected a lazy<procedure> but got lazy<unknown>.
164
- This should be caught by TypeScript compilation.
165
- Please report this issue if this makes you feel uncomfortable.
166
- `);
167
- }
168
- return { default: maybeProcedure };
169
- });
170
- return lazyProcedure;
171
- }
172
-
173
317
  // src/lazy-decorated.ts
174
318
  function decorateLazy(lazied) {
175
319
  const flattenLazy = flatLazy(lazied);
176
- const procedureProcedureClient = createProcedureClient({
177
- procedure: createLazyProcedureFormAnyLazy(flattenLazy),
178
- context: void 0
179
- });
180
- Object.assign(procedureProcedureClient, flattenLazy);
181
- const recursive = new Proxy(procedureProcedureClient, {
320
+ const recursive = new Proxy(flattenLazy, {
182
321
  get(target, key) {
183
322
  if (typeof key !== "string") {
184
323
  return Reflect.get(target, key);
@@ -215,10 +354,19 @@ var RouterBuilder = class _RouterBuilder {
215
354
  tags: [...this["~orpc"].tags ?? [], ...tags]
216
355
  });
217
356
  }
357
+ errors(errors) {
358
+ return new _RouterBuilder({
359
+ ...this["~orpc"],
360
+ errorMap: {
361
+ ...this["~orpc"].errorMap,
362
+ ...errors
363
+ }
364
+ });
365
+ }
218
366
  use(middleware) {
219
367
  return new _RouterBuilder({
220
368
  ...this["~orpc"],
221
- middlewares: [...this["~orpc"].middlewares ?? [], middleware]
369
+ middlewares: [...this["~orpc"].middlewares, middleware]
222
370
  });
223
371
  }
224
372
  router(router) {
@@ -245,7 +393,7 @@ function adapt(item, options) {
245
393
  return adaptedLazy;
246
394
  }
247
395
  if (isProcedure(item)) {
248
- let decorated = decorateProcedure(item);
396
+ let decorated = DecoratedProcedure.decorate(item);
249
397
  if (options.tags?.length) {
250
398
  decorated = decorated.unshiftTag(...options.tags);
251
399
  }
@@ -255,6 +403,9 @@ function adapt(item, options) {
255
403
  if (options.middlewares?.length) {
256
404
  decorated = decorated.unshiftMiddleware(...options.middlewares);
257
405
  }
406
+ if (Object.keys(options.errorMap).length) {
407
+ decorated = decorated.errors(options.errorMap);
408
+ }
258
409
  return decorated;
259
410
  }
260
411
  const adapted = {};
@@ -264,6 +415,213 @@ function adapt(item, options) {
264
415
  return adapted;
265
416
  }
266
417
 
418
+ // src/builder-with-errors-middlewares.ts
419
+ var BuilderWithErrorsMiddlewares = class _BuilderWithErrorsMiddlewares {
420
+ "~type" = "BuilderWithErrorsMiddlewares";
421
+ "~orpc";
422
+ constructor(def) {
423
+ this["~orpc"] = def;
424
+ }
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
+ InputSchema: void 0,
449
+ OutputSchema: void 0,
450
+ errorMap: this["~orpc"].errorMap
451
+ })
452
+ });
453
+ }
454
+ input(schema, example) {
455
+ return new ProcedureBuilderWithInput({
456
+ ...this["~orpc"],
457
+ contract: new ContractProcedure({
458
+ OutputSchema: void 0,
459
+ InputSchema: schema,
460
+ inputExample: example,
461
+ errorMap: this["~orpc"].errorMap
462
+ })
463
+ });
464
+ }
465
+ output(schema, example) {
466
+ return new ProcedureBuilderWithOutput({
467
+ ...this["~orpc"],
468
+ contract: new ContractProcedure({
469
+ InputSchema: void 0,
470
+ OutputSchema: schema,
471
+ outputExample: example,
472
+ errorMap: this["~orpc"].errorMap
473
+ })
474
+ });
475
+ }
476
+ handler(handler) {
477
+ return new DecoratedProcedure({
478
+ ...this["~orpc"],
479
+ contract: new ContractProcedure({
480
+ InputSchema: void 0,
481
+ OutputSchema: void 0,
482
+ errorMap: this["~orpc"].errorMap
483
+ }),
484
+ handler
485
+ });
486
+ }
487
+ prefix(prefix) {
488
+ return new RouterBuilder({
489
+ ...this["~orpc"],
490
+ prefix
491
+ });
492
+ }
493
+ tag(...tags) {
494
+ return new RouterBuilder({
495
+ ...this["~orpc"],
496
+ tags
497
+ });
498
+ }
499
+ router(router) {
500
+ return new RouterBuilder(this["~orpc"]).router(router);
501
+ }
502
+ lazy(loader) {
503
+ return new RouterBuilder(this["~orpc"]).lazy(loader);
504
+ }
505
+ };
506
+
507
+ // src/builder-with-errors.ts
508
+ var BuilderWithErrors = class _BuilderWithErrors {
509
+ "~type" = "BuilderWithErrors";
510
+ "~orpc";
511
+ constructor(def) {
512
+ this["~orpc"] = def;
513
+ }
514
+ context() {
515
+ return this;
516
+ }
517
+ errors(errors) {
518
+ return new _BuilderWithErrors({
519
+ ...this["~orpc"],
520
+ errorMap: {
521
+ ...this["~orpc"].errorMap,
522
+ ...errors
523
+ }
524
+ });
525
+ }
526
+ middleware(middleware) {
527
+ return decorateMiddleware(middleware);
528
+ }
529
+ use(middleware) {
530
+ return new BuilderWithErrorsMiddlewares({
531
+ ...this["~orpc"],
532
+ inputValidationIndex: 1,
533
+ outputValidationIndex: 1,
534
+ middlewares: [middleware]
535
+ // FIXME: I believe we can remove `as any` here
536
+ });
537
+ }
538
+ route(route) {
539
+ return new ProcedureBuilder({
540
+ middlewares: [],
541
+ inputValidationIndex: 0,
542
+ outputValidationIndex: 0,
543
+ contract: new ContractProcedure2({
544
+ route,
545
+ InputSchema: void 0,
546
+ OutputSchema: void 0,
547
+ errorMap: this["~orpc"].errorMap
548
+ })
549
+ });
550
+ }
551
+ input(schema, example) {
552
+ return new ProcedureBuilderWithInput({
553
+ middlewares: [],
554
+ inputValidationIndex: 0,
555
+ outputValidationIndex: 0,
556
+ contract: new ContractProcedure2({
557
+ OutputSchema: void 0,
558
+ InputSchema: schema,
559
+ inputExample: example,
560
+ errorMap: this["~orpc"].errorMap
561
+ })
562
+ });
563
+ }
564
+ output(schema, example) {
565
+ return new ProcedureBuilderWithOutput({
566
+ middlewares: [],
567
+ inputValidationIndex: 0,
568
+ outputValidationIndex: 0,
569
+ contract: new ContractProcedure2({
570
+ InputSchema: void 0,
571
+ OutputSchema: schema,
572
+ outputExample: example,
573
+ errorMap: this["~orpc"].errorMap
574
+ })
575
+ });
576
+ }
577
+ handler(handler) {
578
+ return new DecoratedProcedure({
579
+ middlewares: [],
580
+ inputValidationIndex: 0,
581
+ outputValidationIndex: 0,
582
+ contract: new ContractProcedure2({
583
+ InputSchema: void 0,
584
+ OutputSchema: void 0,
585
+ errorMap: this["~orpc"].errorMap
586
+ }),
587
+ handler
588
+ });
589
+ }
590
+ prefix(prefix) {
591
+ return new RouterBuilder({
592
+ middlewares: [],
593
+ errorMap: this["~orpc"].errorMap,
594
+ prefix
595
+ });
596
+ }
597
+ tag(...tags) {
598
+ return new RouterBuilder({
599
+ middlewares: [],
600
+ errorMap: this["~orpc"].errorMap,
601
+ tags
602
+ });
603
+ }
604
+ router(router) {
605
+ return new RouterBuilder({
606
+ middlewares: [],
607
+ ...this["~orpc"]
608
+ }).router(router);
609
+ }
610
+ lazy(loader) {
611
+ return new RouterBuilder({
612
+ middlewares: [],
613
+ ...this["~orpc"]
614
+ }).lazy(loader);
615
+ }
616
+ };
617
+
618
+ // src/builder-with-middlewares.ts
619
+ import { ContractProcedure as ContractProcedure3 } from "@orpc/contract";
620
+
621
+ // src/implementer-chainable.ts
622
+ import { isContractProcedure } from "@orpc/contract";
623
+ import { createCallableObject } from "@orpc/shared";
624
+
267
625
  // src/router-implementer.ts
268
626
  var RouterImplementer = class _RouterImplementer {
269
627
  "~type" = "RouterImplementer";
@@ -278,31 +636,42 @@ var RouterImplementer = class _RouterImplementer {
278
636
  });
279
637
  }
280
638
  router(router) {
281
- const adapted = new RouterBuilder(this["~orpc"]).router(router);
639
+ const adapted = new RouterBuilder({
640
+ ...this["~orpc"],
641
+ errorMap: {}
642
+ }).router(router);
282
643
  const contracted = setRouterContract(adapted, this["~orpc"].contract);
283
644
  return contracted;
284
645
  }
285
646
  lazy(loader) {
286
- const adapted = new RouterBuilder(this["~orpc"]).lazy(loader);
647
+ const adapted = new RouterBuilder({
648
+ ...this["~orpc"],
649
+ errorMap: {}
650
+ }).lazy(loader);
287
651
  const contracted = setRouterContract(adapted, this["~orpc"].contract);
288
652
  return contracted;
289
653
  }
290
654
  };
291
655
 
292
656
  // src/implementer-chainable.ts
293
- function createChainableImplementer(contract, middlewares) {
657
+ function createChainableImplementer(contract, options) {
294
658
  if (isContractProcedure(contract)) {
295
659
  const implementer = new ProcedureImplementer({
296
660
  contract,
297
- middlewares
661
+ middlewares: options.middlewares,
662
+ inputValidationIndex: options.inputValidationIndex,
663
+ outputValidationIndex: options.outputValidationIndex
298
664
  });
299
665
  return implementer;
300
666
  }
301
667
  const chainable = {};
302
668
  for (const key in contract) {
303
- chainable[key] = createChainableImplementer(contract[key], middlewares);
669
+ chainable[key] = createChainableImplementer(contract[key], options);
304
670
  }
305
- const routerImplementer = new RouterImplementer({ contract, middlewares });
671
+ const routerImplementer = new RouterImplementer({
672
+ contract,
673
+ middlewares: options.middlewares
674
+ });
306
675
  const merged = new Proxy(chainable, {
307
676
  get(target, key) {
308
677
  const next = Reflect.get(target, key);
@@ -319,187 +688,257 @@ function createChainableImplementer(contract, middlewares) {
319
688
  return merged;
320
689
  }
321
690
 
322
- // src/procedure-builder.ts
323
- import {
324
- DecoratedContractProcedure as DecoratedContractProcedure2
325
- } from "@orpc/contract";
326
- var ProcedureBuilder = class _ProcedureBuilder {
327
- "~type" = "ProcedureBuilder";
691
+ // src/builder-with-middlewares.ts
692
+ var BuilderWithMiddlewares = class _BuilderWithMiddlewares {
693
+ "~type" = "BuilderHasMiddlewares";
328
694
  "~orpc";
329
695
  constructor(def) {
330
696
  this["~orpc"] = def;
331
697
  }
698
+ use(middleware) {
699
+ return new _BuilderWithMiddlewares({
700
+ ...this["~orpc"],
701
+ inputValidationIndex: this["~orpc"].inputValidationIndex + 1,
702
+ outputValidationIndex: this["~orpc"].outputValidationIndex + 1,
703
+ middlewares: [...this["~orpc"].middlewares, middleware]
704
+ });
705
+ }
706
+ errors(errors) {
707
+ return new BuilderWithErrorsMiddlewares({
708
+ ...this["~orpc"],
709
+ errorMap: errors
710
+ });
711
+ }
332
712
  route(route) {
333
- return new _ProcedureBuilder({
713
+ return new ProcedureBuilder({
334
714
  ...this["~orpc"],
335
- contract: DecoratedContractProcedure2.decorate(this["~orpc"].contract).route(route)
715
+ contract: new ContractProcedure3({
716
+ route,
717
+ InputSchema: void 0,
718
+ OutputSchema: void 0,
719
+ errorMap: {}
720
+ })
336
721
  });
337
722
  }
338
723
  input(schema, example) {
339
- return new _ProcedureBuilder({
724
+ return new ProcedureBuilderWithInput({
340
725
  ...this["~orpc"],
341
- contract: DecoratedContractProcedure2.decorate(this["~orpc"].contract).input(schema, example)
726
+ contract: new ContractProcedure3({
727
+ OutputSchema: void 0,
728
+ InputSchema: schema,
729
+ inputExample: example,
730
+ errorMap: {}
731
+ })
342
732
  });
343
733
  }
344
734
  output(schema, example) {
345
- return new _ProcedureBuilder({
735
+ return new ProcedureBuilderWithOutput({
346
736
  ...this["~orpc"],
347
- contract: DecoratedContractProcedure2.decorate(this["~orpc"].contract).output(schema, example)
737
+ contract: new ContractProcedure3({
738
+ InputSchema: void 0,
739
+ OutputSchema: schema,
740
+ outputExample: example,
741
+ errorMap: {}
742
+ })
348
743
  });
349
744
  }
350
- errors(errors) {
351
- return new _ProcedureBuilder({
745
+ handler(handler) {
746
+ return new DecoratedProcedure({
352
747
  ...this["~orpc"],
353
- contract: DecoratedContractProcedure2.decorate(this["~orpc"].contract).errors(errors)
748
+ contract: new ContractProcedure3({
749
+ InputSchema: void 0,
750
+ OutputSchema: void 0,
751
+ errorMap: {}
752
+ }),
753
+ handler
354
754
  });
355
755
  }
356
- use(middleware, mapInput) {
357
- if (!mapInput) {
358
- return new ProcedureImplementer({
359
- contract: this["~orpc"].contract,
360
- middlewares: this["~orpc"].middlewares
361
- }).use(middleware);
362
- }
363
- return new ProcedureImplementer({
364
- contract: this["~orpc"].contract,
365
- middlewares: this["~orpc"].middlewares
366
- }).use(middleware, mapInput);
756
+ prefix(prefix) {
757
+ return new RouterBuilder({
758
+ middlewares: this["~orpc"].middlewares,
759
+ errorMap: {},
760
+ prefix
761
+ });
367
762
  }
368
- handler(handler) {
369
- return decorateProcedure(new Procedure({
763
+ tag(...tags) {
764
+ return new RouterBuilder({
370
765
  middlewares: this["~orpc"].middlewares,
371
- contract: this["~orpc"].contract,
372
- handler
373
- }));
766
+ errorMap: {},
767
+ tags
768
+ });
769
+ }
770
+ router(router) {
771
+ return new RouterBuilder({
772
+ errorMap: {},
773
+ ...this["~orpc"]
774
+ }).router(router);
775
+ }
776
+ lazy(loader) {
777
+ return new RouterBuilder({
778
+ errorMap: {},
779
+ ...this["~orpc"]
780
+ }).lazy(loader);
781
+ }
782
+ contract(contract) {
783
+ return createChainableImplementer(contract, this["~orpc"]);
374
784
  }
375
785
  };
376
786
 
377
787
  // src/builder.ts
378
- var Builder = class _Builder {
788
+ var Builder = class {
379
789
  "~type" = "Builder";
380
790
  "~orpc";
381
791
  constructor(def) {
382
792
  this["~orpc"] = def;
383
793
  }
384
794
  context() {
385
- return new _Builder({});
795
+ return this;
796
+ }
797
+ middleware(middleware) {
798
+ return decorateMiddleware(middleware);
799
+ }
800
+ errors(errors) {
801
+ return new BuilderWithErrors({
802
+ errorMap: errors
803
+ });
386
804
  }
387
805
  use(middleware) {
388
- return new _Builder({
806
+ return new BuilderWithMiddlewares({
389
807
  ...this["~orpc"],
390
- middlewares: [...this["~orpc"].middlewares ?? [], middleware]
808
+ inputValidationIndex: 1,
809
+ outputValidationIndex: 1,
810
+ middlewares: [middleware]
811
+ // FIXME: I believe we can remove `as any` here
391
812
  });
392
813
  }
393
- middleware(middleware) {
394
- return decorateMiddleware(middleware);
395
- }
396
814
  route(route) {
397
815
  return new ProcedureBuilder({
398
- middlewares: this["~orpc"].middlewares,
399
- contract: new ContractProcedure({
816
+ middlewares: [],
817
+ inputValidationIndex: 0,
818
+ outputValidationIndex: 0,
819
+ contract: new ContractProcedure4({
400
820
  route,
401
821
  InputSchema: void 0,
402
822
  OutputSchema: void 0,
403
- errorMap: void 0
823
+ errorMap: {}
404
824
  })
405
825
  });
406
826
  }
407
827
  input(schema, example) {
408
- return new ProcedureBuilder({
409
- middlewares: this["~orpc"].middlewares,
410
- contract: new ContractProcedure({
828
+ return new ProcedureBuilderWithInput({
829
+ middlewares: [],
830
+ inputValidationIndex: 0,
831
+ outputValidationIndex: 0,
832
+ contract: new ContractProcedure4({
411
833
  OutputSchema: void 0,
412
834
  InputSchema: schema,
413
835
  inputExample: example,
414
- errorMap: void 0
836
+ errorMap: {}
415
837
  })
416
838
  });
417
839
  }
418
840
  output(schema, example) {
419
- return new ProcedureBuilder({
420
- middlewares: this["~orpc"].middlewares,
421
- contract: new ContractProcedure({
841
+ return new ProcedureBuilderWithOutput({
842
+ middlewares: [],
843
+ inputValidationIndex: 0,
844
+ outputValidationIndex: 0,
845
+ contract: new ContractProcedure4({
422
846
  InputSchema: void 0,
423
847
  OutputSchema: schema,
424
848
  outputExample: example,
425
- errorMap: void 0
426
- })
427
- });
428
- }
429
- errors(errors) {
430
- return new ProcedureBuilder({
431
- middlewares: this["~orpc"].middlewares,
432
- contract: new ContractProcedure({
433
- InputSchema: void 0,
434
- OutputSchema: void 0,
435
- errorMap: errors
849
+ errorMap: {}
436
850
  })
437
851
  });
438
852
  }
439
853
  handler(handler) {
440
- return decorateProcedure(new Procedure({
441
- middlewares: this["~orpc"].middlewares,
442
- contract: new ContractProcedure({
854
+ return new DecoratedProcedure({
855
+ middlewares: [],
856
+ inputValidationIndex: 0,
857
+ outputValidationIndex: 0,
858
+ contract: new ContractProcedure4({
443
859
  InputSchema: void 0,
444
860
  OutputSchema: void 0,
445
- errorMap: void 0
861
+ errorMap: {}
446
862
  }),
447
863
  handler
448
- }));
864
+ });
449
865
  }
450
866
  prefix(prefix) {
451
867
  return new RouterBuilder({
452
- middlewares: this["~orpc"].middlewares,
868
+ middlewares: [],
869
+ errorMap: {},
453
870
  prefix
454
871
  });
455
872
  }
456
873
  tag(...tags) {
457
874
  return new RouterBuilder({
458
- middlewares: this["~orpc"].middlewares,
875
+ middlewares: [],
876
+ errorMap: {},
459
877
  tags
460
878
  });
461
879
  }
462
880
  router(router) {
463
- return new RouterBuilder(this["~orpc"]).router(router);
881
+ return new RouterBuilder({
882
+ middlewares: [],
883
+ errorMap: []
884
+ }).router(router);
464
885
  }
465
886
  lazy(loader) {
466
- return new RouterBuilder(this["~orpc"]).lazy(loader);
887
+ return new RouterBuilder({
888
+ middlewares: [],
889
+ errorMap: {}
890
+ }).lazy(loader);
467
891
  }
468
892
  contract(contract) {
469
- return createChainableImplementer(contract, this["~orpc"].middlewares);
893
+ return createChainableImplementer(contract, {
894
+ middlewares: [],
895
+ inputValidationIndex: 0,
896
+ outputValidationIndex: 0
897
+ });
470
898
  }
471
899
  };
472
900
 
901
+ // src/procedure-utils.ts
902
+ function call(procedure, input, ...rest) {
903
+ return createProcedureClient(procedure, ...rest)(input);
904
+ }
905
+
906
+ // src/lazy-utils.ts
907
+ function createLazyProcedureFormAnyLazy(lazied) {
908
+ const lazyProcedure = lazy(async () => {
909
+ const { default: maybeProcedure } = await unlazy(flatLazy(lazied));
910
+ if (!isProcedure(maybeProcedure)) {
911
+ throw new Error(`
912
+ Expected a lazy<procedure> but got lazy<unknown>.
913
+ This should be caught by TypeScript compilation.
914
+ Please report this issue if this makes you feel uncomfortable.
915
+ `);
916
+ }
917
+ return { default: maybeProcedure };
918
+ });
919
+ return lazyProcedure;
920
+ }
921
+
473
922
  // src/router-client.ts
474
- function createRouterClient(options) {
475
- if (isProcedure(options.router)) {
476
- const caller = createProcedureClient({
477
- ...options,
478
- procedure: options.router,
479
- context: options.context,
480
- path: options.path
481
- });
923
+ function createRouterClient(router, ...rest) {
924
+ if (isProcedure(router)) {
925
+ const caller = createProcedureClient(router, ...rest);
482
926
  return caller;
483
927
  }
484
- const procedureCaller = isLazy(options.router) ? createProcedureClient({
485
- ...options,
486
- procedure: createLazyProcedureFormAnyLazy(options.router),
487
- context: options.context,
488
- path: options.path
489
- }) : {};
928
+ const procedureCaller = isLazy(router) ? createProcedureClient(createLazyProcedureFormAnyLazy(router), ...rest) : {};
490
929
  const recursive = new Proxy(procedureCaller, {
491
930
  get(target, key) {
492
931
  if (typeof key !== "string") {
493
932
  return Reflect.get(target, key);
494
933
  }
495
- const next = getRouterChild(options.router, key);
934
+ const next = getRouterChild(router, key);
496
935
  if (!next) {
497
936
  return Reflect.get(target, key);
498
937
  }
499
- return createRouterClient({
938
+ const [options] = rest;
939
+ return createRouterClient(next, {
500
940
  ...options,
501
- router: next,
502
- path: [...options.path ?? [], key]
941
+ path: [...options?.path ?? [], key]
503
942
  });
504
943
  }
505
944
  });
@@ -507,10 +946,11 @@ function createRouterClient(options) {
507
946
  }
508
947
 
509
948
  // src/index.ts
510
- import { configGlobal, fallbackToGlobalConfig, isDefinedError, ORPCError, safe } from "@orpc/contract";
949
+ import { configGlobal, fallbackToGlobalConfig, isDefinedError, ORPCError, safe, type } from "@orpc/contract";
511
950
  var os = new Builder({});
512
951
  export {
513
952
  Builder,
953
+ DecoratedProcedure,
514
954
  LAZY_LOADER_SYMBOL,
515
955
  ORPCError,
516
956
  Procedure,
@@ -518,6 +958,7 @@ export {
518
958
  ProcedureImplementer,
519
959
  RouterBuilder,
520
960
  RouterImplementer,
961
+ call,
521
962
  configGlobal,
522
963
  createChainableImplementer,
523
964
  createORPCErrorConstructorMap,
@@ -525,7 +966,6 @@ export {
525
966
  createRouterClient,
526
967
  decorateLazy,
527
968
  decorateMiddleware,
528
- decorateProcedure,
529
969
  deepSetLazyRouterPrefix,
530
970
  fallbackToGlobalConfig,
531
971
  flatLazy,
@@ -537,9 +977,11 @@ export {
537
977
  isProcedure,
538
978
  lazy,
539
979
  mergeContext,
980
+ middlewareOutputFn,
540
981
  os,
541
982
  safe,
542
983
  setRouterContract,
984
+ type,
543
985
  unlazy
544
986
  };
545
987
  //# sourceMappingURL=index.js.map