@orpc/server 0.29.0 → 0.30.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,7 +4,7 @@ import {
4
4
  getRouterChild,
5
5
  isProcedure,
6
6
  unlazy
7
- } from "./chunk-XDC42C3C.js";
7
+ } from "./chunk-SA7HGGVY.js";
8
8
 
9
9
  // src/adapters/fetch/super-json.ts
10
10
  var super_json_exports = {};
@@ -298,4 +298,4 @@ export {
298
298
  ORPCProcedureMatcher,
299
299
  RPCHandler
300
300
  };
301
- //# sourceMappingURL=chunk-VY6NXNQT.js.map
301
+ //# sourceMappingURL=chunk-2HRHHZJD.js.map
@@ -36,9 +36,6 @@ function isProcedure(item) {
36
36
  import { ORPCError } from "@orpc/contract";
37
37
  function createORPCErrorConstructorMap(errors) {
38
38
  const constructors = {};
39
- if (!errors) {
40
- return constructors;
41
- }
42
39
  for (const code in errors) {
43
40
  const config = errors[code];
44
41
  if (!config) {
@@ -86,6 +83,11 @@ function flatLazy(lazied) {
86
83
  return lazy(flattenLoader);
87
84
  }
88
85
 
86
+ // src/middleware.ts
87
+ function middlewareOutputFn(output) {
88
+ return { output, context: void 0 };
89
+ }
90
+
89
91
  // src/procedure-client.ts
90
92
  import { ORPCError as ORPCError2, validateORPCError, ValidationError } from "@orpc/contract";
91
93
  import { executeWithHooks, toError, value } from "@orpc/shared";
@@ -94,30 +96,22 @@ function createProcedureClient(lazyableProcedure, ...[options]) {
94
96
  const path = options?.path ?? [];
95
97
  const { default: procedure } = await unlazy(lazyableProcedure);
96
98
  const context = await value(options?.context, callerOptions?.context);
97
- const meta = {
99
+ const errors = createORPCErrorConstructorMap(procedure["~orpc"].contract["~orpc"].errorMap);
100
+ const executeOptions = {
101
+ input,
102
+ context,
103
+ errors,
98
104
  path,
99
105
  procedure,
100
106
  signal: callerOptions?.signal
101
107
  };
102
- const executeWithValidation = async () => {
103
- const validInput = await validateInput(procedure, input);
104
- const output = await executeMiddlewareChain({
105
- context,
106
- input: validInput,
107
- path,
108
- procedure,
109
- signal: callerOptions?.signal,
110
- errors: createORPCErrorConstructorMap(procedure["~orpc"].contract["~orpc"].errorMap)
111
- });
112
- return validateOutput(procedure, output);
113
- };
114
108
  try {
115
109
  const output = await executeWithHooks({
116
110
  hooks: options,
117
111
  input,
118
112
  context,
119
- meta,
120
- execute: executeWithValidation
113
+ meta: executeOptions,
114
+ execute: () => executeProcedureInternal(procedure, executeOptions)
121
115
  });
122
116
  return output;
123
117
  } catch (e) {
@@ -160,24 +154,44 @@ async function validateOutput(procedure, output) {
160
154
  }
161
155
  return result.value;
162
156
  }
163
- async function executeMiddlewareChain(opt) {
164
- const middlewares = opt.procedure["~orpc"].middlewares ?? [];
165
- let currentMidIndex = 0;
157
+ function executeMiddlewareChain(middlewares, opt, input) {
158
+ let currentIndex = 0;
166
159
  let currentContext = opt.context;
167
- const next = async (nextOptions) => {
168
- const mid = middlewares[currentMidIndex];
169
- currentMidIndex += 1;
160
+ const executeMiddlewareChain2 = async (nextOptions) => {
161
+ const mid = middlewares[currentIndex];
162
+ currentIndex += 1;
170
163
  currentContext = mergeContext(currentContext, nextOptions.context);
171
164
  if (mid) {
172
- return await mid({ ...opt, context: currentContext, next }, opt.input, (output) => ({ output, context: void 0 }));
165
+ return await mid({ ...opt, context: currentContext, next: executeMiddlewareChain2 }, input, middlewareOutputFn);
173
166
  }
174
- const result = {
175
- output: await opt.procedure["~orpc"].handler({ ...opt, context: currentContext }),
176
- context: currentContext
177
- };
178
- return result;
167
+ return opt.next({ context: currentContext });
168
+ };
169
+ return executeMiddlewareChain2({});
170
+ }
171
+ async function executeProcedureInternal(procedure, options) {
172
+ const executeHandler = async (context, input) => {
173
+ return await procedure["~orpc"].handler({ ...options, context, input });
174
+ };
175
+ const executePostMiddlewares = async (context, input) => {
176
+ const validatedInput = await validateInput(procedure, input);
177
+ const result2 = await executeMiddlewareChain(procedure["~orpc"].postMiddlewares, {
178
+ ...options,
179
+ context,
180
+ next: async ({ context: context2 }) => {
181
+ return middlewareOutputFn(
182
+ await executeHandler(context2, validatedInput)
183
+ );
184
+ }
185
+ }, validatedInput);
186
+ const validatedOutput = await validateOutput(procedure, result2.output);
187
+ return { ...result2, output: validatedOutput };
179
188
  };
180
- return (await next({})).output;
189
+ const result = await executeMiddlewareChain(procedure["~orpc"].preMiddlewares, {
190
+ ...options,
191
+ context: options.context,
192
+ next: ({ context }) => executePostMiddlewares(context, options.input)
193
+ }, options.input);
194
+ return result.output;
181
195
  }
182
196
 
183
197
  // src/router.ts
@@ -221,7 +235,8 @@ export {
221
235
  isLazy,
222
236
  unlazy,
223
237
  flatLazy,
238
+ middlewareOutputFn,
224
239
  createProcedureClient,
225
240
  getRouterChild
226
241
  };
227
- //# sourceMappingURL=chunk-XDC42C3C.js.map
242
+ //# sourceMappingURL=chunk-SA7HGGVY.js.map
package/dist/fetch.js CHANGED
@@ -4,8 +4,8 @@ import {
4
4
  ORPCProcedureMatcher,
5
5
  RPCHandler,
6
6
  super_json_exports
7
- } from "./chunk-VY6NXNQT.js";
8
- import "./chunk-XDC42C3C.js";
7
+ } from "./chunk-2HRHHZJD.js";
8
+ import "./chunk-SA7HGGVY.js";
9
9
  export {
10
10
  ORPCPayloadCodec,
11
11
  ORPCProcedureMatcher,
package/dist/hono.js CHANGED
@@ -4,8 +4,8 @@ import {
4
4
  ORPCProcedureMatcher,
5
5
  RPCHandler,
6
6
  super_json_exports
7
- } from "./chunk-VY6NXNQT.js";
8
- import "./chunk-XDC42C3C.js";
7
+ } from "./chunk-2HRHHZJD.js";
8
+ import "./chunk-SA7HGGVY.js";
9
9
 
10
10
  // src/adapters/hono/middleware.ts
11
11
  import { value } from "@orpc/shared";
package/dist/index.js CHANGED
@@ -9,8 +9,9 @@ import {
9
9
  isProcedure,
10
10
  lazy,
11
11
  mergeContext,
12
+ middlewareOutputFn,
12
13
  unlazy
13
- } from "./chunk-XDC42C3C.js";
14
+ } from "./chunk-SA7HGGVY.js";
14
15
 
15
16
  // src/builder.ts
16
17
  import { ContractProcedure } from "@orpc/contract";
@@ -64,11 +65,17 @@ var DecoratedProcedure = class _DecoratedProcedure extends Procedure {
64
65
  contract: DecoratedContractProcedure.decorate(this["~orpc"].contract).route(route)
65
66
  });
66
67
  }
68
+ errors(errors) {
69
+ return new _DecoratedProcedure({
70
+ ...this["~orpc"],
71
+ contract: DecoratedContractProcedure.decorate(this["~orpc"].contract).errors(errors)
72
+ });
73
+ }
67
74
  use(middleware, mapInput) {
68
75
  const middleware_ = mapInput ? decorateMiddleware(middleware).mapInput(mapInput) : middleware;
69
76
  return new _DecoratedProcedure({
70
77
  ...this["~orpc"],
71
- middlewares: [...this["~orpc"].middlewares ?? [], middleware_]
78
+ postMiddlewares: [...this["~orpc"].postMiddlewares, middleware_]
72
79
  });
73
80
  }
74
81
  unshiftTag(...tags) {
@@ -79,12 +86,12 @@ var DecoratedProcedure = class _DecoratedProcedure extends Procedure {
79
86
  }
80
87
  unshiftMiddleware(...middlewares) {
81
88
  const castedMiddlewares = middlewares;
82
- if (this["~orpc"].middlewares?.length) {
89
+ if (this["~orpc"].preMiddlewares.length) {
83
90
  let min = 0;
84
- for (let i = 0; i < this["~orpc"].middlewares.length; i++) {
85
- const index = castedMiddlewares.indexOf(this["~orpc"].middlewares[i], min);
91
+ for (let i = 0; i < this["~orpc"].preMiddlewares.length; i++) {
92
+ const index = castedMiddlewares.indexOf(this["~orpc"].preMiddlewares[i], min);
86
93
  if (index === -1) {
87
- castedMiddlewares.push(...this["~orpc"].middlewares.slice(i));
94
+ castedMiddlewares.push(...this["~orpc"].preMiddlewares.slice(i));
88
95
  break;
89
96
  }
90
97
  min = index + 1;
@@ -92,7 +99,7 @@ var DecoratedProcedure = class _DecoratedProcedure extends Procedure {
92
99
  }
93
100
  return new _DecoratedProcedure({
94
101
  ...this["~orpc"],
95
- middlewares: castedMiddlewares
102
+ preMiddlewares: castedMiddlewares
96
103
  });
97
104
  }
98
105
  /**
@@ -122,12 +129,13 @@ var ProcedureImplementer = class _ProcedureImplementer {
122
129
  const mappedMiddleware = mapInput ? decorateMiddleware(middleware).mapInput(mapInput) : middleware;
123
130
  return new _ProcedureImplementer({
124
131
  ...this["~orpc"],
125
- middlewares: [...this["~orpc"].middlewares ?? [], mappedMiddleware]
132
+ postMiddlewares: [...this["~orpc"].postMiddlewares, mappedMiddleware]
126
133
  });
127
134
  }
128
135
  handler(handler) {
129
136
  return new DecoratedProcedure({
130
- middlewares: this["~orpc"].middlewares,
137
+ postMiddlewares: this["~orpc"].postMiddlewares,
138
+ preMiddlewares: this["~orpc"].preMiddlewares,
131
139
  contract: this["~orpc"].contract,
132
140
  handler
133
141
  });
@@ -208,10 +216,19 @@ var RouterBuilder = class _RouterBuilder {
208
216
  tags: [...this["~orpc"].tags ?? [], ...tags]
209
217
  });
210
218
  }
219
+ errors(errors) {
220
+ return new _RouterBuilder({
221
+ ...this["~orpc"],
222
+ errorMap: {
223
+ ...this["~orpc"].errorMap,
224
+ ...errors
225
+ }
226
+ });
227
+ }
211
228
  use(middleware) {
212
229
  return new _RouterBuilder({
213
230
  ...this["~orpc"],
214
- middlewares: [...this["~orpc"].middlewares ?? [], middleware]
231
+ middlewares: [...this["~orpc"].middlewares, middleware]
215
232
  });
216
233
  }
217
234
  router(router) {
@@ -248,6 +265,9 @@ function adapt(item, options) {
248
265
  if (options.middlewares?.length) {
249
266
  decorated = decorated.unshiftMiddleware(...options.middlewares);
250
267
  }
268
+ if (Object.keys(options.errorMap).length) {
269
+ decorated = decorated.errors(options.errorMap);
270
+ }
251
271
  return decorated;
252
272
  }
253
273
  const adapted = {};
@@ -271,23 +291,30 @@ var RouterImplementer = class _RouterImplementer {
271
291
  });
272
292
  }
273
293
  router(router) {
274
- const adapted = new RouterBuilder(this["~orpc"]).router(router);
294
+ const adapted = new RouterBuilder({
295
+ ...this["~orpc"],
296
+ errorMap: {}
297
+ }).router(router);
275
298
  const contracted = setRouterContract(adapted, this["~orpc"].contract);
276
299
  return contracted;
277
300
  }
278
301
  lazy(loader) {
279
- const adapted = new RouterBuilder(this["~orpc"]).lazy(loader);
302
+ const adapted = new RouterBuilder({
303
+ ...this["~orpc"],
304
+ errorMap: {}
305
+ }).lazy(loader);
280
306
  const contracted = setRouterContract(adapted, this["~orpc"].contract);
281
307
  return contracted;
282
308
  }
283
309
  };
284
310
 
285
311
  // src/implementer-chainable.ts
286
- function createChainableImplementer(contract, middlewares) {
312
+ function createChainableImplementer(contract, middlewares = []) {
287
313
  if (isContractProcedure(contract)) {
288
314
  const implementer = new ProcedureImplementer({
289
315
  contract,
290
- middlewares
316
+ preMiddlewares: middlewares,
317
+ postMiddlewares: []
291
318
  });
292
319
  return implementer;
293
320
  }
@@ -350,17 +377,20 @@ var ProcedureBuilder = class _ProcedureBuilder {
350
377
  if (!mapInput) {
351
378
  return new ProcedureImplementer({
352
379
  contract: this["~orpc"].contract,
353
- middlewares: this["~orpc"].middlewares
380
+ preMiddlewares: this["~orpc"].middlewares,
381
+ postMiddlewares: []
354
382
  }).use(middleware);
355
383
  }
356
384
  return new ProcedureImplementer({
357
385
  contract: this["~orpc"].contract,
358
- middlewares: this["~orpc"].middlewares
386
+ preMiddlewares: this["~orpc"].middlewares,
387
+ postMiddlewares: []
359
388
  }).use(middleware, mapInput);
360
389
  }
361
390
  handler(handler) {
362
391
  return new DecoratedProcedure({
363
- middlewares: this["~orpc"].middlewares,
392
+ preMiddlewares: this["~orpc"].middlewares,
393
+ postMiddlewares: [],
364
394
  contract: this["~orpc"].contract,
365
395
  handler
366
396
  });
@@ -374,15 +404,29 @@ var Builder = class _Builder {
374
404
  constructor(def) {
375
405
  this["~orpc"] = def;
376
406
  }
407
+ // TODO: separate it
377
408
  context() {
378
- return new _Builder({});
409
+ return new _Builder({
410
+ middlewares: [],
411
+ errorMap: {}
412
+ });
379
413
  }
380
414
  use(middleware) {
381
415
  return new _Builder({
382
416
  ...this["~orpc"],
383
- middlewares: [...this["~orpc"].middlewares ?? [], middleware]
417
+ middlewares: [...this["~orpc"].middlewares, middleware]
384
418
  });
385
419
  }
420
+ errors(errors) {
421
+ return new _Builder({
422
+ ...this["~orpc"],
423
+ errorMap: {
424
+ ...this["~orpc"].errorMap,
425
+ ...errors
426
+ }
427
+ });
428
+ }
429
+ // TODO: not allow define middleware after has context, or anything else
386
430
  middleware(middleware) {
387
431
  return decorateMiddleware(middleware);
388
432
  }
@@ -393,7 +437,7 @@ var Builder = class _Builder {
393
437
  route,
394
438
  InputSchema: void 0,
395
439
  OutputSchema: void 0,
396
- errorMap: void 0
440
+ errorMap: this["~orpc"].errorMap
397
441
  })
398
442
  });
399
443
  }
@@ -404,7 +448,7 @@ var Builder = class _Builder {
404
448
  OutputSchema: void 0,
405
449
  InputSchema: schema,
406
450
  inputExample: example,
407
- errorMap: void 0
451
+ errorMap: this["~orpc"].errorMap
408
452
  })
409
453
  });
410
454
  }
@@ -415,27 +459,18 @@ var Builder = class _Builder {
415
459
  InputSchema: void 0,
416
460
  OutputSchema: schema,
417
461
  outputExample: example,
418
- errorMap: void 0
419
- })
420
- });
421
- }
422
- errors(errors) {
423
- return new ProcedureBuilder({
424
- middlewares: this["~orpc"].middlewares,
425
- contract: new ContractProcedure({
426
- InputSchema: void 0,
427
- OutputSchema: void 0,
428
- errorMap: errors
462
+ errorMap: this["~orpc"].errorMap
429
463
  })
430
464
  });
431
465
  }
432
466
  handler(handler) {
433
467
  return new DecoratedProcedure({
434
- middlewares: this["~orpc"].middlewares,
468
+ preMiddlewares: this["~orpc"].middlewares,
469
+ postMiddlewares: [],
435
470
  contract: new ContractProcedure({
436
471
  InputSchema: void 0,
437
472
  OutputSchema: void 0,
438
- errorMap: void 0
473
+ errorMap: this["~orpc"].errorMap
439
474
  }),
440
475
  handler
441
476
  });
@@ -443,12 +478,14 @@ var Builder = class _Builder {
443
478
  prefix(prefix) {
444
479
  return new RouterBuilder({
445
480
  middlewares: this["~orpc"].middlewares,
481
+ errorMap: this["~orpc"].errorMap,
446
482
  prefix
447
483
  });
448
484
  }
449
485
  tag(...tags) {
450
486
  return new RouterBuilder({
451
487
  middlewares: this["~orpc"].middlewares,
488
+ errorMap: this["~orpc"].errorMap,
452
489
  tags
453
490
  });
454
491
  }
@@ -512,7 +549,10 @@ function createRouterClient(router, ...rest) {
512
549
 
513
550
  // src/index.ts
514
551
  import { configGlobal, fallbackToGlobalConfig, isDefinedError, ORPCError, safe } from "@orpc/contract";
515
- var os = new Builder({});
552
+ var os = new Builder({
553
+ middlewares: [],
554
+ errorMap: {}
555
+ });
516
556
  export {
517
557
  Builder,
518
558
  DecoratedProcedure,
@@ -542,6 +582,7 @@ export {
542
582
  isProcedure,
543
583
  lazy,
544
584
  mergeContext,
585
+ middlewareOutputFn,
545
586
  os,
546
587
  safe,
547
588
  setRouterContract,
package/dist/next.js CHANGED
@@ -4,8 +4,8 @@ import {
4
4
  ORPCProcedureMatcher,
5
5
  RPCHandler,
6
6
  super_json_exports
7
- } from "./chunk-VY6NXNQT.js";
8
- import "./chunk-XDC42C3C.js";
7
+ } from "./chunk-2HRHHZJD.js";
8
+ import "./chunk-SA7HGGVY.js";
9
9
 
10
10
  // src/adapters/next/serve.ts
11
11
  import { value } from "@orpc/shared";
package/dist/node.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  RPCHandler
3
- } from "./chunk-VY6NXNQT.js";
4
- import "./chunk-XDC42C3C.js";
3
+ } from "./chunk-2HRHHZJD.js";
4
+ import "./chunk-SA7HGGVY.js";
5
5
 
6
6
  // src/adapters/node/request-listener.ts
7
7
  function createRequest(req, res) {
@@ -1,4 +1,5 @@
1
- import type { ANY_CONTRACT_PROCEDURE, ContractRouter, ErrorMap, HTTPPath, RouteOptions, Schema, SchemaInput, SchemaOutput } from '@orpc/contract';
1
+ import type { ContractRouter, ErrorMap, ErrorMapGuard, ErrorMapSuggestions, HTTPPath, RouteOptions, Schema, SchemaInput, SchemaOutput, StrictErrorMap } from '@orpc/contract';
2
+ import type { ORPCErrorConstructorMap } from './error';
2
3
  import type { FlattenLazy } from './lazy';
3
4
  import type { Middleware } from './middleware';
4
5
  import type { DecoratedMiddleware } from './middleware-decorated';
@@ -10,27 +11,28 @@ import { type ChainableImplementer } from './implementer-chainable';
10
11
  import { ProcedureBuilder } from './procedure-builder';
11
12
  import { DecoratedProcedure } from './procedure-decorated';
12
13
  import { RouterBuilder } from './router-builder';
13
- export interface BuilderDef<TContext extends Context, TExtraContext extends Context> {
14
- middlewares?: Middleware<MergeContext<TContext, TExtraContext>, Partial<TExtraContext> | undefined, unknown, any, Record<string, unknown>>[];
14
+ export interface BuilderDef<TContext extends Context, TExtraContext extends Context, TErrorMap extends ErrorMap> {
15
+ middlewares: Middleware<MergeContext<TContext, TExtraContext>, Partial<TExtraContext> | undefined, unknown, any, Record<never, never>>[];
16
+ errorMap: TErrorMap;
15
17
  }
16
- export declare class Builder<TContext extends Context, TExtraContext extends Context> {
18
+ export declare class Builder<TContext extends Context, TExtraContext extends Context, TErrorMap extends ErrorMap> {
17
19
  '~type': "Builder";
18
- '~orpc': BuilderDef<TContext, TExtraContext>;
19
- constructor(def: BuilderDef<TContext, TExtraContext>);
20
- context<UContext extends Context = WELL_CONTEXT>(): Builder<UContext, undefined>;
21
- use<U extends Context & Partial<MergeContext<TContext, TExtraContext>> | undefined = undefined>(middleware: Middleware<MergeContext<TContext, TExtraContext>, U, unknown, unknown, Record<string, unknown>>): Builder<TContext, MergeContext<TExtraContext, U>>;
22
- middleware<UExtraContext extends Context & Partial<MergeContext<TContext, TExtraContext>> | undefined = undefined, TInput = unknown, TOutput = any>(middleware: Middleware<MergeContext<TContext, TExtraContext>, UExtraContext, TInput, TOutput, Record<string, unknown>>): DecoratedMiddleware<MergeContext<TContext, TExtraContext>, UExtraContext, TInput, TOutput, Record<string, unknown>>;
23
- route(route: RouteOptions): ProcedureBuilder<TContext, TExtraContext, undefined, undefined, undefined>;
24
- input<USchema extends Schema>(schema: USchema, example?: SchemaInput<USchema>): ProcedureBuilder<TContext, TExtraContext, USchema, undefined, undefined>;
25
- output<USchema extends Schema>(schema: USchema, example?: SchemaOutput<USchema>): ProcedureBuilder<TContext, TExtraContext, undefined, USchema, undefined>;
26
- errors<UErrorMap extends ErrorMap>(errors: UErrorMap): ProcedureBuilder<TContext, TExtraContext, undefined, undefined, UErrorMap>;
27
- handler<UFuncOutput = undefined>(handler: ProcedureHandler<TContext, TExtraContext, undefined, undefined, UFuncOutput, undefined>): DecoratedProcedure<TContext, TExtraContext, undefined, undefined, UFuncOutput, undefined>;
28
- prefix(prefix: HTTPPath): RouterBuilder<TContext, TExtraContext>;
29
- tag(...tags: string[]): RouterBuilder<TContext, TExtraContext>;
30
- router<U extends Router<MergeContext<TContext, TExtraContext>, any>>(router: U): AdaptedRouter<TContext, U>;
31
- lazy<U extends Router<MergeContext<TContext, TExtraContext>, any>>(loader: () => Promise<{
20
+ '~orpc': BuilderDef<TContext, TExtraContext, TErrorMap>;
21
+ constructor(def: BuilderDef<TContext, TExtraContext, TErrorMap>);
22
+ context<UContext extends Context = WELL_CONTEXT>(): Builder<UContext, undefined, Record<never, never>>;
23
+ use<U extends Context & Partial<MergeContext<TContext, TExtraContext>> | undefined = undefined>(middleware: Middleware<MergeContext<TContext, TExtraContext>, U, unknown, unknown, ORPCErrorConstructorMap<TErrorMap>>): Builder<TContext, MergeContext<TExtraContext, U>, TErrorMap>;
24
+ errors<U extends ErrorMap & ErrorMapGuard<TErrorMap> & ErrorMapSuggestions>(errors: U): Builder<TContext, TExtraContext, TErrorMap & U>;
25
+ middleware<UExtraContext extends Context & Partial<MergeContext<TContext, TExtraContext>> | undefined = undefined, TInput = unknown, TOutput = any>(middleware: Middleware<MergeContext<TContext, TExtraContext>, UExtraContext, TInput, TOutput, Record<never, never>>): DecoratedMiddleware<MergeContext<TContext, TExtraContext>, UExtraContext, TInput, TOutput, Record<never, never>>;
26
+ route(route: RouteOptions): ProcedureBuilder<TContext, TExtraContext, undefined, undefined, TErrorMap>;
27
+ input<USchema extends Schema>(schema: USchema, example?: SchemaInput<USchema>): ProcedureBuilder<TContext, TExtraContext, USchema, undefined, TErrorMap>;
28
+ output<USchema extends Schema>(schema: USchema, example?: SchemaOutput<USchema>): ProcedureBuilder<TContext, TExtraContext, undefined, USchema, TErrorMap>;
29
+ handler<UFuncOutput = undefined>(handler: ProcedureHandler<TContext, TExtraContext, undefined, undefined, UFuncOutput, TErrorMap>): DecoratedProcedure<TContext, TExtraContext, undefined, undefined, UFuncOutput, TErrorMap>;
30
+ prefix(prefix: HTTPPath): RouterBuilder<TContext, TExtraContext, TErrorMap>;
31
+ tag(...tags: string[]): RouterBuilder<TContext, TExtraContext, TErrorMap>;
32
+ router<U extends Router<MergeContext<TContext, TExtraContext>, ContractRouter<ErrorMap & Partial<StrictErrorMap<TErrorMap>>>>>(router: U): AdaptedRouter<TContext, U, TErrorMap>;
33
+ lazy<U extends Router<MergeContext<TContext, TExtraContext>, ContractRouter<ErrorMap & Partial<StrictErrorMap<TErrorMap>>>>>(loader: () => Promise<{
32
34
  default: U;
33
- }>): AdaptedRouter<TContext, FlattenLazy<U>>;
34
- contract<U extends ANY_CONTRACT_PROCEDURE | ContractRouter>(contract: U): ChainableImplementer<TContext, TExtraContext, U>;
35
+ }>): AdaptedRouter<TContext, FlattenLazy<U>, TErrorMap>;
36
+ contract<U extends ContractRouter<any>>(contract: U): ChainableImplementer<TContext, TExtraContext, U>;
35
37
  }
36
38
  //# sourceMappingURL=builder.d.ts.map
@@ -3,7 +3,7 @@ import { ORPCError } from '@orpc/contract';
3
3
  export type ORPCErrorConstructorMapItemOptions<TData> = Omit<ORPCErrorOptions<any, TData>, 'defined' | 'code' | 'status'>;
4
4
  export type ORPCErrorConstructorMapItemRest<TData> = [options: ORPCErrorConstructorMapItemOptions<TData>] | (undefined extends TData ? [] : never);
5
5
  export type ORPCErrorConstructorMapItem<TCode extends string, TDataSchema extends Schema> = (...rest: ORPCErrorConstructorMapItemRest<SchemaInput<TDataSchema>>) => ORPCError<TCode, SchemaOutput<TDataSchema>>;
6
- export type ORPCErrorConstructorMap<T extends ErrorMap> = T extends undefined ? Record<string, unknown> : {
6
+ export type ORPCErrorConstructorMap<T extends ErrorMap> = {
7
7
  [K in keyof T]: K extends string ? T[K] extends ErrorMapItem<infer UInputSchema> ? ORPCErrorConstructorMapItem<K, UInputSchema> : never : never;
8
8
  };
9
9
  export declare function createORPCErrorConstructorMap<T extends ErrorMap>(errors: T): ORPCErrorConstructorMap<T>;
@@ -1,6 +1,6 @@
1
1
  import type { ContractRouter, HTTPPath } from '@orpc/contract';
2
- export declare function setRouterContract<T extends object>(obj: T, contract: ContractRouter): T;
3
- export declare function getRouterContract(obj: object): ContractRouter | undefined;
2
+ export declare function setRouterContract<T extends object>(obj: T, contract: ContractRouter<any>): T;
3
+ export declare function getRouterContract(obj: object): ContractRouter<any> | undefined;
4
4
  export declare function deepSetLazyRouterPrefix<T extends object>(router: T, prefix: HTTPPath): T;
5
5
  export declare function getLazyRouterPrefix(obj: object): HTTPPath | undefined;
6
6
  //# sourceMappingURL=hidden.d.ts.map
@@ -3,8 +3,8 @@ import type { Context, MergeContext, WELL_CONTEXT } from './types';
3
3
  import { type ContractProcedure, type ContractRouter } from '@orpc/contract';
4
4
  import { ProcedureImplementer } from './procedure-implementer';
5
5
  import { RouterImplementer } from './router-implementer';
6
- export type ChainableImplementer<TContext extends Context, TExtraContext extends Context, TContract extends ContractRouter> = TContract extends ContractProcedure<infer UInputSchema, infer UOutputSchema, infer UErrorMap> ? ProcedureImplementer<TContext, TExtraContext, UInputSchema, UOutputSchema, UErrorMap> : {
7
- [K in keyof TContract]: TContract[K] extends ContractRouter ? ChainableImplementer<TContext, TExtraContext, TContract[K]> : never;
6
+ export type ChainableImplementer<TContext extends Context, TExtraContext extends Context, TContract extends ContractRouter<any>> = TContract extends ContractProcedure<infer UInputSchema, infer UOutputSchema, infer UErrorMap> ? ProcedureImplementer<TContext, TExtraContext, UInputSchema, UOutputSchema, UErrorMap> : {
7
+ [K in keyof TContract]: TContract[K] extends ContractRouter<any> ? ChainableImplementer<TContext, TExtraContext, TContract[K]> : never;
8
8
  } & Omit<RouterImplementer<TContext, TExtraContext, TContract>, '~type' | '~orpc'>;
9
- export declare function createChainableImplementer<TContext extends Context = WELL_CONTEXT, TExtraContext extends Context = undefined, TContract extends ContractRouter = any>(contract: TContract, middlewares?: Middleware<MergeContext<TContext, TExtraContext>, Partial<TExtraContext> | undefined, unknown, any, Record<string, unknown>>[]): ChainableImplementer<TContext, TExtraContext, TContract>;
9
+ export declare function createChainableImplementer<TContext extends Context = WELL_CONTEXT, TExtraContext extends Context = undefined, TContract extends ContractRouter<any> = any>(contract: TContract, middlewares?: Middleware<MergeContext<TContext, TExtraContext>, Partial<TExtraContext> | undefined, unknown, any, Record<never, never>>[]): ChainableImplementer<TContext, TExtraContext, TContract>;
10
10
  //# sourceMappingURL=implementer-chainable.d.ts.map
@@ -21,5 +21,5 @@ export * from './router-implementer';
21
21
  export * from './types';
22
22
  export * from './utils';
23
23
  export { configGlobal, fallbackToGlobalConfig, isDefinedError, ORPCError, safe } from '@orpc/contract';
24
- export declare const os: Builder<WELL_CONTEXT, undefined>;
24
+ export declare const os: Builder<WELL_CONTEXT, undefined, Record<never, never>>;
25
25
  //# sourceMappingURL=index.d.ts.map
@@ -32,4 +32,5 @@ export interface MapInputMiddleware<TInput, TMappedInput> {
32
32
  (input: TInput): TMappedInput;
33
33
  }
34
34
  export type ANY_MAP_INPUT_MIDDLEWARE = MapInputMiddleware<any, any>;
35
+ export declare function middlewareOutputFn<TOutput>(output: TOutput): MiddlewareResult<undefined, TOutput>;
35
36
  //# sourceMappingURL=middleware.d.ts.map
@@ -1,4 +1,4 @@
1
- import type { ContractProcedure, ErrorMap, RouteOptions, Schema, SchemaInput, SchemaOutput } from '@orpc/contract';
1
+ import type { ContractProcedure, ErrorMap, ErrorMapGuard, ErrorMapSuggestions, RouteOptions, Schema, SchemaInput, SchemaOutput } from '@orpc/contract';
2
2
  import type { ORPCErrorConstructorMap } from './error';
3
3
  import type { MapInputMiddleware, Middleware } from './middleware';
4
4
  import type { ProcedureHandler } from './procedure';
@@ -7,7 +7,7 @@ import { DecoratedProcedure } from './procedure-decorated';
7
7
  import { ProcedureImplementer } from './procedure-implementer';
8
8
  export interface ProcedureBuilderDef<TContext extends Context, TExtraContext extends Context, TInputSchema extends Schema, TOutputSchema extends Schema, TErrorMap extends ErrorMap> {
9
9
  contract: ContractProcedure<TInputSchema, TOutputSchema, TErrorMap>;
10
- middlewares?: Middleware<MergeContext<TContext, TExtraContext>, Partial<TExtraContext> | undefined, unknown, any, Record<string, unknown>>[];
10
+ middlewares: Middleware<MergeContext<TContext, TExtraContext>, Partial<TExtraContext> | undefined, unknown, any, Record<never, never>>[];
11
11
  }
12
12
  export declare class ProcedureBuilder<TContext extends Context, TExtraContext extends Context, TInputSchema extends Schema, TOutputSchema extends Schema, TErrorMap extends ErrorMap> {
13
13
  '~type': "ProcedureBuilder";
@@ -16,7 +16,7 @@ export declare class ProcedureBuilder<TContext extends Context, TExtraContext ex
16
16
  route(route: RouteOptions): ProcedureBuilder<TContext, TExtraContext, TInputSchema, TOutputSchema, TErrorMap>;
17
17
  input<U extends Schema>(schema: U, example?: SchemaInput<U>): ProcedureBuilder<TContext, TExtraContext, U, TOutputSchema, TErrorMap>;
18
18
  output<U extends Schema>(schema: U, example?: SchemaOutput<U>): ProcedureBuilder<TContext, TExtraContext, TInputSchema, U, TErrorMap>;
19
- errors<UErrorMap extends ErrorMap>(errors: UErrorMap): ProcedureBuilder<TContext, TExtraContext, TInputSchema, TOutputSchema, UErrorMap>;
19
+ errors<U extends ErrorMap & ErrorMapGuard<TErrorMap> & ErrorMapSuggestions>(errors: U): ProcedureBuilder<TContext, TExtraContext, TInputSchema, TOutputSchema, TErrorMap & U>;
20
20
  use<U extends Context & Partial<MergeContext<TContext, TExtraContext>> | undefined = undefined>(middleware: Middleware<MergeContext<TContext, TExtraContext>, U, SchemaOutput<TInputSchema>, SchemaInput<TOutputSchema>, ORPCErrorConstructorMap<TErrorMap>>): ProcedureImplementer<TContext, MergeContext<TExtraContext, U>, TInputSchema, TOutputSchema, TErrorMap>;
21
21
  use<UExtra extends Context & Partial<MergeContext<TContext, TExtraContext>> | undefined = undefined, UInput = unknown>(middleware: Middleware<MergeContext<TContext, TExtraContext>, UExtra, UInput, SchemaInput<TOutputSchema>, ORPCErrorConstructorMap<TErrorMap>>, mapInput: MapInputMiddleware<SchemaOutput<TInputSchema>, UInput>): ProcedureImplementer<TContext, MergeContext<TExtraContext, UExtra>, TInputSchema, TOutputSchema, TErrorMap>;
22
22
  handler<UFuncOutput extends SchemaInput<TOutputSchema>>(handler: ProcedureHandler<TContext, TExtraContext, TInputSchema, TOutputSchema, UFuncOutput, TErrorMap>): DecoratedProcedure<TContext, TExtraContext, TInputSchema, TOutputSchema, UFuncOutput, TErrorMap>;
@@ -1,4 +1,4 @@
1
- import type { ClientRest, ErrorMap, HTTPPath, RouteOptions, Schema, SchemaInput, SchemaOutput } from '@orpc/contract';
1
+ import type { ClientRest, ErrorMap, ErrorMapGuard, ErrorMapSuggestions, HTTPPath, RouteOptions, Schema, SchemaInput, SchemaOutput } from '@orpc/contract';
2
2
  import type { ORPCErrorConstructorMap } from './error';
3
3
  import type { MapInputMiddleware, Middleware } from './middleware';
4
4
  import type { CreateProcedureClientRest, ProcedureClient } from './procedure-client';
@@ -8,10 +8,11 @@ export declare class DecoratedProcedure<TContext extends Context, TExtraContext
8
8
  static decorate<UContext extends Context, UExtraContext extends Context, UInputSchema extends Schema, UOutputSchema extends Schema, UHandlerOutput extends SchemaInput<UOutputSchema>, UErrorMap extends ErrorMap>(procedure: Procedure<UContext, UExtraContext, UInputSchema, UOutputSchema, UHandlerOutput, UErrorMap>): DecoratedProcedure<any, any, any, any, any, any> | DecoratedProcedure<UContext, UExtraContext, UInputSchema, UOutputSchema, UHandlerOutput, UErrorMap>;
9
9
  prefix(prefix: HTTPPath): DecoratedProcedure<TContext, TExtraContext, TInputSchema, TOutputSchema, THandlerOutput, TErrorMap>;
10
10
  route(route: RouteOptions): DecoratedProcedure<TContext, TExtraContext, TInputSchema, TOutputSchema, THandlerOutput, TErrorMap>;
11
- use<U extends Context & Partial<MergeContext<TContext, TExtraContext>> | undefined = undefined>(middleware: Middleware<MergeContext<TContext, TExtraContext>, U, SchemaOutput<TInputSchema>, SchemaInput<TOutputSchema, THandlerOutput>, ORPCErrorConstructorMap<TErrorMap>>): DecoratedProcedure<TContext, MergeContext<TExtraContext, U>, TInputSchema, TOutputSchema, THandlerOutput, TErrorMap>;
12
- use<UExtra extends Context & Partial<MergeContext<TContext, TExtraContext>> | undefined = undefined, UInput = unknown>(middleware: Middleware<MergeContext<TContext, TExtraContext>, UExtra, UInput, SchemaInput<TOutputSchema, THandlerOutput>, ORPCErrorConstructorMap<TErrorMap>>, mapInput: MapInputMiddleware<SchemaOutput<TInputSchema, THandlerOutput>, UInput>): DecoratedProcedure<TContext, MergeContext<TExtraContext, UExtra>, TInputSchema, TOutputSchema, THandlerOutput, TErrorMap>;
11
+ errors<U extends ErrorMap & ErrorMapGuard<TErrorMap> & ErrorMapSuggestions>(errors: U): DecoratedProcedure<TContext, TExtraContext, TInputSchema, TOutputSchema, THandlerOutput, TErrorMap & U>;
12
+ use<U extends Context & Partial<MergeContext<TContext, TExtraContext>> | undefined = undefined>(middleware: Middleware<MergeContext<TContext, TExtraContext>, U, SchemaOutput<TInputSchema>, THandlerOutput, ORPCErrorConstructorMap<TErrorMap>>): DecoratedProcedure<TContext, MergeContext<TExtraContext, U>, TInputSchema, TOutputSchema, THandlerOutput, TErrorMap>;
13
+ use<UExtra extends Context & Partial<MergeContext<TContext, TExtraContext>> | undefined = undefined, UInput = unknown>(middleware: Middleware<MergeContext<TContext, TExtraContext>, UExtra, UInput, THandlerOutput, ORPCErrorConstructorMap<TErrorMap>>, mapInput: MapInputMiddleware<SchemaOutput<TInputSchema, THandlerOutput>, UInput>): DecoratedProcedure<TContext, MergeContext<TExtraContext, UExtra>, TInputSchema, TOutputSchema, THandlerOutput, TErrorMap>;
13
14
  unshiftTag(...tags: string[]): DecoratedProcedure<TContext, TExtraContext, TInputSchema, TOutputSchema, THandlerOutput, TErrorMap>;
14
- unshiftMiddleware<U extends Context & Partial<MergeContext<TContext, TExtraContext>> | undefined = undefined>(...middlewares: Middleware<TContext, U, SchemaOutput<TInputSchema>, SchemaInput<TOutputSchema, THandlerOutput>, ORPCErrorConstructorMap<TErrorMap>>[]): DecoratedProcedure<TContext, TExtraContext, TInputSchema, TOutputSchema, THandlerOutput, TErrorMap>;
15
+ unshiftMiddleware(...middlewares: Middleware<TContext, Context & Partial<MergeContext<TContext, TExtraContext>> | undefined, unknown, SchemaOutput<TOutputSchema, THandlerOutput>, ORPCErrorConstructorMap<TErrorMap>>[]): DecoratedProcedure<TContext, TExtraContext, TInputSchema, TOutputSchema, THandlerOutput, TErrorMap>;
15
16
  /**
16
17
  * Make this procedure callable (works like a function while still being a procedure).
17
18
  * **Note**: this only takes effect when this method is called at the end of the chain.
@@ -6,7 +6,8 @@ import type { Context, MergeContext } from './types';
6
6
  import { DecoratedProcedure } from './procedure-decorated';
7
7
  export type ProcedureImplementerDef<TContext extends Context, TExtraContext extends Context, TInputSchema extends Schema, TOutputSchema extends Schema, TErrorMap extends ErrorMap> = {
8
8
  contract: ContractProcedure<TInputSchema, TOutputSchema, TErrorMap>;
9
- middlewares?: Middleware<MergeContext<TContext, TExtraContext>, Partial<TExtraContext> | undefined, SchemaOutput<TInputSchema>, SchemaInput<TOutputSchema>, ORPCErrorConstructorMap<TErrorMap>>[];
9
+ preMiddlewares: Middleware<MergeContext<TContext, TExtraContext>, Partial<TExtraContext> | undefined, unknown, any, Record<never, never>>[];
10
+ postMiddlewares: Middleware<MergeContext<TContext, TExtraContext>, Partial<TExtraContext> | undefined, SchemaOutput<TInputSchema>, SchemaInput<TOutputSchema>, Record<never, never>>[];
10
11
  };
11
12
  export declare class ProcedureImplementer<TContext extends Context, TExtraContext extends Context, TInputSchema extends Schema, TOutputSchema extends Schema, TErrorMap extends ErrorMap> {
12
13
  '~type': "ProcedureImplementer";
@@ -16,7 +16,7 @@ export interface ProcedureHandler<TContext extends Context, TExtraContext extend
16
16
  (opt: ProcedureHandlerOptions<TContext, TExtraContext, SchemaOutput<TInputSchema>, ORPCErrorConstructorMap<TErrorMap>>): Promisable<SchemaInput<TOutputSchema, THandlerOutput>>;
17
17
  }
18
18
  /**
19
- * Why is `ErrorConstructorMap` passed to `Middleware` as `any`?
19
+ * Why is `ErrorConstructorMap` passed to `postMiddlewares` as `Record<never, never>`?
20
20
  * Why is `ErrorMap` passed to `ProcedureHandler` as `any`?
21
21
  *
22
22
  * Passing `ErrorMap/ErrorConstructorMap` directly to `Middleware/ProcedureHandler`
@@ -27,7 +27,8 @@ export interface ProcedureHandler<TContext extends Context, TExtraContext extend
27
27
  * The only downside is that direct access to them requires careful type checking to ensure safety.
28
28
  */
29
29
  export interface ProcedureDef<TContext extends Context, TExtraContext extends Context, TInputSchema extends Schema, TOutputSchema extends Schema, THandlerOutput extends SchemaInput<TOutputSchema>, TErrorMap extends ErrorMap> {
30
- middlewares?: Middleware<MergeContext<TContext, TExtraContext>, Partial<TExtraContext> | undefined, SchemaOutput<TInputSchema>, any, any>[];
30
+ preMiddlewares: Middleware<MergeContext<TContext, TExtraContext>, Partial<TExtraContext> | undefined, unknown, any, Record<never, never>>[];
31
+ postMiddlewares: Middleware<MergeContext<TContext, TExtraContext>, Partial<TExtraContext> | undefined, SchemaOutput<TInputSchema>, SchemaInput<TOutputSchema>, Record<never, never>>[];
31
32
  contract: ContractProcedure<TInputSchema, TOutputSchema, TErrorMap>;
32
33
  handler: ProcedureHandler<TContext, TExtraContext, TInputSchema, TOutputSchema, THandlerOutput, any>;
33
34
  }
@@ -1,4 +1,4 @@
1
- import type { HTTPPath } from '@orpc/contract';
1
+ import type { ContractRouter, ErrorMap, ErrorMapGuard, ErrorMapSuggestions, HTTPPath, StrictErrorMap } from '@orpc/contract';
2
2
  import type { FlattenLazy, Lazy } from './lazy';
3
3
  import type { Middleware } from './middleware';
4
4
  import type { Procedure } from './procedure';
@@ -6,24 +6,26 @@ import type { ANY_ROUTER, Router } from './router';
6
6
  import type { Context, MergeContext } from './types';
7
7
  import { type DecoratedLazy } from './lazy-decorated';
8
8
  import { DecoratedProcedure } from './procedure-decorated';
9
- export type AdaptedRouter<TContext extends Context, TRouter extends ANY_ROUTER> = TRouter extends Lazy<infer U extends ANY_ROUTER> ? DecoratedLazy<AdaptedRouter<TContext, U>> : TRouter extends Procedure<any, infer UExtraContext, infer UInputSchema, infer UOutputSchema, infer UFuncOutput, infer UErrorMap> ? DecoratedProcedure<TContext, UExtraContext, UInputSchema, UOutputSchema, UFuncOutput, UErrorMap> : {
10
- [K in keyof TRouter]: TRouter[K] extends ANY_ROUTER ? AdaptedRouter<TContext, TRouter[K]> : never;
9
+ export type AdaptedRouter<TContext extends Context, TRouter extends ANY_ROUTER, TErrorMapExtra extends ErrorMap> = TRouter extends Lazy<infer U extends ANY_ROUTER> ? DecoratedLazy<AdaptedRouter<TContext, U, TErrorMapExtra>> : TRouter extends Procedure<any, infer UExtraContext, infer UInputSchema, infer UOutputSchema, infer UFuncOutput, infer UErrorMap> ? DecoratedProcedure<TContext, UExtraContext, UInputSchema, UOutputSchema, UFuncOutput, UErrorMap & TErrorMapExtra> : {
10
+ [K in keyof TRouter]: TRouter[K] extends ANY_ROUTER ? AdaptedRouter<TContext, TRouter[K], TErrorMapExtra> : never;
11
11
  };
12
- export type RouterBuilderDef<TContext extends Context, TExtraContext extends Context> = {
12
+ export type RouterBuilderDef<TContext extends Context, TExtraContext extends Context, TErrorMap extends ErrorMap> = {
13
13
  prefix?: HTTPPath;
14
14
  tags?: readonly string[];
15
- middlewares?: Middleware<MergeContext<TContext, TExtraContext>, Partial<TExtraContext> | undefined, unknown, any, Record<string, unknown>>[];
15
+ middlewares: Middleware<MergeContext<TContext, TExtraContext>, Partial<TExtraContext> | undefined, unknown, any, Record<never, never>>[];
16
+ errorMap: TErrorMap;
16
17
  };
17
- export declare class RouterBuilder<TContext extends Context, TExtraContext extends Context> {
18
+ export declare class RouterBuilder<TContext extends Context, TExtraContext extends Context, TErrorMap extends ErrorMap> {
18
19
  '~type': "RouterBuilder";
19
- '~orpc': RouterBuilderDef<TContext, TExtraContext>;
20
- constructor(def: RouterBuilderDef<TContext, TExtraContext>);
21
- prefix(prefix: HTTPPath): RouterBuilder<TContext, TExtraContext>;
22
- tag(...tags: string[]): RouterBuilder<TContext, TExtraContext>;
23
- use<U extends Context & Partial<MergeContext<TContext, TExtraContext>> | undefined = undefined>(middleware: Middleware<MergeContext<TContext, TExtraContext>, U, unknown, unknown, Record<string, unknown>>): RouterBuilder<TContext, MergeContext<TExtraContext, U>>;
24
- router<U extends Router<MergeContext<TContext, TExtraContext>, any>>(router: U): AdaptedRouter<TContext, U>;
25
- lazy<U extends Router<MergeContext<TContext, TExtraContext>, any>>(loader: () => Promise<{
20
+ '~orpc': RouterBuilderDef<TContext, TExtraContext, TErrorMap>;
21
+ constructor(def: RouterBuilderDef<TContext, TExtraContext, TErrorMap>);
22
+ prefix(prefix: HTTPPath): RouterBuilder<TContext, TExtraContext, TErrorMap>;
23
+ tag(...tags: string[]): RouterBuilder<TContext, TExtraContext, TErrorMap>;
24
+ errors<U extends ErrorMap & ErrorMapGuard<TErrorMap> & ErrorMapSuggestions>(errors: U): RouterBuilder<TContext, TExtraContext, TErrorMap & U>;
25
+ use<U extends Context & Partial<MergeContext<TContext, TExtraContext>> | undefined = undefined>(middleware: Middleware<MergeContext<TContext, TExtraContext>, U, unknown, unknown, Record<never, never>>): RouterBuilder<TContext, MergeContext<TExtraContext, U>, TErrorMap>;
26
+ router<U extends Router<MergeContext<TContext, TExtraContext>, ContractRouter<ErrorMap & Partial<StrictErrorMap<TErrorMap>>>>>(router: U): AdaptedRouter<TContext, U, TErrorMap>;
27
+ lazy<U extends Router<MergeContext<TContext, TExtraContext>, ContractRouter<ErrorMap & Partial<StrictErrorMap<TErrorMap>>>>>(loader: () => Promise<{
26
28
  default: U;
27
- }>): AdaptedRouter<TContext, FlattenLazy<U>>;
29
+ }>): AdaptedRouter<TContext, FlattenLazy<U>, TErrorMap>;
28
30
  }
29
31
  //# sourceMappingURL=router-builder.d.ts.map
@@ -4,18 +4,18 @@ import type { Middleware } from './middleware';
4
4
  import type { Router } from './router';
5
5
  import type { AdaptedRouter } from './router-builder';
6
6
  import type { Context, MergeContext } from './types';
7
- export interface RouterImplementerDef<TContext extends Context, TExtraContext extends Context, TContract extends ContractRouter> {
8
- middlewares?: Middleware<MergeContext<TContext, TExtraContext>, Partial<TExtraContext> | undefined, unknown, any, Record<string, unknown>>[];
7
+ export interface RouterImplementerDef<TContext extends Context, TExtraContext extends Context, TContract extends ContractRouter<any>> {
8
+ middlewares: Middleware<MergeContext<TContext, TExtraContext>, Partial<TExtraContext> | undefined, unknown, any, Record<never, never>>[];
9
9
  contract: TContract;
10
10
  }
11
- export declare class RouterImplementer<TContext extends Context, TExtraContext extends Context, TContract extends ContractRouter> {
11
+ export declare class RouterImplementer<TContext extends Context, TExtraContext extends Context, TContract extends ContractRouter<any>> {
12
12
  '~type': "RouterImplementer";
13
13
  '~orpc': RouterImplementerDef<TContext, TExtraContext, TContract>;
14
14
  constructor(def: RouterImplementerDef<TContext, TExtraContext, TContract>);
15
- use<U extends Context & Partial<MergeContext<TContext, TExtraContext>> | undefined = undefined>(middleware: Middleware<MergeContext<TContext, TExtraContext>, U, unknown, unknown, Record<string, unknown>>): RouterImplementer<TContext, MergeContext<TExtraContext, U>, TContract>;
16
- router<U extends Router<MergeContext<TContext, TExtraContext>, TContract>>(router: U): AdaptedRouter<TContext, U>;
15
+ use<U extends Context & Partial<MergeContext<TContext, TExtraContext>> | undefined = undefined>(middleware: Middleware<MergeContext<TContext, TExtraContext>, U, unknown, unknown, Record<never, never>>): RouterImplementer<TContext, MergeContext<TExtraContext, U>, TContract>;
16
+ router<U extends Router<MergeContext<TContext, TExtraContext>, TContract>>(router: U): AdaptedRouter<TContext, U, Record<never, never>>;
17
17
  lazy<U extends Router<MergeContext<TContext, TExtraContext>, TContract>>(loader: () => Promise<{
18
18
  default: U;
19
- }>): AdaptedRouter<TContext, FlattenLazy<U>>;
19
+ }>): AdaptedRouter<TContext, FlattenLazy<U>, Record<never, never>>;
20
20
  }
21
21
  //# sourceMappingURL=router-implementer.d.ts.map
@@ -2,8 +2,8 @@ import type { ContractProcedure, ContractRouter, SchemaInput, SchemaOutput } fro
2
2
  import type { ANY_LAZY, Lazy, Lazyable } from './lazy';
3
3
  import type { ANY_PROCEDURE, Procedure } from './procedure';
4
4
  import type { Context } from './types';
5
- export type Router<TContext extends Context, TContract extends ContractRouter> = Lazyable<TContract extends ContractProcedure<infer UInputSchema, infer UOutputSchema, infer UErrorMap> ? Procedure<TContext, any, UInputSchema, UOutputSchema, any, UErrorMap> : {
6
- [K in keyof TContract]: TContract[K] extends ContractRouter ? Router<TContext, TContract[K]> : never;
5
+ export type Router<TContext extends Context, TContract extends ContractRouter<any>> = Lazyable<TContract extends ContractProcedure<infer UInputSchema, infer UOutputSchema, infer UErrorMap> ? Procedure<TContext, any, UInputSchema, UOutputSchema, any, UErrorMap> : {
6
+ [K in keyof TContract]: TContract[K] extends ContractRouter<any> ? Router<TContext, TContract[K]> : never;
7
7
  }>;
8
8
  export type ANY_ROUTER = Router<any, any>;
9
9
  export type InferRouterInputs<T extends ANY_ROUTER> = T extends Lazy<infer U extends ANY_ROUTER> ? InferRouterInputs<U> : T extends Procedure<any, any, infer UInputSchema, any, any, any> ? SchemaInput<UInputSchema> : {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@orpc/server",
3
3
  "type": "module",
4
- "version": "0.29.0",
4
+ "version": "0.30.0",
5
5
  "license": "MIT",
6
6
  "homepage": "https://orpc.unnoq.com",
7
7
  "repository": {
@@ -53,8 +53,8 @@
53
53
  "next": ">=14.0.0"
54
54
  },
55
55
  "dependencies": {
56
- "@orpc/contract": "0.29.0",
57
- "@orpc/shared": "0.29.0"
56
+ "@orpc/contract": "0.30.0",
57
+ "@orpc/shared": "0.30.0"
58
58
  },
59
59
  "scripts": {
60
60
  "build": "tsup --onSuccess='tsc -b --noCheck'",