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

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 (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