@orpc/server 0.0.0-next.e9dc36e → 0.0.0-next.ed15210

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