@trpc/server 10.0.0-alpha.4 → 10.0.0-alpha.40
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 -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/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/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 -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/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/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/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/dist/TRPCError-9050a68d.js +69 -0
- package/dist/TRPCError-b7fa0c31.mjs +65 -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/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 +8 -7
- package/dist/adapters/express.mjs +8 -7
- 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/{ws → adapters/fastify}/index.ts.js +0 -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/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 +9 -9
- package/dist/adapters/next.mjs +8 -8
- 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 +11 -7
- package/dist/adapters/standalone.mjs +11 -6
- package/dist/adapters/ws.d.ts +8 -6
- package/dist/adapters/ws.d.ts.map +1 -1
- package/dist/adapters/ws.js +123 -90
- package/dist/adapters/ws.mjs +118 -85
- package/dist/assertNotBrowser.d.ts.map +1 -1
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/initTRPC.d.ts +87 -0
- package/dist/core/initTRPC.d.ts.map +1 -0
- package/dist/core/internals/__generated__/mergeRoutersGeneric.d.ts +282 -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 +127 -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 +84 -0
- package/dist/core/procedure.d.ts.map +1 -0
- package/dist/core/router.d.ts +128 -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 +34 -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/{codes-7a3d4f65.mjs → envelopes-af8c2959.mjs} +30 -1
- package/dist/{codes-7f46544e.js → envelopes-b6dd0367.js} +29 -1
- 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-1a25ccbd.js +33 -0
- package/dist/index-a3bd54c7.mjs +31 -0
- package/dist/index.d.ts +4 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +798 -108
- package/dist/index.mjs +785 -93
- 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-174459c5.mjs +105 -0
- package/dist/nodeHTTPRequestHandler-6b7c8622.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-341a0506.js +109 -0
- package/dist/observable-cfedfa30.mjs +106 -0
- package/dist/{nodeHTTPRequestHandler-10e6d2f9.mjs → resolveHTTPResponse-8657b8de.mjs} +32 -133
- package/dist/{nodeHTTPRequestHandler-d7c307d3.js → resolveHTTPResponse-fcc8f644.js} +37 -139
- package/dist/rpc/codes.d.ts +2 -0
- package/dist/rpc/codes.d.ts.map +1 -1
- package/dist/rpc/envelopes.d.ts +62 -40
- package/dist/rpc/envelopes.d.ts.map +1 -1
- package/dist/rpc/index.js +7 -3
- 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/shared/index.ts.js +1 -0
- package/dist/subscription.d.ts +3 -52
- package/dist/subscription.d.ts.map +1 -1
- package/dist/subscription.js +44 -0
- package/dist/subscription.mjs +40 -0
- package/dist/subscription.ts.js +1 -0
- package/dist/transformTRPCResponse-0c261655.js +29 -0
- package/dist/transformTRPCResponse-747b9a68.mjs +27 -0
- package/dist/transformer.d.ts +14 -0
- package/dist/transformer.d.ts.map +1 -1
- package/dist/types.d.ts +35 -8
- package/dist/types.d.ts.map +1 -1
- package/observable/index.d.ts +1 -0
- package/observable/index.js +1 -0
- package/package.json +56 -16
- 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/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 +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/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 +135 -91
- package/src/assertNotBrowser.ts +1 -0
- package/src/core/index.ts +6 -0
- package/src/core/initTRPC.ts +95 -0
- package/src/core/internals/__generated__/mergeRoutersGeneric.ts +386 -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 +420 -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 +115 -0
- package/src/core/router.ts +366 -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 +229 -0
- package/src/{router.ts → deprecated/router.ts} +219 -104
- package/src/{TRPCError.ts → error/TRPCError.ts} +6 -14
- package/src/error/formatter.ts +51 -0
- package/src/{internals/errors.ts → error/utils.ts} +21 -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 +29 -38
- 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 +88 -69
- 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 +40 -9
- package/dist/TRPCError.d.ts +0 -19
- package/dist/TRPCError.d.ts.map +0 -1
- 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/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/router.d.ts +0 -176
- package/dist/router.d.ts.map +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/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
package/dist/index.mjs
CHANGED
|
@@ -1,88 +1,117 @@
|
|
|
1
|
-
import { a as assertNotBrowser,
|
|
2
|
-
export { a as assertNotBrowser, r as resolveHTTPResponse } from './
|
|
3
|
-
|
|
4
|
-
import { T as TRPCError, g as getErrorFromUnknown } from './
|
|
5
|
-
export { T as TRPCError } from './
|
|
6
|
-
import {
|
|
7
|
-
import
|
|
8
|
-
import 'url';
|
|
9
|
-
import 'events';
|
|
10
|
-
import 'http';
|
|
1
|
+
import { a as assertNotBrowser, g as getHTTPStatusCodeFromError } from './resolveHTTPResponse-8657b8de.mjs';
|
|
2
|
+
export { a as assertNotBrowser, r as resolveHTTPResponse } from './resolveHTTPResponse-8657b8de.mjs';
|
|
3
|
+
import { T as TRPC_ERROR_CODES_BY_KEY } from './envelopes-af8c2959.mjs';
|
|
4
|
+
import { T as TRPCError, g as getCauseFromUnknown, a as getErrorFromUnknown } from './TRPCError-b7fa0c31.mjs';
|
|
5
|
+
export { T as TRPCError } from './TRPCError-b7fa0c31.mjs';
|
|
6
|
+
import { c as createProxy } from './index-a3bd54c7.mjs';
|
|
7
|
+
import './transformTRPCResponse-747b9a68.mjs';
|
|
11
8
|
|
|
12
9
|
assertNotBrowser();
|
|
13
10
|
|
|
14
|
-
|
|
11
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
15
12
|
|
|
16
13
|
/**
|
|
17
|
-
* @
|
|
14
|
+
* @public
|
|
18
15
|
*/
|
|
19
|
-
|
|
16
|
+
|
|
20
17
|
/**
|
|
21
|
-
* @
|
|
18
|
+
* @public
|
|
22
19
|
*/
|
|
23
20
|
|
|
24
|
-
const createHttpHandler = createHTTPHandler;
|
|
25
21
|
/**
|
|
26
|
-
* @
|
|
22
|
+
* @public
|
|
27
23
|
*/
|
|
28
24
|
|
|
29
25
|
/**
|
|
30
|
-
* @
|
|
26
|
+
* @public
|
|
31
27
|
*/
|
|
32
|
-
|
|
28
|
+
|
|
33
29
|
/**
|
|
34
|
-
* @
|
|
30
|
+
* @public
|
|
35
31
|
*/
|
|
36
32
|
|
|
37
|
-
const middlewareMarker = /*#__PURE__*/Symbol('middlewareMarker');
|
|
38
|
-
|
|
39
33
|
/**
|
|
40
|
-
*
|
|
41
|
-
* Returns a discriminated union
|
|
34
|
+
* @internal
|
|
42
35
|
*/
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
return {
|
|
47
|
-
ok: true,
|
|
48
|
-
data
|
|
49
|
-
};
|
|
50
|
-
} catch (cause) {
|
|
51
|
-
return {
|
|
52
|
-
ok: false,
|
|
53
|
-
error: cause
|
|
54
|
-
};
|
|
36
|
+
function getDataTransformer$1(transformer) {
|
|
37
|
+
if ('input' in transformer) {
|
|
38
|
+
return transformer;
|
|
55
39
|
}
|
|
40
|
+
|
|
41
|
+
return {
|
|
42
|
+
input: transformer,
|
|
43
|
+
output: transformer
|
|
44
|
+
};
|
|
56
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* @internal
|
|
48
|
+
*/
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* @internal
|
|
52
|
+
*/
|
|
53
|
+
const defaultTransformer = {
|
|
54
|
+
_default: true,
|
|
55
|
+
input: {
|
|
56
|
+
serialize: obj => obj,
|
|
57
|
+
deserialize: obj => obj
|
|
58
|
+
},
|
|
59
|
+
output: {
|
|
60
|
+
serialize: obj => obj,
|
|
61
|
+
deserialize: obj => obj
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* @internal
|
|
67
|
+
*/
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* @internal
|
|
71
|
+
*/
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* @internal
|
|
75
|
+
*/
|
|
76
|
+
const defaultFormatter = ({
|
|
77
|
+
shape
|
|
78
|
+
}) => {
|
|
79
|
+
return shape;
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* @deprecated
|
|
84
|
+
*/
|
|
85
|
+
const middlewareMarker$1 = 'middlewareMarker';
|
|
57
86
|
|
|
58
87
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
59
88
|
assertNotBrowser();
|
|
60
89
|
|
|
61
|
-
function getParseFn(
|
|
62
|
-
const parser =
|
|
90
|
+
function getParseFn$1(procedureParser) {
|
|
91
|
+
const parser = procedureParser;
|
|
63
92
|
|
|
64
93
|
if (typeof parser === 'function') {
|
|
65
|
-
//
|
|
94
|
+
// ProcedureParserCustomValidatorEsque
|
|
66
95
|
return parser;
|
|
67
96
|
}
|
|
68
97
|
|
|
69
98
|
if (typeof parser.parseAsync === 'function') {
|
|
70
|
-
//
|
|
99
|
+
// ProcedureParserZodEsque
|
|
71
100
|
return parser.parseAsync.bind(parser);
|
|
72
101
|
}
|
|
73
102
|
|
|
74
103
|
if (typeof parser.parse === 'function') {
|
|
75
|
-
//
|
|
104
|
+
// ProcedureParserZodEsque
|
|
76
105
|
return parser.parse.bind(parser);
|
|
77
106
|
}
|
|
78
107
|
|
|
79
108
|
if (typeof parser.validateSync === 'function') {
|
|
80
|
-
//
|
|
109
|
+
// ProcedureParserYupEsque
|
|
81
110
|
return parser.validateSync.bind(parser);
|
|
82
111
|
}
|
|
83
112
|
|
|
84
113
|
if (typeof parser.create === 'function') {
|
|
85
|
-
//
|
|
114
|
+
// ProcedureParserSuperstructEsque
|
|
86
115
|
return parser.create.bind(parser);
|
|
87
116
|
}
|
|
88
117
|
|
|
@@ -90,6 +119,7 @@ function getParseFn(inputParser) {
|
|
|
90
119
|
}
|
|
91
120
|
/**
|
|
92
121
|
* @internal
|
|
122
|
+
* @deprecated
|
|
93
123
|
*/
|
|
94
124
|
|
|
95
125
|
|
|
@@ -98,25 +128,53 @@ class Procedure {
|
|
|
98
128
|
this.middlewares = void 0;
|
|
99
129
|
this.resolver = void 0;
|
|
100
130
|
this.inputParser = void 0;
|
|
101
|
-
this.
|
|
131
|
+
this.parseInputFn = void 0;
|
|
132
|
+
this.outputParser = void 0;
|
|
133
|
+
this.parseOutputFn = void 0;
|
|
134
|
+
this.meta = void 0;
|
|
102
135
|
this.middlewares = opts.middlewares;
|
|
103
136
|
this.resolver = opts.resolver;
|
|
104
137
|
this.inputParser = opts.inputParser;
|
|
105
|
-
this.
|
|
138
|
+
this.parseInputFn = getParseFn$1(this.inputParser);
|
|
139
|
+
this.outputParser = opts.outputParser;
|
|
140
|
+
this.parseOutputFn = getParseFn$1(this.outputParser);
|
|
141
|
+
this.meta = opts.meta;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
_def() {
|
|
145
|
+
return {
|
|
146
|
+
middlewares: this.middlewares,
|
|
147
|
+
resolver: this.resolver,
|
|
148
|
+
inputParser: this.inputParser,
|
|
149
|
+
outputParser: this.outputParser,
|
|
150
|
+
meta: this.meta
|
|
151
|
+
};
|
|
106
152
|
}
|
|
107
153
|
|
|
108
154
|
async parseInput(rawInput) {
|
|
109
155
|
try {
|
|
110
|
-
return await this.
|
|
156
|
+
return await this.parseInputFn(rawInput);
|
|
111
157
|
} catch (cause) {
|
|
112
158
|
throw new TRPCError({
|
|
113
159
|
code: 'BAD_REQUEST',
|
|
114
|
-
cause
|
|
160
|
+
cause: getCauseFromUnknown(cause)
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
async parseOutput(rawOutput) {
|
|
166
|
+
try {
|
|
167
|
+
return await this.parseOutputFn(rawOutput);
|
|
168
|
+
} catch (cause) {
|
|
169
|
+
throw new TRPCError({
|
|
170
|
+
code: 'INTERNAL_SERVER_ERROR',
|
|
171
|
+
cause: getCauseFromUnknown(cause),
|
|
172
|
+
message: 'Output validation failed'
|
|
115
173
|
});
|
|
116
174
|
}
|
|
117
175
|
}
|
|
118
176
|
/**
|
|
119
|
-
* Trigger middlewares in order, parse raw input &
|
|
177
|
+
* Trigger middlewares in order, parse raw input, call resolver & parse raw output
|
|
120
178
|
* @internal
|
|
121
179
|
*/
|
|
122
180
|
|
|
@@ -127,40 +185,50 @@ class Procedure {
|
|
|
127
185
|
ctx
|
|
128
186
|
}) => {
|
|
129
187
|
const input = await this.parseInput(opts.rawInput);
|
|
130
|
-
const
|
|
188
|
+
const rawOutput = await this.resolver({ ...opts,
|
|
131
189
|
ctx,
|
|
132
190
|
input
|
|
133
191
|
});
|
|
192
|
+
const data = await this.parseOutput(rawOutput);
|
|
134
193
|
return {
|
|
135
|
-
marker: middlewareMarker,
|
|
194
|
+
marker: middlewareMarker$1,
|
|
136
195
|
ok: true,
|
|
137
196
|
data,
|
|
138
197
|
ctx
|
|
139
198
|
};
|
|
140
|
-
}]); //
|
|
199
|
+
}]); // run the middlewares recursively with the resolver as the last one
|
|
141
200
|
|
|
142
|
-
const
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
201
|
+
const callRecursive = async (callOpts = {
|
|
202
|
+
index: 0,
|
|
203
|
+
ctx: opts.ctx
|
|
204
|
+
}) => {
|
|
205
|
+
try {
|
|
206
|
+
const result = await middlewaresWithResolver[callOpts.index]({
|
|
207
|
+
ctx: callOpts.ctx,
|
|
146
208
|
type: opts.type,
|
|
147
209
|
path: opts.path,
|
|
148
210
|
rawInput: opts.rawInput,
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
211
|
+
meta: this.meta,
|
|
212
|
+
next: async nextOpts => {
|
|
213
|
+
return await callRecursive({
|
|
214
|
+
index: callOpts.index + 1,
|
|
215
|
+
ctx: nextOpts ? nextOpts.ctx : callOpts.ctx
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
return result;
|
|
220
|
+
} catch (cause) {
|
|
156
221
|
return {
|
|
222
|
+
ctx: callOpts.ctx,
|
|
157
223
|
ok: false,
|
|
158
|
-
error: getErrorFromUnknown(
|
|
224
|
+
error: getErrorFromUnknown(cause),
|
|
225
|
+
marker: middlewareMarker$1
|
|
159
226
|
};
|
|
160
|
-
}
|
|
161
|
-
}
|
|
227
|
+
}
|
|
228
|
+
}; // there's always at least one "next" since we wrap this.resolver in a middleware
|
|
229
|
+
|
|
162
230
|
|
|
163
|
-
const result = await
|
|
231
|
+
const result = await callRecursive();
|
|
164
232
|
|
|
165
233
|
if (!result) {
|
|
166
234
|
throw new TRPCError({
|
|
@@ -187,7 +255,9 @@ class Procedure {
|
|
|
187
255
|
const instance = new Constructor({
|
|
188
256
|
middlewares: [...middlewares, ...this.middlewares],
|
|
189
257
|
resolver: this.resolver,
|
|
190
|
-
inputParser: this.inputParser
|
|
258
|
+
inputParser: this.inputParser,
|
|
259
|
+
outputParser: this.outputParser,
|
|
260
|
+
meta: this.meta
|
|
191
261
|
});
|
|
192
262
|
return instance;
|
|
193
263
|
}
|
|
@@ -204,19 +274,540 @@ function createProcedure(opts) {
|
|
|
204
274
|
|
|
205
275
|
return undefined;
|
|
206
276
|
};
|
|
277
|
+
const outputParser = 'output' in opts && opts.output ? opts.output : output => output;
|
|
207
278
|
return new Procedure({
|
|
208
279
|
inputParser: inputParser,
|
|
209
280
|
resolver: opts.resolve,
|
|
281
|
+
middlewares: [],
|
|
282
|
+
outputParser: outputParser,
|
|
283
|
+
meta: opts.meta
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
function getParseFn(procedureParser) {
|
|
288
|
+
const parser = procedureParser;
|
|
289
|
+
|
|
290
|
+
if (typeof parser === 'function') {
|
|
291
|
+
// ProcedureParserCustomValidatorEsque
|
|
292
|
+
return parser;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
if (typeof parser.parseAsync === 'function') {
|
|
296
|
+
// ProcedureParserZodEsque
|
|
297
|
+
return parser.parseAsync.bind(parser);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
if (typeof parser.parse === 'function') {
|
|
301
|
+
// ProcedureParserZodEsque
|
|
302
|
+
return parser.parse.bind(parser);
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
if (typeof parser.validateSync === 'function') {
|
|
306
|
+
// ProcedureParserYupEsque
|
|
307
|
+
return parser.validateSync.bind(parser);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
if (typeof parser.create === 'function') {
|
|
311
|
+
// ProcedureParserSuperstructEsque
|
|
312
|
+
return parser.create.bind(parser);
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
throw new Error('Could not find a validator fn');
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* @deprecated only for backwards compat
|
|
319
|
+
* @internal
|
|
320
|
+
*/
|
|
321
|
+
|
|
322
|
+
function getParseFnOrPassThrough(procedureParser) {
|
|
323
|
+
if (!procedureParser) {
|
|
324
|
+
return v => v;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
return getParseFn(procedureParser);
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
/**
|
|
331
|
+
* Ensures there are no duplicate keys when building a procedure.
|
|
332
|
+
*/
|
|
333
|
+
function mergeWithoutOverrides(obj1, ...objs) {
|
|
334
|
+
const newObj = Object.assign(Object.create(null), obj1);
|
|
335
|
+
|
|
336
|
+
for (const overrides of objs) {
|
|
337
|
+
for (const key in overrides) {
|
|
338
|
+
if (key in newObj && newObj[key] !== overrides[key]) {
|
|
339
|
+
throw new Error(`Duplicate key ${key}`);
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
newObj[key] = overrides[key];
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
return newObj;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
/**
|
|
350
|
+
* @internal
|
|
351
|
+
*/
|
|
352
|
+
|
|
353
|
+
/**
|
|
354
|
+
* @internal
|
|
355
|
+
*/
|
|
356
|
+
|
|
357
|
+
/**
|
|
358
|
+
* @internal
|
|
359
|
+
*/
|
|
360
|
+
const middlewareMarker = 'middlewareMarker';
|
|
361
|
+
/**
|
|
362
|
+
* @internal
|
|
363
|
+
*/
|
|
364
|
+
|
|
365
|
+
function createNewBuilder(def1, def2) {
|
|
366
|
+
const {
|
|
367
|
+
middlewares = [],
|
|
368
|
+
...rest
|
|
369
|
+
} = def2; // TODO: maybe have a fn here to warn about calls
|
|
370
|
+
|
|
371
|
+
return createBuilder({ ...mergeWithoutOverrides(def1, rest),
|
|
372
|
+
middlewares: [...def1.middlewares, ...middlewares]
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
function createBuilder(initDef) {
|
|
377
|
+
const _def = initDef || {
|
|
210
378
|
middlewares: []
|
|
379
|
+
};
|
|
380
|
+
|
|
381
|
+
return {
|
|
382
|
+
_def,
|
|
383
|
+
|
|
384
|
+
input(input) {
|
|
385
|
+
const parser = getParseFn(input);
|
|
386
|
+
return createNewBuilder(_def, {
|
|
387
|
+
input,
|
|
388
|
+
middlewares: [createInputMiddleware(parser)]
|
|
389
|
+
});
|
|
390
|
+
},
|
|
391
|
+
|
|
392
|
+
output(output) {
|
|
393
|
+
const parseOutput = getParseFn(output);
|
|
394
|
+
return createNewBuilder(_def, {
|
|
395
|
+
output,
|
|
396
|
+
middlewares: [createOutputMiddleware(parseOutput)]
|
|
397
|
+
});
|
|
398
|
+
},
|
|
399
|
+
|
|
400
|
+
meta(meta) {
|
|
401
|
+
return createNewBuilder(_def, {
|
|
402
|
+
meta: meta
|
|
403
|
+
});
|
|
404
|
+
},
|
|
405
|
+
|
|
406
|
+
/** @deprecated **/
|
|
407
|
+
resolve(resolver) {
|
|
408
|
+
return createResolver(_def, resolver);
|
|
409
|
+
},
|
|
410
|
+
|
|
411
|
+
unstable_concat(builder) {
|
|
412
|
+
return createNewBuilder(_def, builder._def);
|
|
413
|
+
},
|
|
414
|
+
|
|
415
|
+
use(middleware) {
|
|
416
|
+
return createNewBuilder(_def, {
|
|
417
|
+
middlewares: [middleware]
|
|
418
|
+
});
|
|
419
|
+
},
|
|
420
|
+
|
|
421
|
+
query(resolver) {
|
|
422
|
+
return createResolver({ ..._def,
|
|
423
|
+
query: true
|
|
424
|
+
}, resolver);
|
|
425
|
+
},
|
|
426
|
+
|
|
427
|
+
mutation(resolver) {
|
|
428
|
+
return createResolver({ ..._def,
|
|
429
|
+
mutation: true
|
|
430
|
+
}, resolver);
|
|
431
|
+
},
|
|
432
|
+
|
|
433
|
+
subscription(resolver) {
|
|
434
|
+
return createResolver({ ..._def,
|
|
435
|
+
subscription: true
|
|
436
|
+
}, resolver);
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
};
|
|
440
|
+
}
|
|
441
|
+
function createInputMiddleware(parse) {
|
|
442
|
+
return async function inputMiddleware({
|
|
443
|
+
next,
|
|
444
|
+
rawInput
|
|
445
|
+
}) {
|
|
446
|
+
let input;
|
|
447
|
+
|
|
448
|
+
try {
|
|
449
|
+
input = await parse(rawInput);
|
|
450
|
+
} catch (cause) {
|
|
451
|
+
throw new TRPCError({
|
|
452
|
+
code: 'BAD_REQUEST',
|
|
453
|
+
cause: getCauseFromUnknown(cause)
|
|
454
|
+
});
|
|
455
|
+
} // TODO fix this typing?
|
|
456
|
+
|
|
457
|
+
|
|
458
|
+
return next({
|
|
459
|
+
input
|
|
460
|
+
});
|
|
461
|
+
};
|
|
462
|
+
}
|
|
463
|
+
function createOutputMiddleware(parse) {
|
|
464
|
+
return async function outputMiddleware({
|
|
465
|
+
next
|
|
466
|
+
}) {
|
|
467
|
+
const result = await next();
|
|
468
|
+
|
|
469
|
+
if (!result.ok) {
|
|
470
|
+
// pass through failures without validating
|
|
471
|
+
return result;
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
try {
|
|
475
|
+
const data = await parse(result.data);
|
|
476
|
+
return { ...result,
|
|
477
|
+
data
|
|
478
|
+
};
|
|
479
|
+
} catch (cause) {
|
|
480
|
+
throw new TRPCError({
|
|
481
|
+
message: 'Output validation failed',
|
|
482
|
+
code: 'INTERNAL_SERVER_ERROR',
|
|
483
|
+
cause: getCauseFromUnknown(cause)
|
|
484
|
+
});
|
|
485
|
+
}
|
|
486
|
+
};
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
function createResolver(_def, resolver) {
|
|
490
|
+
const finalBuilder = createNewBuilder(_def, {
|
|
491
|
+
resolver,
|
|
492
|
+
middlewares: [async function resolveMiddleware(opts) {
|
|
493
|
+
const data = await resolver(opts);
|
|
494
|
+
return {
|
|
495
|
+
marker: middlewareMarker,
|
|
496
|
+
ok: true,
|
|
497
|
+
data,
|
|
498
|
+
ctx: opts.ctx
|
|
499
|
+
};
|
|
500
|
+
}]
|
|
211
501
|
});
|
|
502
|
+
return createProcedureCaller(finalBuilder._def);
|
|
503
|
+
}
|
|
504
|
+
/**
|
|
505
|
+
* @internal
|
|
506
|
+
*/
|
|
507
|
+
|
|
508
|
+
|
|
509
|
+
const codeblock = /*#__PURE__*/`
|
|
510
|
+
If you want to call this function on the server, you do the following:
|
|
511
|
+
This is a client-only function.
|
|
512
|
+
|
|
513
|
+
const caller = appRouter.createCaller({
|
|
514
|
+
/* ... your context */
|
|
515
|
+
});
|
|
516
|
+
|
|
517
|
+
const result = await caller.call('myProcedure', input);
|
|
518
|
+
`.trim();
|
|
519
|
+
|
|
520
|
+
function createProcedureCaller(_def) {
|
|
521
|
+
const procedure = async function resolve(opts) {
|
|
522
|
+
// is direct server-side call
|
|
523
|
+
if (!opts || !('rawInput' in opts)) {
|
|
524
|
+
throw new Error(codeblock);
|
|
525
|
+
} // run the middlewares recursively with the resolver as the last one
|
|
526
|
+
|
|
527
|
+
|
|
528
|
+
const callRecursive = async (callOpts = {
|
|
529
|
+
index: 0,
|
|
530
|
+
ctx: opts.ctx
|
|
531
|
+
}) => {
|
|
532
|
+
try {
|
|
533
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
534
|
+
const middleware = _def.middlewares[callOpts.index];
|
|
535
|
+
const result = await middleware({
|
|
536
|
+
ctx: callOpts.ctx,
|
|
537
|
+
type: opts.type,
|
|
538
|
+
path: opts.path,
|
|
539
|
+
rawInput: opts.rawInput,
|
|
540
|
+
meta: _def.meta,
|
|
541
|
+
input: callOpts.input,
|
|
542
|
+
next: async nextOpts => {
|
|
543
|
+
return await callRecursive({
|
|
544
|
+
index: callOpts.index + 1,
|
|
545
|
+
ctx: nextOpts && 'ctx' in nextOpts ? { ...callOpts.ctx,
|
|
546
|
+
...nextOpts.ctx
|
|
547
|
+
} : callOpts.ctx,
|
|
548
|
+
input: nextOpts && 'input' in nextOpts ? nextOpts.input : callOpts.input
|
|
549
|
+
});
|
|
550
|
+
}
|
|
551
|
+
});
|
|
552
|
+
return result;
|
|
553
|
+
} catch (cause) {
|
|
554
|
+
return {
|
|
555
|
+
ok: false,
|
|
556
|
+
error: getErrorFromUnknown(cause),
|
|
557
|
+
marker: middlewareMarker
|
|
558
|
+
};
|
|
559
|
+
}
|
|
560
|
+
}; // there's always at least one "next" since we wrap this.resolver in a middleware
|
|
561
|
+
|
|
562
|
+
|
|
563
|
+
const result = await callRecursive();
|
|
564
|
+
|
|
565
|
+
if (!result) {
|
|
566
|
+
throw new TRPCError({
|
|
567
|
+
code: 'INTERNAL_SERVER_ERROR',
|
|
568
|
+
message: 'No result from middlewares - did you forget to `return next()`?'
|
|
569
|
+
});
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
if (!result.ok) {
|
|
573
|
+
// re-throw original error
|
|
574
|
+
throw result.error;
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
return result.data;
|
|
578
|
+
};
|
|
579
|
+
|
|
580
|
+
procedure._def = _def;
|
|
581
|
+
procedure.meta = _def.meta;
|
|
582
|
+
return procedure;
|
|
212
583
|
}
|
|
213
584
|
|
|
214
|
-
|
|
215
|
-
|
|
585
|
+
/**
|
|
586
|
+
* Create an object without inheriting anything from `Object.prototype`
|
|
587
|
+
* @internal
|
|
588
|
+
*/
|
|
589
|
+
function omitPrototype(obj1) {
|
|
590
|
+
return Object.assign(Object.create(null), obj1);
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
const procedureTypes = ['query', 'mutation', 'subscription'];
|
|
216
594
|
/**
|
|
217
595
|
* @public
|
|
218
596
|
*/
|
|
219
597
|
|
|
598
|
+
/* eslint-disable @typescript-eslint/ban-types */
|
|
599
|
+
|
|
600
|
+
function isRouter(procedureOrRouter) {
|
|
601
|
+
return 'router' in procedureOrRouter._def;
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
const emptyRouter = {
|
|
605
|
+
_ctx: null,
|
|
606
|
+
_errorShape: null,
|
|
607
|
+
_meta: null,
|
|
608
|
+
queries: {},
|
|
609
|
+
mutations: {},
|
|
610
|
+
subscriptions: {},
|
|
611
|
+
errorFormatter: defaultFormatter,
|
|
612
|
+
transformer: defaultTransformer
|
|
613
|
+
};
|
|
614
|
+
/**
|
|
615
|
+
*
|
|
616
|
+
* @internal
|
|
617
|
+
*/
|
|
618
|
+
|
|
619
|
+
function createRouterFactory(defaults) {
|
|
620
|
+
return function createRouterInner(opts) {
|
|
621
|
+
var _defaults$transformer, _defaults$errorFormat;
|
|
622
|
+
|
|
623
|
+
const routerProcedures = omitPrototype({});
|
|
624
|
+
|
|
625
|
+
function recursiveGetPaths(procedures, path = '') {
|
|
626
|
+
for (const [key, procedureOrRouter] of Object.entries(procedures !== null && procedures !== void 0 ? procedures : {})) {
|
|
627
|
+
const newPath = `${path}${key}`;
|
|
628
|
+
|
|
629
|
+
if (isRouter(procedureOrRouter)) {
|
|
630
|
+
recursiveGetPaths(procedureOrRouter._def.procedures, `${newPath}.`);
|
|
631
|
+
continue;
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
routerProcedures[newPath] = procedureOrRouter;
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
|
|
638
|
+
recursiveGetPaths(opts);
|
|
639
|
+
const result = mergeWithoutOverrides({
|
|
640
|
+
transformer: (_defaults$transformer = defaults === null || defaults === void 0 ? void 0 : defaults.transformer) !== null && _defaults$transformer !== void 0 ? _defaults$transformer : defaultTransformer,
|
|
641
|
+
errorFormatter: (_defaults$errorFormat = defaults === null || defaults === void 0 ? void 0 : defaults.errorFormatter) !== null && _defaults$errorFormat !== void 0 ? _defaults$errorFormat : defaultFormatter
|
|
642
|
+
}, {
|
|
643
|
+
procedures: routerProcedures
|
|
644
|
+
});
|
|
645
|
+
const _def = {
|
|
646
|
+
router: true,
|
|
647
|
+
procedures: {},
|
|
648
|
+
...emptyRouter,
|
|
649
|
+
...result,
|
|
650
|
+
record: opts,
|
|
651
|
+
queries: Object.entries(result.procedures || {}).filter(pair => pair[1]._def.query).reduce((acc, [key, val]) => ({ ...acc,
|
|
652
|
+
[key]: val
|
|
653
|
+
}), {}),
|
|
654
|
+
mutations: Object.entries(result.procedures || {}).filter(pair => pair[1]._def.mutation).reduce((acc, [key, val]) => ({ ...acc,
|
|
655
|
+
[key]: val
|
|
656
|
+
}), {}),
|
|
657
|
+
subscriptions: Object.entries(result.procedures || {}).filter(pair => pair[1]._def.subscription).reduce((acc, [key, val]) => ({ ...acc,
|
|
658
|
+
[key]: val
|
|
659
|
+
}), {}),
|
|
660
|
+
routers: Object.entries(result.procedures || {}).filter(pair => pair[1]._def._router).reduce((acc, [key, val]) => ({ ...acc,
|
|
661
|
+
[key]: val
|
|
662
|
+
}), {})
|
|
663
|
+
};
|
|
664
|
+
const router = { ...opts,
|
|
665
|
+
_def,
|
|
666
|
+
transformer: _def.transformer,
|
|
667
|
+
errorFormatter: _def.errorFormatter,
|
|
668
|
+
|
|
669
|
+
createCaller(ctx) {
|
|
670
|
+
const proxy = createProxy(({
|
|
671
|
+
path,
|
|
672
|
+
args
|
|
673
|
+
}) => {
|
|
674
|
+
// interop mode
|
|
675
|
+
if (path.length === 1 && procedureTypes.includes(path[0])) {
|
|
676
|
+
return callProcedure({
|
|
677
|
+
procedures: _def.procedures,
|
|
678
|
+
path: args[0],
|
|
679
|
+
rawInput: args[1],
|
|
680
|
+
ctx,
|
|
681
|
+
type: path[0]
|
|
682
|
+
});
|
|
683
|
+
}
|
|
684
|
+
|
|
685
|
+
const fullPath = path.join('.');
|
|
686
|
+
const procedure = _def.procedures[fullPath];
|
|
687
|
+
let type = 'query';
|
|
688
|
+
|
|
689
|
+
if (procedure._def.mutation) {
|
|
690
|
+
type = 'mutation';
|
|
691
|
+
} else if (procedure._def.subscription) {
|
|
692
|
+
type = 'subscription';
|
|
693
|
+
}
|
|
694
|
+
|
|
695
|
+
return procedure({
|
|
696
|
+
path: fullPath,
|
|
697
|
+
rawInput: args[0],
|
|
698
|
+
ctx,
|
|
699
|
+
type
|
|
700
|
+
});
|
|
701
|
+
});
|
|
702
|
+
return proxy;
|
|
703
|
+
},
|
|
704
|
+
|
|
705
|
+
getErrorShape(opts) {
|
|
706
|
+
const {
|
|
707
|
+
path,
|
|
708
|
+
error
|
|
709
|
+
} = opts;
|
|
710
|
+
const {
|
|
711
|
+
code
|
|
712
|
+
} = opts.error;
|
|
713
|
+
const shape = {
|
|
714
|
+
message: error.message,
|
|
715
|
+
code: TRPC_ERROR_CODES_BY_KEY[code],
|
|
716
|
+
data: {
|
|
717
|
+
code,
|
|
718
|
+
httpStatus: getHTTPStatusCodeFromError(error)
|
|
719
|
+
}
|
|
720
|
+
};
|
|
721
|
+
|
|
722
|
+
if (process.env.NODE_ENV !== 'production' && typeof opts.error.stack === 'string') {
|
|
723
|
+
shape.data.stack = opts.error.stack;
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
if (typeof path === 'string') {
|
|
727
|
+
shape.data.path = path;
|
|
728
|
+
}
|
|
729
|
+
|
|
730
|
+
return this._def.errorFormatter({ ...opts,
|
|
731
|
+
shape
|
|
732
|
+
});
|
|
733
|
+
}
|
|
734
|
+
|
|
735
|
+
};
|
|
736
|
+
return router;
|
|
737
|
+
};
|
|
738
|
+
}
|
|
739
|
+
/**
|
|
740
|
+
* @internal
|
|
741
|
+
*/
|
|
742
|
+
|
|
743
|
+
function callProcedure(opts) {
|
|
744
|
+
var _opts$procedures$path;
|
|
745
|
+
|
|
746
|
+
const {
|
|
747
|
+
type,
|
|
748
|
+
path
|
|
749
|
+
} = opts;
|
|
750
|
+
|
|
751
|
+
if (!(path in opts.procedures) || !((_opts$procedures$path = opts.procedures[path]) !== null && _opts$procedures$path !== void 0 && _opts$procedures$path._def[type])) {
|
|
752
|
+
throw new TRPCError({
|
|
753
|
+
code: 'NOT_FOUND',
|
|
754
|
+
message: `No "${type}"-procedure on path "${path}"`
|
|
755
|
+
});
|
|
756
|
+
}
|
|
757
|
+
|
|
758
|
+
const procedure = opts.procedures[path];
|
|
759
|
+
return procedure(opts);
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
function migrateProcedure(oldProc, type) {
|
|
763
|
+
const def = oldProc._def();
|
|
764
|
+
|
|
765
|
+
const inputParser = getParseFnOrPassThrough(def.inputParser);
|
|
766
|
+
const outputParser = getParseFnOrPassThrough(def.outputParser);
|
|
767
|
+
const inputMiddleware = createInputMiddleware(inputParser);
|
|
768
|
+
const builder = createBuilder({
|
|
769
|
+
input: def.inputParser,
|
|
770
|
+
middlewares: [...def.middlewares, inputMiddleware, createOutputMiddleware(outputParser)],
|
|
771
|
+
meta: def.meta,
|
|
772
|
+
output: def.outputParser,
|
|
773
|
+
mutation: type === 'mutation',
|
|
774
|
+
query: type === 'query',
|
|
775
|
+
subscription: type === 'subscription'
|
|
776
|
+
});
|
|
777
|
+
const proc = builder[type](opts => def.resolver(opts));
|
|
778
|
+
return proc;
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
function migrateRouter(oldRouter) {
|
|
782
|
+
const errorFormatter = oldRouter._def.errorFormatter;
|
|
783
|
+
const transformer = oldRouter._def.transformer;
|
|
784
|
+
const queries = {};
|
|
785
|
+
const mutations = {};
|
|
786
|
+
const subscriptions = {};
|
|
787
|
+
|
|
788
|
+
for (const [name, procedure] of Object.entries(oldRouter._def.queries)) {
|
|
789
|
+
queries[name] = migrateProcedure(procedure, 'query');
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
for (const [name, procedure] of Object.entries(oldRouter._def.mutations)) {
|
|
793
|
+
mutations[name] = migrateProcedure(procedure, 'mutation');
|
|
794
|
+
}
|
|
795
|
+
|
|
796
|
+
for (const [name, procedure] of Object.entries(oldRouter._def.subscriptions)) {
|
|
797
|
+
subscriptions[name] = migrateProcedure(procedure, 'subscription');
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
const procedures = mergeWithoutOverrides(queries, mutations, subscriptions);
|
|
801
|
+
const newRouter = createRouterFactory({
|
|
802
|
+
transformer,
|
|
803
|
+
errorFormatter
|
|
804
|
+
})(procedures);
|
|
805
|
+
return newRouter;
|
|
806
|
+
}
|
|
807
|
+
|
|
808
|
+
/* eslint-disable @typescript-eslint/ban-types */
|
|
809
|
+
assertNotBrowser();
|
|
810
|
+
|
|
220
811
|
function getDataTransformer(transformer) {
|
|
221
812
|
if ('input' in transformer) {
|
|
222
813
|
return transformer;
|
|
@@ -229,6 +820,7 @@ function getDataTransformer(transformer) {
|
|
|
229
820
|
}
|
|
230
821
|
/**
|
|
231
822
|
* @internal
|
|
823
|
+
* @deprecated
|
|
232
824
|
*/
|
|
233
825
|
|
|
234
826
|
|
|
@@ -239,31 +831,16 @@ const PROCEDURE_DEFINITION_MAP = {
|
|
|
239
831
|
};
|
|
240
832
|
/**
|
|
241
833
|
* @internal
|
|
834
|
+
* @deprecated
|
|
242
835
|
*/
|
|
243
836
|
|
|
244
837
|
function safeObject(...args) {
|
|
245
838
|
return Object.assign(Object.create(null), ...args);
|
|
246
839
|
}
|
|
247
840
|
|
|
248
|
-
const defaultFormatter = ({
|
|
249
|
-
shape
|
|
250
|
-
}) => {
|
|
251
|
-
return shape;
|
|
252
|
-
};
|
|
253
|
-
|
|
254
|
-
const defaultTransformer = {
|
|
255
|
-
input: {
|
|
256
|
-
serialize: obj => obj,
|
|
257
|
-
deserialize: obj => obj
|
|
258
|
-
},
|
|
259
|
-
output: {
|
|
260
|
-
serialize: obj => obj,
|
|
261
|
-
deserialize: obj => obj
|
|
262
|
-
}
|
|
263
|
-
};
|
|
264
|
-
|
|
265
841
|
/**
|
|
266
842
|
* @internal The type signature of this class may change without warning.
|
|
843
|
+
* @deprecated
|
|
267
844
|
*/
|
|
268
845
|
class Router {
|
|
269
846
|
constructor(def) {
|
|
@@ -283,8 +860,8 @@ class Router {
|
|
|
283
860
|
static prefixProcedures(procedures, prefix) {
|
|
284
861
|
const eps = safeObject();
|
|
285
862
|
|
|
286
|
-
for (const key
|
|
287
|
-
eps[prefix + key] =
|
|
863
|
+
for (const [key, procedure] of Object.entries(procedures)) {
|
|
864
|
+
eps[prefix + key] = procedure;
|
|
288
865
|
}
|
|
289
866
|
|
|
290
867
|
return eps;
|
|
@@ -353,8 +930,7 @@ class Router {
|
|
|
353
930
|
const mergeProcedures = defs => {
|
|
354
931
|
const newDefs = safeObject();
|
|
355
932
|
|
|
356
|
-
for (const key
|
|
357
|
-
const procedure = defs[key];
|
|
933
|
+
for (const [key, procedure] of Object.entries(defs)) {
|
|
358
934
|
const newProcedure = procedure.inheritMiddlewares(this._def.middlewares);
|
|
359
935
|
newDefs[key] = newProcedure;
|
|
360
936
|
}
|
|
@@ -504,17 +1080,133 @@ class Router {
|
|
|
504
1080
|
flat() {
|
|
505
1081
|
return this;
|
|
506
1082
|
}
|
|
1083
|
+
/**
|
|
1084
|
+
* Interop mode for v9.x -> v10.x
|
|
1085
|
+
*/
|
|
1086
|
+
|
|
1087
|
+
|
|
1088
|
+
interop() {
|
|
1089
|
+
return migrateRouter(this);
|
|
1090
|
+
}
|
|
507
1091
|
|
|
508
1092
|
}
|
|
509
1093
|
/**
|
|
510
|
-
* Subclass of `VNextRouter` with `TInputContext` and `TContext` set to the same type, for backcompat.
|
|
511
|
-
*
|
|
512
1094
|
* @deprecated
|
|
513
1095
|
*/
|
|
514
1096
|
|
|
515
|
-
class LegacyRouter extends Router {}
|
|
516
1097
|
function router() {
|
|
517
1098
|
return new Router();
|
|
518
1099
|
}
|
|
519
1100
|
|
|
520
|
-
|
|
1101
|
+
function mergeRouters(...routerList) {
|
|
1102
|
+
const record = mergeWithoutOverrides({}, ...routerList.map(r => r._def.record));
|
|
1103
|
+
const errorFormatter = routerList.reduce((currentErrorFormatter, nextRouter) => {
|
|
1104
|
+
if (nextRouter.errorFormatter && nextRouter.errorFormatter !== defaultFormatter) {
|
|
1105
|
+
if (currentErrorFormatter !== defaultFormatter && currentErrorFormatter !== nextRouter.errorFormatter) {
|
|
1106
|
+
throw new Error('You seem to have several error formatters');
|
|
1107
|
+
}
|
|
1108
|
+
|
|
1109
|
+
return nextRouter.errorFormatter;
|
|
1110
|
+
}
|
|
1111
|
+
|
|
1112
|
+
return currentErrorFormatter;
|
|
1113
|
+
}, defaultFormatter);
|
|
1114
|
+
const transformer = routerList.reduce((prev, current) => {
|
|
1115
|
+
if (current.transformer && current.transformer !== defaultTransformer) {
|
|
1116
|
+
if (prev !== defaultTransformer && prev !== current.transformer) {
|
|
1117
|
+
throw new Error('You seem to have several transformers');
|
|
1118
|
+
}
|
|
1119
|
+
|
|
1120
|
+
return current.transformer;
|
|
1121
|
+
}
|
|
1122
|
+
|
|
1123
|
+
return prev;
|
|
1124
|
+
}, defaultTransformer);
|
|
1125
|
+
const router = createRouterFactory({
|
|
1126
|
+
errorFormatter,
|
|
1127
|
+
transformer
|
|
1128
|
+
})(record);
|
|
1129
|
+
return router;
|
|
1130
|
+
}
|
|
1131
|
+
|
|
1132
|
+
function mergeRoutersGeneric(...args) {
|
|
1133
|
+
return mergeRouters(...args);
|
|
1134
|
+
}
|
|
1135
|
+
|
|
1136
|
+
/**
|
|
1137
|
+
* @internal
|
|
1138
|
+
*/
|
|
1139
|
+
|
|
1140
|
+
/**
|
|
1141
|
+
* @internal
|
|
1142
|
+
*/
|
|
1143
|
+
|
|
1144
|
+
/**
|
|
1145
|
+
* @internal
|
|
1146
|
+
*/
|
|
1147
|
+
|
|
1148
|
+
/**
|
|
1149
|
+
* @internal
|
|
1150
|
+
*/
|
|
1151
|
+
|
|
1152
|
+
/**
|
|
1153
|
+
* @internal
|
|
1154
|
+
*/
|
|
1155
|
+
|
|
1156
|
+
/**
|
|
1157
|
+
* @internal
|
|
1158
|
+
*/
|
|
1159
|
+
// FIXME this should use RootConfig
|
|
1160
|
+
function createMiddlewareFactory() {
|
|
1161
|
+
return function createMiddleware(fn) {
|
|
1162
|
+
return fn;
|
|
1163
|
+
};
|
|
1164
|
+
}
|
|
1165
|
+
|
|
1166
|
+
/* eslint-disable @typescript-eslint/ban-types */
|
|
1167
|
+
function initTRPC() {
|
|
1168
|
+
return function initTRPCInner(options) {
|
|
1169
|
+
var _options$errorFormatt, _options$transformer;
|
|
1170
|
+
|
|
1171
|
+
const errorFormatter = (_options$errorFormatt = options === null || options === void 0 ? void 0 : options.errorFormatter) !== null && _options$errorFormatt !== void 0 ? _options$errorFormatt : defaultFormatter;
|
|
1172
|
+
const transformer = getDataTransformer$1((_options$transformer = options === null || options === void 0 ? void 0 : options.transformer) !== null && _options$transformer !== void 0 ? _options$transformer : defaultTransformer);
|
|
1173
|
+
const _config = {
|
|
1174
|
+
transformer,
|
|
1175
|
+
errorShape: null,
|
|
1176
|
+
ctx: null,
|
|
1177
|
+
meta: null
|
|
1178
|
+
};
|
|
1179
|
+
return {
|
|
1180
|
+
/**
|
|
1181
|
+
* These are just types, they can't be used
|
|
1182
|
+
* @internal
|
|
1183
|
+
*/
|
|
1184
|
+
_config,
|
|
1185
|
+
|
|
1186
|
+
/**
|
|
1187
|
+
* Builder object for creating procedures
|
|
1188
|
+
*/
|
|
1189
|
+
procedure: createBuilder(),
|
|
1190
|
+
|
|
1191
|
+
/**
|
|
1192
|
+
* Create reusable middlewares
|
|
1193
|
+
*/
|
|
1194
|
+
middleware: createMiddlewareFactory(),
|
|
1195
|
+
|
|
1196
|
+
/**
|
|
1197
|
+
* Create a router
|
|
1198
|
+
*/
|
|
1199
|
+
router: createRouterFactory({
|
|
1200
|
+
errorFormatter,
|
|
1201
|
+
transformer
|
|
1202
|
+
}),
|
|
1203
|
+
|
|
1204
|
+
/**
|
|
1205
|
+
* Merge Routers
|
|
1206
|
+
*/
|
|
1207
|
+
mergeRouters: mergeRoutersGeneric
|
|
1208
|
+
};
|
|
1209
|
+
};
|
|
1210
|
+
}
|
|
1211
|
+
|
|
1212
|
+
export { callProcedure, defaultTransformer, getDataTransformer$1 as getDataTransformer, initTRPC, procedureTypes, router };
|