@orpc/server 0.0.0-next.3f3f19b → 0.0.0-next.4220427

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