@trpc/server 10.0.0-alpha.8 → 10.0.0-proxy-alpha.53
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 +79 -1
- package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.d.ts +1 -0
- package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.dev.js +190 -0
- package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.js +7 -0
- package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.prod.js +190 -0
- package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.esm.js +186 -0
- package/adapters/aws-lambda/index.d.ts +1 -0
- package/adapters/aws-lambda/index.js +1 -0
- package/adapters/express/dist/trpc-server-adapters-express.cjs.dev.js +7 -7
- package/adapters/express/dist/trpc-server-adapters-express.cjs.prod.js +7 -7
- package/adapters/express/dist/trpc-server-adapters-express.esm.js +7 -7
- package/adapters/fastify/dist/trpc-server-adapters-fastify.cjs.dev.js +18 -11
- package/adapters/fastify/dist/trpc-server-adapters-fastify.cjs.prod.js +18 -11
- package/adapters/fastify/dist/trpc-server-adapters-fastify.esm.js +18 -11
- 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/lambda/dist/trpc-server-adapters-lambda.cjs.d.ts +1 -0
- package/adapters/lambda/dist/trpc-server-adapters-lambda.cjs.dev.js +25 -0
- package/adapters/lambda/dist/trpc-server-adapters-lambda.cjs.js +7 -0
- package/adapters/lambda/dist/trpc-server-adapters-lambda.cjs.prod.js +25 -0
- package/adapters/lambda/dist/trpc-server-adapters-lambda.esm.js +21 -0
- package/adapters/next/dist/trpc-server-adapters-next.cjs.dev.js +4 -4
- package/adapters/next/dist/trpc-server-adapters-next.cjs.prod.js +4 -4
- package/adapters/next/dist/trpc-server-adapters-next.esm.js +4 -4
- package/adapters/node-http/dist/trpc-server-adapters-node-http.cjs.dev.js +4 -4
- package/adapters/node-http/dist/trpc-server-adapters-node-http.cjs.prod.js +4 -4
- package/adapters/node-http/dist/trpc-server-adapters-node-http.esm.js +4 -4
- package/adapters/node-http/index.js +1 -1
- package/adapters/standalone/dist/trpc-server-adapters-standalone.cjs.dev.js +5 -5
- package/adapters/standalone/dist/trpc-server-adapters-standalone.cjs.prod.js +5 -5
- package/adapters/standalone/dist/trpc-server-adapters-standalone.esm.js +5 -5
- package/adapters/ws/dist/trpc-server-adapters-ws.cjs.dev.js +24 -7
- package/adapters/ws/dist/trpc-server-adapters-ws.cjs.prod.js +24 -7
- package/adapters/ws/dist/trpc-server-adapters-ws.esm.js +24 -7
- package/dist/TRPCError-bcb38a84.js +61 -0
- package/dist/TRPCError-e6e632a5.mjs +57 -0
- package/dist/adapters/aws-lambda/index.d.ts +14 -0
- package/dist/adapters/aws-lambda/index.d.ts.map +1 -0
- package/dist/adapters/aws-lambda/index.js +153 -0
- package/dist/adapters/aws-lambda/index.mjs +149 -0
- package/dist/adapters/aws-lambda/utils.d.ts +35 -0
- package/dist/adapters/aws-lambda/utils.d.ts.map +1 -0
- package/dist/adapters/express.d.ts +1 -1
- package/dist/adapters/express.d.ts.map +1 -1
- package/dist/adapters/express.js +14 -13
- package/dist/adapters/express.mjs +14 -13
- package/dist/adapters/fastify/fastifyRequestHandler.d.ts +2 -2
- package/dist/adapters/fastify/fastifyRequestHandler.d.ts.map +1 -1
- package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts +2 -2
- package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts.map +1 -1
- package/dist/adapters/fastify/index.d.ts.map +1 -1
- package/dist/adapters/fastify/index.js +87 -0
- package/dist/adapters/fastify/index.mjs +82 -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 +57 -0
- package/dist/adapters/fetch/index.mjs +53 -0
- package/dist/adapters/fetch/types.d.ts +21 -0
- package/dist/adapters/fetch/types.d.ts.map +1 -0
- package/dist/adapters/lambda/index.d.ts +12 -0
- package/dist/adapters/lambda/index.d.ts.map +1 -0
- package/dist/adapters/next.d.ts +2 -2
- package/dist/adapters/next.d.ts.map +1 -1
- package/dist/adapters/next.js +42 -46
- package/dist/adapters/next.mjs +42 -46
- package/dist/adapters/node-http/index.d.ts.map +1 -1
- package/dist/adapters/node-http/index.js +5 -4
- package/dist/adapters/node-http/index.mjs +5 -4
- package/dist/adapters/node-http/internals/getPostBody.d.ts +1 -1
- package/dist/adapters/node-http/internals/getPostBody.d.ts.map +1 -1
- package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts +2 -2
- package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts.map +1 -1
- package/dist/adapters/node-http/types.d.ts +11 -9
- package/dist/adapters/node-http/types.d.ts.map +1 -1
- package/dist/adapters/standalone.d.ts +2 -2
- package/dist/adapters/standalone.d.ts.map +1 -1
- package/dist/adapters/standalone.js +30 -28
- package/dist/adapters/standalone.mjs +30 -27
- package/dist/adapters/ws.d.ts +8 -6
- package/dist/adapters/ws.d.ts.map +1 -1
- package/dist/adapters/ws.js +284 -317
- package/dist/adapters/ws.mjs +284 -317
- package/dist/assertNotBrowser.d.ts.map +1 -1
- package/dist/codes-1c24d919.js +47 -0
- package/dist/codes-aaa7d554.mjs +44 -0
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/initTRPC.d.ts +95 -0
- package/dist/core/initTRPC.d.ts.map +1 -0
- package/dist/core/internals/__generated__/mergeRoutersGeneric.d.ts +302 -0
- package/dist/core/internals/__generated__/mergeRoutersGeneric.d.ts.map +1 -0
- package/dist/core/internals/config.d.ts +36 -0
- package/dist/core/internals/config.d.ts.map +1 -0
- package/dist/core/internals/getParseFn.d.ts +9 -0
- package/dist/core/internals/getParseFn.d.ts.map +1 -0
- package/dist/core/internals/mergeRouters.d.ts +3 -0
- package/dist/core/internals/mergeRouters.d.ts.map +1 -0
- package/dist/core/internals/mergeWithoutOverrides.d.ts +5 -0
- package/dist/core/internals/mergeWithoutOverrides.d.ts.map +1 -0
- package/dist/core/internals/omitPrototype.d.ts +6 -0
- package/dist/core/internals/omitPrototype.d.ts.map +1 -0
- package/dist/core/internals/prefixObjectKeys.d.ts +2 -0
- package/dist/core/internals/prefixObjectKeys.d.ts.map +1 -0
- package/dist/core/internals/procedureBuilder.d.ts +124 -0
- package/dist/core/internals/procedureBuilder.d.ts.map +1 -0
- package/dist/core/internals/utils.d.ts +44 -0
- package/dist/core/internals/utils.d.ts.map +1 -0
- package/dist/core/middleware.d.ts +87 -0
- package/dist/core/middleware.d.ts.map +1 -0
- package/dist/core/parser.d.ts +25 -0
- package/dist/core/parser.d.ts.map +1 -0
- package/dist/core/procedure.d.ts +89 -0
- package/dist/core/procedure.d.ts.map +1 -0
- package/dist/core/router.d.ts +136 -0
- package/dist/core/router.d.ts.map +1 -0
- package/dist/core/types.d.ts +19 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/{internals → deprecated/internals}/callProcedure.d.ts +5 -2
- package/dist/deprecated/internals/callProcedure.d.ts.map +1 -0
- package/dist/{internals → deprecated/internals}/middlewares.d.ts +21 -3
- package/dist/deprecated/internals/middlewares.d.ts.map +1 -0
- package/dist/deprecated/internals/procedure.d.ts +96 -0
- package/dist/deprecated/internals/procedure.d.ts.map +1 -0
- package/dist/deprecated/interop.d.ts +61 -0
- package/dist/deprecated/interop.d.ts.map +1 -0
- package/dist/deprecated/router.d.ts +194 -0
- package/dist/deprecated/router.d.ts.map +1 -0
- package/dist/error/TRPCError.d.ts +11 -0
- package/dist/error/TRPCError.d.ts.map +1 -0
- package/dist/error/formatter.d.ts +33 -0
- package/dist/error/formatter.d.ts.map +1 -0
- package/dist/{internals/errors.d.ts → error/utils.d.ts} +3 -2
- package/dist/error/utils.d.ts.map +1 -0
- package/dist/http/index.d.ts +1 -1
- package/dist/http/index.d.ts.map +1 -1
- package/dist/http/internals/getHTTPStatusCode.d.ts +2 -1
- package/dist/http/internals/getHTTPStatusCode.d.ts.map +1 -1
- package/dist/http/internals/types.d.ts +11 -8
- package/dist/http/internals/types.d.ts.map +1 -1
- package/dist/http/resolveHTTPResponse.d.ts +4 -4
- package/dist/http/resolveHTTPResponse.d.ts.map +1 -1
- package/dist/http/{ResponseMeta.d.ts → types.d.ts} +1 -1
- package/dist/http/types.d.ts.map +1 -0
- package/dist/index-47817162.mjs +26 -0
- package/dist/index-9d687d33.js +28 -0
- package/dist/index.d.ts +4 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +78 -516
- package/dist/index.mjs +71 -508
- package/dist/internals/invert.d.ts.map +1 -1
- package/dist/internals/transformTRPCResponse.d.ts +5 -3
- package/dist/internals/transformTRPCResponse.d.ts.map +1 -1
- package/dist/internals/types.d.ts +23 -0
- package/dist/internals/types.d.ts.map +1 -0
- package/dist/internals.d.ts +11 -0
- package/dist/internals.d.ts.map +1 -0
- package/dist/nodeHTTPRequestHandler-2c467c02.mjs +80 -0
- package/dist/nodeHTTPRequestHandler-6609461a.js +82 -0
- package/dist/observable/index.d.ts +5 -0
- package/dist/observable/index.d.ts.map +1 -0
- package/dist/observable/index.js +157 -0
- package/dist/observable/index.mjs +148 -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-b651bf11.js +84 -0
- package/dist/observable-e129ac9d.mjs +81 -0
- package/dist/resolveHTTPResponse-11d52bd0.mjs +255 -0
- package/dist/resolveHTTPResponse-29d4b64a.js +259 -0
- package/dist/router-3ee4babe.js +903 -0
- package/dist/router-a2a75de3.mjs +893 -0
- package/dist/rpc/codes.d.ts +2 -0
- package/dist/rpc/codes.d.ts.map +1 -1
- package/dist/rpc/envelopes.d.ts +64 -41
- package/dist/rpc/envelopes.d.ts.map +1 -1
- package/dist/rpc/index.d.ts.map +1 -1
- package/dist/rpc/index.js +1 -1
- package/dist/rpc/index.mjs +1 -1
- package/dist/rpc/internals/invert.d.ts +18 -0
- package/dist/rpc/internals/invert.d.ts.map +1 -0
- package/dist/shared/createProxy/index.d.ts +12 -0
- package/dist/shared/createProxy/index.d.ts.map +1 -0
- package/dist/shared/index.d.ts +2 -0
- package/dist/shared/index.d.ts.map +1 -0
- package/dist/shared/index.js +9 -0
- package/dist/shared/index.mjs +1 -0
- package/dist/subscription.d.ts +3 -52
- package/dist/subscription.d.ts.map +1 -1
- package/dist/subscription.js +34 -0
- package/dist/subscription.mjs +30 -0
- package/dist/transformTRPCResponse-11ac69cc.js +27 -0
- package/dist/transformTRPCResponse-c8138d5f.mjs +25 -0
- package/dist/transformer.d.ts +14 -0
- package/dist/transformer.d.ts.map +1 -1
- package/dist/types.d.ts +37 -10
- package/dist/types.d.ts.map +1 -1
- package/observable/index.d.ts +1 -0
- package/observable/index.js +1 -0
- package/package.json +53 -25
- 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.js +1 -1
- package/shared/index.d.ts +1 -0
- package/shared/index.js +1 -0
- package/src/adapters/aws-lambda/index.ts +173 -0
- package/src/adapters/aws-lambda/utils.ts +92 -0
- package/src/adapters/express.ts +4 -4
- package/src/adapters/fastify/fastifyRequestHandler.ts +6 -8
- package/src/adapters/fastify/fastifyTRPCPlugin.ts +17 -9
- 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/lambda/index.ts +18 -0
- package/src/adapters/next.ts +10 -8
- package/src/adapters/node-http/internals/getPostBody.test.ts +2 -1
- package/src/adapters/node-http/internals/getPostBody.ts +1 -1
- package/src/adapters/node-http/nodeHTTPRequestHandler.ts +7 -7
- package/src/adapters/node-http/types.ts +11 -9
- package/src/adapters/standalone.ts +12 -4
- package/src/adapters/ws.ts +150 -91
- package/src/assertNotBrowser.ts +1 -0
- package/src/core/index.ts +15 -0
- package/src/core/initTRPC.ts +94 -0
- package/src/core/internals/__generated__/mergeRoutersGeneric.ts +406 -0
- package/src/core/internals/config.ts +43 -0
- package/src/core/internals/getParseFn.ts +47 -0
- package/src/core/internals/mergeRouters.ts +45 -0
- package/src/core/internals/mergeWithoutOverrides.ts +19 -0
- package/src/core/internals/omitPrototype.ts +9 -0
- package/src/core/internals/prefixObjectKeys.ts +9 -0
- package/src/core/internals/procedureBuilder.ts +430 -0
- package/src/core/internals/utils.ts +64 -0
- package/src/core/middleware.ts +96 -0
- package/src/core/parser.ts +45 -0
- package/src/core/procedure.ts +121 -0
- package/src/core/router.ts +351 -0
- package/src/core/types.ts +58 -0
- package/src/{internals → deprecated/internals}/callProcedure.ts +9 -3
- package/src/{internals → deprecated/internals}/middlewares.ts +23 -3
- package/src/deprecated/internals/procedure.ts +415 -0
- package/src/deprecated/interop.ts +272 -0
- package/src/{router.ts → deprecated/router.ts} +221 -108
- package/src/{TRPCError.ts → error/TRPCError.ts} +6 -14
- package/src/error/formatter.ts +51 -0
- package/src/{internals/errors.ts → error/utils.ts} +24 -5
- package/src/http/index.ts +1 -1
- package/src/http/internals/getHTTPStatusCode.ts +3 -2
- package/src/http/internals/types.ts +11 -14
- package/src/http/resolveHTTPResponse.ts +34 -39
- package/src/http/{ResponseMeta.ts → types.ts} +0 -0
- package/src/index.ts +4 -7
- package/src/internals/transformTRPCResponse.ts +21 -16
- package/src/internals/types.ts +24 -0
- package/src/internals.ts +14 -0
- 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 +23 -0
- package/src/observable/observable.test.ts +101 -0
- package/src/observable/observable.ts +78 -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/rpc/codes.ts +2 -1
- package/src/rpc/envelopes.ts +94 -68
- package/src/rpc/internals/invert.ts +27 -0
- package/src/shared/createProxy/index.ts +38 -0
- package/src/shared/index.ts +1 -0
- package/src/subscription.ts +7 -125
- package/src/transformer.ts +28 -0
- package/src/types.ts +45 -15
- package/subscription/index.d.ts +1 -0
- package/subscription/index.js +1 -0
- package/adapters/fastify/package.json +0 -4
- package/dist/TRPCError.d.ts +0 -19
- package/dist/TRPCError.d.ts.map +0 -1
- package/dist/adapters/express.ts.js +0 -1
- package/dist/adapters/next.ts.js +0 -1
- package/dist/adapters/node-http/index.ts.js +0 -1
- package/dist/adapters/standalone.ts.js +0 -1
- package/dist/adapters/ws.ts.js +0 -1
- package/dist/codes-7a3d4f65.mjs +0 -56
- package/dist/codes-7f46544e.js +0 -60
- package/dist/deprecated/LegacyRouter.d.ts +0 -3
- package/dist/deprecated/LegacyRouter.d.ts.map +0 -1
- package/dist/deprecated/createHttpServer.d.ts +0 -19
- package/dist/deprecated/createHttpServer.d.ts.map +0 -1
- package/dist/deprecated/requestHandler.d.ts +0 -15
- package/dist/deprecated/requestHandler.d.ts.map +0 -1
- package/dist/http/ResponseMeta.d.ts.map +0 -1
- package/dist/index.ts.js +0 -1
- package/dist/internals/BaseHandlerOptions.d.ts +0 -13
- package/dist/internals/BaseHandlerOptions.d.ts.map +0 -1
- package/dist/internals/OnErrorFunction.d.ts +0 -11
- package/dist/internals/OnErrorFunction.d.ts.map +0 -1
- package/dist/internals/callProcedure.d.ts.map +0 -1
- package/dist/internals/errors.d.ts.map +0 -1
- package/dist/internals/middlewares.d.ts.map +0 -1
- package/dist/internals/procedure.d.ts +0 -74
- package/dist/internals/procedure.d.ts.map +0 -1
- package/dist/internals/wrapCallSafe.d.ts +0 -16
- package/dist/internals/wrapCallSafe.d.ts.map +0 -1
- package/dist/nodeHTTPRequestHandler-10e6d2f9.mjs +0 -394
- package/dist/nodeHTTPRequestHandler-d7c307d3.js +0 -399
- package/dist/router.d.ts +0 -176
- package/dist/router.d.ts.map +0 -1
- package/dist/rpc/index.ts.js +0 -1
- package/dist/subscription-5b7e1eba.js +0 -136
- package/dist/subscription-e1d42e69.mjs +0 -133
- package/dist/transformTRPCResponse-76e0c91e.mjs +0 -109
- package/dist/transformTRPCResponse-bd24f548.js +0 -114
- package/dist/ws/index.d.ts +0 -7
- package/dist/ws/index.d.ts.map +0 -1
- package/dist/ws/index.js +0 -15
- package/dist/ws/index.mjs +0 -11
- package/dist/ws/index.ts.js +0 -1
- package/src/deprecated/LegacyRouter.ts +0 -3
- package/src/deprecated/createHttpServer.ts +0 -29
- package/src/deprecated/requestHandler.ts +0 -26
- package/src/internals/BaseHandlerOptions.ts +0 -13
- package/src/internals/OnErrorFunction.ts +0 -11
- package/src/internals/procedure.ts +0 -283
- 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/index.d.ts +0 -1
- package/ws/index.js +0 -1
|
@@ -0,0 +1,415 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
+
import { assertNotBrowser } from '../../assertNotBrowser';
|
|
3
|
+
import { TRPCError } from '../../error/TRPCError';
|
|
4
|
+
import { getCauseFromUnknown, getErrorFromUnknown } from '../../error/utils';
|
|
5
|
+
import { InferLast } from '../../types';
|
|
6
|
+
import { ProcedureType } from '../router';
|
|
7
|
+
import {
|
|
8
|
+
MiddlewareFunction,
|
|
9
|
+
MiddlewareResult,
|
|
10
|
+
middlewareMarker,
|
|
11
|
+
} from './middlewares';
|
|
12
|
+
|
|
13
|
+
assertNotBrowser();
|
|
14
|
+
|
|
15
|
+
export type ProcedureParserZodEsque<TInput, TOutput> = {
|
|
16
|
+
_input: TInput;
|
|
17
|
+
_output: TOutput;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export type ProcedureParserMyZodEsque<T> = {
|
|
21
|
+
parse: (input: any) => T;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export type ProcedureParserSuperstructEsque<T> = {
|
|
25
|
+
create: (input: unknown) => T;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export type ProcedureParserCustomValidatorEsque<T> = (
|
|
29
|
+
input: unknown,
|
|
30
|
+
) => T | Promise<T>;
|
|
31
|
+
|
|
32
|
+
export type ProcedureParserYupEsque<T> = {
|
|
33
|
+
validateSync: (input: unknown) => T;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export type ProcedureParserWithInputOutput<TInput, TOutput> =
|
|
37
|
+
ProcedureParserZodEsque<TInput, TOutput>;
|
|
38
|
+
|
|
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: {
|
|
46
|
+
ctx: TContext;
|
|
47
|
+
input: TInput;
|
|
48
|
+
type: ProcedureType;
|
|
49
|
+
}) => Promise<TOutput> | TOutput;
|
|
50
|
+
|
|
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;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* @internal
|
|
61
|
+
* @deprecated
|
|
62
|
+
*/
|
|
63
|
+
export interface ProcedureCallOptions<TContext> {
|
|
64
|
+
ctx: TContext;
|
|
65
|
+
rawInput: unknown;
|
|
66
|
+
path: string;
|
|
67
|
+
type: ProcedureType;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
type ParseFn<T> = (value: unknown) => T | Promise<T>;
|
|
71
|
+
|
|
72
|
+
function getParseFn<T>(procedureParser: ProcedureParser<T>): ParseFn<T> {
|
|
73
|
+
const parser = procedureParser as any;
|
|
74
|
+
|
|
75
|
+
if (typeof parser === 'function') {
|
|
76
|
+
// ProcedureParserCustomValidatorEsque
|
|
77
|
+
return parser;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (typeof parser.parseAsync === 'function') {
|
|
81
|
+
// ProcedureParserZodEsque
|
|
82
|
+
return parser.parseAsync.bind(parser);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
if (typeof parser.parse === 'function') {
|
|
86
|
+
// ProcedureParserZodEsque
|
|
87
|
+
return parser.parse.bind(parser);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
if (typeof parser.validateSync === 'function') {
|
|
91
|
+
// ProcedureParserYupEsque
|
|
92
|
+
return parser.validateSync.bind(parser);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if (typeof parser.create === 'function') {
|
|
96
|
+
// ProcedureParserSuperstructEsque
|
|
97
|
+
return parser.create.bind(parser);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
throw new Error('Could not find a validator fn');
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* @internal
|
|
105
|
+
* @deprecated
|
|
106
|
+
*/
|
|
107
|
+
export class Procedure<
|
|
108
|
+
TInputContext,
|
|
109
|
+
TContext,
|
|
110
|
+
TMeta,
|
|
111
|
+
TInput,
|
|
112
|
+
TParsedInput,
|
|
113
|
+
TOutput,
|
|
114
|
+
TParsedOutput,
|
|
115
|
+
TFinalOutput = unknown extends TParsedOutput ? TOutput : TParsedOutput,
|
|
116
|
+
> {
|
|
117
|
+
private middlewares: Readonly<Array<MiddlewareFunction<any, any, any>>>;
|
|
118
|
+
private resolver: ProcedureResolver<TContext, TParsedInput, TOutput>;
|
|
119
|
+
private readonly inputParser: ProcedureParser<TParsedInput>;
|
|
120
|
+
private parseInputFn: ParseFn<TParsedInput>;
|
|
121
|
+
private readonly outputParser: ProcedureParser<TFinalOutput>;
|
|
122
|
+
private parseOutputFn: ParseFn<TFinalOutput>;
|
|
123
|
+
public readonly meta: TMeta;
|
|
124
|
+
|
|
125
|
+
constructor(
|
|
126
|
+
opts: ProcedureOptions<
|
|
127
|
+
TContext,
|
|
128
|
+
TMeta,
|
|
129
|
+
TParsedInput,
|
|
130
|
+
TOutput,
|
|
131
|
+
TFinalOutput
|
|
132
|
+
>,
|
|
133
|
+
) {
|
|
134
|
+
this.middlewares = opts.middlewares;
|
|
135
|
+
this.resolver = opts.resolver;
|
|
136
|
+
this.inputParser = opts.inputParser;
|
|
137
|
+
this.parseInputFn = getParseFn(this.inputParser);
|
|
138
|
+
this.outputParser = opts.outputParser;
|
|
139
|
+
this.parseOutputFn = getParseFn(this.outputParser);
|
|
140
|
+
this.meta = opts.meta;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
public _def() {
|
|
144
|
+
return {
|
|
145
|
+
middlewares: this.middlewares,
|
|
146
|
+
resolver: this.resolver,
|
|
147
|
+
inputParser: this.inputParser,
|
|
148
|
+
outputParser: this.outputParser,
|
|
149
|
+
meta: this.meta,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
private async parseInput(rawInput: unknown): Promise<TParsedInput> {
|
|
154
|
+
try {
|
|
155
|
+
return await this.parseInputFn(rawInput);
|
|
156
|
+
} catch (cause) {
|
|
157
|
+
throw new TRPCError({
|
|
158
|
+
code: 'BAD_REQUEST',
|
|
159
|
+
cause: getCauseFromUnknown(cause),
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
private async parseOutput(rawOutput: TOutput): Promise<TFinalOutput> {
|
|
165
|
+
try {
|
|
166
|
+
return await this.parseOutputFn(rawOutput);
|
|
167
|
+
} catch (cause) {
|
|
168
|
+
throw new TRPCError({
|
|
169
|
+
code: 'INTERNAL_SERVER_ERROR',
|
|
170
|
+
cause: getCauseFromUnknown(cause),
|
|
171
|
+
message: 'Output validation failed',
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Trigger middlewares in order, parse raw input, call resolver & parse raw output
|
|
178
|
+
* @internal
|
|
179
|
+
*/
|
|
180
|
+
public async call(
|
|
181
|
+
opts: ProcedureCallOptions<TInputContext>,
|
|
182
|
+
): Promise<TFinalOutput> {
|
|
183
|
+
// wrap the actual resolver and treat as the last "middleware"
|
|
184
|
+
const middlewaresWithResolver = this.middlewares.concat([
|
|
185
|
+
async ({ ctx }: { ctx: any }) => {
|
|
186
|
+
const input = await this.parseInput(opts.rawInput);
|
|
187
|
+
const rawOutput = await this.resolver({
|
|
188
|
+
...opts,
|
|
189
|
+
ctx,
|
|
190
|
+
input,
|
|
191
|
+
});
|
|
192
|
+
const data = await this.parseOutput(rawOutput);
|
|
193
|
+
return {
|
|
194
|
+
marker: middlewareMarker,
|
|
195
|
+
ok: true,
|
|
196
|
+
data,
|
|
197
|
+
ctx,
|
|
198
|
+
} as const;
|
|
199
|
+
},
|
|
200
|
+
]);
|
|
201
|
+
|
|
202
|
+
// run the middlewares recursively with the resolver as the last one
|
|
203
|
+
const callRecursive = async (
|
|
204
|
+
callOpts: { ctx: any; index: number } = {
|
|
205
|
+
index: 0,
|
|
206
|
+
ctx: opts.ctx,
|
|
207
|
+
},
|
|
208
|
+
): Promise<MiddlewareResult<any>> => {
|
|
209
|
+
try {
|
|
210
|
+
const result = await middlewaresWithResolver[callOpts.index]!({
|
|
211
|
+
ctx: callOpts.ctx,
|
|
212
|
+
type: opts.type,
|
|
213
|
+
path: opts.path,
|
|
214
|
+
rawInput: opts.rawInput,
|
|
215
|
+
meta: this.meta,
|
|
216
|
+
next: async (nextOpts?: { ctx: any }) => {
|
|
217
|
+
return await callRecursive({
|
|
218
|
+
index: callOpts.index + 1,
|
|
219
|
+
ctx: nextOpts ? nextOpts.ctx : callOpts.ctx,
|
|
220
|
+
});
|
|
221
|
+
},
|
|
222
|
+
});
|
|
223
|
+
return result;
|
|
224
|
+
} catch (cause) {
|
|
225
|
+
return {
|
|
226
|
+
ctx: callOpts.ctx,
|
|
227
|
+
ok: false,
|
|
228
|
+
error: getErrorFromUnknown(cause),
|
|
229
|
+
marker: middlewareMarker,
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
};
|
|
233
|
+
|
|
234
|
+
// there's always at least one "next" since we wrap this.resolver in a middleware
|
|
235
|
+
const result = await callRecursive();
|
|
236
|
+
if (!result) {
|
|
237
|
+
throw new TRPCError({
|
|
238
|
+
code: 'INTERNAL_SERVER_ERROR',
|
|
239
|
+
message:
|
|
240
|
+
'No result from middlewares - did you forget to `return next()`?',
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
if (!result.ok) {
|
|
244
|
+
// re-throw original error
|
|
245
|
+
throw result.error;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
return result.data as TFinalOutput;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* Create new procedure with passed middlewares
|
|
253
|
+
* @param middlewares
|
|
254
|
+
*/
|
|
255
|
+
public inheritMiddlewares(
|
|
256
|
+
middlewares: MiddlewareFunction<TInputContext, TContext, TMeta>[],
|
|
257
|
+
): this {
|
|
258
|
+
const Constructor: {
|
|
259
|
+
new (
|
|
260
|
+
opts: ProcedureOptions<
|
|
261
|
+
TContext,
|
|
262
|
+
TMeta,
|
|
263
|
+
TParsedInput,
|
|
264
|
+
TOutput,
|
|
265
|
+
TFinalOutput
|
|
266
|
+
>,
|
|
267
|
+
): Procedure<
|
|
268
|
+
TInputContext,
|
|
269
|
+
TContext,
|
|
270
|
+
TMeta,
|
|
271
|
+
TInput,
|
|
272
|
+
TParsedInput,
|
|
273
|
+
TOutput,
|
|
274
|
+
TParsedOutput
|
|
275
|
+
>;
|
|
276
|
+
} = (this as any).constructor;
|
|
277
|
+
|
|
278
|
+
const instance = new Constructor({
|
|
279
|
+
middlewares: [...middlewares, ...this.middlewares],
|
|
280
|
+
resolver: this.resolver,
|
|
281
|
+
inputParser: this.inputParser,
|
|
282
|
+
outputParser: this.outputParser,
|
|
283
|
+
meta: this.meta,
|
|
284
|
+
});
|
|
285
|
+
|
|
286
|
+
return instance as any;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
export type CreateProcedureWithInput<TContext, TMeta, TInput, TOutput> = {
|
|
291
|
+
input: ProcedureParser<TInput>;
|
|
292
|
+
output?: ProcedureParser<TOutput>;
|
|
293
|
+
meta?: TMeta;
|
|
294
|
+
resolve: ProcedureResolver<TContext, TInput, InferLast<TOutput>>;
|
|
295
|
+
};
|
|
296
|
+
|
|
297
|
+
export type CreateProcedureWithInputOutputParser<
|
|
298
|
+
TContext,
|
|
299
|
+
TMeta,
|
|
300
|
+
TInput,
|
|
301
|
+
TParsedInput,
|
|
302
|
+
TOutput,
|
|
303
|
+
TParsedOutput,
|
|
304
|
+
> = {
|
|
305
|
+
input: ProcedureParserWithInputOutput<TInput, TParsedInput>;
|
|
306
|
+
output?: ProcedureParserWithInputOutput<TOutput, TParsedOutput>;
|
|
307
|
+
meta?: TMeta;
|
|
308
|
+
resolve: ProcedureResolver<TContext, TParsedInput, InferLast<TOutput>>;
|
|
309
|
+
};
|
|
310
|
+
|
|
311
|
+
export type CreateProcedureWithoutInput<
|
|
312
|
+
TContext,
|
|
313
|
+
TMeta,
|
|
314
|
+
TOutput,
|
|
315
|
+
TParsedOutput,
|
|
316
|
+
> = {
|
|
317
|
+
output?:
|
|
318
|
+
| ProcedureParserWithInputOutput<TOutput, TParsedOutput>
|
|
319
|
+
| ProcedureParser<TOutput>;
|
|
320
|
+
meta?: TMeta;
|
|
321
|
+
resolve: ProcedureResolver<TContext, undefined, InferLast<TOutput>>;
|
|
322
|
+
};
|
|
323
|
+
|
|
324
|
+
export type CreateProcedureOptions<
|
|
325
|
+
TContext,
|
|
326
|
+
TMeta = undefined,
|
|
327
|
+
TInput = undefined,
|
|
328
|
+
TParsedInput = undefined,
|
|
329
|
+
TOutput = undefined,
|
|
330
|
+
TParsedOutput = undefined,
|
|
331
|
+
> =
|
|
332
|
+
| CreateProcedureWithInputOutputParser<
|
|
333
|
+
TContext,
|
|
334
|
+
TMeta,
|
|
335
|
+
TInput,
|
|
336
|
+
TParsedInput,
|
|
337
|
+
TOutput,
|
|
338
|
+
TParsedOutput
|
|
339
|
+
>
|
|
340
|
+
| CreateProcedureWithInput<TContext, TMeta, TInput, TOutput>
|
|
341
|
+
| CreateProcedureWithoutInput<TContext, TMeta, TOutput, TParsedOutput>;
|
|
342
|
+
|
|
343
|
+
export function createProcedure<
|
|
344
|
+
TContext,
|
|
345
|
+
TMeta,
|
|
346
|
+
TInput,
|
|
347
|
+
TParsedInput,
|
|
348
|
+
TOutput,
|
|
349
|
+
TParsedOutput,
|
|
350
|
+
>(
|
|
351
|
+
opts: CreateProcedureOptions<
|
|
352
|
+
TContext,
|
|
353
|
+
TMeta,
|
|
354
|
+
TInput,
|
|
355
|
+
TParsedInput,
|
|
356
|
+
TOutput,
|
|
357
|
+
TParsedOutput
|
|
358
|
+
>,
|
|
359
|
+
): Procedure<
|
|
360
|
+
unknown,
|
|
361
|
+
TContext,
|
|
362
|
+
TMeta,
|
|
363
|
+
TInput,
|
|
364
|
+
TParsedInput,
|
|
365
|
+
TOutput,
|
|
366
|
+
TParsedOutput
|
|
367
|
+
> {
|
|
368
|
+
const inputParser =
|
|
369
|
+
'input' in opts
|
|
370
|
+
? opts.input
|
|
371
|
+
: (input: unknown) => {
|
|
372
|
+
if (input != null) {
|
|
373
|
+
throw new TRPCError({
|
|
374
|
+
code: 'BAD_REQUEST',
|
|
375
|
+
message: 'No input expected',
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
return undefined;
|
|
379
|
+
};
|
|
380
|
+
|
|
381
|
+
const outputParser =
|
|
382
|
+
'output' in opts && opts.output
|
|
383
|
+
? opts.output
|
|
384
|
+
: (output: unknown) => output as TOutput;
|
|
385
|
+
|
|
386
|
+
return new Procedure({
|
|
387
|
+
inputParser: inputParser as any,
|
|
388
|
+
resolver: opts.resolve as any,
|
|
389
|
+
middlewares: [],
|
|
390
|
+
outputParser: outputParser as any,
|
|
391
|
+
meta: opts.meta as any,
|
|
392
|
+
});
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
export type inferProcedureFromOptions<
|
|
396
|
+
TInputContext,
|
|
397
|
+
TOptions extends CreateProcedureOptions<any, any, any, any, any, any>,
|
|
398
|
+
> = TOptions extends CreateProcedureOptions<
|
|
399
|
+
infer TContext,
|
|
400
|
+
infer TMeta,
|
|
401
|
+
infer TInput,
|
|
402
|
+
infer TParsedInput,
|
|
403
|
+
infer TOutput,
|
|
404
|
+
infer TParsedOutput
|
|
405
|
+
>
|
|
406
|
+
? Procedure<
|
|
407
|
+
TInputContext,
|
|
408
|
+
TContext,
|
|
409
|
+
TMeta,
|
|
410
|
+
unknown extends TInput ? undefined : TInput,
|
|
411
|
+
unknown extends TParsedInput ? undefined : TParsedInput,
|
|
412
|
+
TOutput,
|
|
413
|
+
TParsedOutput
|
|
414
|
+
>
|
|
415
|
+
: never;
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
import { CombinedDataTransformer, ProcedureParams, ProcedureType } from '..';
|
|
2
|
+
import { CreateRootConfig, RootConfig } from '../core/internals/config';
|
|
3
|
+
import { getParseFnOrPassThrough } from '../core/internals/getParseFn';
|
|
4
|
+
import { mergeWithoutOverrides } from '../core/internals/mergeWithoutOverrides';
|
|
5
|
+
import {
|
|
6
|
+
createBuilder,
|
|
7
|
+
createInputMiddleware,
|
|
8
|
+
createOutputMiddleware,
|
|
9
|
+
} from '../core/internals/procedureBuilder';
|
|
10
|
+
import {
|
|
11
|
+
MutationProcedure,
|
|
12
|
+
Procedure as NewProcedure,
|
|
13
|
+
QueryProcedure,
|
|
14
|
+
SubscriptionProcedure,
|
|
15
|
+
} from '../core/procedure';
|
|
16
|
+
import {
|
|
17
|
+
Router as NewRouter,
|
|
18
|
+
RouterDef,
|
|
19
|
+
createRouterFactory,
|
|
20
|
+
} from '../core/router';
|
|
21
|
+
import {
|
|
22
|
+
AnyRouter as AnyOldRouter,
|
|
23
|
+
Router as OldRouter,
|
|
24
|
+
} from '../deprecated/router';
|
|
25
|
+
import { TRPCErrorShape } from '../rpc';
|
|
26
|
+
import { Procedure as OldProcedure } from './internals/procedure';
|
|
27
|
+
import { ProcedureRecord } from './router';
|
|
28
|
+
|
|
29
|
+
type AnyOldProcedure = OldProcedure<any, any, any, any, any, any, any, any>;
|
|
30
|
+
|
|
31
|
+
type convertProcedureParams<
|
|
32
|
+
TConfig extends RootConfig,
|
|
33
|
+
TProcedure extends AnyOldProcedure,
|
|
34
|
+
> = TProcedure extends OldProcedure<
|
|
35
|
+
infer TInputContext,
|
|
36
|
+
infer TContext,
|
|
37
|
+
infer TMeta,
|
|
38
|
+
infer TInput,
|
|
39
|
+
infer TParsedInput,
|
|
40
|
+
infer TOutput,
|
|
41
|
+
infer _TParsedOutput,
|
|
42
|
+
infer TFinalInput
|
|
43
|
+
>
|
|
44
|
+
? ProcedureParams<
|
|
45
|
+
TConfig,
|
|
46
|
+
TInputContext,
|
|
47
|
+
TContext,
|
|
48
|
+
TInput,
|
|
49
|
+
TParsedInput,
|
|
50
|
+
TOutput,
|
|
51
|
+
TFinalInput,
|
|
52
|
+
TMeta
|
|
53
|
+
>
|
|
54
|
+
: never;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* @deprecated
|
|
58
|
+
*/
|
|
59
|
+
export type OldProcedureTag = {
|
|
60
|
+
_old: true;
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
type MigrateProcedure<
|
|
64
|
+
TConfig extends RootConfig,
|
|
65
|
+
TProcedure extends AnyOldProcedure,
|
|
66
|
+
TType extends ProcedureType,
|
|
67
|
+
> = TType extends 'query'
|
|
68
|
+
? QueryProcedure<convertProcedureParams<TConfig, TProcedure>> &
|
|
69
|
+
OldProcedureTag
|
|
70
|
+
: TType extends 'mutation'
|
|
71
|
+
? MutationProcedure<convertProcedureParams<TConfig, TProcedure>> &
|
|
72
|
+
OldProcedureTag
|
|
73
|
+
: TType extends 'subscription'
|
|
74
|
+
? SubscriptionProcedure<convertProcedureParams<TConfig, TProcedure>> &
|
|
75
|
+
OldProcedureTag
|
|
76
|
+
: never;
|
|
77
|
+
|
|
78
|
+
export type MigrateProcedureRecord<
|
|
79
|
+
TConfig extends RootConfig,
|
|
80
|
+
T extends ProcedureRecord<any>,
|
|
81
|
+
TType extends ProcedureType,
|
|
82
|
+
> = {
|
|
83
|
+
[K in keyof T]: MigrateProcedure<TConfig, T[K], TType>;
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
export type MigrateRouter<
|
|
87
|
+
TInputContext extends Record<string, any>,
|
|
88
|
+
TContext,
|
|
89
|
+
TMeta extends Record<string, any>,
|
|
90
|
+
TQueries extends ProcedureRecord<
|
|
91
|
+
TInputContext,
|
|
92
|
+
TContext,
|
|
93
|
+
any,
|
|
94
|
+
any,
|
|
95
|
+
any,
|
|
96
|
+
any,
|
|
97
|
+
any
|
|
98
|
+
>,
|
|
99
|
+
TMutations extends ProcedureRecord<
|
|
100
|
+
TInputContext,
|
|
101
|
+
TContext,
|
|
102
|
+
any,
|
|
103
|
+
any,
|
|
104
|
+
any,
|
|
105
|
+
any,
|
|
106
|
+
any
|
|
107
|
+
>,
|
|
108
|
+
TSubscriptions extends ProcedureRecord<
|
|
109
|
+
TInputContext,
|
|
110
|
+
TContext,
|
|
111
|
+
unknown,
|
|
112
|
+
unknown,
|
|
113
|
+
any,
|
|
114
|
+
unknown,
|
|
115
|
+
unknown
|
|
116
|
+
>,
|
|
117
|
+
TErrorShape extends TRPCErrorShape<any>,
|
|
118
|
+
> = NewRouter<
|
|
119
|
+
{
|
|
120
|
+
legacy: {
|
|
121
|
+
queries: MigrateProcedureRecord<
|
|
122
|
+
CreateRootConfig<{
|
|
123
|
+
ctx: TInputContext;
|
|
124
|
+
errorShape: TErrorShape;
|
|
125
|
+
meta: TMeta;
|
|
126
|
+
transformer: CombinedDataTransformer;
|
|
127
|
+
}>,
|
|
128
|
+
TQueries,
|
|
129
|
+
'query'
|
|
130
|
+
>;
|
|
131
|
+
mutations: MigrateProcedureRecord<
|
|
132
|
+
CreateRootConfig<{
|
|
133
|
+
ctx: TInputContext;
|
|
134
|
+
errorShape: TErrorShape;
|
|
135
|
+
meta: TMeta;
|
|
136
|
+
transformer: CombinedDataTransformer;
|
|
137
|
+
}>,
|
|
138
|
+
TMutations,
|
|
139
|
+
'mutation'
|
|
140
|
+
>;
|
|
141
|
+
subscriptions: MigrateProcedureRecord<
|
|
142
|
+
CreateRootConfig<{
|
|
143
|
+
ctx: TInputContext;
|
|
144
|
+
errorShape: TErrorShape;
|
|
145
|
+
meta: TMeta;
|
|
146
|
+
transformer: CombinedDataTransformer;
|
|
147
|
+
}>,
|
|
148
|
+
TSubscriptions,
|
|
149
|
+
'subscription'
|
|
150
|
+
>;
|
|
151
|
+
};
|
|
152
|
+
} & RouterDef<
|
|
153
|
+
TInputContext,
|
|
154
|
+
TErrorShape,
|
|
155
|
+
TMeta,
|
|
156
|
+
MigrateProcedureRecord<
|
|
157
|
+
CreateRootConfig<{
|
|
158
|
+
ctx: TInputContext;
|
|
159
|
+
errorShape: TErrorShape;
|
|
160
|
+
meta: TMeta;
|
|
161
|
+
transformer: CombinedDataTransformer;
|
|
162
|
+
}>,
|
|
163
|
+
TQueries,
|
|
164
|
+
'query'
|
|
165
|
+
> &
|
|
166
|
+
MigrateProcedureRecord<
|
|
167
|
+
CreateRootConfig<{
|
|
168
|
+
ctx: TInputContext;
|
|
169
|
+
errorShape: TErrorShape;
|
|
170
|
+
meta: TMeta;
|
|
171
|
+
transformer: CombinedDataTransformer;
|
|
172
|
+
}>,
|
|
173
|
+
TMutations,
|
|
174
|
+
'mutation'
|
|
175
|
+
> &
|
|
176
|
+
MigrateProcedureRecord<
|
|
177
|
+
CreateRootConfig<{
|
|
178
|
+
ctx: TInputContext;
|
|
179
|
+
errorShape: TErrorShape;
|
|
180
|
+
meta: TMeta;
|
|
181
|
+
transformer: CombinedDataTransformer;
|
|
182
|
+
}>,
|
|
183
|
+
TSubscriptions,
|
|
184
|
+
'subscription'
|
|
185
|
+
>
|
|
186
|
+
>
|
|
187
|
+
>;
|
|
188
|
+
|
|
189
|
+
export type MigrateOldRouter<TRouter extends AnyOldRouter> =
|
|
190
|
+
TRouter extends OldRouter<
|
|
191
|
+
infer TInputContext,
|
|
192
|
+
infer TContext,
|
|
193
|
+
infer TMeta,
|
|
194
|
+
infer TQueries,
|
|
195
|
+
infer TMutations,
|
|
196
|
+
infer TSubscriptions,
|
|
197
|
+
infer TErrorShape
|
|
198
|
+
>
|
|
199
|
+
? MigrateRouter<
|
|
200
|
+
TInputContext,
|
|
201
|
+
TContext,
|
|
202
|
+
TMeta,
|
|
203
|
+
TQueries,
|
|
204
|
+
TMutations,
|
|
205
|
+
TSubscriptions,
|
|
206
|
+
TErrorShape
|
|
207
|
+
>
|
|
208
|
+
: never;
|
|
209
|
+
|
|
210
|
+
function migrateProcedure<
|
|
211
|
+
TProcedure extends AnyOldProcedure,
|
|
212
|
+
TType extends ProcedureType,
|
|
213
|
+
>(oldProc: TProcedure, type: TType): MigrateProcedure<any, TProcedure, TType> {
|
|
214
|
+
const def = oldProc._def();
|
|
215
|
+
|
|
216
|
+
const inputParser = getParseFnOrPassThrough(def.inputParser);
|
|
217
|
+
const outputParser = getParseFnOrPassThrough(def.outputParser);
|
|
218
|
+
|
|
219
|
+
const inputMiddleware = createInputMiddleware(inputParser);
|
|
220
|
+
|
|
221
|
+
const builder = createBuilder({
|
|
222
|
+
inputs: [def.inputParser],
|
|
223
|
+
middlewares: [
|
|
224
|
+
...(def.middlewares as any),
|
|
225
|
+
inputMiddleware,
|
|
226
|
+
createOutputMiddleware(outputParser),
|
|
227
|
+
],
|
|
228
|
+
meta: def.meta,
|
|
229
|
+
output: def.outputParser,
|
|
230
|
+
mutation: type === 'mutation',
|
|
231
|
+
query: type === 'query',
|
|
232
|
+
subscription: type === 'subscription',
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
const proc = builder[type]((opts) => def.resolver(opts as any));
|
|
236
|
+
|
|
237
|
+
return proc as any;
|
|
238
|
+
}
|
|
239
|
+
export function migrateRouter<TOldRouter extends AnyOldRouter>(
|
|
240
|
+
oldRouter: TOldRouter,
|
|
241
|
+
): MigrateOldRouter<TOldRouter> {
|
|
242
|
+
const errorFormatter = oldRouter._def.errorFormatter;
|
|
243
|
+
const transformer = oldRouter._def.transformer;
|
|
244
|
+
|
|
245
|
+
type ProcRecord = Record<string, NewProcedure<any>>;
|
|
246
|
+
|
|
247
|
+
const queries: ProcRecord = {};
|
|
248
|
+
const mutations: ProcRecord = {};
|
|
249
|
+
const subscriptions: ProcRecord = {};
|
|
250
|
+
for (const [name, procedure] of Object.entries(oldRouter._def.queries)) {
|
|
251
|
+
queries[name] = migrateProcedure(procedure as any, 'query');
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
for (const [name, procedure] of Object.entries(oldRouter._def.mutations)) {
|
|
255
|
+
mutations[name] = migrateProcedure(procedure as any, 'mutation');
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
for (const [name, procedure] of Object.entries(
|
|
259
|
+
oldRouter._def.subscriptions,
|
|
260
|
+
)) {
|
|
261
|
+
subscriptions[name] = migrateProcedure(procedure as any, 'subscription');
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
const procedures = mergeWithoutOverrides(queries, mutations, subscriptions);
|
|
265
|
+
|
|
266
|
+
const newRouter = createRouterFactory<any>({
|
|
267
|
+
transformer,
|
|
268
|
+
errorFormatter,
|
|
269
|
+
})(procedures);
|
|
270
|
+
|
|
271
|
+
return newRouter as any;
|
|
272
|
+
}
|