@trpc/server 11.0.0-alpha-tmp-export-from-main.218 → 11.0.0-alpha-tmp-export-from-main-nuke-core.239
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/dist/@trpc/server/http.d.ts +7 -0
- package/dist/@trpc/server/http.d.ts.map +1 -0
- package/dist/@trpc/server/index.d.ts +69 -0
- package/dist/@trpc/server/index.d.ts.map +1 -0
- package/dist/@trpc/server/rpc.d.ts +3 -0
- package/dist/@trpc/server/rpc.d.ts.map +1 -0
- package/dist/adapters/aws-lambda/index.d.ts +1 -2
- package/dist/adapters/aws-lambda/index.d.ts.map +1 -1
- package/dist/adapters/aws-lambda/index.js +6 -4
- package/dist/adapters/aws-lambda/index.mjs +4 -2
- package/dist/adapters/aws-lambda/utils.d.ts +2 -3
- package/dist/adapters/aws-lambda/utils.d.ts.map +1 -1
- package/dist/adapters/aws-lambda/utils.js +5 -4
- package/dist/adapters/aws-lambda/utils.mjs +3 -2
- package/dist/adapters/express.d.ts +1 -2
- package/dist/adapters/express.d.ts.map +1 -1
- package/dist/adapters/fastify/fastifyRequestHandler.d.ts +2 -2
- package/dist/adapters/fastify/fastifyRequestHandler.d.ts.map +1 -1
- package/dist/adapters/fastify/fastifyRequestHandler.js +6 -3
- package/dist/adapters/fastify/fastifyRequestHandler.mjs +4 -1
- package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts +1 -2
- package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts.map +1 -1
- package/dist/adapters/fastify/fastifyTRPCPlugin.js +0 -1
- package/dist/adapters/fastify/fastifyTRPCPlugin.mjs +0 -1
- package/dist/adapters/fetch/fetchRequestHandler.d.ts +1 -2
- package/dist/adapters/fetch/fetchRequestHandler.d.ts.map +1 -1
- package/dist/adapters/fetch/fetchRequestHandler.js +6 -4
- package/dist/adapters/fetch/fetchRequestHandler.mjs +4 -2
- package/dist/adapters/fetch/types.d.ts +2 -3
- package/dist/adapters/fetch/types.d.ts.map +1 -1
- package/dist/adapters/next.d.ts +1 -3
- package/dist/adapters/next.d.ts.map +1 -1
- package/dist/adapters/next.js +6 -4
- package/dist/adapters/next.mjs +4 -2
- package/dist/adapters/node-http/content-type/json/getPostBody.d.ts +1 -1
- package/dist/adapters/node-http/content-type/json/getPostBody.d.ts.map +1 -1
- package/dist/adapters/node-http/content-type/json/getPostBody.js +4 -2
- package/dist/adapters/node-http/content-type/json/getPostBody.mjs +3 -1
- package/dist/adapters/node-http/content-type/json/index.js +4 -2
- package/dist/adapters/node-http/content-type/json/index.mjs +3 -1
- package/dist/adapters/node-http/internals/contentType.d.ts +2 -2
- package/dist/adapters/node-http/internals/contentType.d.ts.map +1 -1
- package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts +1 -2
- package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts.map +1 -1
- package/dist/adapters/node-http/nodeHTTPRequestHandler.js +6 -4
- package/dist/adapters/node-http/nodeHTTPRequestHandler.mjs +4 -2
- package/dist/adapters/node-http/types.d.ts +3 -4
- package/dist/adapters/node-http/types.d.ts.map +1 -1
- package/dist/adapters/standalone.d.ts +1 -2
- package/dist/adapters/standalone.d.ts.map +1 -1
- package/dist/adapters/standalone.js +1 -0
- package/dist/adapters/standalone.mjs +1 -0
- package/dist/adapters/ws.d.ts +3 -2
- package/dist/adapters/ws.d.ts.map +1 -1
- package/dist/adapters/ws.js +33 -26
- package/dist/adapters/ws.mjs +8 -1
- package/dist/bundle-analysis.json +757 -0
- package/dist/http.d.ts +1 -6
- package/dist/http.d.ts.map +1 -1
- package/dist/http.js +11 -21
- package/dist/http.mjs +6 -1
- package/dist/index.d.ts +1 -68
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -41
- package/dist/index.mjs +8 -1
- package/dist/observable/index.d.ts +5 -0
- package/dist/observable/index.d.ts.map +1 -0
- package/dist/observable/index.js +13 -0
- package/dist/observable/index.mjs +2 -0
- package/dist/observable/observable.d.ts +13 -0
- package/dist/observable/observable.d.ts.map +1 -0
- package/dist/observable/observable.js +126 -0
- package/dist/observable/observable.mjs +122 -0
- package/dist/observable/operators.d.ts +8 -0
- package/dist/observable/operators.d.ts.map +1 -0
- package/dist/observable/operators.js +103 -0
- package/dist/observable/operators.mjs +99 -0
- package/dist/observable/types.d.ts +26 -0
- package/dist/observable/types.d.ts.map +1 -0
- package/dist/rpc.d.ts +1 -2
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +6 -13
- package/dist/rpc.mjs +3 -1
- package/dist/shared.d.ts +1 -1
- package/dist/shared.d.ts.map +1 -1
- package/dist/shared.js +6 -9
- package/dist/shared.mjs +4 -1
- package/dist/unstable-core-do-not-import/TRPCInferrable.d.ts +6 -0
- package/dist/unstable-core-do-not-import/TRPCInferrable.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/createProxy.d.ts +19 -0
- package/dist/unstable-core-do-not-import/createProxy.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/createProxy.js +52 -0
- package/dist/unstable-core-do-not-import/createProxy.mjs +49 -0
- package/dist/unstable-core-do-not-import/error/TRPCError.d.ts +13 -0
- package/dist/unstable-core-do-not-import/error/TRPCError.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/error/TRPCError.js +67 -0
- package/dist/unstable-core-do-not-import/error/TRPCError.mjs +63 -0
- package/dist/unstable-core-do-not-import/error/formatter.d.ts +33 -0
- package/dist/unstable-core-do-not-import/error/formatter.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/error/formatter.js +7 -0
- package/dist/unstable-core-do-not-import/error/formatter.mjs +5 -0
- package/dist/unstable-core-do-not-import/error/getErrorShape.d.ts +15 -0
- package/dist/unstable-core-do-not-import/error/getErrorShape.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/error/getErrorShape.js +31 -0
- package/dist/unstable-core-do-not-import/error/getErrorShape.mjs +29 -0
- package/dist/unstable-core-do-not-import/http/batchStreamFormatter.d.ts +24 -0
- package/dist/unstable-core-do-not-import/http/batchStreamFormatter.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/http/batchStreamFormatter.js +32 -0
- package/dist/unstable-core-do-not-import/http/batchStreamFormatter.mjs +30 -0
- package/dist/unstable-core-do-not-import/http/contentType.d.ts +29 -0
- package/dist/unstable-core-do-not-import/http/contentType.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/http/contentType.js +54 -0
- package/dist/unstable-core-do-not-import/http/contentType.mjs +52 -0
- package/dist/unstable-core-do-not-import/http/getHTTPStatusCode.d.ts +5 -0
- package/dist/unstable-core-do-not-import/http/getHTTPStatusCode.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/http/getHTTPStatusCode.js +51 -0
- package/dist/unstable-core-do-not-import/http/getHTTPStatusCode.mjs +48 -0
- package/dist/unstable-core-do-not-import/http/index.d.ts +7 -0
- package/dist/unstable-core-do-not-import/http/index.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/http/resolveHTTPResponse.d.ts +51 -0
- package/dist/unstable-core-do-not-import/http/resolveHTTPResponse.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/http/resolveHTTPResponse.js +295 -0
- package/dist/unstable-core-do-not-import/http/resolveHTTPResponse.mjs +293 -0
- package/dist/unstable-core-do-not-import/http/types.d.ts +96 -0
- package/dist/unstable-core-do-not-import/http/types.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/index.d.ts +37 -0
- package/dist/unstable-core-do-not-import/index.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/index.js +48 -0
- package/dist/unstable-core-do-not-import/index.mjs +16 -0
- package/dist/unstable-core-do-not-import/initTRPC.d.ts +96 -0
- package/dist/unstable-core-do-not-import/initTRPC.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/initTRPC.js +95 -0
- package/dist/unstable-core-do-not-import/initTRPC.mjs +93 -0
- package/dist/unstable-core-do-not-import/middleware.d.ts +105 -0
- package/dist/unstable-core-do-not-import/middleware.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/middleware.js +95 -0
- package/dist/unstable-core-do-not-import/middleware.mjs +89 -0
- package/dist/unstable-core-do-not-import/parser.d.ts +30 -0
- package/dist/unstable-core-do-not-import/parser.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/parser.js +37 -0
- package/dist/unstable-core-do-not-import/parser.mjs +35 -0
- package/dist/unstable-core-do-not-import/procedure.d.ts +72 -0
- package/dist/unstable-core-do-not-import/procedure.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/procedure.js +9 -0
- package/dist/unstable-core-do-not-import/procedure.mjs +7 -0
- package/dist/unstable-core-do-not-import/procedureBuilder.d.ts +101 -0
- package/dist/unstable-core-do-not-import/procedureBuilder.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/procedureBuilder.js +176 -0
- package/dist/unstable-core-do-not-import/procedureBuilder.mjs +173 -0
- package/dist/unstable-core-do-not-import/rootConfig.d.ts +75 -0
- package/dist/unstable-core-do-not-import/rootConfig.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/rootConfig.js +8 -0
- package/dist/unstable-core-do-not-import/rootConfig.mjs +6 -0
- package/dist/unstable-core-do-not-import/router.d.ts +85 -0
- package/dist/unstable-core-do-not-import/router.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/router.js +156 -0
- package/dist/unstable-core-do-not-import/router.mjs +151 -0
- package/dist/unstable-core-do-not-import/rpc/codes.d.ts +51 -0
- package/dist/unstable-core-do-not-import/rpc/codes.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/rpc/codes.js +38 -0
- package/dist/unstable-core-do-not-import/rpc/codes.mjs +35 -0
- package/dist/unstable-core-do-not-import/rpc/envelopes.d.ts +97 -0
- package/dist/unstable-core-do-not-import/rpc/envelopes.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/rpc/index.d.ts +5 -0
- package/dist/unstable-core-do-not-import/rpc/index.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/rpc/parseTRPCMessage.d.ts +5 -0
- package/dist/unstable-core-do-not-import/rpc/parseTRPCMessage.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/rpc/parseTRPCMessage.js +59 -0
- package/dist/unstable-core-do-not-import/rpc/parseTRPCMessage.mjs +57 -0
- package/dist/unstable-core-do-not-import/serialize.d.ts +62 -0
- package/dist/unstable-core-do-not-import/serialize.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/transformer.d.ts +107 -0
- package/dist/unstable-core-do-not-import/transformer.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/transformer.js +107 -0
- package/dist/unstable-core-do-not-import/transformer.mjs +102 -0
- package/dist/unstable-core-do-not-import/types.d.ts +98 -0
- package/dist/unstable-core-do-not-import/types.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/utils.d.ts +27 -0
- package/dist/unstable-core-do-not-import/utils.d.ts.map +1 -0
- package/dist/unstable-core-do-not-import/utils.js +44 -0
- package/dist/unstable-core-do-not-import/utils.mjs +39 -0
- package/package.json +53 -125
- package/src/@trpc/server/http.ts +26 -0
- package/src/@trpc/server/index.ts +105 -0
- package/src/@trpc/server/rpc.ts +26 -0
- package/src/adapters/aws-lambda/index.ts +4 -5
- package/src/adapters/aws-lambda/utils.ts +3 -4
- package/src/adapters/express.ts +1 -3
- package/src/adapters/fastify/fastifyRequestHandler.ts +6 -4
- package/src/adapters/fastify/fastifyTRPCPlugin.ts +1 -2
- package/src/adapters/fetch/fetchRequestHandler.ts +6 -4
- package/src/adapters/fetch/types.ts +2 -3
- package/src/adapters/next.ts +2 -4
- package/src/adapters/node-http/content-type/form-data/index.ts +1 -1
- package/src/adapters/node-http/content-type/json/getPostBody.ts +2 -2
- package/src/adapters/node-http/content-type/json/index.ts +1 -1
- package/src/adapters/node-http/internals/contentType.ts +2 -2
- package/src/adapters/node-http/nodeHTTPRequestHandler.ts +6 -4
- package/src/adapters/node-http/types.ts +4 -5
- package/src/adapters/standalone.ts +2 -2
- package/src/adapters/ws.ts +14 -13
- package/src/http.ts +1 -26
- package/src/index.ts +1 -105
- package/src/observable/index.ts +10 -0
- package/src/observable/observable.ts +158 -0
- package/src/observable/operators.ts +119 -0
- package/src/observable/types.ts +76 -0
- package/src/rpc.ts +1 -26
- package/src/shared.ts +1 -1
- package/src/unstable-core-do-not-import/TRPCInferrable.ts +9 -0
- package/src/unstable-core-do-not-import/createProxy.ts +59 -0
- package/src/unstable-core-do-not-import/error/TRPCError.ts +82 -0
- package/src/unstable-core-do-not-import/error/formatter.ts +51 -0
- package/src/unstable-core-do-not-import/error/getErrorShape.ts +36 -0
- package/src/unstable-core-do-not-import/http/batchStreamFormatter.ts +29 -0
- package/src/unstable-core-do-not-import/http/contentType.ts +99 -0
- package/src/unstable-core-do-not-import/http/getHTTPStatusCode.ts +57 -0
- package/src/unstable-core-do-not-import/http/index.ts +23 -0
- package/src/unstable-core-do-not-import/http/resolveHTTPResponse.ts +458 -0
- package/src/unstable-core-do-not-import/http/types.ts +111 -0
- package/src/unstable-core-do-not-import/index.ts +110 -0
- package/src/unstable-core-do-not-import/initTRPC.ts +206 -0
- package/src/unstable-core-do-not-import/middleware.ts +233 -0
- package/src/unstable-core-do-not-import/parser.ts +94 -0
- package/src/unstable-core-do-not-import/procedure.ts +108 -0
- package/src/unstable-core-do-not-import/procedureBuilder.ts +458 -0
- package/src/unstable-core-do-not-import/rootConfig.ts +90 -0
- package/src/unstable-core-do-not-import/router.ts +370 -0
- package/src/unstable-core-do-not-import/rpc/codes.ts +44 -0
- package/src/unstable-core-do-not-import/rpc/envelopes.ts +136 -0
- package/src/unstable-core-do-not-import/rpc/index.ts +21 -0
- package/src/unstable-core-do-not-import/rpc/parseTRPCMessage.ts +85 -0
- package/src/unstable-core-do-not-import/serialize.ts +122 -0
- package/src/unstable-core-do-not-import/transformer.ts +202 -0
- package/src/unstable-core-do-not-import/types.ts +151 -0
- package/src/unstable-core-do-not-import/utils.ts +59 -0
- package/unstable-core-do-not-import/index.d.ts +1 -0
- package/unstable-core-do-not-import/index.js +1 -0
- package/dist/@trpc-core-unstable-do-not-import-this-please.d.ts +0 -10
- package/dist/@trpc-core-unstable-do-not-import-this-please.d.ts.map +0 -1
- package/dist/@trpc-server/http.d.ts +0 -2
- package/dist/@trpc-server/http.d.ts.map +0 -1
- package/dist/observable.d.ts +0 -3
- package/dist/observable.d.ts.map +0 -1
- package/dist/observable.js +0 -30
- package/dist/observable.mjs +0 -1
- package/src/@trpc-core-unstable-do-not-import-this-please.ts +0 -146
- package/src/@trpc-server/http.ts +0 -2
- package/src/observable.ts +0 -16
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import type { TRPCError } from '../error/TRPCError';
|
|
2
|
+
import type { ProcedureType } from '../procedure';
|
|
3
|
+
import type {
|
|
4
|
+
AnyRouter,
|
|
5
|
+
inferRouterContext,
|
|
6
|
+
inferRouterError,
|
|
7
|
+
} from '../router';
|
|
8
|
+
import type { TRPCResponse } from '../rpc';
|
|
9
|
+
import type { Dict } from '../types';
|
|
10
|
+
|
|
11
|
+
export type HTTPHeaders = Dict<string[] | string>;
|
|
12
|
+
|
|
13
|
+
export interface HTTPResponse {
|
|
14
|
+
status: number;
|
|
15
|
+
headers?: HTTPHeaders;
|
|
16
|
+
body?: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export type ResponseChunk = [procedureIndex: number, responseBody: string];
|
|
20
|
+
|
|
21
|
+
export interface ResponseMeta {
|
|
22
|
+
status?: number;
|
|
23
|
+
headers?: HTTPHeaders;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* @internal
|
|
28
|
+
*/
|
|
29
|
+
export type ResponseMetaFn<TRouter extends AnyRouter> = (opts: {
|
|
30
|
+
data: TRPCResponse<unknown, inferRouterError<TRouter>>[];
|
|
31
|
+
ctx?: inferRouterContext<TRouter>;
|
|
32
|
+
/**
|
|
33
|
+
* The different tRPC paths requested
|
|
34
|
+
**/
|
|
35
|
+
paths?: string[];
|
|
36
|
+
type: ProcedureType | 'unknown';
|
|
37
|
+
errors: TRPCError[];
|
|
38
|
+
/**
|
|
39
|
+
* `true` if the `ResponseMeta` are being
|
|
40
|
+
* generated without knowing the response data
|
|
41
|
+
* (e.g. for streaming requests).
|
|
42
|
+
*/
|
|
43
|
+
eagerGeneration?: boolean;
|
|
44
|
+
}) => ResponseMeta;
|
|
45
|
+
|
|
46
|
+
export interface HTTPRequest {
|
|
47
|
+
method: string;
|
|
48
|
+
query: URLSearchParams;
|
|
49
|
+
headers: HTTPHeaders;
|
|
50
|
+
body: unknown;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Base interface for anything using HTTP
|
|
55
|
+
*/
|
|
56
|
+
export interface HTTPBaseHandlerOptions<TRouter extends AnyRouter, TRequest>
|
|
57
|
+
extends BaseHandlerOptions<TRouter, TRequest> {
|
|
58
|
+
/**
|
|
59
|
+
* Add handler to be called before response is sent to the user
|
|
60
|
+
* Useful for setting cache headers
|
|
61
|
+
* @link https://trpc.io/docs/v11/caching
|
|
62
|
+
*/
|
|
63
|
+
responseMeta?: ResponseMetaFn<TRouter>;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/** @internal */
|
|
67
|
+
export type ProcedureCall = {
|
|
68
|
+
type: ProcedureType;
|
|
69
|
+
input?: unknown;
|
|
70
|
+
path: string;
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Information about the incoming request
|
|
75
|
+
* @internal
|
|
76
|
+
*/
|
|
77
|
+
export type TRPCRequestInfo = {
|
|
78
|
+
isBatchCall: boolean;
|
|
79
|
+
calls: ProcedureCall[];
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Inner createContext function for `resolveHTTPResponse` used to forward `TRPCRequestInfo` to `createContext`
|
|
84
|
+
* @internal
|
|
85
|
+
*/
|
|
86
|
+
export type ResolveHTTPRequestOptionsContextFn<TRouter extends AnyRouter> =
|
|
87
|
+
(opts: { info: TRPCRequestInfo }) => Promise<inferRouterContext<TRouter>>;
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* @internal
|
|
91
|
+
*/
|
|
92
|
+
export type OnErrorFunction<TRouter extends AnyRouter, TRequest> = (opts: {
|
|
93
|
+
error: TRPCError;
|
|
94
|
+
type: ProcedureType | 'unknown';
|
|
95
|
+
path: string | undefined;
|
|
96
|
+
req: TRequest;
|
|
97
|
+
input: unknown;
|
|
98
|
+
ctx: inferRouterContext<TRouter> | undefined;
|
|
99
|
+
}) => void;
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Base interface for any response handler
|
|
103
|
+
* @internal
|
|
104
|
+
*/
|
|
105
|
+
export interface BaseHandlerOptions<TRouter extends AnyRouter, TRequest> {
|
|
106
|
+
onError?: OnErrorFunction<TRouter, TRequest>;
|
|
107
|
+
batching?: {
|
|
108
|
+
enabled: boolean;
|
|
109
|
+
};
|
|
110
|
+
router: TRouter;
|
|
111
|
+
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* **DO NOT IMPORT FROM HERE FILE**
|
|
3
|
+
*
|
|
4
|
+
* This file is here to:
|
|
5
|
+
* - make TypeScript happy and prevent _"The inferred type of 'createContext' cannot be named without a reference to [...]"_.
|
|
6
|
+
* - the the glue between the official `@trpc/*`-packages
|
|
7
|
+
*
|
|
8
|
+
*
|
|
9
|
+
* If you seem to need to import anything from here, please open an issue at https://github.com/trpc/trpc/issues
|
|
10
|
+
*/
|
|
11
|
+
export type { DefaultErrorShape, DefaultErrorData } from './error/formatter';
|
|
12
|
+
export { getErrorShape } from './error/getErrorShape';
|
|
13
|
+
export {
|
|
14
|
+
TRPCError,
|
|
15
|
+
getCauseFromUnknown,
|
|
16
|
+
getTRPCErrorFromUnknown,
|
|
17
|
+
} from './error/TRPCError';
|
|
18
|
+
|
|
19
|
+
export { initTRPC } from './initTRPC';
|
|
20
|
+
export type {
|
|
21
|
+
AnyMiddlewareFunction,
|
|
22
|
+
MiddlewareFunction,
|
|
23
|
+
MiddlewareBuilder,
|
|
24
|
+
} from './middleware';
|
|
25
|
+
export {
|
|
26
|
+
createInputMiddleware,
|
|
27
|
+
createOutputMiddleware,
|
|
28
|
+
experimental_standaloneMiddleware,
|
|
29
|
+
middlewareMarker,
|
|
30
|
+
} from './middleware';
|
|
31
|
+
export type { inferParser } from './parser';
|
|
32
|
+
export type {
|
|
33
|
+
Procedure,
|
|
34
|
+
ProcedureType,
|
|
35
|
+
AnyProcedure,
|
|
36
|
+
AnyQueryProcedure,
|
|
37
|
+
AnyMutationProcedure,
|
|
38
|
+
AnySubscriptionProcedure,
|
|
39
|
+
ProcedureArgs,
|
|
40
|
+
ProcedureOptions,
|
|
41
|
+
MutationProcedure,
|
|
42
|
+
inferHandlerInput,
|
|
43
|
+
inferProcedureInput,
|
|
44
|
+
inferProcedureOutput,
|
|
45
|
+
inferTransformedProcedureOutput,
|
|
46
|
+
inferTransformedSubscriptionOutput,
|
|
47
|
+
inferProcedureParams,
|
|
48
|
+
QueryProcedure,
|
|
49
|
+
SubscriptionProcedure,
|
|
50
|
+
} from './procedure';
|
|
51
|
+
export { procedureTypes } from './procedure';
|
|
52
|
+
export type { ProcedureBuilder } from './procedureBuilder';
|
|
53
|
+
export { unsetMarker, createBuilder } from './procedureBuilder';
|
|
54
|
+
export type { AnyRootConfig, RootConfig } from './rootConfig';
|
|
55
|
+
export type {
|
|
56
|
+
AnyRouter,
|
|
57
|
+
ProcedureRecord,
|
|
58
|
+
ProcedureRouterRecord,
|
|
59
|
+
CreateRouterInner,
|
|
60
|
+
Router,
|
|
61
|
+
RouterCaller,
|
|
62
|
+
AnyRouterDef,
|
|
63
|
+
inferRouterContext,
|
|
64
|
+
inferRouterError,
|
|
65
|
+
inferRouterInputs,
|
|
66
|
+
inferRouterMeta,
|
|
67
|
+
inferRouterOutputs,
|
|
68
|
+
createRouterFactory,
|
|
69
|
+
} from './router';
|
|
70
|
+
|
|
71
|
+
export type { TRPCInferrable, inferErrorShape } from './TRPCInferrable';
|
|
72
|
+
export { callProcedure, mergeRouters } from './router';
|
|
73
|
+
export type {
|
|
74
|
+
CombinedDataTransformer,
|
|
75
|
+
CombinedDataTransformerClient,
|
|
76
|
+
DataTransformer,
|
|
77
|
+
DataTransformerOptions,
|
|
78
|
+
DefaultDataTransformer,
|
|
79
|
+
} from './transformer';
|
|
80
|
+
export { transformResult, transformTRPCResponse } from './transformer';
|
|
81
|
+
|
|
82
|
+
export { createFlatProxy, createRecursiveProxy } from './createProxy';
|
|
83
|
+
|
|
84
|
+
// For `.d.ts` files https://github.com/trpc/trpc/issues/3943
|
|
85
|
+
export type { SerializeObject, Serialize } from './serialize';
|
|
86
|
+
|
|
87
|
+
export type {
|
|
88
|
+
DeepPartial,
|
|
89
|
+
Dict,
|
|
90
|
+
DistributiveOmit,
|
|
91
|
+
Filter,
|
|
92
|
+
FilterKeys,
|
|
93
|
+
Maybe,
|
|
94
|
+
MaybePromise,
|
|
95
|
+
Simplify,
|
|
96
|
+
Unwrap,
|
|
97
|
+
WithoutIndexSignature,
|
|
98
|
+
Overwrite,
|
|
99
|
+
PickFirstDefined,
|
|
100
|
+
ValidateShape,
|
|
101
|
+
IntersectionError,
|
|
102
|
+
ProtectedIntersection,
|
|
103
|
+
} from './types';
|
|
104
|
+
export { isObject } from './utils';
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* These should be re-exported from separate entrypoints in server package
|
|
108
|
+
*/
|
|
109
|
+
export * from './rpc';
|
|
110
|
+
export * from './http';
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import { createFlatProxy } from './createProxy';
|
|
2
|
+
import {
|
|
3
|
+
defaultFormatter,
|
|
4
|
+
type DefaultErrorShape,
|
|
5
|
+
type ErrorFormatter,
|
|
6
|
+
type ErrorFormatterShape,
|
|
7
|
+
} from './error/formatter';
|
|
8
|
+
import { createMiddlewareFactory } from './middleware';
|
|
9
|
+
import { createBuilder } from './procedureBuilder';
|
|
10
|
+
import {
|
|
11
|
+
isServerDefault,
|
|
12
|
+
type CreateRootConfigTypes,
|
|
13
|
+
type RootConfig,
|
|
14
|
+
type RootConfigTypes,
|
|
15
|
+
type RuntimeConfig,
|
|
16
|
+
} from './rootConfig';
|
|
17
|
+
import {
|
|
18
|
+
createCallerFactory,
|
|
19
|
+
createRouterFactory,
|
|
20
|
+
mergeRouters,
|
|
21
|
+
} from './router';
|
|
22
|
+
import {
|
|
23
|
+
defaultTransformer,
|
|
24
|
+
getDataTransformer,
|
|
25
|
+
type DataTransformerOptions,
|
|
26
|
+
type DefaultDataTransformer,
|
|
27
|
+
} from './transformer';
|
|
28
|
+
import type {
|
|
29
|
+
Overwrite,
|
|
30
|
+
PickFirstDefined,
|
|
31
|
+
Unwrap,
|
|
32
|
+
ValidateShape,
|
|
33
|
+
} from './types';
|
|
34
|
+
|
|
35
|
+
type PartialRootConfigTypes = Partial<RootConfigTypes>;
|
|
36
|
+
|
|
37
|
+
type CreateRootConfigTypesFromPartial<TTypes extends PartialRootConfigTypes> =
|
|
38
|
+
CreateRootConfigTypes<{
|
|
39
|
+
ctx: TTypes['ctx'] extends RootConfigTypes['ctx'] ? TTypes['ctx'] : object;
|
|
40
|
+
meta: TTypes['meta'] extends RootConfigTypes['meta']
|
|
41
|
+
? TTypes['meta']
|
|
42
|
+
: object;
|
|
43
|
+
errorShape: TTypes['errorShape'];
|
|
44
|
+
transformer: DataTransformerOptions;
|
|
45
|
+
}>;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* TODO: This can be improved:
|
|
49
|
+
* - We should be able to chain `.meta()`/`.context()` only once
|
|
50
|
+
* - Simplify typings
|
|
51
|
+
* - Doesn't need to be a class but it doesn't really hurt either
|
|
52
|
+
*/
|
|
53
|
+
|
|
54
|
+
class TRPCBuilder<TParams extends PartialRootConfigTypes = object> {
|
|
55
|
+
/**
|
|
56
|
+
* Add a context shape as a generic to the root object
|
|
57
|
+
* @link https://trpc.io/docs/v11/server/context
|
|
58
|
+
*/
|
|
59
|
+
context<
|
|
60
|
+
TNewContext extends
|
|
61
|
+
| RootConfigTypes['ctx']
|
|
62
|
+
| ((...args: unknown[]) => RootConfigTypes['ctx']),
|
|
63
|
+
>() {
|
|
64
|
+
type NextParams = Overwrite<TParams, { ctx: Unwrap<TNewContext> }>;
|
|
65
|
+
|
|
66
|
+
return new TRPCBuilder<NextParams>();
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Add a meta shape as a generic to the root object
|
|
71
|
+
* @link https://trpc.io/docs/v11/quickstart
|
|
72
|
+
*/
|
|
73
|
+
meta<TNewMeta extends RootConfigTypes['meta']>() {
|
|
74
|
+
type NextParams = Overwrite<TParams, { meta: TNewMeta }>;
|
|
75
|
+
|
|
76
|
+
return new TRPCBuilder<NextParams>();
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Create the root object
|
|
81
|
+
* @link https://trpc.io/docs/v11/server/routers#initialize-trpc
|
|
82
|
+
*/
|
|
83
|
+
create<
|
|
84
|
+
TOptions extends Partial<
|
|
85
|
+
RuntimeConfig<CreateRootConfigTypesFromPartial<TParams>>
|
|
86
|
+
>,
|
|
87
|
+
>(
|
|
88
|
+
options?:
|
|
89
|
+
| ValidateShape<
|
|
90
|
+
TOptions,
|
|
91
|
+
Partial<RuntimeConfig<CreateRootConfigTypesFromPartial<TParams>>>
|
|
92
|
+
>
|
|
93
|
+
| undefined,
|
|
94
|
+
) {
|
|
95
|
+
return createTRPCInner<TParams>()<TOptions>(options);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Builder to initialize the tRPC root object - use this exactly once per backend
|
|
101
|
+
* @link https://trpc.io/docs/v11/quickstart
|
|
102
|
+
*/
|
|
103
|
+
export const initTRPC = new TRPCBuilder();
|
|
104
|
+
|
|
105
|
+
function createTRPCInner<TParams extends PartialRootConfigTypes>() {
|
|
106
|
+
type $Generics = CreateRootConfigTypesFromPartial<TParams>;
|
|
107
|
+
|
|
108
|
+
type $Context = $Generics['ctx'];
|
|
109
|
+
type $Meta = $Generics['meta'];
|
|
110
|
+
type $Runtime = Partial<RuntimeConfig<$Generics>>;
|
|
111
|
+
|
|
112
|
+
return function initTRPCInner<TOptions extends $Runtime>(
|
|
113
|
+
runtime?: ValidateShape<TOptions, $Runtime>,
|
|
114
|
+
) {
|
|
115
|
+
type $Formatter = PickFirstDefined<
|
|
116
|
+
TOptions['errorFormatter'],
|
|
117
|
+
ErrorFormatter<$Context, DefaultErrorShape>
|
|
118
|
+
>;
|
|
119
|
+
type $Transformer = TOptions['transformer'] extends DataTransformerOptions
|
|
120
|
+
? TOptions['transformer']
|
|
121
|
+
: DefaultDataTransformer;
|
|
122
|
+
type $ErrorShape = ErrorFormatterShape<$Formatter>;
|
|
123
|
+
|
|
124
|
+
type $Config = RootConfig<{
|
|
125
|
+
ctx: $Context;
|
|
126
|
+
meta: $Meta;
|
|
127
|
+
errorShape: $ErrorShape;
|
|
128
|
+
transformer: $Transformer;
|
|
129
|
+
}>;
|
|
130
|
+
|
|
131
|
+
const errorFormatter = runtime?.errorFormatter ?? defaultFormatter;
|
|
132
|
+
const transformer = getDataTransformer(
|
|
133
|
+
runtime?.transformer ?? defaultTransformer,
|
|
134
|
+
) as $Transformer;
|
|
135
|
+
|
|
136
|
+
const config: $Config = {
|
|
137
|
+
transformer,
|
|
138
|
+
isDev:
|
|
139
|
+
runtime?.isDev ??
|
|
140
|
+
// eslint-disable-next-line @typescript-eslint/dot-notation
|
|
141
|
+
globalThis.process?.env?.['NODE_ENV'] !== 'production',
|
|
142
|
+
allowOutsideOfServer: runtime?.allowOutsideOfServer ?? false,
|
|
143
|
+
errorFormatter,
|
|
144
|
+
isServer: runtime?.isServer ?? isServerDefault,
|
|
145
|
+
/**
|
|
146
|
+
* @internal
|
|
147
|
+
*/
|
|
148
|
+
$types: createFlatProxy((key) => {
|
|
149
|
+
throw new Error(
|
|
150
|
+
`Tried to access "$types.${key}" which is not available at runtime`,
|
|
151
|
+
);
|
|
152
|
+
}),
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
{
|
|
156
|
+
// Server check
|
|
157
|
+
const isServer: boolean = runtime?.isServer ?? isServerDefault;
|
|
158
|
+
|
|
159
|
+
if (!isServer && runtime?.allowOutsideOfServer !== true) {
|
|
160
|
+
throw new Error(
|
|
161
|
+
`You're trying to use @trpc/server in a non-server environment. This is not supported by default.`,
|
|
162
|
+
);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return {
|
|
166
|
+
/**
|
|
167
|
+
* These are just types, they can't be used
|
|
168
|
+
* @internal
|
|
169
|
+
*/
|
|
170
|
+
_config: config,
|
|
171
|
+
/**
|
|
172
|
+
* Builder object for creating procedures
|
|
173
|
+
* @link https://trpc.io/docs/v11/server/procedures
|
|
174
|
+
*/
|
|
175
|
+
procedure: createBuilder<
|
|
176
|
+
$Config['$types']['ctx'],
|
|
177
|
+
$Config['$types']['meta']
|
|
178
|
+
>({
|
|
179
|
+
meta: runtime?.defaultMeta,
|
|
180
|
+
}),
|
|
181
|
+
/**
|
|
182
|
+
* Create reusable middlewares
|
|
183
|
+
* @link https://trpc.io/docs/v11/server/middlewares
|
|
184
|
+
*/
|
|
185
|
+
middleware: createMiddlewareFactory<
|
|
186
|
+
$Config['$types']['ctx'],
|
|
187
|
+
$Config['$types']['meta']
|
|
188
|
+
>(),
|
|
189
|
+
/**
|
|
190
|
+
* Create a router
|
|
191
|
+
* @link https://trpc.io/docs/v11/server/routers
|
|
192
|
+
*/
|
|
193
|
+
router: createRouterFactory<$Config>(config),
|
|
194
|
+
/**
|
|
195
|
+
* Merge Routers
|
|
196
|
+
* @link https://trpc.io/docs/v11/server/merging-routers
|
|
197
|
+
*/
|
|
198
|
+
mergeRouters,
|
|
199
|
+
/**
|
|
200
|
+
* Create a server-side caller for a router
|
|
201
|
+
* @link https://trpc.io/docs/v11/server/server-side-calls
|
|
202
|
+
*/
|
|
203
|
+
createCallerFactory: createCallerFactory<$Config>(),
|
|
204
|
+
};
|
|
205
|
+
};
|
|
206
|
+
}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import { TRPCError } from './error/TRPCError';
|
|
2
|
+
import type { ParseFn } from './parser';
|
|
3
|
+
import type { ProcedureType } from './procedure';
|
|
4
|
+
import type { GetRawInputFn, Overwrite, Simplify } from './types';
|
|
5
|
+
import { isObject } from './utils';
|
|
6
|
+
|
|
7
|
+
/** @internal */
|
|
8
|
+
export const middlewareMarker = 'middlewareMarker' as 'middlewareMarker' & {
|
|
9
|
+
__brand: 'middlewareMarker';
|
|
10
|
+
};
|
|
11
|
+
type MiddlewareMarker = typeof middlewareMarker;
|
|
12
|
+
|
|
13
|
+
interface MiddlewareResultBase {
|
|
14
|
+
/**
|
|
15
|
+
* All middlewares should pass through their `next()`'s output.
|
|
16
|
+
* Requiring this marker makes sure that can't be forgotten at compile-time.
|
|
17
|
+
*/
|
|
18
|
+
readonly marker: MiddlewareMarker;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
interface MiddlewareOKResult<_TContextOverride> extends MiddlewareResultBase {
|
|
22
|
+
ok: true;
|
|
23
|
+
data: unknown;
|
|
24
|
+
// this could be extended with `input`/`rawInput` later
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
interface MiddlewareErrorResult<_TContextOverride>
|
|
28
|
+
extends MiddlewareResultBase {
|
|
29
|
+
ok: false;
|
|
30
|
+
error: TRPCError;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* @internal
|
|
35
|
+
*/
|
|
36
|
+
export type MiddlewareResult<_TContextOverride> =
|
|
37
|
+
| MiddlewareErrorResult<_TContextOverride>
|
|
38
|
+
| MiddlewareOKResult<_TContextOverride>;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* @internal
|
|
42
|
+
*/
|
|
43
|
+
export interface MiddlewareBuilder<
|
|
44
|
+
TContext,
|
|
45
|
+
TMeta,
|
|
46
|
+
TContextOverrides,
|
|
47
|
+
TInputIn,
|
|
48
|
+
> {
|
|
49
|
+
/**
|
|
50
|
+
* Create a new builder based on the current middleware builder
|
|
51
|
+
*/
|
|
52
|
+
unstable_pipe<$ContextOverridesOut>(
|
|
53
|
+
fn:
|
|
54
|
+
| MiddlewareFunction<
|
|
55
|
+
TContext,
|
|
56
|
+
TMeta,
|
|
57
|
+
TContextOverrides,
|
|
58
|
+
$ContextOverridesOut,
|
|
59
|
+
TInputIn
|
|
60
|
+
>
|
|
61
|
+
| MiddlewareBuilder<
|
|
62
|
+
Overwrite<TContext, TContextOverrides>,
|
|
63
|
+
TMeta,
|
|
64
|
+
$ContextOverridesOut,
|
|
65
|
+
TInputIn
|
|
66
|
+
>,
|
|
67
|
+
): MiddlewareBuilder<
|
|
68
|
+
TContext,
|
|
69
|
+
TMeta,
|
|
70
|
+
Overwrite<TContextOverrides, $ContextOverridesOut>,
|
|
71
|
+
TInputIn
|
|
72
|
+
>;
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* List of middlewares within this middleware builder
|
|
76
|
+
*/
|
|
77
|
+
_middlewares: MiddlewareFunction<
|
|
78
|
+
TContext,
|
|
79
|
+
TMeta,
|
|
80
|
+
TContextOverrides,
|
|
81
|
+
object,
|
|
82
|
+
TInputIn
|
|
83
|
+
>[];
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* @internal
|
|
88
|
+
*/
|
|
89
|
+
export type MiddlewareFunction<
|
|
90
|
+
TContext,
|
|
91
|
+
TMeta,
|
|
92
|
+
TContextOverridesIn,
|
|
93
|
+
$ContextOverridesOut,
|
|
94
|
+
TInputIn,
|
|
95
|
+
> = {
|
|
96
|
+
(opts: {
|
|
97
|
+
ctx: Simplify<Overwrite<TContext, TContextOverridesIn>>;
|
|
98
|
+
type: ProcedureType;
|
|
99
|
+
path: string;
|
|
100
|
+
input: TInputIn;
|
|
101
|
+
getRawInput: GetRawInputFn;
|
|
102
|
+
meta: TMeta | undefined;
|
|
103
|
+
next: {
|
|
104
|
+
(): Promise<MiddlewareResult<TContextOverridesIn>>;
|
|
105
|
+
<$ContextOverride>(opts: {
|
|
106
|
+
ctx?: $ContextOverride;
|
|
107
|
+
input?: unknown;
|
|
108
|
+
}): Promise<MiddlewareResult<$ContextOverride>>;
|
|
109
|
+
(opts: { getRawInput: GetRawInputFn }): Promise<
|
|
110
|
+
MiddlewareResult<TContextOverridesIn>
|
|
111
|
+
>;
|
|
112
|
+
};
|
|
113
|
+
}): Promise<MiddlewareResult<$ContextOverridesOut>>;
|
|
114
|
+
_type?: string | undefined;
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
export type AnyMiddlewareFunction = MiddlewareFunction<any, any, any, any, any>;
|
|
118
|
+
export type AnyMiddlewareBuilder = MiddlewareBuilder<any, any, any, any>;
|
|
119
|
+
/**
|
|
120
|
+
* @internal
|
|
121
|
+
*/
|
|
122
|
+
export function createMiddlewareFactory<TContext, TMeta, TInputIn = unknown>() {
|
|
123
|
+
function createMiddlewareInner(
|
|
124
|
+
middlewares: AnyMiddlewareFunction[],
|
|
125
|
+
): AnyMiddlewareBuilder {
|
|
126
|
+
return {
|
|
127
|
+
_middlewares: middlewares,
|
|
128
|
+
unstable_pipe(middlewareBuilderOrFn) {
|
|
129
|
+
const pipedMiddleware =
|
|
130
|
+
'_middlewares' in middlewareBuilderOrFn
|
|
131
|
+
? middlewareBuilderOrFn._middlewares
|
|
132
|
+
: [middlewareBuilderOrFn];
|
|
133
|
+
|
|
134
|
+
return createMiddlewareInner([...middlewares, ...pipedMiddleware]);
|
|
135
|
+
},
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
function createMiddleware<$ContextOverrides>(
|
|
140
|
+
fn: MiddlewareFunction<
|
|
141
|
+
TContext,
|
|
142
|
+
TMeta,
|
|
143
|
+
object,
|
|
144
|
+
$ContextOverrides,
|
|
145
|
+
TInputIn
|
|
146
|
+
>,
|
|
147
|
+
): MiddlewareBuilder<TContext, TMeta, $ContextOverrides, TInputIn> {
|
|
148
|
+
return createMiddlewareInner([fn]);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
return createMiddleware;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Create a standalone middleware
|
|
156
|
+
* @link https://trpc.io/docs/v11/server/middlewares#experimental-standalone-middlewares
|
|
157
|
+
*/
|
|
158
|
+
export const experimental_standaloneMiddleware = <
|
|
159
|
+
TCtx extends {
|
|
160
|
+
ctx?: object;
|
|
161
|
+
meta?: object;
|
|
162
|
+
input?: unknown;
|
|
163
|
+
},
|
|
164
|
+
>() => ({
|
|
165
|
+
create: createMiddlewareFactory<
|
|
166
|
+
TCtx extends { ctx: infer T extends object } ? T : any,
|
|
167
|
+
TCtx extends { meta: infer T extends object } ? T : object,
|
|
168
|
+
TCtx extends { input: infer T } ? T : unknown
|
|
169
|
+
>(),
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* @internal
|
|
174
|
+
* Please note, `trpc-openapi` uses this function.
|
|
175
|
+
*/
|
|
176
|
+
export function createInputMiddleware<TInput>(parse: ParseFn<TInput>) {
|
|
177
|
+
const inputMiddleware: AnyMiddlewareFunction =
|
|
178
|
+
async function inputValidatorMiddleware(opts) {
|
|
179
|
+
let parsedInput: ReturnType<typeof parse>;
|
|
180
|
+
|
|
181
|
+
const rawInput = await opts.getRawInput();
|
|
182
|
+
try {
|
|
183
|
+
parsedInput = await parse(rawInput);
|
|
184
|
+
} catch (cause) {
|
|
185
|
+
throw new TRPCError({
|
|
186
|
+
code: 'BAD_REQUEST',
|
|
187
|
+
cause,
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// Multiple input parsers
|
|
192
|
+
const combinedInput =
|
|
193
|
+
isObject(opts.input) && isObject(parsedInput)
|
|
194
|
+
? {
|
|
195
|
+
...opts.input,
|
|
196
|
+
...parsedInput,
|
|
197
|
+
}
|
|
198
|
+
: parsedInput;
|
|
199
|
+
|
|
200
|
+
return opts.next({ input: combinedInput });
|
|
201
|
+
};
|
|
202
|
+
inputMiddleware._type = 'input';
|
|
203
|
+
return inputMiddleware;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* @internal
|
|
208
|
+
*/
|
|
209
|
+
export function createOutputMiddleware<TOutput>(parse: ParseFn<TOutput>) {
|
|
210
|
+
const outputMiddleware: AnyMiddlewareFunction =
|
|
211
|
+
async function outputValidatorMiddleware({ next }) {
|
|
212
|
+
const result = await next();
|
|
213
|
+
if (!result.ok) {
|
|
214
|
+
// pass through failures without validating
|
|
215
|
+
return result;
|
|
216
|
+
}
|
|
217
|
+
try {
|
|
218
|
+
const data = await parse(result.data);
|
|
219
|
+
return {
|
|
220
|
+
...result,
|
|
221
|
+
data,
|
|
222
|
+
};
|
|
223
|
+
} catch (cause) {
|
|
224
|
+
throw new TRPCError({
|
|
225
|
+
message: 'Output validation failed',
|
|
226
|
+
code: 'INTERNAL_SERVER_ERROR',
|
|
227
|
+
cause,
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
};
|
|
231
|
+
outputMiddleware._type = 'output';
|
|
232
|
+
return outputMiddleware;
|
|
233
|
+
}
|