@orpc/server 0.0.0-next.3191601 → 0.0.0-next.32a6de9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/dist/adapters/fetch/index.d.mts +3 -3
  2. package/dist/adapters/fetch/index.d.ts +3 -3
  3. package/dist/adapters/fetch/index.mjs +3 -3
  4. package/dist/adapters/hono/index.d.mts +3 -3
  5. package/dist/adapters/hono/index.d.ts +3 -3
  6. package/dist/adapters/hono/index.mjs +3 -3
  7. package/dist/adapters/next/index.d.mts +3 -3
  8. package/dist/adapters/next/index.d.ts +3 -3
  9. package/dist/adapters/next/index.mjs +3 -3
  10. package/dist/adapters/node/index.d.mts +3 -3
  11. package/dist/adapters/node/index.d.ts +3 -3
  12. package/dist/adapters/node/index.mjs +2 -2
  13. package/dist/adapters/standard/index.d.mts +3 -3
  14. package/dist/adapters/standard/index.d.ts +3 -3
  15. package/dist/adapters/standard/index.mjs +2 -2
  16. package/dist/index.mjs +2 -2
  17. package/dist/plugins/index.d.mts +39 -3
  18. package/dist/plugins/index.d.ts +39 -3
  19. package/dist/plugins/index.mjs +90 -1
  20. package/dist/shared/{server.DUF89eb-.d.ts → server.BFt8M4Cr.d.ts} +1 -1
  21. package/dist/shared/{server.Cud5qk0c.d.ts → server.Bc6jnvPE.d.ts} +1 -1
  22. package/dist/shared/{server.CzxlqYZL.d.mts → server.BlxK0o8R.d.mts} +1 -1
  23. package/dist/shared/{server.e3W6AG3-.mjs → server.C37gDhSZ.mjs} +16 -22
  24. package/dist/shared/{server.Prfzu_zf.mjs → server.CCPFkKqC.mjs} +1 -1
  25. package/dist/shared/{server.DGnN7q3R.d.mts → server.CCgy73tk.d.mts} +1 -1
  26. package/dist/shared/{server.DCCkTG29.mjs → server.DJrRF9vD.mjs} +1 -1
  27. package/dist/shared/{server.BHlRCrf_.d.ts → server.DuTpqr2w.d.ts} +1 -1
  28. package/dist/shared/{server.B77ImKAP.d.mts → server.JgWzFqlo.d.mts} +1 -1
  29. package/package.json +7 -7
@@ -1,9 +1,9 @@
1
1
  import { C as Context, R as Router } from '../../shared/server.DLt5njUb.mjs';
2
2
  import { Interceptor, ThrowableError, MaybeOptionalOptions } from '@orpc/shared';
3
- import { c as StandardHandlerPlugin, S as StandardHandleOptions, i as StandardHandler } from '../../shared/server.CzxlqYZL.mjs';
4
- import { F as FriendlyStandardHandleOptions } from '../../shared/server.DGnN7q3R.mjs';
3
+ import { g as StandardHandlerPlugin, S as StandardHandleOptions, i as StandardHandler } from '../../shared/server.BlxK0o8R.mjs';
4
+ import { F as FriendlyStandardHandleOptions } from '../../shared/server.CCgy73tk.mjs';
5
5
  import { ToFetchResponseOptions } from '@orpc/standard-server-fetch';
6
- import { S as StandardRPCHandlerOptions } from '../../shared/server.B77ImKAP.mjs';
6
+ import { S as StandardRPCHandlerOptions } from '../../shared/server.JgWzFqlo.mjs';
7
7
  import '@orpc/client';
8
8
  import '@orpc/contract';
9
9
  import '@orpc/standard-server';
@@ -1,9 +1,9 @@
1
1
  import { C as Context, R as Router } from '../../shared/server.DLt5njUb.js';
2
2
  import { Interceptor, ThrowableError, MaybeOptionalOptions } from '@orpc/shared';
3
- import { c as StandardHandlerPlugin, S as StandardHandleOptions, i as StandardHandler } from '../../shared/server.BHlRCrf_.js';
4
- import { F as FriendlyStandardHandleOptions } from '../../shared/server.Cud5qk0c.js';
3
+ import { g as StandardHandlerPlugin, S as StandardHandleOptions, i as StandardHandler } from '../../shared/server.DuTpqr2w.js';
4
+ import { F as FriendlyStandardHandleOptions } from '../../shared/server.Bc6jnvPE.js';
5
5
  import { ToFetchResponseOptions } from '@orpc/standard-server-fetch';
6
- import { S as StandardRPCHandlerOptions } from '../../shared/server.DUF89eb-.js';
6
+ import { S as StandardRPCHandlerOptions } from '../../shared/server.BFt8M4Cr.js';
7
7
  import '@orpc/client';
8
8
  import '@orpc/contract';
9
9
  import '@orpc/standard-server';
@@ -1,9 +1,9 @@
1
- export { B as BodyLimitPlugin, F as FetchHandler, R as RPCHandler } from '../../shared/server.Prfzu_zf.mjs';
1
+ export { B as BodyLimitPlugin, F as FetchHandler, R as RPCHandler } from '../../shared/server.CCPFkKqC.mjs';
2
2
  import '@orpc/client';
3
3
  import '@orpc/client/standard';
4
- import '../../shared/server.DCCkTG29.mjs';
4
+ import '../../shared/server.DJrRF9vD.mjs';
5
5
  import '@orpc/shared';
6
- import '../../shared/server.e3W6AG3-.mjs';
6
+ import '../../shared/server.C37gDhSZ.mjs';
7
7
  import '@orpc/contract';
8
8
  import '@orpc/standard-server-fetch';
9
9
  import '../../shared/server.BVwwTHyO.mjs';
@@ -3,10 +3,10 @@ export { BodyLimitPlugin, BodyLimitPluginOptions, FetchHandleResult, FetchHandle
3
3
  import { Value, MaybeOptionalOptions } from '@orpc/shared';
4
4
  import { Context as Context$1, MiddlewareHandler } from 'hono';
5
5
  import { C as Context } from '../../shared/server.DLt5njUb.mjs';
6
- import { S as StandardHandleOptions } from '../../shared/server.CzxlqYZL.mjs';
7
- import '../../shared/server.DGnN7q3R.mjs';
6
+ import { S as StandardHandleOptions } from '../../shared/server.BlxK0o8R.mjs';
7
+ import '../../shared/server.CCgy73tk.mjs';
8
8
  import '@orpc/standard-server-fetch';
9
- import '../../shared/server.B77ImKAP.mjs';
9
+ import '../../shared/server.JgWzFqlo.mjs';
10
10
  import '@orpc/client/standard';
11
11
  import '@orpc/client';
12
12
  import '@orpc/contract';
@@ -3,10 +3,10 @@ export { BodyLimitPlugin, BodyLimitPluginOptions, FetchHandleResult, FetchHandle
3
3
  import { Value, MaybeOptionalOptions } from '@orpc/shared';
4
4
  import { Context as Context$1, MiddlewareHandler } from 'hono';
5
5
  import { C as Context } from '../../shared/server.DLt5njUb.js';
6
- import { S as StandardHandleOptions } from '../../shared/server.BHlRCrf_.js';
7
- import '../../shared/server.Cud5qk0c.js';
6
+ import { S as StandardHandleOptions } from '../../shared/server.DuTpqr2w.js';
7
+ import '../../shared/server.Bc6jnvPE.js';
8
8
  import '@orpc/standard-server-fetch';
9
- import '../../shared/server.DUF89eb-.js';
9
+ import '../../shared/server.BFt8M4Cr.js';
10
10
  import '@orpc/client/standard';
11
11
  import '@orpc/client';
12
12
  import '@orpc/contract';
@@ -1,9 +1,9 @@
1
- export { B as BodyLimitPlugin, F as FetchHandler, R as RPCHandler } from '../../shared/server.Prfzu_zf.mjs';
1
+ export { B as BodyLimitPlugin, F as FetchHandler, R as RPCHandler } from '../../shared/server.CCPFkKqC.mjs';
2
2
  import { value } from '@orpc/shared';
3
3
  import '@orpc/client';
4
4
  import '@orpc/client/standard';
5
- import '../../shared/server.DCCkTG29.mjs';
6
- import '../../shared/server.e3W6AG3-.mjs';
5
+ import '../../shared/server.DJrRF9vD.mjs';
6
+ import '../../shared/server.C37gDhSZ.mjs';
7
7
  import '@orpc/contract';
8
8
  import '@orpc/standard-server-fetch';
9
9
  import '../../shared/server.BVwwTHyO.mjs';
@@ -3,10 +3,10 @@ export { BodyLimitPlugin, BodyLimitPluginOptions, FetchHandleResult, FetchHandle
3
3
  import { Value, MaybeOptionalOptions } from '@orpc/shared';
4
4
  import { NextRequest } from 'next/server';
5
5
  import { C as Context } from '../../shared/server.DLt5njUb.mjs';
6
- import { S as StandardHandleOptions } from '../../shared/server.CzxlqYZL.mjs';
7
- import '../../shared/server.DGnN7q3R.mjs';
6
+ import { S as StandardHandleOptions } from '../../shared/server.BlxK0o8R.mjs';
7
+ import '../../shared/server.CCgy73tk.mjs';
8
8
  import '@orpc/standard-server-fetch';
9
- import '../../shared/server.B77ImKAP.mjs';
9
+ import '../../shared/server.JgWzFqlo.mjs';
10
10
  import '@orpc/client/standard';
11
11
  import '@orpc/client';
12
12
  import '@orpc/contract';
@@ -3,10 +3,10 @@ export { BodyLimitPlugin, BodyLimitPluginOptions, FetchHandleResult, FetchHandle
3
3
  import { Value, MaybeOptionalOptions } from '@orpc/shared';
4
4
  import { NextRequest } from 'next/server';
5
5
  import { C as Context } from '../../shared/server.DLt5njUb.js';
6
- import { S as StandardHandleOptions } from '../../shared/server.BHlRCrf_.js';
7
- import '../../shared/server.Cud5qk0c.js';
6
+ import { S as StandardHandleOptions } from '../../shared/server.DuTpqr2w.js';
7
+ import '../../shared/server.Bc6jnvPE.js';
8
8
  import '@orpc/standard-server-fetch';
9
- import '../../shared/server.DUF89eb-.js';
9
+ import '../../shared/server.BFt8M4Cr.js';
10
10
  import '@orpc/client/standard';
11
11
  import '@orpc/client';
12
12
  import '@orpc/contract';
@@ -1,9 +1,9 @@
1
- export { B as BodyLimitPlugin, F as FetchHandler, R as RPCHandler } from '../../shared/server.Prfzu_zf.mjs';
1
+ export { B as BodyLimitPlugin, F as FetchHandler, R as RPCHandler } from '../../shared/server.CCPFkKqC.mjs';
2
2
  import { value } from '@orpc/shared';
3
3
  import '@orpc/client';
4
4
  import '@orpc/client/standard';
5
- import '../../shared/server.DCCkTG29.mjs';
6
- import '../../shared/server.e3W6AG3-.mjs';
5
+ import '../../shared/server.DJrRF9vD.mjs';
6
+ import '../../shared/server.C37gDhSZ.mjs';
7
7
  import '@orpc/contract';
8
8
  import '@orpc/standard-server-fetch';
9
9
  import '../../shared/server.BVwwTHyO.mjs';
@@ -1,9 +1,9 @@
1
1
  import { C as Context, R as Router } from '../../shared/server.DLt5njUb.mjs';
2
2
  import { Interceptor, ThrowableError, MaybeOptionalOptions } from '@orpc/shared';
3
3
  import { SendStandardResponseOptions, NodeHttpRequest, NodeHttpResponse } from '@orpc/standard-server-node';
4
- import { c as StandardHandlerPlugin, S as StandardHandleOptions, i as StandardHandler } from '../../shared/server.CzxlqYZL.mjs';
5
- import { F as FriendlyStandardHandleOptions } from '../../shared/server.DGnN7q3R.mjs';
6
- import { S as StandardRPCHandlerOptions } from '../../shared/server.B77ImKAP.mjs';
4
+ import { g as StandardHandlerPlugin, S as StandardHandleOptions, i as StandardHandler } from '../../shared/server.BlxK0o8R.mjs';
5
+ import { F as FriendlyStandardHandleOptions } from '../../shared/server.CCgy73tk.mjs';
6
+ import { S as StandardRPCHandlerOptions } from '../../shared/server.JgWzFqlo.mjs';
7
7
  import '@orpc/client';
8
8
  import '@orpc/contract';
9
9
  import '@orpc/standard-server';
@@ -1,9 +1,9 @@
1
1
  import { C as Context, R as Router } from '../../shared/server.DLt5njUb.js';
2
2
  import { Interceptor, ThrowableError, MaybeOptionalOptions } from '@orpc/shared';
3
3
  import { SendStandardResponseOptions, NodeHttpRequest, NodeHttpResponse } from '@orpc/standard-server-node';
4
- import { c as StandardHandlerPlugin, S as StandardHandleOptions, i as StandardHandler } from '../../shared/server.BHlRCrf_.js';
5
- import { F as FriendlyStandardHandleOptions } from '../../shared/server.Cud5qk0c.js';
6
- import { S as StandardRPCHandlerOptions } from '../../shared/server.DUF89eb-.js';
4
+ import { g as StandardHandlerPlugin, S as StandardHandleOptions, i as StandardHandler } from '../../shared/server.DuTpqr2w.js';
5
+ import { F as FriendlyStandardHandleOptions } from '../../shared/server.Bc6jnvPE.js';
6
+ import { S as StandardRPCHandlerOptions } from '../../shared/server.BFt8M4Cr.js';
7
7
  import '@orpc/client';
8
8
  import '@orpc/contract';
9
9
  import '@orpc/standard-server';
@@ -3,8 +3,8 @@ import { toArray, intercept, resolveMaybeOptionalOptions } from '@orpc/shared';
3
3
  import { toStandardLazyRequest, sendStandardResponse } from '@orpc/standard-server-node';
4
4
  import { r as resolveFriendlyStandardHandleOptions } from '../../shared/server.BVwwTHyO.mjs';
5
5
  import { StandardRPCJsonSerializer, StandardRPCSerializer } from '@orpc/client/standard';
6
- import { S as StandardHandler, b as StandardRPCMatcher, a as StandardRPCCodec } from '../../shared/server.DCCkTG29.mjs';
7
- import '../../shared/server.e3W6AG3-.mjs';
6
+ import { S as StandardHandler, b as StandardRPCMatcher, a as StandardRPCCodec } from '../../shared/server.DJrRF9vD.mjs';
7
+ import '../../shared/server.C37gDhSZ.mjs';
8
8
  import '@orpc/contract';
9
9
 
10
10
  class BodyLimitPlugin {
@@ -1,10 +1,10 @@
1
- import { d as StandardCodec, e as StandardParams, f as StandardMatcher, g as StandardMatchResult } from '../../shared/server.CzxlqYZL.mjs';
2
- export { S as StandardHandleOptions, h as StandardHandleResult, i as StandardHandler, b as StandardHandlerInterceptorOptions, a as StandardHandlerOptions, c as StandardHandlerPlugin } from '../../shared/server.CzxlqYZL.mjs';
1
+ import { b as StandardCodec, c as StandardParams, d as StandardMatcher, e as StandardMatchResult } from '../../shared/server.BlxK0o8R.mjs';
2
+ export { S as StandardHandleOptions, f as StandardHandleResult, i as StandardHandler, h as StandardHandlerInterceptorOptions, a as StandardHandlerOptions, g as StandardHandlerPlugin } from '../../shared/server.BlxK0o8R.mjs';
3
3
  import { ORPCError, HTTPPath } from '@orpc/client';
4
4
  import { StandardRPCSerializer } from '@orpc/client/standard';
5
5
  import { StandardLazyRequest, StandardResponse } from '@orpc/standard-server';
6
6
  import { A as AnyProcedure, a as AnyRouter } from '../../shared/server.DLt5njUb.mjs';
7
- export { S as StandardRPCHandlerOptions } from '../../shared/server.B77ImKAP.mjs';
7
+ export { S as StandardRPCHandlerOptions } from '../../shared/server.JgWzFqlo.mjs';
8
8
  import '@orpc/contract';
9
9
  import '@orpc/shared';
10
10
 
@@ -1,10 +1,10 @@
1
- import { d as StandardCodec, e as StandardParams, f as StandardMatcher, g as StandardMatchResult } from '../../shared/server.BHlRCrf_.js';
2
- export { S as StandardHandleOptions, h as StandardHandleResult, i as StandardHandler, b as StandardHandlerInterceptorOptions, a as StandardHandlerOptions, c as StandardHandlerPlugin } from '../../shared/server.BHlRCrf_.js';
1
+ import { b as StandardCodec, c as StandardParams, d as StandardMatcher, e as StandardMatchResult } from '../../shared/server.DuTpqr2w.js';
2
+ export { S as StandardHandleOptions, f as StandardHandleResult, i as StandardHandler, h as StandardHandlerInterceptorOptions, a as StandardHandlerOptions, g as StandardHandlerPlugin } from '../../shared/server.DuTpqr2w.js';
3
3
  import { ORPCError, HTTPPath } from '@orpc/client';
4
4
  import { StandardRPCSerializer } from '@orpc/client/standard';
5
5
  import { StandardLazyRequest, StandardResponse } from '@orpc/standard-server';
6
6
  import { A as AnyProcedure, a as AnyRouter } from '../../shared/server.DLt5njUb.js';
7
- export { S as StandardRPCHandlerOptions } from '../../shared/server.DUF89eb-.js';
7
+ export { S as StandardRPCHandlerOptions } from '../../shared/server.BFt8M4Cr.js';
8
8
  import '@orpc/contract';
9
9
  import '@orpc/shared';
10
10
 
@@ -1,6 +1,6 @@
1
- export { S as StandardHandler, a as StandardRPCCodec, b as StandardRPCMatcher } from '../../shared/server.DCCkTG29.mjs';
1
+ export { S as StandardHandler, a as StandardRPCCodec, b as StandardRPCMatcher } from '../../shared/server.DJrRF9vD.mjs';
2
2
  import '@orpc/client';
3
3
  import '@orpc/shared';
4
- import '../../shared/server.e3W6AG3-.mjs';
4
+ import '../../shared/server.C37gDhSZ.mjs';
5
5
  import '@orpc/contract';
6
6
  import '@orpc/client/standard';
package/dist/index.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  import { mergeErrorMap, mergeMeta, mergeRoute, mergePrefix, mergeTags, isContractProcedure, getContractRouter } from '@orpc/contract';
2
2
  export { ValidationError, eventIterator, type } from '@orpc/contract';
3
- import { P as Procedure, b as addMiddleware, c as createProcedureClient, e as enhanceRouter, l as lazy, s as setHiddenRouterContract, i as isProcedure, d as isLazy, f as createAssertedLazyProcedure, g as getRouter } from './shared/server.e3W6AG3-.mjs';
4
- export { L as LAZY_SYMBOL, p as call, r as createAccessibleLazyRouter, a as createContractedProcedure, h as createORPCErrorConstructorMap, q as getHiddenRouterContract, j as getLazyMeta, n as isStartWithMiddlewares, m as mergeCurrentContext, o as mergeMiddlewares, k as middlewareOutputFn, w as resolveContractProcedures, t as traverseContractProcedures, u as unlazy, x as unlazyRouter, v as validateORPCError } from './shared/server.e3W6AG3-.mjs';
3
+ import { P as Procedure, b as addMiddleware, c as createProcedureClient, e as enhanceRouter, l as lazy, s as setHiddenRouterContract, i as isProcedure, d as isLazy, f as createAssertedLazyProcedure, g as getRouter } from './shared/server.C37gDhSZ.mjs';
4
+ export { L as LAZY_SYMBOL, p as call, r as createAccessibleLazyRouter, a as createContractedProcedure, h as createORPCErrorConstructorMap, q as getHiddenRouterContract, j as getLazyMeta, n as isStartWithMiddlewares, m as mergeCurrentContext, o as mergeMiddlewares, k as middlewareOutputFn, w as resolveContractProcedures, t as traverseContractProcedures, u as unlazy, x as unlazyRouter, v as validateORPCError } from './shared/server.C37gDhSZ.mjs';
5
5
  import { toORPCError } from '@orpc/client';
6
6
  export { ORPCError, isDefinedError, safe } from '@orpc/client';
7
7
  export { onError, onFinish, onStart, onSuccess } from '@orpc/shared';
@@ -1,9 +1,45 @@
1
- import { b as StandardHandlerInterceptorOptions, c as StandardHandlerPlugin, a as StandardHandlerOptions } from '../shared/server.CzxlqYZL.mjs';
2
1
  import { Value } from '@orpc/shared';
2
+ import { StandardRequest, StandardHeaders } from '@orpc/standard-server';
3
+ import { BatchResponseBodyItem } from '@orpc/standard-server/batch';
4
+ import { h as StandardHandlerInterceptorOptions, g as StandardHandlerPlugin, a as StandardHandlerOptions } from '../shared/server.BlxK0o8R.mjs';
3
5
  import { C as Context } from '../shared/server.DLt5njUb.mjs';
4
6
  import '@orpc/client';
5
7
  import '@orpc/contract';
6
- import '@orpc/standard-server';
8
+
9
+ interface BatchHandlerOptions<T extends Context> {
10
+ /**
11
+ * The max size of the batch allowed.
12
+ *
13
+ * @default 10
14
+ */
15
+ maxSize?: Value<number, [StandardHandlerInterceptorOptions<T>]>;
16
+ /**
17
+ * Map the request before processing it.
18
+ *
19
+ * @default merged back batch request headers into the request
20
+ */
21
+ mapRequestItem?(request: StandardRequest, batchOptions: StandardHandlerInterceptorOptions<T>): StandardRequest;
22
+ /**
23
+ * Success batch response status code.
24
+ *
25
+ * @default 207
26
+ */
27
+ successStatus?: Value<number, [responses: Promise<BatchResponseBodyItem>[], batchOptions: StandardHandlerInterceptorOptions<T>]>;
28
+ /**
29
+ * success batch response headers.
30
+ *
31
+ * @default {}
32
+ */
33
+ headers?: Value<StandardHeaders, [responses: Promise<BatchResponseBodyItem>[], batchOptions: StandardHandlerInterceptorOptions<T>]>;
34
+ }
35
+ declare class BatchHandlerPlugin<T extends Context> implements StandardHandlerPlugin<T> {
36
+ private readonly maxSize;
37
+ private readonly mapRequestItem;
38
+ private readonly successStatus;
39
+ private readonly headers;
40
+ constructor(options?: BatchHandlerOptions<T>);
41
+ init(options: StandardHandlerOptions<T>): void;
42
+ }
7
43
 
8
44
  interface CORSOptions<T extends Context> {
9
45
  origin?: Value<string | readonly string[] | null | undefined, [origin: string, options: StandardHandlerInterceptorOptions<T>]>;
@@ -27,4 +63,4 @@ declare class ResponseHeadersPlugin<T extends ResponseHeadersPluginContext> impl
27
63
  init(options: StandardHandlerOptions<T>): void;
28
64
  }
29
65
 
30
- export { type CORSOptions, CORSPlugin, ResponseHeadersPlugin, type ResponseHeadersPluginContext };
66
+ export { type BatchHandlerOptions, BatchHandlerPlugin, type CORSOptions, CORSPlugin, ResponseHeadersPlugin, type ResponseHeadersPluginContext };
@@ -1,9 +1,45 @@
1
- import { b as StandardHandlerInterceptorOptions, c as StandardHandlerPlugin, a as StandardHandlerOptions } from '../shared/server.BHlRCrf_.js';
2
1
  import { Value } from '@orpc/shared';
2
+ import { StandardRequest, StandardHeaders } from '@orpc/standard-server';
3
+ import { BatchResponseBodyItem } from '@orpc/standard-server/batch';
4
+ import { h as StandardHandlerInterceptorOptions, g as StandardHandlerPlugin, a as StandardHandlerOptions } from '../shared/server.DuTpqr2w.js';
3
5
  import { C as Context } from '../shared/server.DLt5njUb.js';
4
6
  import '@orpc/client';
5
7
  import '@orpc/contract';
6
- import '@orpc/standard-server';
8
+
9
+ interface BatchHandlerOptions<T extends Context> {
10
+ /**
11
+ * The max size of the batch allowed.
12
+ *
13
+ * @default 10
14
+ */
15
+ maxSize?: Value<number, [StandardHandlerInterceptorOptions<T>]>;
16
+ /**
17
+ * Map the request before processing it.
18
+ *
19
+ * @default merged back batch request headers into the request
20
+ */
21
+ mapRequestItem?(request: StandardRequest, batchOptions: StandardHandlerInterceptorOptions<T>): StandardRequest;
22
+ /**
23
+ * Success batch response status code.
24
+ *
25
+ * @default 207
26
+ */
27
+ successStatus?: Value<number, [responses: Promise<BatchResponseBodyItem>[], batchOptions: StandardHandlerInterceptorOptions<T>]>;
28
+ /**
29
+ * success batch response headers.
30
+ *
31
+ * @default {}
32
+ */
33
+ headers?: Value<StandardHeaders, [responses: Promise<BatchResponseBodyItem>[], batchOptions: StandardHandlerInterceptorOptions<T>]>;
34
+ }
35
+ declare class BatchHandlerPlugin<T extends Context> implements StandardHandlerPlugin<T> {
36
+ private readonly maxSize;
37
+ private readonly mapRequestItem;
38
+ private readonly successStatus;
39
+ private readonly headers;
40
+ constructor(options?: BatchHandlerOptions<T>);
41
+ init(options: StandardHandlerOptions<T>): void;
42
+ }
7
43
 
8
44
  interface CORSOptions<T extends Context> {
9
45
  origin?: Value<string | readonly string[] | null | undefined, [origin: string, options: StandardHandlerInterceptorOptions<T>]>;
@@ -27,4 +63,4 @@ declare class ResponseHeadersPlugin<T extends ResponseHeadersPluginContext> impl
27
63
  init(options: StandardHandlerOptions<T>): void;
28
64
  }
29
65
 
30
- export { type CORSOptions, CORSPlugin, ResponseHeadersPlugin, type ResponseHeadersPluginContext };
66
+ export { type BatchHandlerOptions, BatchHandlerPlugin, type CORSOptions, CORSPlugin, ResponseHeadersPlugin, type ResponseHeadersPluginContext };
@@ -1,4 +1,93 @@
1
1
  import { value } from '@orpc/shared';
2
+ import { parseBatchRequest, toBatchResponse } from '@orpc/standard-server/batch';
3
+
4
+ class BatchHandlerPlugin {
5
+ maxSize;
6
+ mapRequestItem;
7
+ successStatus;
8
+ headers;
9
+ constructor(options = {}) {
10
+ this.maxSize = options.maxSize ?? 10;
11
+ this.mapRequestItem = options.mapRequestItem ?? ((request, { request: batchRequest }) => ({
12
+ ...request,
13
+ headers: {
14
+ ...batchRequest.headers,
15
+ ...request.headers
16
+ }
17
+ }));
18
+ this.successStatus = options.successStatus ?? 207;
19
+ this.headers = options.headers ?? {};
20
+ }
21
+ init(options) {
22
+ options.rootInterceptors ??= [];
23
+ options.rootInterceptors.unshift(async (options2) => {
24
+ if (options2.request.headers["x-orpc-batch"] !== "1") {
25
+ return options2.next();
26
+ }
27
+ let isParsing = false;
28
+ try {
29
+ isParsing = true;
30
+ const parsed = parseBatchRequest({ ...options2.request, body: await options2.request.body() });
31
+ isParsing = false;
32
+ const maxSize = await value(this.maxSize, options2);
33
+ if (parsed.length > maxSize) {
34
+ return {
35
+ matched: true,
36
+ response: {
37
+ status: 413,
38
+ headers: {},
39
+ body: "Batch request size exceeds the maximum allowed size"
40
+ }
41
+ };
42
+ }
43
+ const responses = parsed.map(
44
+ (request, index) => {
45
+ const mapped = this.mapRequestItem(request, options2);
46
+ return options2.next({ ...options2, request: { ...mapped, body: () => Promise.resolve(mapped.body) } }).then(({ response: response2, matched }) => {
47
+ if (matched) {
48
+ return { ...response2, index };
49
+ }
50
+ return { index, status: 404, headers: {}, body: "No procedure matched" };
51
+ }).catch(() => {
52
+ return { index, status: 500, headers: {}, body: "Internal server error" };
53
+ });
54
+ }
55
+ );
56
+ await Promise.race(responses);
57
+ const status = await value(this.successStatus, responses, options2);
58
+ const headers = await value(this.headers, responses, options2);
59
+ const response = toBatchResponse({
60
+ status,
61
+ headers,
62
+ body: async function* () {
63
+ const promises = [...responses];
64
+ while (true) {
65
+ const handling = promises.filter((p) => p !== void 0);
66
+ if (handling.length === 0) {
67
+ return;
68
+ }
69
+ const result = await Promise.race(handling);
70
+ promises[result.index] = void 0;
71
+ yield result;
72
+ }
73
+ }()
74
+ });
75
+ return {
76
+ matched: true,
77
+ response
78
+ };
79
+ } catch (cause) {
80
+ if (isParsing) {
81
+ return {
82
+ matched: true,
83
+ response: { status: 400, headers: {}, body: "Invalid batch request, this could be caused by a malformed request body or a missing header" }
84
+ };
85
+ }
86
+ throw cause;
87
+ }
88
+ });
89
+ }
90
+ }
2
91
 
3
92
  class CORSPlugin {
4
93
  options;
@@ -104,4 +193,4 @@ class ResponseHeadersPlugin {
104
193
  }
105
194
  }
106
195
 
107
- export { CORSPlugin, ResponseHeadersPlugin };
196
+ export { BatchHandlerPlugin, CORSPlugin, ResponseHeadersPlugin };
@@ -1,6 +1,6 @@
1
1
  import { StandardRPCJsonSerializerOptions } from '@orpc/client/standard';
2
2
  import { C as Context } from './server.DLt5njUb.js';
3
- import { a as StandardHandlerOptions } from './server.BHlRCrf_.js';
3
+ import { a as StandardHandlerOptions } from './server.DuTpqr2w.js';
4
4
 
5
5
  interface StandardRPCHandlerOptions<T extends Context> extends StandardHandlerOptions<T>, StandardRPCJsonSerializerOptions {
6
6
  }
@@ -1,5 +1,5 @@
1
1
  import { C as Context } from './server.DLt5njUb.js';
2
- import { S as StandardHandleOptions } from './server.BHlRCrf_.js';
2
+ import { S as StandardHandleOptions } from './server.DuTpqr2w.js';
3
3
 
4
4
  type FriendlyStandardHandleOptions<T extends Context> = Omit<StandardHandleOptions<T>, 'context'> & (Record<never, never> extends T ? {
5
5
  context?: T;
@@ -63,4 +63,4 @@ declare class StandardHandler<T extends Context> {
63
63
  handle(request: StandardLazyRequest, options: StandardHandleOptions<T>): Promise<StandardHandleResult>;
64
64
  }
65
65
 
66
- export { type StandardHandleOptions as S, type StandardHandlerOptions as a, type StandardHandlerInterceptorOptions as b, type StandardHandlerPlugin as c, type StandardCodec as d, type StandardParams as e, type StandardMatcher as f, type StandardMatchResult as g, type StandardHandleResult as h, StandardHandler as i };
66
+ export { type StandardHandleOptions as S, type StandardHandlerOptions as a, type StandardCodec as b, type StandardParams as c, type StandardMatcher as d, type StandardMatchResult as e, type StandardHandleResult as f, type StandardHandlerPlugin as g, type StandardHandlerInterceptorOptions as h, StandardHandler as i };
@@ -169,35 +169,29 @@ async function executeProcedureInternal(procedure, options) {
169
169
  const middlewares = procedure["~orpc"].middlewares;
170
170
  const inputValidationIndex = Math.min(Math.max(0, procedure["~orpc"].inputValidationIndex), middlewares.length);
171
171
  const outputValidationIndex = Math.min(Math.max(0, procedure["~orpc"].outputValidationIndex), middlewares.length);
172
- let currentIndex = 0;
173
- let currentContext = options.context;
174
- let currentInput = options.input;
175
- const next = async (...[nextOptions]) => {
176
- const index = currentIndex;
177
- const midContext = nextOptions?.context ?? {};
178
- currentIndex += 1;
179
- currentContext = mergeCurrentContext(currentContext, midContext);
172
+ const next = async (index, context, input) => {
173
+ let currentInput = input;
180
174
  if (index === inputValidationIndex) {
181
175
  currentInput = await validateInput(procedure, currentInput);
182
176
  }
183
177
  const mid = middlewares[index];
184
- const result = mid ? {
185
- context: midContext,
186
- output: (await mid({ ...options, context: currentContext, next }, currentInput, middlewareOutputFn)).output
187
- } : {
188
- context: midContext,
189
- output: await procedure["~orpc"].handler({ ...options, context: currentContext, input: currentInput })
190
- };
178
+ const output = mid ? (await mid({
179
+ ...options,
180
+ context,
181
+ next: async (...[nextOptions]) => {
182
+ const nextContext = nextOptions?.context ?? {};
183
+ return {
184
+ output: await next(index + 1, mergeCurrentContext(context, nextContext), currentInput),
185
+ context: nextContext
186
+ };
187
+ }
188
+ }, currentInput, middlewareOutputFn)).output : await procedure["~orpc"].handler({ ...options, context, input: currentInput });
191
189
  if (index === outputValidationIndex) {
192
- const validatedOutput = await validateOutput(procedure, result.output);
193
- return {
194
- context: result.context,
195
- output: validatedOutput
196
- };
190
+ return await validateOutput(procedure, output);
197
191
  }
198
- return result;
192
+ return output;
199
193
  };
200
- return (await next()).output;
194
+ return next(0, options.context, options.input);
201
195
  }
202
196
 
203
197
  const HIDDEN_ROUTER_CONTRACT_SYMBOL = Symbol("ORPC_HIDDEN_ROUTER_CONTRACT");
@@ -1,6 +1,6 @@
1
1
  import { ORPCError } from '@orpc/client';
2
2
  import { StandardRPCJsonSerializer, StandardRPCSerializer } from '@orpc/client/standard';
3
- import { S as StandardHandler, b as StandardRPCMatcher, a as StandardRPCCodec } from './server.DCCkTG29.mjs';
3
+ import { S as StandardHandler, b as StandardRPCMatcher, a as StandardRPCCodec } from './server.DJrRF9vD.mjs';
4
4
  import { toArray, intercept, resolveMaybeOptionalOptions } from '@orpc/shared';
5
5
  import { toStandardLazyRequest, toFetchResponse } from '@orpc/standard-server-fetch';
6
6
  import { r as resolveFriendlyStandardHandleOptions } from './server.BVwwTHyO.mjs';
@@ -1,5 +1,5 @@
1
1
  import { C as Context } from './server.DLt5njUb.mjs';
2
- import { S as StandardHandleOptions } from './server.CzxlqYZL.mjs';
2
+ import { S as StandardHandleOptions } from './server.BlxK0o8R.mjs';
3
3
 
4
4
  type FriendlyStandardHandleOptions<T extends Context> = Omit<StandardHandleOptions<T>, 'context'> & (Record<never, never> extends T ? {
5
5
  context?: T;
@@ -1,6 +1,6 @@
1
1
  import { ORPCError, toORPCError } from '@orpc/client';
2
2
  import { toArray, intercept, parseEmptyableJSON } from '@orpc/shared';
3
- import { c as createProcedureClient, t as traverseContractProcedures, i as isProcedure, u as unlazy, g as getRouter, a as createContractedProcedure } from './server.e3W6AG3-.mjs';
3
+ import { c as createProcedureClient, t as traverseContractProcedures, i as isProcedure, u as unlazy, g as getRouter, a as createContractedProcedure } from './server.C37gDhSZ.mjs';
4
4
  import { toHttpPath } from '@orpc/client/standard';
5
5
 
6
6
  class StandardHandler {
@@ -63,4 +63,4 @@ declare class StandardHandler<T extends Context> {
63
63
  handle(request: StandardLazyRequest, options: StandardHandleOptions<T>): Promise<StandardHandleResult>;
64
64
  }
65
65
 
66
- export { type StandardHandleOptions as S, type StandardHandlerOptions as a, type StandardHandlerInterceptorOptions as b, type StandardHandlerPlugin as c, type StandardCodec as d, type StandardParams as e, type StandardMatcher as f, type StandardMatchResult as g, type StandardHandleResult as h, StandardHandler as i };
66
+ export { type StandardHandleOptions as S, type StandardHandlerOptions as a, type StandardCodec as b, type StandardParams as c, type StandardMatcher as d, type StandardMatchResult as e, type StandardHandleResult as f, type StandardHandlerPlugin as g, type StandardHandlerInterceptorOptions as h, StandardHandler as i };
@@ -1,6 +1,6 @@
1
1
  import { StandardRPCJsonSerializerOptions } from '@orpc/client/standard';
2
2
  import { C as Context } from './server.DLt5njUb.mjs';
3
- import { a as StandardHandlerOptions } from './server.CzxlqYZL.mjs';
3
+ import { a as StandardHandlerOptions } from './server.BlxK0o8R.mjs';
4
4
 
5
5
  interface StandardRPCHandlerOptions<T extends Context> extends StandardHandlerOptions<T>, StandardRPCJsonSerializerOptions {
6
6
  }
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.3191601",
4
+ "version": "0.0.0-next.32a6de9",
5
5
  "license": "MIT",
6
6
  "homepage": "https://orpc.unnoq.com",
7
7
  "repository": {
@@ -58,12 +58,12 @@
58
58
  "next": ">=14.0.0"
59
59
  },
60
60
  "dependencies": {
61
- "@orpc/client": "0.0.0-next.3191601",
62
- "@orpc/contract": "0.0.0-next.3191601",
63
- "@orpc/standard-server": "0.0.0-next.3191601",
64
- "@orpc/standard-server-fetch": "0.0.0-next.3191601",
65
- "@orpc/shared": "0.0.0-next.3191601",
66
- "@orpc/standard-server-node": "0.0.0-next.3191601"
61
+ "@orpc/client": "0.0.0-next.32a6de9",
62
+ "@orpc/contract": "0.0.0-next.32a6de9",
63
+ "@orpc/shared": "0.0.0-next.32a6de9",
64
+ "@orpc/standard-server": "0.0.0-next.32a6de9",
65
+ "@orpc/standard-server-fetch": "0.0.0-next.32a6de9",
66
+ "@orpc/standard-server-node": "0.0.0-next.32a6de9"
67
67
  },
68
68
  "devDependencies": {
69
69
  "supertest": "^7.0.0"