@orpc/server 0.0.0-next.c6c659d → 0.0.0-next.cba521d

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-ZBJYYEII.js";
7
+ } from "./chunk-OUPZ7QGV.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-MB74GD7C.js.map
301
+ //# sourceMappingURL=chunk-3EVCPLVI.js.map
@@ -86,6 +86,11 @@ function flatLazy(lazied) {
86
86
  return lazy(flattenLoader);
87
87
  }
88
88
 
89
+ // src/middleware.ts
90
+ function middlewareOutputFn(output) {
91
+ return { output, context: void 0 };
92
+ }
93
+
89
94
  // src/procedure-client.ts
90
95
  import { ORPCError as ORPCError2, validateORPCError, ValidationError } from "@orpc/contract";
91
96
  import { executeWithHooks, toError, value } from "@orpc/shared";
@@ -94,30 +99,22 @@ function createProcedureClient(lazyableProcedure, ...[options]) {
94
99
  const path = options?.path ?? [];
95
100
  const { default: procedure } = await unlazy(lazyableProcedure);
96
101
  const context = await value(options?.context, callerOptions?.context);
97
- const meta = {
102
+ const errors = createORPCErrorConstructorMap(procedure["~orpc"].contract["~orpc"].errorMap);
103
+ const executeOptions = {
104
+ input,
105
+ context,
106
+ errors,
98
107
  path,
99
108
  procedure,
100
109
  signal: callerOptions?.signal
101
110
  };
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
111
  try {
115
112
  const output = await executeWithHooks({
116
113
  hooks: options,
117
114
  input,
118
115
  context,
119
- meta,
120
- execute: executeWithValidation
116
+ meta: executeOptions,
117
+ execute: () => executeProcedureInternal(procedure, executeOptions)
121
118
  });
122
119
  return output;
123
120
  } catch (e) {
@@ -160,24 +157,44 @@ async function validateOutput(procedure, output) {
160
157
  }
161
158
  return result.value;
162
159
  }
163
- async function executeMiddlewareChain(opt) {
164
- const middlewares = opt.procedure["~orpc"].middlewares ?? [];
165
- let currentMidIndex = 0;
160
+ function executeMiddlewareChain(middlewares, opt, input) {
161
+ let currentIndex = 0;
166
162
  let currentContext = opt.context;
167
- const next = async (nextOptions) => {
168
- const mid = middlewares[currentMidIndex];
169
- currentMidIndex += 1;
163
+ const executeMiddlewareChain2 = async (nextOptions) => {
164
+ const mid = middlewares[currentIndex];
165
+ currentIndex += 1;
170
166
  currentContext = mergeContext(currentContext, nextOptions.context);
171
167
  if (mid) {
172
- return await mid({ ...opt, context: currentContext, next }, opt.input, (output) => ({ output, context: void 0 }));
168
+ return await mid({ ...opt, context: currentContext, next: executeMiddlewareChain2 }, input, middlewareOutputFn);
173
169
  }
174
- const result = {
175
- output: await opt.procedure["~orpc"].handler({ ...opt, context: currentContext }),
176
- context: currentContext
177
- };
178
- return result;
170
+ return opt.next({ context: currentContext });
171
+ };
172
+ return executeMiddlewareChain2({});
173
+ }
174
+ async function executeProcedureInternal(procedure, options) {
175
+ const executeHandler = async (context, input) => {
176
+ return await procedure["~orpc"].handler({ ...options, context, input });
177
+ };
178
+ const executePostMiddlewares = async (context, input) => {
179
+ const validatedInput = await validateInput(procedure, input);
180
+ const result2 = await executeMiddlewareChain(procedure["~orpc"].postMiddlewares, {
181
+ ...options,
182
+ context,
183
+ next: async ({ context: context2 }) => {
184
+ return middlewareOutputFn(
185
+ await executeHandler(context2, validatedInput)
186
+ );
187
+ }
188
+ }, validatedInput);
189
+ const validatedOutput = await validateOutput(procedure, result2.output);
190
+ return { ...result2, output: validatedOutput };
179
191
  };
180
- return (await next({})).output;
192
+ const result = await executeMiddlewareChain(procedure["~orpc"].preMiddlewares, {
193
+ ...options,
194
+ context: options.context,
195
+ next: ({ context }) => executePostMiddlewares(context, options.input)
196
+ }, options.input);
197
+ return result.output;
181
198
  }
182
199
 
183
200
  // src/router.ts
@@ -221,7 +238,8 @@ export {
221
238
  isLazy,
222
239
  unlazy,
223
240
  flatLazy,
241
+ middlewareOutputFn,
224
242
  createProcedureClient,
225
243
  getRouterChild
226
244
  };
227
- //# sourceMappingURL=chunk-ZBJYYEII.js.map
245
+ //# sourceMappingURL=chunk-OUPZ7QGV.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-MB74GD7C.js";
8
- import "./chunk-ZBJYYEII.js";
7
+ } from "./chunk-3EVCPLVI.js";
8
+ import "./chunk-OUPZ7QGV.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-MB74GD7C.js";
8
- import "./chunk-ZBJYYEII.js";
7
+ } from "./chunk-3EVCPLVI.js";
8
+ import "./chunk-OUPZ7QGV.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-ZBJYYEII.js";
14
+ } from "./chunk-OUPZ7QGV.js";
14
15
 
15
16
  // src/builder.ts
16
17
  import { ContractProcedure } from "@orpc/contract";
@@ -68,7 +69,7 @@ var DecoratedProcedure = class _DecoratedProcedure extends Procedure {
68
69
  const middleware_ = mapInput ? decorateMiddleware(middleware).mapInput(mapInput) : middleware;
69
70
  return new _DecoratedProcedure({
70
71
  ...this["~orpc"],
71
- middlewares: [...this["~orpc"].middlewares ?? [], middleware_]
72
+ postMiddlewares: [...this["~orpc"].postMiddlewares, middleware_]
72
73
  });
73
74
  }
74
75
  unshiftTag(...tags) {
@@ -79,12 +80,12 @@ var DecoratedProcedure = class _DecoratedProcedure extends Procedure {
79
80
  }
80
81
  unshiftMiddleware(...middlewares) {
81
82
  const castedMiddlewares = middlewares;
82
- if (this["~orpc"].middlewares?.length) {
83
+ if (this["~orpc"].preMiddlewares.length) {
83
84
  let min = 0;
84
- for (let i = 0; i < this["~orpc"].middlewares.length; i++) {
85
- const index = castedMiddlewares.indexOf(this["~orpc"].middlewares[i], min);
85
+ for (let i = 0; i < this["~orpc"].preMiddlewares.length; i++) {
86
+ const index = castedMiddlewares.indexOf(this["~orpc"].preMiddlewares[i], min);
86
87
  if (index === -1) {
87
- castedMiddlewares.push(...this["~orpc"].middlewares.slice(i));
88
+ castedMiddlewares.push(...this["~orpc"].preMiddlewares.slice(i));
88
89
  break;
89
90
  }
90
91
  min = index + 1;
@@ -92,7 +93,7 @@ var DecoratedProcedure = class _DecoratedProcedure extends Procedure {
92
93
  }
93
94
  return new _DecoratedProcedure({
94
95
  ...this["~orpc"],
95
- middlewares: castedMiddlewares
96
+ preMiddlewares: castedMiddlewares
96
97
  });
97
98
  }
98
99
  /**
@@ -122,12 +123,13 @@ var ProcedureImplementer = class _ProcedureImplementer {
122
123
  const mappedMiddleware = mapInput ? decorateMiddleware(middleware).mapInput(mapInput) : middleware;
123
124
  return new _ProcedureImplementer({
124
125
  ...this["~orpc"],
125
- middlewares: [...this["~orpc"].middlewares ?? [], mappedMiddleware]
126
+ postMiddlewares: [...this["~orpc"].postMiddlewares, mappedMiddleware]
126
127
  });
127
128
  }
128
129
  handler(handler) {
129
130
  return new DecoratedProcedure({
130
- middlewares: this["~orpc"].middlewares,
131
+ postMiddlewares: this["~orpc"].postMiddlewares,
132
+ preMiddlewares: this["~orpc"].preMiddlewares,
131
133
  contract: this["~orpc"].contract,
132
134
  handler
133
135
  });
@@ -211,7 +213,7 @@ var RouterBuilder = class _RouterBuilder {
211
213
  use(middleware) {
212
214
  return new _RouterBuilder({
213
215
  ...this["~orpc"],
214
- middlewares: [...this["~orpc"].middlewares ?? [], middleware]
216
+ middlewares: [...this["~orpc"].middlewares, middleware]
215
217
  });
216
218
  }
217
219
  router(router) {
@@ -283,11 +285,12 @@ var RouterImplementer = class _RouterImplementer {
283
285
  };
284
286
 
285
287
  // src/implementer-chainable.ts
286
- function createChainableImplementer(contract, middlewares) {
288
+ function createChainableImplementer(contract, middlewares = []) {
287
289
  if (isContractProcedure(contract)) {
288
290
  const implementer = new ProcedureImplementer({
289
291
  contract,
290
- middlewares
292
+ preMiddlewares: middlewares,
293
+ postMiddlewares: []
291
294
  });
292
295
  return implementer;
293
296
  }
@@ -350,17 +353,20 @@ var ProcedureBuilder = class _ProcedureBuilder {
350
353
  if (!mapInput) {
351
354
  return new ProcedureImplementer({
352
355
  contract: this["~orpc"].contract,
353
- middlewares: this["~orpc"].middlewares
356
+ preMiddlewares: this["~orpc"].middlewares,
357
+ postMiddlewares: []
354
358
  }).use(middleware);
355
359
  }
356
360
  return new ProcedureImplementer({
357
361
  contract: this["~orpc"].contract,
358
- middlewares: this["~orpc"].middlewares
362
+ preMiddlewares: this["~orpc"].middlewares,
363
+ postMiddlewares: []
359
364
  }).use(middleware, mapInput);
360
365
  }
361
366
  handler(handler) {
362
367
  return new DecoratedProcedure({
363
- middlewares: this["~orpc"].middlewares,
368
+ preMiddlewares: this["~orpc"].middlewares,
369
+ postMiddlewares: [],
364
370
  contract: this["~orpc"].contract,
365
371
  handler
366
372
  });
@@ -375,12 +381,14 @@ var Builder = class _Builder {
375
381
  this["~orpc"] = def;
376
382
  }
377
383
  context() {
378
- return new _Builder({});
384
+ return new _Builder({
385
+ middlewares: []
386
+ });
379
387
  }
380
388
  use(middleware) {
381
389
  return new _Builder({
382
390
  ...this["~orpc"],
383
- middlewares: [...this["~orpc"].middlewares ?? [], middleware]
391
+ middlewares: [...this["~orpc"].middlewares, middleware]
384
392
  });
385
393
  }
386
394
  middleware(middleware) {
@@ -431,7 +439,8 @@ var Builder = class _Builder {
431
439
  }
432
440
  handler(handler) {
433
441
  return new DecoratedProcedure({
434
- middlewares: this["~orpc"].middlewares,
442
+ preMiddlewares: this["~orpc"].middlewares,
443
+ postMiddlewares: [],
435
444
  contract: new ContractProcedure({
436
445
  InputSchema: void 0,
437
446
  OutputSchema: void 0,
@@ -512,7 +521,9 @@ function createRouterClient(router, ...rest) {
512
521
 
513
522
  // src/index.ts
514
523
  import { configGlobal, fallbackToGlobalConfig, isDefinedError, ORPCError, safe } from "@orpc/contract";
515
- var os = new Builder({});
524
+ var os = new Builder({
525
+ middlewares: []
526
+ });
516
527
  export {
517
528
  Builder,
518
529
  DecoratedProcedure,
@@ -542,6 +553,7 @@ export {
542
553
  isProcedure,
543
554
  lazy,
544
555
  mergeContext,
556
+ middlewareOutputFn,
545
557
  os,
546
558
  safe,
547
559
  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-MB74GD7C.js";
8
- import "./chunk-ZBJYYEII.js";
7
+ } from "./chunk-3EVCPLVI.js";
8
+ import "./chunk-OUPZ7QGV.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-MB74GD7C.js";
4
- import "./chunk-ZBJYYEII.js";
3
+ } from "./chunk-3EVCPLVI.js";
4
+ import "./chunk-OUPZ7QGV.js";
5
5
 
6
6
  // src/adapters/node/request-listener.ts
7
7
  function createRequest(req, res) {
@@ -11,7 +11,7 @@ import { ProcedureBuilder } from './procedure-builder';
11
11
  import { DecoratedProcedure } from './procedure-decorated';
12
12
  import { RouterBuilder } from './router-builder';
13
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
+ middlewares: Middleware<MergeContext<TContext, TExtraContext>, Partial<TExtraContext> | undefined, unknown, any, Record<string, unknown>>[];
15
15
  }
16
16
  export declare class Builder<TContext extends Context, TExtraContext extends Context> {
17
17
  '~type': "Builder";
@@ -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
@@ -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<string, unknown>>[];
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";
@@ -3,7 +3,7 @@ import type { Hooks, Value } from '@orpc/shared';
3
3
  import type { Lazyable } from './lazy';
4
4
  import type { Procedure } from './procedure';
5
5
  import type { Context, Meta } from './types';
6
- export type ProcedureClient<TClientContext, TInput, TOutput, TError extends Error> = Client<TClientContext, TInput, TOutput, TError>;
6
+ export type ProcedureClient<TClientContext, TInputSchema extends Schema, TOutputSchema extends Schema, THandlerOutput extends SchemaInput<TOutputSchema>, TErrorMap extends ErrorMap> = Client<TClientContext, SchemaInput<TInputSchema>, SchemaOutput<TOutputSchema, THandlerOutput>, ErrorFromErrorMap<TErrorMap>>;
7
7
  /**
8
8
  * Options for creating a procedure caller with comprehensive type safety
9
9
  */
@@ -18,5 +18,5 @@ export type CreateProcedureClientOptions<TContext extends Context, TOutputSchema
18
18
  context?: Value<TContext, [clientContext: TClientContext]>;
19
19
  } : never)) & Hooks<unknown, SchemaOutput<TOutputSchema, THandlerOutput>, TContext, Meta>;
20
20
  export type CreateProcedureClientRest<TContext extends Context, TOutputSchema extends Schema, THandlerOutput extends SchemaInput<TOutputSchema>, TClientContext> = [options: CreateProcedureClientOptions<TContext, TOutputSchema, THandlerOutput, TClientContext>] | (undefined extends TContext ? [] : never);
21
- export declare function createProcedureClient<TContext extends Context, TInputSchema extends Schema, TOutputSchema extends Schema, THandlerOutput extends SchemaInput<TOutputSchema>, TErrorMap extends ErrorMap, TClientContext>(lazyableProcedure: Lazyable<Procedure<TContext, any, TInputSchema, TOutputSchema, THandlerOutput, TErrorMap>>, ...[options]: CreateProcedureClientRest<TContext, TOutputSchema, THandlerOutput, TClientContext>): ProcedureClient<TClientContext, SchemaInput<TInputSchema>, SchemaOutput<TOutputSchema, THandlerOutput>, ErrorFromErrorMap<TErrorMap>>;
21
+ export declare function createProcedureClient<TContext extends Context, TInputSchema extends Schema, TOutputSchema extends Schema, THandlerOutput extends SchemaInput<TOutputSchema>, TErrorMap extends ErrorMap, TClientContext>(lazyableProcedure: Lazyable<Procedure<TContext, any, TInputSchema, TOutputSchema, THandlerOutput, TErrorMap>>, ...[options]: CreateProcedureClientRest<TContext, TOutputSchema, THandlerOutput, TClientContext>): ProcedureClient<TClientContext, TInputSchema, TOutputSchema, THandlerOutput, TErrorMap>;
22
22
  //# sourceMappingURL=procedure-client.d.ts.map
@@ -1,22 +1,22 @@
1
- import type { Client, ClientRest, ErrorFromErrorMap, ErrorMap, HTTPPath, RouteOptions, Schema, SchemaInput, SchemaOutput } from '@orpc/contract';
1
+ import type { ClientRest, ErrorMap, HTTPPath, RouteOptions, Schema, SchemaInput, SchemaOutput } from '@orpc/contract';
2
2
  import type { ORPCErrorConstructorMap } from './error';
3
3
  import type { MapInputMiddleware, Middleware } from './middleware';
4
- import type { CreateProcedureClientRest } from './procedure-client';
4
+ import type { CreateProcedureClientRest, ProcedureClient } from './procedure-client';
5
5
  import type { Context, MergeContext } from './types';
6
6
  import { Procedure } from './procedure';
7
7
  export declare class DecoratedProcedure<TContext extends Context, TExtraContext extends Context, TInputSchema extends Schema, TOutputSchema extends Schema, THandlerOutput extends SchemaInput<TOutputSchema>, TErrorMap extends ErrorMap> extends Procedure<TContext, TExtraContext, TInputSchema, TOutputSchema, THandlerOutput, TErrorMap> {
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
+ 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>;
12
+ 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
13
  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>;
14
+ unshiftMiddleware(...middlewares: Middleware<TContext, Context & Partial<MergeContext<TContext, TExtraContext>> | undefined, unknown, SchemaOutput<TOutputSchema, THandlerOutput>, ORPCErrorConstructorMap<TErrorMap>>[]): DecoratedProcedure<TContext, TExtraContext, TInputSchema, TOutputSchema, THandlerOutput, TErrorMap>;
15
15
  /**
16
16
  * Make this procedure callable (works like a function while still being a procedure).
17
17
  * **Note**: this only takes effect when this method is called at the end of the chain.
18
18
  */
19
- callable<TClientContext>(...rest: CreateProcedureClientRest<TContext, TOutputSchema, THandlerOutput, TClientContext>): DecoratedProcedure<TContext, TExtraContext, TInputSchema, TOutputSchema, THandlerOutput, TErrorMap> & (Client<TClientContext, SchemaInput<TInputSchema>, SchemaOutput<TOutputSchema, THandlerOutput>, ErrorFromErrorMap<TErrorMap>>);
19
+ callable<TClientContext>(...rest: CreateProcedureClientRest<TContext, TOutputSchema, THandlerOutput, TClientContext>): DecoratedProcedure<TContext, TExtraContext, TInputSchema, TOutputSchema, THandlerOutput, TErrorMap> & ProcedureClient<TClientContext, TInputSchema, TOutputSchema, THandlerOutput, TErrorMap>;
20
20
  /**
21
21
  * Make this procedure compatible with server action (the same as .callable, but the type is compatible with server action).
22
22
  * **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<string, unknown>>[];
10
+ postMiddlewares: Middleware<MergeContext<TContext, TExtraContext>, Partial<TExtraContext> | undefined, SchemaOutput<TInputSchema>, SchemaInput<TOutputSchema>, Record<string, unknown>>[];
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<string, unknown>`?
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<string, unknown>>[];
31
+ postMiddlewares: Middleware<MergeContext<TContext, TExtraContext>, Partial<TExtraContext> | undefined, SchemaOutput<TInputSchema>, SchemaInput<TOutputSchema>, Record<string, unknown>>[];
31
32
  contract: ContractProcedure<TInputSchema, TOutputSchema, TErrorMap>;
32
33
  handler: ProcedureHandler<TContext, TExtraContext, TInputSchema, TOutputSchema, THandlerOutput, any>;
33
34
  }
@@ -12,7 +12,7 @@ export type AdaptedRouter<TContext extends Context, TRouter extends ANY_ROUTER>
12
12
  export type RouterBuilderDef<TContext extends Context, TExtraContext extends Context> = {
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<string, unknown>>[];
16
16
  };
17
17
  export declare class RouterBuilder<TContext extends Context, TExtraContext extends Context> {
18
18
  '~type': "RouterBuilder";
@@ -1,4 +1,3 @@
1
- import type { ContractProcedure, ContractRouter, ErrorFromErrorMap, SchemaInput, SchemaOutput } from '@orpc/contract';
2
1
  import type { Hooks, Value } from '@orpc/shared';
3
2
  import type { Lazy } from './lazy';
4
3
  import type { Procedure } from './procedure';
@@ -8,8 +7,8 @@ import { type ANY_ROUTER, type Router } from './router';
8
7
  /**
9
8
  * FIXME: separate RouterClient and ContractRouterClient, don't mix them
10
9
  */
11
- export type RouterClient<TRouter extends ANY_ROUTER | ContractRouter, TClientContext> = TRouter extends Lazy<infer U extends ANY_ROUTER | ContractRouter> ? RouterClient<U, TClientContext> : TRouter extends ContractProcedure<infer UInputSchema, infer UOutputSchema, infer UErrorMap> | Procedure<any, any, infer UInputSchema, infer UOutputSchema, infer UFuncOutput, infer UErrorMap> ? ProcedureClient<TClientContext, SchemaInput<UInputSchema>, SchemaOutput<UOutputSchema, UFuncOutput>, ErrorFromErrorMap<UErrorMap>> : {
12
- [K in keyof TRouter]: TRouter[K] extends ANY_ROUTER | ContractRouter ? RouterClient<TRouter[K], TClientContext> : never;
10
+ export type RouterClient<TRouter extends ANY_ROUTER, TClientContext> = TRouter extends Lazy<infer U extends ANY_ROUTER> ? RouterClient<U, TClientContext> : TRouter extends Procedure<any, any, infer UInputSchema, infer UOutputSchema, infer UFuncOutput, infer UErrorMap> ? ProcedureClient<TClientContext, UInputSchema, UOutputSchema, UFuncOutput, UErrorMap> : {
11
+ [K in keyof TRouter]: TRouter[K] extends ANY_ROUTER ? RouterClient<TRouter[K], TClientContext> : never;
13
12
  };
14
13
  export type CreateRouterClientOptions<TRouter extends ANY_ROUTER> = {
15
14
  /**
@@ -5,7 +5,7 @@ import type { Router } from './router';
5
5
  import type { AdaptedRouter } from './router-builder';
6
6
  import type { Context, MergeContext } from './types';
7
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>>[];
8
+ middlewares: Middleware<MergeContext<TContext, TExtraContext>, Partial<TExtraContext> | undefined, unknown, any, Record<string, unknown>>[];
9
9
  contract: TContract;
10
10
  }
11
11
  export declare class RouterImplementer<TContext extends Context, TExtraContext extends Context, TContract extends ContractRouter> {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@orpc/server",
3
3
  "type": "module",
4
- "version": "0.0.0-next.c6c659d",
4
+ "version": "0.0.0-next.cba521d",
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.0.0-next.c6c659d",
57
- "@orpc/shared": "0.0.0-next.c6c659d"
56
+ "@orpc/contract": "0.0.0-next.cba521d",
57
+ "@orpc/shared": "0.0.0-next.cba521d"
58
58
  },
59
59
  "scripts": {
60
60
  "build": "tsup --onSuccess='tsc -b --noCheck'",