@orpc/server 0.0.0-next.75f1e0e → 0.0.0-next.7605f6c
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.
- package/README.md +127 -15
- package/dist/adapters/aws-lambda/index.d.mts +9 -8
- package/dist/adapters/aws-lambda/index.d.ts +9 -8
- package/dist/adapters/aws-lambda/index.mjs +7 -8
- package/dist/adapters/bun-ws/index.d.mts +14 -13
- package/dist/adapters/bun-ws/index.d.ts +14 -13
- package/dist/adapters/bun-ws/index.mjs +17 -21
- package/dist/adapters/crossws/index.d.mts +10 -7
- package/dist/adapters/crossws/index.d.ts +10 -7
- package/dist/adapters/crossws/index.mjs +12 -18
- package/dist/adapters/fastify/index.d.mts +53 -0
- package/dist/adapters/fastify/index.d.ts +53 -0
- package/dist/adapters/fastify/index.mjs +52 -0
- package/dist/adapters/fetch/index.d.mts +57 -11
- package/dist/adapters/fetch/index.d.ts +57 -11
- package/dist/adapters/fetch/index.mjs +75 -6
- package/dist/adapters/message-port/index.d.mts +42 -13
- package/dist/adapters/message-port/index.d.ts +42 -13
- package/dist/adapters/message-port/index.mjs +34 -20
- package/dist/adapters/node/index.d.mts +34 -12
- package/dist/adapters/node/index.d.ts +34 -12
- package/dist/adapters/node/index.mjs +70 -15
- package/dist/adapters/standard/index.d.mts +8 -13
- package/dist/adapters/standard/index.d.ts +8 -13
- package/dist/adapters/standard/index.mjs +3 -2
- package/dist/adapters/standard-peer/index.d.mts +18 -0
- package/dist/adapters/standard-peer/index.d.ts +18 -0
- package/dist/adapters/standard-peer/index.mjs +21 -0
- package/dist/adapters/websocket/index.d.mts +41 -12
- package/dist/adapters/websocket/index.d.ts +41 -12
- package/dist/adapters/websocket/index.mjs +50 -21
- package/dist/adapters/ws/index.d.mts +13 -10
- package/dist/adapters/ws/index.d.ts +13 -10
- package/dist/adapters/ws/index.mjs +14 -15
- package/dist/helpers/index.d.mts +149 -0
- package/dist/helpers/index.d.ts +149 -0
- package/dist/helpers/index.mjs +198 -0
- package/dist/hibernation/index.d.mts +44 -0
- package/dist/hibernation/index.d.ts +44 -0
- package/dist/hibernation/index.mjs +65 -0
- package/dist/index.d.mts +112 -143
- package/dist/index.d.ts +112 -143
- package/dist/index.mjs +38 -34
- package/dist/plugins/index.d.mts +58 -10
- package/dist/plugins/index.d.ts +58 -10
- package/dist/plugins/index.mjs +134 -59
- package/dist/shared/{server.-ACo36I0.d.ts → server.7cEtMB30.d.ts} +3 -3
- package/dist/shared/server.B8gYOD5g.d.mts +12 -0
- package/dist/shared/{server.Dq8xr7PQ.d.mts → server.BqadksTP.d.mts} +3 -3
- package/dist/shared/server.C8_sRzQB.d.mts +42 -0
- package/dist/shared/server.ChUyt5-i.d.mts +32 -0
- package/dist/shared/server.ChyoA9XY.d.ts +42 -0
- package/dist/shared/{server.DG7Tamti.mjs → server.DEBcqOjg.mjs} +127 -76
- package/dist/shared/server.EfTOZ2Q7.d.ts +12 -0
- package/dist/shared/{server.BW-nUGgA.mjs → server.TEVCLCFC.mjs} +3 -0
- package/dist/shared/{server.CHvOkcM3.mjs → server.ZxHCEN1h.mjs} +81 -41
- package/dist/shared/{server.DD2C4ujN.d.mts → server.qKsRrdxW.d.mts} +14 -13
- package/dist/shared/{server.DD2C4ujN.d.ts → server.qKsRrdxW.d.ts} +14 -13
- package/dist/shared/server.yoEB3Fx4.d.ts +32 -0
- package/package.json +42 -16
- package/dist/shared/server.BPAWobQg.d.ts +0 -12
- package/dist/shared/server.Bd52nNaH.d.mts +0 -12
- package/dist/shared/server.BliFSTnG.d.mts +0 -10
- package/dist/shared/server.IG2MjhrD.d.ts +0 -10
package/dist/plugins/index.mjs
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { value, isAsyncIteratorObject } from '@orpc/shared';
|
|
1
|
+
import { runWithSpan, value, setSpanError, isAsyncIteratorObject, AsyncIteratorClass, clone } from '@orpc/shared';
|
|
2
2
|
import { flattenHeader } from '@orpc/standard-server';
|
|
3
3
|
import { parseBatchRequest, toBatchResponse } from '@orpc/standard-server/batch';
|
|
4
|
+
import { toFetchHeaders } from '@orpc/standard-server-fetch';
|
|
4
5
|
import { ORPCError } from '@orpc/client';
|
|
5
|
-
export { S as StrictGetMethodPlugin } from '../shared/server.
|
|
6
|
+
export { S as StrictGetMethodPlugin } from '../shared/server.TEVCLCFC.mjs';
|
|
6
7
|
import '@orpc/contract';
|
|
7
8
|
|
|
8
9
|
class BatchHandlerPlugin {
|
|
@@ -32,65 +33,76 @@ class BatchHandlerPlugin {
|
|
|
32
33
|
}
|
|
33
34
|
let isParsing = false;
|
|
34
35
|
try {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
return options2.next({ ...options2, request: { ...mapped, body: () => Promise.resolve(mapped.body) } }).then(({ response: response2, matched }) => {
|
|
53
|
-
if (matched) {
|
|
54
|
-
if (response2.body instanceof Blob || response2.body instanceof FormData || isAsyncIteratorObject(response2.body)) {
|
|
55
|
-
return {
|
|
56
|
-
index,
|
|
57
|
-
status: 500,
|
|
58
|
-
headers: {},
|
|
59
|
-
body: "Batch responses do not support file/blob, or event-iterator. Please call this procedure separately outside of the batch request."
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
return { ...response2, index };
|
|
36
|
+
return await runWithSpan({ name: "handle_batch_request" }, async (span) => {
|
|
37
|
+
const mode = xHeader === "buffered" ? "buffered" : "streaming";
|
|
38
|
+
isParsing = true;
|
|
39
|
+
const parsed = parseBatchRequest({ ...options2.request, body: await options2.request.body() });
|
|
40
|
+
isParsing = false;
|
|
41
|
+
span?.setAttribute("batch.mode", mode);
|
|
42
|
+
span?.setAttribute("batch.size", parsed.length);
|
|
43
|
+
const maxSize = await value(this.maxSize, options2);
|
|
44
|
+
if (parsed.length > maxSize) {
|
|
45
|
+
const message = "Batch request size exceeds the maximum allowed size";
|
|
46
|
+
setSpanError(span, message);
|
|
47
|
+
return {
|
|
48
|
+
matched: true,
|
|
49
|
+
response: {
|
|
50
|
+
status: 413,
|
|
51
|
+
headers: {},
|
|
52
|
+
body: message
|
|
63
53
|
}
|
|
64
|
-
|
|
65
|
-
}).catch(() => {
|
|
66
|
-
return { index, status: 500, headers: {}, body: "Internal server error" };
|
|
67
|
-
});
|
|
54
|
+
};
|
|
68
55
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
56
|
+
const responses = parsed.map(
|
|
57
|
+
(request, index) => {
|
|
58
|
+
const mapped = this.mapRequestItem(request, options2);
|
|
59
|
+
return options2.next({ ...options2, request: { ...mapped, body: () => Promise.resolve(mapped.body) } }).then(({ response: response2, matched }) => {
|
|
60
|
+
span?.addEvent(`response.${index}.${matched ? "success" : "not_matched"}`);
|
|
61
|
+
if (matched) {
|
|
62
|
+
if (response2.body instanceof Blob || response2.body instanceof FormData || isAsyncIteratorObject(response2.body)) {
|
|
63
|
+
return {
|
|
64
|
+
index,
|
|
65
|
+
status: 500,
|
|
66
|
+
headers: {},
|
|
67
|
+
body: "Batch responses do not support file/blob, or event-iterator. Please call this procedure separately outside of the batch request."
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
return { ...response2, index };
|
|
71
|
+
}
|
|
72
|
+
return { index, status: 404, headers: {}, body: "No procedure matched" };
|
|
73
|
+
}).catch((err) => {
|
|
74
|
+
Promise.reject(err);
|
|
75
|
+
return { index, status: 500, headers: {}, body: "Internal server error" };
|
|
76
|
+
});
|
|
87
77
|
}
|
|
88
|
-
|
|
78
|
+
);
|
|
79
|
+
await Promise.race(responses);
|
|
80
|
+
const status = await value(this.successStatus, responses, options2);
|
|
81
|
+
const headers = await value(this.headers, responses, options2);
|
|
82
|
+
const promises = [...responses];
|
|
83
|
+
const response = await toBatchResponse({
|
|
84
|
+
status,
|
|
85
|
+
headers,
|
|
86
|
+
mode,
|
|
87
|
+
body: new AsyncIteratorClass(
|
|
88
|
+
async () => {
|
|
89
|
+
const handling = promises.filter((p) => p !== void 0);
|
|
90
|
+
if (handling.length <= 0) {
|
|
91
|
+
return { done: true, value: void 0 };
|
|
92
|
+
}
|
|
93
|
+
const value2 = await Promise.race(handling);
|
|
94
|
+
promises[value2.index] = void 0;
|
|
95
|
+
return { done: false, value: value2 };
|
|
96
|
+
},
|
|
97
|
+
async () => {
|
|
98
|
+
}
|
|
99
|
+
)
|
|
100
|
+
});
|
|
101
|
+
return {
|
|
102
|
+
matched: true,
|
|
103
|
+
response
|
|
104
|
+
};
|
|
89
105
|
});
|
|
90
|
-
return {
|
|
91
|
-
matched: true,
|
|
92
|
-
response
|
|
93
|
-
};
|
|
94
106
|
} catch (cause) {
|
|
95
107
|
if (isParsing) {
|
|
96
108
|
return {
|
|
@@ -177,6 +189,22 @@ class CORSPlugin {
|
|
|
177
189
|
}
|
|
178
190
|
}
|
|
179
191
|
|
|
192
|
+
class RequestHeadersPlugin {
|
|
193
|
+
init(options) {
|
|
194
|
+
options.rootInterceptors ??= [];
|
|
195
|
+
options.rootInterceptors.push((interceptorOptions) => {
|
|
196
|
+
const reqHeaders = interceptorOptions.context.reqHeaders ?? toFetchHeaders(interceptorOptions.request.headers);
|
|
197
|
+
return interceptorOptions.next({
|
|
198
|
+
...interceptorOptions,
|
|
199
|
+
context: {
|
|
200
|
+
...interceptorOptions.context,
|
|
201
|
+
reqHeaders
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
180
208
|
class ResponseHeadersPlugin {
|
|
181
209
|
init(options) {
|
|
182
210
|
options.rootInterceptors ??= [];
|
|
@@ -192,7 +220,7 @@ class ResponseHeadersPlugin {
|
|
|
192
220
|
if (!result.matched) {
|
|
193
221
|
return result;
|
|
194
222
|
}
|
|
195
|
-
const responseHeaders = result.response.headers;
|
|
223
|
+
const responseHeaders = clone(result.response.headers);
|
|
196
224
|
for (const [key, value] of resHeaders) {
|
|
197
225
|
if (Array.isArray(responseHeaders[key])) {
|
|
198
226
|
responseHeaders[key].push(value);
|
|
@@ -202,8 +230,55 @@ class ResponseHeadersPlugin {
|
|
|
202
230
|
responseHeaders[key] = value;
|
|
203
231
|
}
|
|
204
232
|
}
|
|
233
|
+
return {
|
|
234
|
+
...result,
|
|
235
|
+
response: {
|
|
236
|
+
...result.response,
|
|
237
|
+
headers: responseHeaders
|
|
238
|
+
}
|
|
239
|
+
};
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
class experimental_RethrowHandlerPlugin {
|
|
245
|
+
filter;
|
|
246
|
+
CONTEXT_SYMBOL = Symbol("ORPC_RETHROW_HANDLER_PLUGIN_CONTEXT");
|
|
247
|
+
constructor(options) {
|
|
248
|
+
this.filter = options.filter;
|
|
249
|
+
}
|
|
250
|
+
init(options) {
|
|
251
|
+
options.rootInterceptors ??= [];
|
|
252
|
+
options.interceptors ??= [];
|
|
253
|
+
options.rootInterceptors.push(async (options2) => {
|
|
254
|
+
const pluginContext = {};
|
|
255
|
+
const result = await options2.next({
|
|
256
|
+
...options2,
|
|
257
|
+
context: {
|
|
258
|
+
...options2.context,
|
|
259
|
+
[this.CONTEXT_SYMBOL]: pluginContext
|
|
260
|
+
}
|
|
261
|
+
});
|
|
262
|
+
if (pluginContext.error) {
|
|
263
|
+
throw pluginContext.error.value;
|
|
264
|
+
}
|
|
205
265
|
return result;
|
|
206
266
|
});
|
|
267
|
+
options.interceptors.unshift(async (options2) => {
|
|
268
|
+
const pluginContext = options2.context[this.CONTEXT_SYMBOL];
|
|
269
|
+
if (!pluginContext) {
|
|
270
|
+
throw new TypeError("[RethrowHandlerPlugin] Rethrow handler context has been corrupted or modified by another plugin or interceptor");
|
|
271
|
+
}
|
|
272
|
+
try {
|
|
273
|
+
return await options2.next();
|
|
274
|
+
} catch (error) {
|
|
275
|
+
if (value(this.filter, error, options2)) {
|
|
276
|
+
pluginContext.error = { value: error };
|
|
277
|
+
return { matched: false, response: void 0 };
|
|
278
|
+
}
|
|
279
|
+
throw error;
|
|
280
|
+
}
|
|
281
|
+
});
|
|
207
282
|
}
|
|
208
283
|
}
|
|
209
284
|
|
|
@@ -250,4 +325,4 @@ class SimpleCsrfProtectionHandlerPlugin {
|
|
|
250
325
|
}
|
|
251
326
|
}
|
|
252
327
|
|
|
253
|
-
export { BatchHandlerPlugin, CORSPlugin, ResponseHeadersPlugin, SimpleCsrfProtectionHandlerPlugin };
|
|
328
|
+
export { BatchHandlerPlugin, CORSPlugin, RequestHeadersPlugin, ResponseHeadersPlugin, SimpleCsrfProtectionHandlerPlugin, experimental_RethrowHandlerPlugin };
|
|
@@ -2,7 +2,7 @@ import { HTTPPath, ORPCError } from '@orpc/client';
|
|
|
2
2
|
import { Meta } from '@orpc/contract';
|
|
3
3
|
import { Interceptor } from '@orpc/shared';
|
|
4
4
|
import { StandardResponse, StandardLazyRequest } from '@orpc/standard-server';
|
|
5
|
-
import { C as Context, R as Router,
|
|
5
|
+
import { C as Context, R as Router, b as AnyRouter, A as AnyProcedure, d as ProcedureClientInterceptorOptions } from './server.qKsRrdxW.js';
|
|
6
6
|
|
|
7
7
|
interface StandardHandlerPlugin<T extends Context> {
|
|
8
8
|
order?: number;
|
|
@@ -70,5 +70,5 @@ declare class StandardHandler<T extends Context> {
|
|
|
70
70
|
handle(request: StandardLazyRequest, options: StandardHandleOptions<T>): Promise<StandardHandleResult>;
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
-
export { CompositeStandardHandlerPlugin as C, StandardHandler as
|
|
74
|
-
export type {
|
|
73
|
+
export { CompositeStandardHandlerPlugin as C, StandardHandler as f };
|
|
74
|
+
export type { StandardCodec as S, StandardParams as a, StandardHandleOptions as b, StandardHandleResult as c, StandardHandlerInterceptorOptions as d, StandardHandlerOptions as e, StandardHandlerPlugin as g, StandardMatchResult as h, StandardMatcher as i };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { C as Context } from './server.qKsRrdxW.mjs';
|
|
2
|
+
import { b as StandardHandleOptions } from './server.BqadksTP.mjs';
|
|
3
|
+
|
|
4
|
+
type FriendlyStandardHandleOptions<T extends Context> = Omit<StandardHandleOptions<T>, 'context'> & (Record<never, never> extends T ? {
|
|
5
|
+
context?: T;
|
|
6
|
+
} : {
|
|
7
|
+
context: T;
|
|
8
|
+
});
|
|
9
|
+
declare function resolveFriendlyStandardHandleOptions<T extends Context>(options: FriendlyStandardHandleOptions<T>): StandardHandleOptions<T>;
|
|
10
|
+
|
|
11
|
+
export { resolveFriendlyStandardHandleOptions as r };
|
|
12
|
+
export type { FriendlyStandardHandleOptions as F };
|
|
@@ -2,7 +2,7 @@ import { HTTPPath, ORPCError } from '@orpc/client';
|
|
|
2
2
|
import { Meta } from '@orpc/contract';
|
|
3
3
|
import { Interceptor } from '@orpc/shared';
|
|
4
4
|
import { StandardResponse, StandardLazyRequest } from '@orpc/standard-server';
|
|
5
|
-
import { C as Context, R as Router,
|
|
5
|
+
import { C as Context, R as Router, b as AnyRouter, A as AnyProcedure, d as ProcedureClientInterceptorOptions } from './server.qKsRrdxW.mjs';
|
|
6
6
|
|
|
7
7
|
interface StandardHandlerPlugin<T extends Context> {
|
|
8
8
|
order?: number;
|
|
@@ -70,5 +70,5 @@ declare class StandardHandler<T extends Context> {
|
|
|
70
70
|
handle(request: StandardLazyRequest, options: StandardHandleOptions<T>): Promise<StandardHandleResult>;
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
-
export { CompositeStandardHandlerPlugin as C, StandardHandler as
|
|
74
|
-
export type {
|
|
73
|
+
export { CompositeStandardHandlerPlugin as C, StandardHandler as f };
|
|
74
|
+
export type { StandardCodec as S, StandardParams as a, StandardHandleOptions as b, StandardHandleResult as c, StandardHandlerInterceptorOptions as d, StandardHandlerOptions as e, StandardHandlerPlugin as g, StandardMatchResult as h, StandardMatcher as i };
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { ErrorMap, EnhanceRouteOptions, MergedErrorMap, AnyContractRouter, AnyContractProcedure } from '@orpc/contract';
|
|
2
|
+
import { a as AnyMiddleware, L as Lazyable, b as AnyRouter, C as Context, c as Lazy, A as AnyProcedure, P as Procedure, M as MergedInitialContext } from './server.qKsRrdxW.mjs';
|
|
3
|
+
|
|
4
|
+
declare function getRouter<T extends Lazyable<AnyRouter | undefined>>(router: T, path: readonly string[]): T extends Lazy<any> ? Lazy<AnyRouter | undefined> : Lazyable<AnyRouter | undefined>;
|
|
5
|
+
type AccessibleLazyRouter<T extends Lazyable<AnyRouter | undefined>> = T extends Lazy<infer U extends AnyRouter | undefined | Lazy<AnyRouter | undefined>> ? AccessibleLazyRouter<U> : T extends AnyProcedure | undefined ? Lazy<T> : Lazy<T> & {
|
|
6
|
+
[K in keyof T]: T[K] extends Lazyable<AnyRouter> ? AccessibleLazyRouter<T[K]> : never;
|
|
7
|
+
};
|
|
8
|
+
declare function createAccessibleLazyRouter<T extends Lazy<AnyRouter | undefined>>(lazied: T): AccessibleLazyRouter<T>;
|
|
9
|
+
type EnhancedRouter<T extends Lazyable<AnyRouter>, TInitialContext extends Context, TCurrentContext extends Context, TErrorMap extends ErrorMap> = T extends Lazy<infer U extends AnyRouter> ? AccessibleLazyRouter<EnhancedRouter<U, TInitialContext, TCurrentContext, TErrorMap>> : T extends Procedure<infer UInitialContext, infer UCurrentContext, infer UInputSchema, infer UOutputSchema, infer UErrorMap, infer UMeta> ? Procedure<MergedInitialContext<TInitialContext, UInitialContext, TCurrentContext>, UCurrentContext, UInputSchema, UOutputSchema, MergedErrorMap<TErrorMap, UErrorMap>, UMeta> : {
|
|
10
|
+
[K in keyof T]: T[K] extends Lazyable<AnyRouter> ? EnhancedRouter<T[K], TInitialContext, TCurrentContext, TErrorMap> : never;
|
|
11
|
+
};
|
|
12
|
+
interface EnhanceRouterOptions<TErrorMap extends ErrorMap> extends EnhanceRouteOptions {
|
|
13
|
+
middlewares: readonly AnyMiddleware[];
|
|
14
|
+
errorMap: TErrorMap;
|
|
15
|
+
dedupeLeadingMiddlewares: boolean;
|
|
16
|
+
}
|
|
17
|
+
declare function enhanceRouter<T extends Lazyable<AnyRouter>, TInitialContext extends Context, TCurrentContext extends Context, TErrorMap extends ErrorMap>(router: T, options: EnhanceRouterOptions<TErrorMap>): EnhancedRouter<T, TInitialContext, TCurrentContext, TErrorMap>;
|
|
18
|
+
interface TraverseContractProceduresOptions {
|
|
19
|
+
router: AnyContractRouter | AnyRouter;
|
|
20
|
+
path: readonly string[];
|
|
21
|
+
}
|
|
22
|
+
interface TraverseContractProcedureCallbackOptions {
|
|
23
|
+
contract: AnyContractProcedure | AnyProcedure;
|
|
24
|
+
path: readonly string[];
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* @deprecated Use `TraverseContractProcedureCallbackOptions` instead.
|
|
28
|
+
*/
|
|
29
|
+
type ContractProcedureCallbackOptions = TraverseContractProcedureCallbackOptions;
|
|
30
|
+
interface LazyTraverseContractProceduresOptions {
|
|
31
|
+
router: Lazy<AnyRouter>;
|
|
32
|
+
path: readonly string[];
|
|
33
|
+
}
|
|
34
|
+
declare function traverseContractProcedures(options: TraverseContractProceduresOptions, callback: (options: TraverseContractProcedureCallbackOptions) => void, lazyOptions?: LazyTraverseContractProceduresOptions[]): LazyTraverseContractProceduresOptions[];
|
|
35
|
+
declare function resolveContractProcedures(options: TraverseContractProceduresOptions, callback: (options: TraverseContractProcedureCallbackOptions) => void): Promise<void>;
|
|
36
|
+
type UnlaziedRouter<T extends AnyRouter> = T extends AnyProcedure ? T : {
|
|
37
|
+
[K in keyof T]: T[K] extends Lazyable<infer U extends AnyRouter> ? UnlaziedRouter<U> : never;
|
|
38
|
+
};
|
|
39
|
+
declare function unlazyRouter<T extends AnyRouter>(router: T): Promise<UnlaziedRouter<T>>;
|
|
40
|
+
|
|
41
|
+
export { createAccessibleLazyRouter as c, enhanceRouter as e, getRouter as g, resolveContractProcedures as r, traverseContractProcedures as t, unlazyRouter as u };
|
|
42
|
+
export type { AccessibleLazyRouter as A, ContractProcedureCallbackOptions as C, EnhanceRouterOptions as E, LazyTraverseContractProceduresOptions as L, TraverseContractProcedureCallbackOptions as T, UnlaziedRouter as U, EnhancedRouter as a, TraverseContractProceduresOptions as b };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { StandardRPCJsonSerializerOptions } from '@orpc/client/standard';
|
|
2
|
+
import { b as AnyRouter, C as Context, R as Router } from './server.qKsRrdxW.mjs';
|
|
3
|
+
import { i as StandardMatcher, h as StandardMatchResult, e as StandardHandlerOptions, f as StandardHandler } from './server.BqadksTP.mjs';
|
|
4
|
+
import { HTTPPath } from '@orpc/client';
|
|
5
|
+
import { Value } from '@orpc/shared';
|
|
6
|
+
import { T as TraverseContractProcedureCallbackOptions } from './server.C8_sRzQB.mjs';
|
|
7
|
+
|
|
8
|
+
interface StandardRPCMatcherOptions {
|
|
9
|
+
/**
|
|
10
|
+
* Filter procedures. Return `false` to exclude a procedure from matching.
|
|
11
|
+
*
|
|
12
|
+
* @default true
|
|
13
|
+
*/
|
|
14
|
+
filter?: Value<boolean, [options: TraverseContractProcedureCallbackOptions]>;
|
|
15
|
+
}
|
|
16
|
+
declare class StandardRPCMatcher implements StandardMatcher {
|
|
17
|
+
private readonly filter;
|
|
18
|
+
private readonly tree;
|
|
19
|
+
private pendingRouters;
|
|
20
|
+
constructor(options?: StandardRPCMatcherOptions);
|
|
21
|
+
init(router: AnyRouter, path?: readonly string[]): void;
|
|
22
|
+
match(_method: string, pathname: HTTPPath): Promise<StandardMatchResult>;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
interface StandardRPCHandlerOptions<T extends Context> extends StandardHandlerOptions<T>, StandardRPCJsonSerializerOptions, StandardRPCMatcherOptions {
|
|
26
|
+
}
|
|
27
|
+
declare class StandardRPCHandler<T extends Context> extends StandardHandler<T> {
|
|
28
|
+
constructor(router: Router<any, T>, options?: StandardRPCHandlerOptions<T>);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export { StandardRPCHandler as a, StandardRPCMatcher as c };
|
|
32
|
+
export type { StandardRPCHandlerOptions as S, StandardRPCMatcherOptions as b };
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { ErrorMap, EnhanceRouteOptions, MergedErrorMap, AnyContractRouter, AnyContractProcedure } from '@orpc/contract';
|
|
2
|
+
import { a as AnyMiddleware, L as Lazyable, b as AnyRouter, C as Context, c as Lazy, A as AnyProcedure, P as Procedure, M as MergedInitialContext } from './server.qKsRrdxW.js';
|
|
3
|
+
|
|
4
|
+
declare function getRouter<T extends Lazyable<AnyRouter | undefined>>(router: T, path: readonly string[]): T extends Lazy<any> ? Lazy<AnyRouter | undefined> : Lazyable<AnyRouter | undefined>;
|
|
5
|
+
type AccessibleLazyRouter<T extends Lazyable<AnyRouter | undefined>> = T extends Lazy<infer U extends AnyRouter | undefined | Lazy<AnyRouter | undefined>> ? AccessibleLazyRouter<U> : T extends AnyProcedure | undefined ? Lazy<T> : Lazy<T> & {
|
|
6
|
+
[K in keyof T]: T[K] extends Lazyable<AnyRouter> ? AccessibleLazyRouter<T[K]> : never;
|
|
7
|
+
};
|
|
8
|
+
declare function createAccessibleLazyRouter<T extends Lazy<AnyRouter | undefined>>(lazied: T): AccessibleLazyRouter<T>;
|
|
9
|
+
type EnhancedRouter<T extends Lazyable<AnyRouter>, TInitialContext extends Context, TCurrentContext extends Context, TErrorMap extends ErrorMap> = T extends Lazy<infer U extends AnyRouter> ? AccessibleLazyRouter<EnhancedRouter<U, TInitialContext, TCurrentContext, TErrorMap>> : T extends Procedure<infer UInitialContext, infer UCurrentContext, infer UInputSchema, infer UOutputSchema, infer UErrorMap, infer UMeta> ? Procedure<MergedInitialContext<TInitialContext, UInitialContext, TCurrentContext>, UCurrentContext, UInputSchema, UOutputSchema, MergedErrorMap<TErrorMap, UErrorMap>, UMeta> : {
|
|
10
|
+
[K in keyof T]: T[K] extends Lazyable<AnyRouter> ? EnhancedRouter<T[K], TInitialContext, TCurrentContext, TErrorMap> : never;
|
|
11
|
+
};
|
|
12
|
+
interface EnhanceRouterOptions<TErrorMap extends ErrorMap> extends EnhanceRouteOptions {
|
|
13
|
+
middlewares: readonly AnyMiddleware[];
|
|
14
|
+
errorMap: TErrorMap;
|
|
15
|
+
dedupeLeadingMiddlewares: boolean;
|
|
16
|
+
}
|
|
17
|
+
declare function enhanceRouter<T extends Lazyable<AnyRouter>, TInitialContext extends Context, TCurrentContext extends Context, TErrorMap extends ErrorMap>(router: T, options: EnhanceRouterOptions<TErrorMap>): EnhancedRouter<T, TInitialContext, TCurrentContext, TErrorMap>;
|
|
18
|
+
interface TraverseContractProceduresOptions {
|
|
19
|
+
router: AnyContractRouter | AnyRouter;
|
|
20
|
+
path: readonly string[];
|
|
21
|
+
}
|
|
22
|
+
interface TraverseContractProcedureCallbackOptions {
|
|
23
|
+
contract: AnyContractProcedure | AnyProcedure;
|
|
24
|
+
path: readonly string[];
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* @deprecated Use `TraverseContractProcedureCallbackOptions` instead.
|
|
28
|
+
*/
|
|
29
|
+
type ContractProcedureCallbackOptions = TraverseContractProcedureCallbackOptions;
|
|
30
|
+
interface LazyTraverseContractProceduresOptions {
|
|
31
|
+
router: Lazy<AnyRouter>;
|
|
32
|
+
path: readonly string[];
|
|
33
|
+
}
|
|
34
|
+
declare function traverseContractProcedures(options: TraverseContractProceduresOptions, callback: (options: TraverseContractProcedureCallbackOptions) => void, lazyOptions?: LazyTraverseContractProceduresOptions[]): LazyTraverseContractProceduresOptions[];
|
|
35
|
+
declare function resolveContractProcedures(options: TraverseContractProceduresOptions, callback: (options: TraverseContractProcedureCallbackOptions) => void): Promise<void>;
|
|
36
|
+
type UnlaziedRouter<T extends AnyRouter> = T extends AnyProcedure ? T : {
|
|
37
|
+
[K in keyof T]: T[K] extends Lazyable<infer U extends AnyRouter> ? UnlaziedRouter<U> : never;
|
|
38
|
+
};
|
|
39
|
+
declare function unlazyRouter<T extends AnyRouter>(router: T): Promise<UnlaziedRouter<T>>;
|
|
40
|
+
|
|
41
|
+
export { createAccessibleLazyRouter as c, enhanceRouter as e, getRouter as g, resolveContractProcedures as r, traverseContractProcedures as t, unlazyRouter as u };
|
|
42
|
+
export type { AccessibleLazyRouter as A, ContractProcedureCallbackOptions as C, EnhanceRouterOptions as E, LazyTraverseContractProceduresOptions as L, TraverseContractProcedureCallbackOptions as T, UnlaziedRouter as U, EnhancedRouter as a, TraverseContractProceduresOptions as b };
|