@orpc/server 0.0.0-next.ef3ba82 → 0.0.0-next.fd1db03

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