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