@trpc/server 10.0.0-alpha.2 → 10.0.0-alpha.22
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/adapters/express/dist/trpc-server-adapters-express.cjs.dev.js +7 -6
- package/adapters/express/dist/trpc-server-adapters-express.cjs.prod.js +7 -6
- package/adapters/express/dist/trpc-server-adapters-express.esm.js +7 -6
- package/adapters/express/index.d.ts +1 -0
- package/adapters/express/index.js +1 -0
- package/adapters/fastify/dist/trpc-server-adapters-fastify.cjs.d.ts +1 -0
- package/adapters/fastify/dist/trpc-server-adapters-fastify.cjs.dev.js +109 -0
- package/adapters/fastify/dist/trpc-server-adapters-fastify.cjs.js +7 -0
- package/adapters/fastify/dist/trpc-server-adapters-fastify.cjs.prod.js +109 -0
- package/adapters/fastify/dist/trpc-server-adapters-fastify.esm.js +104 -0
- package/adapters/fastify/index.d.ts +1 -0
- package/adapters/fastify/index.js +1 -0
- package/adapters/fetch/index.d.ts +1 -0
- package/adapters/fetch/index.js +1 -0
- package/adapters/next/dist/trpc-server-adapters-next.cjs.dev.js +4 -3
- package/adapters/next/dist/trpc-server-adapters-next.cjs.prod.js +4 -3
- package/adapters/next/dist/trpc-server-adapters-next.esm.js +4 -3
- package/adapters/next/index.d.ts +1 -0
- package/adapters/next/index.js +1 -0
- package/adapters/node-http/dist/trpc-server-adapters-node-http.cjs.dev.js +4 -3
- package/adapters/node-http/dist/trpc-server-adapters-node-http.cjs.prod.js +4 -3
- package/adapters/node-http/dist/trpc-server-adapters-node-http.esm.js +4 -3
- package/adapters/node-http/index.d.ts +1 -0
- package/adapters/node-http/index.js +1 -0
- package/adapters/standalone/dist/trpc-server-adapters-standalone.cjs.dev.js +5 -4
- package/adapters/standalone/dist/trpc-server-adapters-standalone.cjs.prod.js +5 -4
- package/adapters/standalone/dist/trpc-server-adapters-standalone.esm.js +5 -4
- package/adapters/standalone/index.d.ts +1 -0
- package/adapters/standalone/index.js +1 -0
- package/adapters/ws/dist/trpc-server-adapters-ws.cjs.dev.js +6 -5
- package/adapters/ws/dist/trpc-server-adapters-ws.cjs.prod.js +6 -5
- package/adapters/ws/dist/trpc-server-adapters-ws.esm.js +6 -5
- package/adapters/ws/index.d.ts +1 -0
- package/adapters/ws/index.js +1 -0
- package/dist/TRPCError-7971540a.mjs +65 -0
- package/dist/TRPCError-ddec3395.js +69 -0
- package/dist/TRPCError.d.ts +11 -0
- package/dist/TRPCError.d.ts.map +1 -0
- package/dist/{declarations/src/adapters → adapters}/express.d.ts +5 -5
- package/dist/adapters/express.d.ts.map +1 -0
- package/dist/adapters/express.js +23 -0
- package/dist/adapters/express.mjs +19 -0
- package/dist/adapters/express.ts.js +1 -0
- package/dist/adapters/fastify/fastifyRequestHandler.d.ts +13 -0
- package/dist/adapters/fastify/fastifyRequestHandler.d.ts.map +1 -0
- package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts +12 -0
- package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts.map +1 -0
- package/dist/adapters/fastify/index.d.ts +3 -0
- package/dist/adapters/fastify/index.d.ts.map +1 -0
- package/dist/adapters/fastify/index.js +108 -0
- package/dist/adapters/fastify/index.mjs +103 -0
- package/dist/adapters/fastify/index.ts.js +1 -0
- package/dist/adapters/fetch/fetchRequestHandler.d.ts +8 -0
- package/dist/adapters/fetch/fetchRequestHandler.d.ts.map +1 -0
- package/dist/adapters/fetch/index.d.ts +3 -0
- package/dist/adapters/fetch/index.d.ts.map +1 -0
- package/dist/adapters/fetch/index.js +69 -0
- package/dist/adapters/fetch/index.mjs +65 -0
- package/dist/adapters/fetch/index.ts.js +1 -0
- package/dist/adapters/fetch/types.d.ts +21 -0
- package/dist/adapters/fetch/types.d.ts.map +1 -0
- package/dist/{declarations/src/adapters → adapters}/next.d.ts +5 -5
- package/dist/adapters/next.d.ts.map +1 -0
- package/dist/adapters/next.js +55 -0
- package/dist/adapters/next.mjs +51 -0
- package/dist/adapters/next.ts.js +1 -0
- package/dist/{declarations/src/adapters → adapters}/node-http/index.d.ts +2 -2
- package/dist/adapters/node-http/index.d.ts.map +1 -0
- package/dist/adapters/node-http/index.js +13 -0
- package/dist/adapters/node-http/index.mjs +5 -0
- package/dist/adapters/node-http/index.ts.js +1 -0
- package/dist/{declarations/src/adapters → adapters}/node-http/internals/getPostBody.d.ts +12 -12
- package/dist/adapters/node-http/internals/getPostBody.d.ts.map +1 -0
- package/dist/{declarations/src/adapters → adapters}/node-http/nodeHTTPRequestHandler.d.ts +9 -9
- package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts.map +1 -0
- package/dist/{declarations/src/adapters → adapters}/node-http/types.d.ts +31 -32
- package/dist/adapters/node-http/types.d.ts.map +1 -0
- package/dist/{declarations/src/adapters → adapters}/standalone.d.ts +13 -13
- package/dist/adapters/standalone.d.ts.map +1 -0
- package/dist/adapters/standalone.js +49 -0
- package/dist/adapters/standalone.mjs +40 -0
- package/dist/adapters/standalone.ts.js +1 -0
- package/dist/{declarations/src/adapters → adapters}/ws.d.ts +16 -16
- package/dist/adapters/ws.d.ts.map +1 -0
- package/dist/adapters/ws.js +384 -0
- package/dist/adapters/ws.mjs +380 -0
- package/dist/adapters/ws.ts.js +1 -0
- package/dist/{declarations/src/assertNotBrowser.d.ts → assertNotBrowser.d.ts} +1 -1
- package/dist/assertNotBrowser.d.ts.map +1 -0
- package/dist/{codes-e0df67c4.cjs.prod.js → envelopes-1deb2fa7.mjs} +19 -5
- package/dist/{codes-33cef953.cjs.dev.js → envelopes-a953b930.js} +18 -0
- package/dist/{declarations/src/http → http}/ResponseMeta.d.ts +4 -4
- package/dist/http/ResponseMeta.d.ts.map +1 -0
- package/dist/{declarations/src/http → http}/index.d.ts +2 -2
- package/dist/http/index.d.ts.map +1 -0
- package/dist/{declarations/src/http → http}/internals/getHTTPStatusCode.d.ts +21 -20
- package/dist/http/internals/getHTTPStatusCode.d.ts.map +1 -0
- package/dist/{declarations/src/http → http}/internals/types.d.ts +40 -39
- package/dist/http/internals/types.d.ts.map +1 -0
- package/dist/{declarations/src/http → http}/resolveHTTPResponse.d.ts +12 -12
- package/dist/http/resolveHTTPResponse.d.ts.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/{trpc-server.cjs.dev.js → index.js} +81 -107
- package/dist/{trpc-server.esm.js → index.mjs} +71 -91
- package/dist/index.ts.js +1 -0
- package/dist/{declarations/src/internals → internals}/BaseHandlerOptions.d.ts +12 -12
- package/dist/internals/BaseHandlerOptions.d.ts.map +1 -0
- package/dist/{declarations/src/internals → internals}/OnErrorFunction.d.ts +10 -10
- package/dist/internals/OnErrorFunction.d.ts.map +1 -0
- package/dist/{declarations/src/internals → internals}/callProcedure.d.ts +9 -9
- package/dist/internals/callProcedure.d.ts.map +1 -0
- package/dist/{declarations/src/internals → internals}/errors.d.ts +4 -3
- package/dist/internals/errors.d.ts.map +1 -0
- package/dist/{declarations/src/internals → internals}/invert.d.ts +8 -8
- package/dist/internals/invert.d.ts.map +1 -0
- package/dist/{declarations/src/internals → internals}/middlewares.d.ts +34 -33
- package/dist/internals/middlewares.d.ts.map +1 -0
- package/dist/internals/procedure.d.ts +87 -0
- package/dist/internals/procedure.d.ts.map +1 -0
- package/dist/internals/transformTRPCResponse.d.ts +9 -0
- package/dist/internals/transformTRPCResponse.d.ts.map +1 -0
- package/dist/nodeHTTPRequestHandler-1cdb6383.mjs +105 -0
- package/dist/nodeHTTPRequestHandler-848f07b5.js +107 -0
- package/dist/observable/index.d.ts +5 -0
- package/dist/observable/index.d.ts.map +1 -0
- package/dist/observable/index.js +204 -0
- package/dist/observable/index.mjs +195 -0
- package/dist/observable/index.ts.js +1 -0
- package/dist/observable/internals/identity.d.ts +2 -0
- package/dist/observable/internals/identity.d.ts.map +1 -0
- package/dist/observable/internals/observableToPromise.d.ts +10 -0
- package/dist/observable/internals/observableToPromise.d.ts.map +1 -0
- package/dist/observable/internals/pipe.d.ts +4 -0
- package/dist/observable/internals/pipe.d.ts.map +1 -0
- package/dist/observable/observable.d.ts +5 -0
- package/dist/observable/observable.d.ts.map +1 -0
- package/dist/observable/operators/index.d.ts +4 -0
- package/dist/observable/operators/index.d.ts.map +1 -0
- package/dist/observable/operators/map.d.ts +3 -0
- package/dist/observable/operators/map.d.ts.map +1 -0
- package/dist/observable/operators/share.d.ts +6 -0
- package/dist/observable/operators/share.d.ts.map +1 -0
- package/dist/observable/operators/tap.d.ts +3 -0
- package/dist/observable/operators/tap.d.ts.map +1 -0
- package/dist/observable/types.d.ts +29 -0
- package/dist/observable/types.d.ts.map +1 -0
- package/dist/observable-137ea1bd.mjs +105 -0
- package/dist/observable-3aa4d911.js +108 -0
- package/dist/{nodeHTTPRequestHandler-2e6cc2d7.esm.js → resolveHTTPResponse-54a79e6c.mjs} +19 -126
- package/dist/{nodeHTTPRequestHandler-b7ff366e.cjs.dev.js → resolveHTTPResponse-ec3dccaa.js} +24 -132
- package/dist/router.d.ts +173 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/{declarations/src/rpc → rpc}/codes.d.ts +48 -46
- package/dist/rpc/codes.d.ts.map +1 -0
- package/dist/rpc/envelopes.d.ts +94 -0
- package/dist/rpc/envelopes.d.ts.map +1 -0
- package/dist/{declarations/src/rpc → rpc}/index.d.ts +2 -2
- package/dist/rpc/index.d.ts.map +1 -0
- package/dist/rpc/index.js +14 -0
- package/dist/rpc/index.mjs +1 -0
- package/dist/rpc/index.ts.js +1 -0
- package/dist/subscription.d.ts +9 -0
- package/dist/subscription.d.ts.map +1 -0
- package/dist/subscription.js +44 -0
- package/dist/subscription.mjs +40 -0
- package/dist/subscription.ts.js +1 -0
- package/dist/transformTRPCResponse-333bed6c.js +56 -0
- package/dist/transformTRPCResponse-e0cba527.mjs +53 -0
- package/dist/{declarations/src/transformer.d.ts → transformer.d.ts} +29 -29
- package/dist/transformer.d.ts.map +1 -0
- package/dist/{declarations/src/types.d.ts → types.d.ts} +40 -40
- package/dist/types.d.ts.map +1 -0
- package/observable/index.d.ts +1 -0
- package/observable/index.js +1 -0
- package/package.json +82 -26
- package/rpc/dist/trpc-server-rpc.cjs.dev.js +1 -1
- package/rpc/dist/trpc-server-rpc.cjs.prod.js +1 -1
- package/rpc/dist/trpc-server-rpc.esm.js +1 -1
- package/rpc/index.d.ts +1 -0
- package/rpc/index.js +1 -0
- package/src/TRPCError.ts +5 -13
- package/src/adapters/express.ts +3 -3
- package/src/adapters/fastify/fastifyRequestHandler.ts +77 -0
- package/src/adapters/fastify/fastifyTRPCPlugin.ts +56 -0
- package/src/adapters/fastify/index.ts +2 -0
- package/src/adapters/fetch/fetchRequestHandler.ts +61 -0
- package/src/adapters/fetch/index.ts +2 -0
- package/src/adapters/fetch/types.ts +28 -0
- package/src/adapters/next.ts +9 -7
- package/src/adapters/node-http/internals/getPostBody.test.ts +2 -1
- package/src/adapters/node-http/nodeHTTPRequestHandler.ts +5 -6
- package/src/adapters/node-http/types.ts +4 -5
- package/src/adapters/standalone.ts +11 -3
- package/src/adapters/ws.ts +122 -81
- package/src/assertNotBrowser.ts +1 -0
- package/src/http/internals/getHTTPStatusCode.ts +2 -1
- package/src/http/internals/types.ts +6 -7
- package/src/http/resolveHTTPResponse.ts +23 -27
- package/src/index.ts +1 -6
- package/src/internals/BaseHandlerOptions.ts +1 -1
- package/src/internals/OnErrorFunction.ts +1 -1
- package/src/internals/callProcedure.ts +6 -3
- package/src/internals/errors.ts +20 -4
- package/src/internals/middlewares.ts +3 -2
- package/src/internals/procedure.ts +213 -93
- package/src/internals/transformTRPCResponse.ts +20 -15
- package/src/observable/index.ts +4 -0
- package/src/observable/internals/identity.ts +3 -0
- package/src/observable/internals/observableToPromise.ts +49 -0
- package/src/observable/internals/pipe.ts +22 -0
- package/src/observable/observable.test.ts +101 -0
- package/src/observable/observable.ts +75 -0
- package/src/observable/operators/index.ts +3 -0
- package/src/observable/operators/map.test.ts +92 -0
- package/src/observable/operators/map.ts +25 -0
- package/src/observable/operators/share.test.ts +60 -0
- package/src/observable/operators/share.ts +67 -0
- package/src/observable/operators/tap.ts +26 -0
- package/src/observable/types.ts +69 -0
- package/src/router.ts +171 -82
- package/src/rpc/codes.ts +1 -0
- package/src/rpc/envelopes.ts +87 -68
- package/src/subscription.ts +6 -124
- package/src/types.ts +7 -9
- package/adapters/express/package.json +0 -4
- package/adapters/next/package.json +0 -4
- package/adapters/node-http/package.json +0 -4
- package/adapters/standalone/package.json +0 -4
- package/adapters/ws/package.json +0 -4
- package/dist/codes-fe07bf82.esm.js +0 -56
- package/dist/declarations/src/TRPCError.d.ts +0 -19
- package/dist/declarations/src/TRPCError.d.ts.map +0 -1
- package/dist/declarations/src/adapters/express.d.ts.map +0 -1
- package/dist/declarations/src/adapters/next.d.ts.map +0 -1
- package/dist/declarations/src/adapters/node-http/index.d.ts.map +0 -1
- package/dist/declarations/src/adapters/node-http/internals/getPostBody.d.ts.map +0 -1
- package/dist/declarations/src/adapters/node-http/nodeHTTPRequestHandler.d.ts.map +0 -1
- package/dist/declarations/src/adapters/node-http/types.d.ts.map +0 -1
- package/dist/declarations/src/adapters/standalone.d.ts.map +0 -1
- package/dist/declarations/src/adapters/ws.d.ts.map +0 -1
- package/dist/declarations/src/assertNotBrowser.d.ts.map +0 -1
- package/dist/declarations/src/deprecated/LegacyRouter.d.ts +0 -3
- package/dist/declarations/src/deprecated/LegacyRouter.d.ts.map +0 -1
- package/dist/declarations/src/deprecated/createHttpServer.d.ts +0 -19
- package/dist/declarations/src/deprecated/createHttpServer.d.ts.map +0 -1
- package/dist/declarations/src/deprecated/requestHandler.d.ts +0 -15
- package/dist/declarations/src/deprecated/requestHandler.d.ts.map +0 -1
- package/dist/declarations/src/http/ResponseMeta.d.ts.map +0 -1
- package/dist/declarations/src/http/index.d.ts.map +0 -1
- package/dist/declarations/src/http/internals/getHTTPStatusCode.d.ts.map +0 -1
- package/dist/declarations/src/http/internals/types.d.ts.map +0 -1
- package/dist/declarations/src/http/resolveHTTPResponse.d.ts.map +0 -1
- package/dist/declarations/src/index.d.ts +0 -10
- package/dist/declarations/src/index.d.ts.map +0 -1
- package/dist/declarations/src/internals/BaseHandlerOptions.d.ts.map +0 -1
- package/dist/declarations/src/internals/OnErrorFunction.d.ts.map +0 -1
- package/dist/declarations/src/internals/callProcedure.d.ts.map +0 -1
- package/dist/declarations/src/internals/errors.d.ts.map +0 -1
- package/dist/declarations/src/internals/invert.d.ts.map +0 -1
- package/dist/declarations/src/internals/middlewares.d.ts.map +0 -1
- package/dist/declarations/src/internals/procedure.d.ts +0 -74
- package/dist/declarations/src/internals/procedure.d.ts.map +0 -1
- package/dist/declarations/src/internals/transformTRPCResponse.d.ts +0 -7
- package/dist/declarations/src/internals/transformTRPCResponse.d.ts.map +0 -1
- package/dist/declarations/src/internals/wrapCallSafe.d.ts +0 -16
- package/dist/declarations/src/internals/wrapCallSafe.d.ts.map +0 -1
- package/dist/declarations/src/router.d.ts +0 -176
- package/dist/declarations/src/router.d.ts.map +0 -1
- package/dist/declarations/src/rpc/codes.d.ts.map +0 -1
- package/dist/declarations/src/rpc/envelopes.d.ts +0 -72
- package/dist/declarations/src/rpc/envelopes.d.ts.map +0 -1
- package/dist/declarations/src/rpc/index.d.ts.map +0 -1
- package/dist/declarations/src/subscription.d.ts +0 -58
- package/dist/declarations/src/subscription.d.ts.map +0 -1
- package/dist/declarations/src/transformer.d.ts.map +0 -1
- package/dist/declarations/src/types.d.ts.map +0 -1
- package/dist/declarations/src/ws/index.d.ts +0 -7
- package/dist/declarations/src/ws/index.d.ts.map +0 -1
- package/dist/nodeHTTPRequestHandler-7325b53f.cjs.prod.js +0 -399
- package/dist/subscription-b8831081.cjs.dev.js +0 -136
- package/dist/subscription-c2e0bfbc.cjs.prod.js +0 -136
- package/dist/subscription-fbda2888.esm.js +0 -133
- package/dist/transformTRPCResponse-8248515e.cjs.dev.js +0 -114
- package/dist/transformTRPCResponse-dcbf66c5.cjs.prod.js +0 -114
- package/dist/transformTRPCResponse-f73dc4a2.esm.js +0 -109
- package/dist/trpc-server.cjs.d.ts +0 -1
- package/dist/trpc-server.cjs.js +0 -7
- package/dist/trpc-server.cjs.prod.js +0 -528
- package/rpc/package.json +0 -4
- package/src/deprecated/LegacyRouter.ts +0 -3
- package/src/deprecated/createHttpServer.ts +0 -29
- package/src/deprecated/requestHandler.ts +0 -26
- package/src/internals/wrapCallSafe.ts +0 -19
- package/src/ws/index.ts +0 -8
- package/ws/dist/trpc-server-ws.cjs.d.ts +0 -1
- package/ws/dist/trpc-server-ws.cjs.dev.js +0 -15
- package/ws/dist/trpc-server-ws.cjs.js +0 -7
- package/ws/dist/trpc-server-ws.cjs.prod.js +0 -15
- package/ws/dist/trpc-server-ws.esm.js +0 -11
- package/ws/package.json +0 -4
|
@@ -1,51 +1,59 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
+
import { TRPCError } from '../TRPCError';
|
|
2
3
|
import { assertNotBrowser } from '../assertNotBrowser';
|
|
3
4
|
import { ProcedureType } from '../router';
|
|
4
|
-
import {
|
|
5
|
-
import { getErrorFromUnknown } from './errors';
|
|
6
|
-
import {
|
|
7
|
-
|
|
5
|
+
import { InferLast } from '../types';
|
|
6
|
+
import { getCauseFromUnknown, getErrorFromUnknown } from './errors';
|
|
7
|
+
import {
|
|
8
|
+
MiddlewareFunction,
|
|
9
|
+
MiddlewareResult,
|
|
10
|
+
middlewareMarker,
|
|
11
|
+
} from './middlewares';
|
|
12
|
+
|
|
8
13
|
assertNotBrowser();
|
|
9
14
|
|
|
10
|
-
export type
|
|
15
|
+
export type ProcedureParserZodEsque<TInput, TOutput> = {
|
|
11
16
|
_input: TInput;
|
|
12
|
-
_output:
|
|
17
|
+
_output: TOutput;
|
|
13
18
|
};
|
|
14
19
|
|
|
15
|
-
export type
|
|
16
|
-
parse: (input: any) =>
|
|
20
|
+
export type ProcedureParserMyZodEsque<T> = {
|
|
21
|
+
parse: (input: any) => T;
|
|
17
22
|
};
|
|
18
23
|
|
|
19
|
-
export type
|
|
20
|
-
create: (input: unknown) =>
|
|
24
|
+
export type ProcedureParserSuperstructEsque<T> = {
|
|
25
|
+
create: (input: unknown) => T;
|
|
21
26
|
};
|
|
22
27
|
|
|
23
|
-
export type
|
|
28
|
+
export type ProcedureParserCustomValidatorEsque<T> = (
|
|
24
29
|
input: unknown,
|
|
25
|
-
) =>
|
|
30
|
+
) => T | Promise<T>;
|
|
26
31
|
|
|
27
|
-
export type
|
|
28
|
-
validateSync: (input: unknown) =>
|
|
32
|
+
export type ProcedureParserYupEsque<T> = {
|
|
33
|
+
validateSync: (input: unknown) => T;
|
|
29
34
|
};
|
|
30
|
-
export type ProcedureInputParser<TInput> =
|
|
31
|
-
| ProcedureInputParserYupEsque<TInput>
|
|
32
|
-
| ProcedureInputParserSuperstructEsque<TInput>
|
|
33
|
-
| ProcedureInputParserCustomValidatorEsque<TInput>
|
|
34
|
-
| ProcedureInputParserMyZodEsque<TInput>;
|
|
35
35
|
|
|
36
|
-
export type
|
|
37
|
-
|
|
36
|
+
export type ProcedureParserWithInputOutput<TInput, TOutput> =
|
|
37
|
+
ProcedureParserZodEsque<TInput, TOutput>;
|
|
38
38
|
|
|
39
|
-
export type
|
|
39
|
+
export type ProcedureParser<T> =
|
|
40
|
+
| ProcedureParserYupEsque<T>
|
|
41
|
+
| ProcedureParserSuperstructEsque<T>
|
|
42
|
+
| ProcedureParserCustomValidatorEsque<T>
|
|
43
|
+
| ProcedureParserMyZodEsque<T>;
|
|
44
|
+
|
|
45
|
+
export type ProcedureResolver<TContext, TInput, TOutput> = (opts: {
|
|
40
46
|
ctx: TContext;
|
|
41
|
-
input:
|
|
47
|
+
input: TInput;
|
|
42
48
|
type: ProcedureType;
|
|
43
49
|
}) => Promise<TOutput> | TOutput;
|
|
44
50
|
|
|
45
|
-
interface ProcedureOptions<TContext,
|
|
46
|
-
middlewares: Array<MiddlewareFunction<any, any>>;
|
|
47
|
-
resolver: ProcedureResolver<TContext,
|
|
48
|
-
inputParser:
|
|
51
|
+
interface ProcedureOptions<TContext, TMeta, TInput, TOutput, TParsedOutput> {
|
|
52
|
+
middlewares: Array<MiddlewareFunction<any, any, any>>;
|
|
53
|
+
resolver: ProcedureResolver<TContext, TInput, TOutput>;
|
|
54
|
+
inputParser: ProcedureParser<TInput>;
|
|
55
|
+
outputParser: ProcedureParser<TParsedOutput>;
|
|
56
|
+
meta: TMeta;
|
|
49
57
|
}
|
|
50
58
|
|
|
51
59
|
/**
|
|
@@ -58,36 +66,33 @@ export interface ProcedureCallOptions<TContext> {
|
|
|
58
66
|
type: ProcedureType;
|
|
59
67
|
}
|
|
60
68
|
|
|
61
|
-
type ParseFn<
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
inputParser: ProcedureInputParser<TParsedInput>,
|
|
66
|
-
): ParseFn<TParsedInput> {
|
|
67
|
-
const parser = inputParser as any;
|
|
69
|
+
type ParseFn<T> = (value: unknown) => T | Promise<T>;
|
|
70
|
+
|
|
71
|
+
function getParseFn<T>(procedureParser: ProcedureParser<T>): ParseFn<T> {
|
|
72
|
+
const parser = procedureParser as any;
|
|
68
73
|
|
|
69
74
|
if (typeof parser === 'function') {
|
|
70
|
-
//
|
|
75
|
+
// ProcedureParserCustomValidatorEsque
|
|
71
76
|
return parser;
|
|
72
77
|
}
|
|
73
78
|
|
|
74
79
|
if (typeof parser.parseAsync === 'function') {
|
|
75
|
-
//
|
|
80
|
+
// ProcedureParserZodEsque
|
|
76
81
|
return parser.parseAsync.bind(parser);
|
|
77
82
|
}
|
|
78
83
|
|
|
79
84
|
if (typeof parser.parse === 'function') {
|
|
80
|
-
//
|
|
85
|
+
// ProcedureParserZodEsque
|
|
81
86
|
return parser.parse.bind(parser);
|
|
82
87
|
}
|
|
83
88
|
|
|
84
89
|
if (typeof parser.validateSync === 'function') {
|
|
85
|
-
//
|
|
90
|
+
// ProcedureParserYupEsque
|
|
86
91
|
return parser.validateSync.bind(parser);
|
|
87
92
|
}
|
|
88
93
|
|
|
89
94
|
if (typeof parser.create === 'function') {
|
|
90
|
-
//
|
|
95
|
+
// ProcedureParserSuperstructEsque
|
|
91
96
|
return parser.create.bind(parser);
|
|
92
97
|
}
|
|
93
98
|
|
|
@@ -97,42 +102,82 @@ function getParseFn<TParsedInput>(
|
|
|
97
102
|
/**
|
|
98
103
|
* @internal
|
|
99
104
|
*/
|
|
100
|
-
export class Procedure<
|
|
101
|
-
|
|
105
|
+
export class Procedure<
|
|
106
|
+
TInputContext,
|
|
107
|
+
TContext,
|
|
108
|
+
TMeta,
|
|
109
|
+
TInput,
|
|
110
|
+
TParsedInput,
|
|
111
|
+
TOutput,
|
|
112
|
+
TParsedOutput,
|
|
113
|
+
TFinalOutput = unknown extends TParsedOutput ? TOutput : TParsedOutput,
|
|
114
|
+
> {
|
|
115
|
+
private middlewares: Readonly<Array<MiddlewareFunction<any, any, any>>>;
|
|
102
116
|
private resolver: ProcedureResolver<TContext, TParsedInput, TOutput>;
|
|
103
|
-
private readonly inputParser:
|
|
104
|
-
private
|
|
117
|
+
private readonly inputParser: ProcedureParser<TParsedInput>;
|
|
118
|
+
private parseInputFn: ParseFn<TParsedInput>;
|
|
119
|
+
private readonly outputParser: ProcedureParser<TFinalOutput>;
|
|
120
|
+
private parseOutputFn: ParseFn<TFinalOutput>;
|
|
121
|
+
public readonly meta: TMeta;
|
|
105
122
|
|
|
106
|
-
constructor(
|
|
123
|
+
constructor(
|
|
124
|
+
opts: ProcedureOptions<
|
|
125
|
+
TContext,
|
|
126
|
+
TMeta,
|
|
127
|
+
TParsedInput,
|
|
128
|
+
TOutput,
|
|
129
|
+
TFinalOutput
|
|
130
|
+
>,
|
|
131
|
+
) {
|
|
107
132
|
this.middlewares = opts.middlewares;
|
|
108
133
|
this.resolver = opts.resolver;
|
|
109
134
|
this.inputParser = opts.inputParser;
|
|
110
|
-
this.
|
|
135
|
+
this.parseInputFn = getParseFn(this.inputParser);
|
|
136
|
+
this.outputParser = opts.outputParser;
|
|
137
|
+
this.parseOutputFn = getParseFn(this.outputParser);
|
|
138
|
+
this.meta = opts.meta;
|
|
111
139
|
}
|
|
112
140
|
|
|
113
141
|
private async parseInput(rawInput: unknown): Promise<TParsedInput> {
|
|
114
142
|
try {
|
|
115
|
-
return await this.
|
|
143
|
+
return await this.parseInputFn(rawInput);
|
|
116
144
|
} catch (cause) {
|
|
117
145
|
throw new TRPCError({
|
|
118
146
|
code: 'BAD_REQUEST',
|
|
119
|
-
cause,
|
|
147
|
+
cause: getCauseFromUnknown(cause),
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
private async parseOutput(rawOutput: TOutput): Promise<TFinalOutput> {
|
|
153
|
+
try {
|
|
154
|
+
return await this.parseOutputFn(rawOutput);
|
|
155
|
+
} catch (cause) {
|
|
156
|
+
throw new TRPCError({
|
|
157
|
+
code: 'INTERNAL_SERVER_ERROR',
|
|
158
|
+
cause: getCauseFromUnknown(cause),
|
|
159
|
+
message: 'Output validation failed',
|
|
120
160
|
});
|
|
121
161
|
}
|
|
122
162
|
}
|
|
123
163
|
|
|
124
164
|
/**
|
|
125
|
-
* Trigger middlewares in order, parse raw input &
|
|
165
|
+
* Trigger middlewares in order, parse raw input, call resolver & parse raw output
|
|
126
166
|
* @internal
|
|
127
167
|
*/
|
|
128
168
|
public async call(
|
|
129
169
|
opts: ProcedureCallOptions<TInputContext>,
|
|
130
|
-
): Promise<
|
|
170
|
+
): Promise<TFinalOutput> {
|
|
131
171
|
// wrap the actual resolver and treat as the last "middleware"
|
|
132
172
|
const middlewaresWithResolver = this.middlewares.concat([
|
|
133
|
-
async ({ ctx }: { ctx:
|
|
173
|
+
async ({ ctx }: { ctx: any }) => {
|
|
134
174
|
const input = await this.parseInput(opts.rawInput);
|
|
135
|
-
const
|
|
175
|
+
const rawOutput = await this.resolver({
|
|
176
|
+
...opts,
|
|
177
|
+
ctx,
|
|
178
|
+
input,
|
|
179
|
+
});
|
|
180
|
+
const data = await this.parseOutput(rawOutput);
|
|
136
181
|
return {
|
|
137
182
|
marker: middlewareMarker,
|
|
138
183
|
ok: true,
|
|
@@ -142,30 +187,40 @@ export class Procedure<TInputContext, TContext, TInput, TParsedInput, TOutput> {
|
|
|
142
187
|
},
|
|
143
188
|
]);
|
|
144
189
|
|
|
145
|
-
//
|
|
146
|
-
const
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
190
|
+
// run the middlewares recursively with the resolver as the last one
|
|
191
|
+
const callRecursive = async (
|
|
192
|
+
callOpts: { ctx: any; index: number } = {
|
|
193
|
+
index: 0,
|
|
194
|
+
ctx: opts.ctx,
|
|
195
|
+
},
|
|
196
|
+
): Promise<MiddlewareResult<any>> => {
|
|
197
|
+
try {
|
|
198
|
+
const result = await middlewaresWithResolver[callOpts.index]({
|
|
199
|
+
ctx: callOpts.ctx,
|
|
200
|
+
type: opts.type,
|
|
201
|
+
path: opts.path,
|
|
202
|
+
rawInput: opts.rawInput,
|
|
203
|
+
meta: this.meta,
|
|
204
|
+
next: async (nextOpts?: { ctx: any }) => {
|
|
205
|
+
return await callRecursive({
|
|
206
|
+
index: callOpts.index + 1,
|
|
207
|
+
ctx: nextOpts ? nextOpts.ctx : callOpts.ctx,
|
|
208
|
+
});
|
|
209
|
+
},
|
|
210
|
+
});
|
|
211
|
+
return result;
|
|
212
|
+
} catch (cause) {
|
|
160
213
|
return {
|
|
161
|
-
|
|
162
|
-
|
|
214
|
+
ctx: callOpts.ctx,
|
|
215
|
+
ok: false,
|
|
216
|
+
error: getErrorFromUnknown(cause),
|
|
217
|
+
marker: middlewareMarker,
|
|
163
218
|
};
|
|
164
|
-
}
|
|
165
|
-
}
|
|
219
|
+
}
|
|
220
|
+
};
|
|
166
221
|
|
|
167
222
|
// there's always at least one "next" since we wrap this.resolver in a middleware
|
|
168
|
-
const result = await
|
|
223
|
+
const result = await callRecursive();
|
|
169
224
|
if (!result) {
|
|
170
225
|
throw new TRPCError({
|
|
171
226
|
code: 'INTERNAL_SERVER_ERROR',
|
|
@@ -178,7 +233,7 @@ export class Procedure<TInputContext, TContext, TInput, TParsedInput, TOutput> {
|
|
|
178
233
|
throw result.error;
|
|
179
234
|
}
|
|
180
235
|
|
|
181
|
-
return result.data as
|
|
236
|
+
return result.data as TFinalOutput;
|
|
182
237
|
}
|
|
183
238
|
|
|
184
239
|
/**
|
|
@@ -186,15 +241,25 @@ export class Procedure<TInputContext, TContext, TInput, TParsedInput, TOutput> {
|
|
|
186
241
|
* @param middlewares
|
|
187
242
|
*/
|
|
188
243
|
public inheritMiddlewares(
|
|
189
|
-
middlewares: MiddlewareFunction<TInputContext, TContext>[],
|
|
244
|
+
middlewares: MiddlewareFunction<TInputContext, TContext, TMeta>[],
|
|
190
245
|
): this {
|
|
191
246
|
const Constructor: {
|
|
192
|
-
new (
|
|
247
|
+
new (
|
|
248
|
+
opts: ProcedureOptions<
|
|
249
|
+
TContext,
|
|
250
|
+
TMeta,
|
|
251
|
+
TParsedInput,
|
|
252
|
+
TOutput,
|
|
253
|
+
TFinalOutput
|
|
254
|
+
>,
|
|
255
|
+
): Procedure<
|
|
193
256
|
TInputContext,
|
|
194
257
|
TContext,
|
|
258
|
+
TMeta,
|
|
195
259
|
TInput,
|
|
196
260
|
TParsedInput,
|
|
197
|
-
TOutput
|
|
261
|
+
TOutput,
|
|
262
|
+
TParsedOutput
|
|
198
263
|
>;
|
|
199
264
|
} = (this as any).constructor;
|
|
200
265
|
|
|
@@ -202,48 +267,92 @@ export class Procedure<TInputContext, TContext, TInput, TParsedInput, TOutput> {
|
|
|
202
267
|
middlewares: [...middlewares, ...this.middlewares],
|
|
203
268
|
resolver: this.resolver,
|
|
204
269
|
inputParser: this.inputParser,
|
|
270
|
+
outputParser: this.outputParser,
|
|
271
|
+
meta: this.meta,
|
|
205
272
|
});
|
|
206
273
|
|
|
207
274
|
return instance as any;
|
|
208
275
|
}
|
|
209
276
|
}
|
|
210
277
|
|
|
211
|
-
export type CreateProcedureWithInput<TContext,
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
278
|
+
export type CreateProcedureWithInput<TContext, TMeta, TInput, TOutput> = {
|
|
279
|
+
input: ProcedureParser<TInput>;
|
|
280
|
+
output?: ProcedureParser<TOutput>;
|
|
281
|
+
meta?: TMeta;
|
|
282
|
+
resolve: ProcedureResolver<TContext, TInput, InferLast<TOutput>>;
|
|
283
|
+
};
|
|
284
|
+
|
|
216
285
|
export type CreateProcedureWithInputOutputParser<
|
|
217
286
|
TContext,
|
|
287
|
+
TMeta,
|
|
218
288
|
TInput,
|
|
219
289
|
TParsedInput,
|
|
220
290
|
TOutput,
|
|
291
|
+
TParsedOutput,
|
|
221
292
|
> = {
|
|
222
|
-
input:
|
|
223
|
-
|
|
293
|
+
input: ProcedureParserWithInputOutput<TInput, TParsedInput>;
|
|
294
|
+
output?: ProcedureParserWithInputOutput<TOutput, TParsedOutput>;
|
|
295
|
+
meta?: TMeta;
|
|
296
|
+
resolve: ProcedureResolver<TContext, TParsedInput, InferLast<TOutput>>;
|
|
224
297
|
};
|
|
225
|
-
|
|
226
|
-
|
|
298
|
+
|
|
299
|
+
export type CreateProcedureWithoutInput<
|
|
300
|
+
TContext,
|
|
301
|
+
TMeta,
|
|
302
|
+
TOutput,
|
|
303
|
+
TParsedOutput,
|
|
304
|
+
> = {
|
|
305
|
+
output?:
|
|
306
|
+
| ProcedureParserWithInputOutput<TOutput, TParsedOutput>
|
|
307
|
+
| ProcedureParser<TOutput>;
|
|
308
|
+
meta?: TMeta;
|
|
309
|
+
resolve: ProcedureResolver<TContext, undefined, InferLast<TOutput>>;
|
|
227
310
|
};
|
|
228
311
|
|
|
229
312
|
export type CreateProcedureOptions<
|
|
230
313
|
TContext,
|
|
314
|
+
TMeta = undefined,
|
|
231
315
|
TInput = undefined,
|
|
232
316
|
TParsedInput = undefined,
|
|
233
317
|
TOutput = undefined,
|
|
318
|
+
TParsedOutput = undefined,
|
|
234
319
|
> =
|
|
235
|
-
| CreateProcedureWithInput<TContext, TInput, TParsedInput, TOutput>
|
|
236
320
|
| CreateProcedureWithInputOutputParser<
|
|
237
321
|
TContext,
|
|
322
|
+
TMeta,
|
|
238
323
|
TInput,
|
|
239
324
|
TParsedInput,
|
|
240
|
-
TOutput
|
|
325
|
+
TOutput,
|
|
326
|
+
TParsedOutput
|
|
241
327
|
>
|
|
242
|
-
|
|
|
328
|
+
| CreateProcedureWithInput<TContext, TMeta, TInput, TOutput>
|
|
329
|
+
| CreateProcedureWithoutInput<TContext, TMeta, TOutput, TParsedOutput>;
|
|
243
330
|
|
|
244
|
-
export function createProcedure<
|
|
245
|
-
|
|
246
|
-
|
|
331
|
+
export function createProcedure<
|
|
332
|
+
TContext,
|
|
333
|
+
TMeta,
|
|
334
|
+
TInput,
|
|
335
|
+
TParsedInput,
|
|
336
|
+
TOutput,
|
|
337
|
+
TParsedOutput,
|
|
338
|
+
>(
|
|
339
|
+
opts: CreateProcedureOptions<
|
|
340
|
+
TContext,
|
|
341
|
+
TMeta,
|
|
342
|
+
TInput,
|
|
343
|
+
TParsedInput,
|
|
344
|
+
TOutput,
|
|
345
|
+
TParsedOutput
|
|
346
|
+
>,
|
|
347
|
+
): Procedure<
|
|
348
|
+
unknown,
|
|
349
|
+
TContext,
|
|
350
|
+
TMeta,
|
|
351
|
+
TInput,
|
|
352
|
+
TParsedInput,
|
|
353
|
+
TOutput,
|
|
354
|
+
TParsedOutput
|
|
355
|
+
> {
|
|
247
356
|
const inputParser =
|
|
248
357
|
'input' in opts
|
|
249
358
|
? opts.input
|
|
@@ -257,27 +366,38 @@ export function createProcedure<TContext, TInput, TParsedInput, TOutput>(
|
|
|
257
366
|
return undefined;
|
|
258
367
|
};
|
|
259
368
|
|
|
369
|
+
const outputParser =
|
|
370
|
+
'output' in opts && opts.output
|
|
371
|
+
? opts.output
|
|
372
|
+
: (output: unknown) => output as TOutput;
|
|
373
|
+
|
|
260
374
|
return new Procedure({
|
|
261
375
|
inputParser: inputParser as any,
|
|
262
376
|
resolver: opts.resolve as any,
|
|
263
377
|
middlewares: [],
|
|
378
|
+
outputParser: outputParser as any,
|
|
379
|
+
meta: opts.meta as any,
|
|
264
380
|
});
|
|
265
381
|
}
|
|
266
382
|
|
|
267
383
|
export type inferProcedureFromOptions<
|
|
268
384
|
TInputContext,
|
|
269
|
-
TOptions extends CreateProcedureOptions<any, any, any, any>,
|
|
385
|
+
TOptions extends CreateProcedureOptions<any, any, any, any, any, any>,
|
|
270
386
|
> = TOptions extends CreateProcedureOptions<
|
|
271
387
|
infer TContext,
|
|
388
|
+
infer TMeta,
|
|
272
389
|
infer TInput,
|
|
273
390
|
infer TParsedInput,
|
|
274
|
-
infer TOutput
|
|
391
|
+
infer TOutput,
|
|
392
|
+
infer TParsedOutput
|
|
275
393
|
>
|
|
276
394
|
? Procedure<
|
|
277
395
|
TInputContext,
|
|
278
396
|
TContext,
|
|
397
|
+
TMeta,
|
|
279
398
|
unknown extends TInput ? undefined : TInput,
|
|
280
399
|
unknown extends TParsedInput ? undefined : TParsedInput,
|
|
281
|
-
TOutput
|
|
400
|
+
TOutput,
|
|
401
|
+
TParsedOutput
|
|
282
402
|
>
|
|
283
403
|
: never;
|
|
@@ -1,33 +1,38 @@
|
|
|
1
1
|
import { AnyRouter } from '../router';
|
|
2
|
-
import { TRPCResponse } from '../rpc';
|
|
2
|
+
import { TRPCResponse, TRPCResponseMessage } from '../rpc';
|
|
3
3
|
|
|
4
|
-
function transformTRPCResponseItem
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
): TRPCResponse {
|
|
4
|
+
function transformTRPCResponseItem<
|
|
5
|
+
TResponseItem extends TRPCResponse | TRPCResponseMessage,
|
|
6
|
+
>(router: AnyRouter, item: TResponseItem): TResponseItem {
|
|
8
7
|
if ('error' in item) {
|
|
9
8
|
return {
|
|
10
9
|
...item,
|
|
11
10
|
error: router._def.transformer.output.serialize(item.error),
|
|
12
11
|
};
|
|
13
12
|
}
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
|
|
14
|
+
if ('data' in item.result) {
|
|
15
|
+
return {
|
|
16
|
+
...item,
|
|
17
|
+
result: {
|
|
18
|
+
...item.result,
|
|
19
|
+
data: router._def.transformer.output.serialize(item.result.data),
|
|
20
|
+
},
|
|
21
|
+
};
|
|
16
22
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
result: {
|
|
20
|
-
...item.result,
|
|
21
|
-
data: router._def.transformer.output.serialize(item.result.data),
|
|
22
|
-
},
|
|
23
|
-
};
|
|
23
|
+
|
|
24
|
+
return item;
|
|
24
25
|
}
|
|
25
26
|
|
|
26
27
|
/**
|
|
27
28
|
* Takes a unserialized `TRPCResponse` and serializes it with the router's transformers
|
|
28
29
|
**/
|
|
29
30
|
export function transformTRPCResponse<
|
|
30
|
-
TResponse extends
|
|
31
|
+
TResponse extends
|
|
32
|
+
| TRPCResponse
|
|
33
|
+
| TRPCResponse[]
|
|
34
|
+
| TRPCResponseMessage
|
|
35
|
+
| TRPCResponseMessage[],
|
|
31
36
|
>(router: AnyRouter, itemOrItems: TResponse) {
|
|
32
37
|
return Array.isArray(itemOrItems)
|
|
33
38
|
? itemOrItems.map((item) => transformTRPCResponseItem(router, item))
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Observable } from '../types';
|
|
2
|
+
|
|
3
|
+
export class ObservableAbortError extends Error {
|
|
4
|
+
constructor(message: string) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.name = 'ObservableAbortError';
|
|
7
|
+
Object.setPrototypeOf(this, ObservableAbortError.prototype);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/** @internal */
|
|
12
|
+
export function observableToPromise<TValue>(
|
|
13
|
+
observable: Observable<TValue, unknown>,
|
|
14
|
+
) {
|
|
15
|
+
let abort: () => void;
|
|
16
|
+
const promise = new Promise<TValue>((resolve, reject) => {
|
|
17
|
+
let isDone = false;
|
|
18
|
+
function onDone() {
|
|
19
|
+
if (isDone) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
isDone = true;
|
|
23
|
+
reject(new ObservableAbortError('This operation was cancelled.'));
|
|
24
|
+
obs$.unsubscribe();
|
|
25
|
+
}
|
|
26
|
+
const obs$ = observable.subscribe({
|
|
27
|
+
next(data) {
|
|
28
|
+
isDone = true;
|
|
29
|
+
resolve(data);
|
|
30
|
+
onDone();
|
|
31
|
+
},
|
|
32
|
+
error(data) {
|
|
33
|
+
isDone = true;
|
|
34
|
+
reject(data);
|
|
35
|
+
onDone();
|
|
36
|
+
},
|
|
37
|
+
complete() {
|
|
38
|
+
isDone = true;
|
|
39
|
+
onDone();
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
abort = onDone;
|
|
43
|
+
});
|
|
44
|
+
return {
|
|
45
|
+
promise,
|
|
46
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
47
|
+
abort: abort!,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { UnaryFunction } from '../types';
|
|
2
|
+
import { identity } from './identity';
|
|
3
|
+
|
|
4
|
+
/** @internal */
|
|
5
|
+
export function pipeFromArray<T, R>(
|
|
6
|
+
fns: Array<UnaryFunction<T, R>>,
|
|
7
|
+
): UnaryFunction<T, R> {
|
|
8
|
+
if (fns.length === 0) {
|
|
9
|
+
return identity as UnaryFunction<any, any>;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
if (fns.length === 1) {
|
|
13
|
+
return fns[0];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
return function piped(input: T): R {
|
|
17
|
+
return fns.reduce(
|
|
18
|
+
(prev: any, fn: UnaryFunction<T, R>) => fn(prev),
|
|
19
|
+
input as any,
|
|
20
|
+
);
|
|
21
|
+
};
|
|
22
|
+
}
|