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