@orpc/server 0.29.0 → 0.30.0

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.
@@ -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'",