@trpc/server 10.0.0-alpha.8 → 10.0.0-proxy-alpha.53
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +79 -1
- package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.d.ts +1 -0
- package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.dev.js +190 -0
- package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.js +7 -0
- package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.prod.js +190 -0
- package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.esm.js +186 -0
- package/adapters/aws-lambda/index.d.ts +1 -0
- package/adapters/aws-lambda/index.js +1 -0
- package/adapters/express/dist/trpc-server-adapters-express.cjs.dev.js +7 -7
- package/adapters/express/dist/trpc-server-adapters-express.cjs.prod.js +7 -7
- package/adapters/express/dist/trpc-server-adapters-express.esm.js +7 -7
- package/adapters/fastify/dist/trpc-server-adapters-fastify.cjs.dev.js +18 -11
- package/adapters/fastify/dist/trpc-server-adapters-fastify.cjs.prod.js +18 -11
- package/adapters/fastify/dist/trpc-server-adapters-fastify.esm.js +18 -11
- package/adapters/fastify/index.d.ts +1 -0
- package/adapters/fastify/index.js +1 -0
- package/adapters/fetch/index.d.ts +1 -0
- package/adapters/fetch/index.js +1 -0
- package/adapters/lambda/dist/trpc-server-adapters-lambda.cjs.d.ts +1 -0
- package/adapters/lambda/dist/trpc-server-adapters-lambda.cjs.dev.js +25 -0
- package/adapters/lambda/dist/trpc-server-adapters-lambda.cjs.js +7 -0
- package/adapters/lambda/dist/trpc-server-adapters-lambda.cjs.prod.js +25 -0
- package/adapters/lambda/dist/trpc-server-adapters-lambda.esm.js +21 -0
- package/adapters/next/dist/trpc-server-adapters-next.cjs.dev.js +4 -4
- package/adapters/next/dist/trpc-server-adapters-next.cjs.prod.js +4 -4
- package/adapters/next/dist/trpc-server-adapters-next.esm.js +4 -4
- package/adapters/node-http/dist/trpc-server-adapters-node-http.cjs.dev.js +4 -4
- package/adapters/node-http/dist/trpc-server-adapters-node-http.cjs.prod.js +4 -4
- package/adapters/node-http/dist/trpc-server-adapters-node-http.esm.js +4 -4
- package/adapters/node-http/index.js +1 -1
- package/adapters/standalone/dist/trpc-server-adapters-standalone.cjs.dev.js +5 -5
- package/adapters/standalone/dist/trpc-server-adapters-standalone.cjs.prod.js +5 -5
- package/adapters/standalone/dist/trpc-server-adapters-standalone.esm.js +5 -5
- package/adapters/ws/dist/trpc-server-adapters-ws.cjs.dev.js +24 -7
- package/adapters/ws/dist/trpc-server-adapters-ws.cjs.prod.js +24 -7
- package/adapters/ws/dist/trpc-server-adapters-ws.esm.js +24 -7
- package/dist/TRPCError-bcb38a84.js +61 -0
- package/dist/TRPCError-e6e632a5.mjs +57 -0
- package/dist/adapters/aws-lambda/index.d.ts +14 -0
- package/dist/adapters/aws-lambda/index.d.ts.map +1 -0
- package/dist/adapters/aws-lambda/index.js +153 -0
- package/dist/adapters/aws-lambda/index.mjs +149 -0
- package/dist/adapters/aws-lambda/utils.d.ts +35 -0
- package/dist/adapters/aws-lambda/utils.d.ts.map +1 -0
- package/dist/adapters/express.d.ts +1 -1
- package/dist/adapters/express.d.ts.map +1 -1
- package/dist/adapters/express.js +14 -13
- package/dist/adapters/express.mjs +14 -13
- package/dist/adapters/fastify/fastifyRequestHandler.d.ts +2 -2
- package/dist/adapters/fastify/fastifyRequestHandler.d.ts.map +1 -1
- package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts +2 -2
- package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts.map +1 -1
- package/dist/adapters/fastify/index.d.ts.map +1 -1
- package/dist/adapters/fastify/index.js +87 -0
- package/dist/adapters/fastify/index.mjs +82 -0
- package/dist/adapters/fetch/fetchRequestHandler.d.ts +8 -0
- package/dist/adapters/fetch/fetchRequestHandler.d.ts.map +1 -0
- package/dist/adapters/fetch/index.d.ts +3 -0
- package/dist/adapters/fetch/index.d.ts.map +1 -0
- package/dist/adapters/fetch/index.js +57 -0
- package/dist/adapters/fetch/index.mjs +53 -0
- package/dist/adapters/fetch/types.d.ts +21 -0
- package/dist/adapters/fetch/types.d.ts.map +1 -0
- package/dist/adapters/lambda/index.d.ts +12 -0
- package/dist/adapters/lambda/index.d.ts.map +1 -0
- package/dist/adapters/next.d.ts +2 -2
- package/dist/adapters/next.d.ts.map +1 -1
- package/dist/adapters/next.js +42 -46
- package/dist/adapters/next.mjs +42 -46
- package/dist/adapters/node-http/index.d.ts.map +1 -1
- package/dist/adapters/node-http/index.js +5 -4
- package/dist/adapters/node-http/index.mjs +5 -4
- package/dist/adapters/node-http/internals/getPostBody.d.ts +1 -1
- package/dist/adapters/node-http/internals/getPostBody.d.ts.map +1 -1
- package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts +2 -2
- package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts.map +1 -1
- package/dist/adapters/node-http/types.d.ts +11 -9
- package/dist/adapters/node-http/types.d.ts.map +1 -1
- package/dist/adapters/standalone.d.ts +2 -2
- package/dist/adapters/standalone.d.ts.map +1 -1
- package/dist/adapters/standalone.js +30 -28
- package/dist/adapters/standalone.mjs +30 -27
- package/dist/adapters/ws.d.ts +8 -6
- package/dist/adapters/ws.d.ts.map +1 -1
- package/dist/adapters/ws.js +284 -317
- package/dist/adapters/ws.mjs +284 -317
- package/dist/assertNotBrowser.d.ts.map +1 -1
- package/dist/codes-1c24d919.js +47 -0
- package/dist/codes-aaa7d554.mjs +44 -0
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/initTRPC.d.ts +95 -0
- package/dist/core/initTRPC.d.ts.map +1 -0
- package/dist/core/internals/__generated__/mergeRoutersGeneric.d.ts +302 -0
- package/dist/core/internals/__generated__/mergeRoutersGeneric.d.ts.map +1 -0
- package/dist/core/internals/config.d.ts +36 -0
- package/dist/core/internals/config.d.ts.map +1 -0
- package/dist/core/internals/getParseFn.d.ts +9 -0
- package/dist/core/internals/getParseFn.d.ts.map +1 -0
- package/dist/core/internals/mergeRouters.d.ts +3 -0
- package/dist/core/internals/mergeRouters.d.ts.map +1 -0
- package/dist/core/internals/mergeWithoutOverrides.d.ts +5 -0
- package/dist/core/internals/mergeWithoutOverrides.d.ts.map +1 -0
- package/dist/core/internals/omitPrototype.d.ts +6 -0
- package/dist/core/internals/omitPrototype.d.ts.map +1 -0
- package/dist/core/internals/prefixObjectKeys.d.ts +2 -0
- package/dist/core/internals/prefixObjectKeys.d.ts.map +1 -0
- package/dist/core/internals/procedureBuilder.d.ts +124 -0
- package/dist/core/internals/procedureBuilder.d.ts.map +1 -0
- package/dist/core/internals/utils.d.ts +44 -0
- package/dist/core/internals/utils.d.ts.map +1 -0
- package/dist/core/middleware.d.ts +87 -0
- package/dist/core/middleware.d.ts.map +1 -0
- package/dist/core/parser.d.ts +25 -0
- package/dist/core/parser.d.ts.map +1 -0
- package/dist/core/procedure.d.ts +89 -0
- package/dist/core/procedure.d.ts.map +1 -0
- package/dist/core/router.d.ts +136 -0
- package/dist/core/router.d.ts.map +1 -0
- package/dist/core/types.d.ts +19 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/{internals → deprecated/internals}/callProcedure.d.ts +5 -2
- package/dist/deprecated/internals/callProcedure.d.ts.map +1 -0
- package/dist/{internals → deprecated/internals}/middlewares.d.ts +21 -3
- package/dist/deprecated/internals/middlewares.d.ts.map +1 -0
- package/dist/deprecated/internals/procedure.d.ts +96 -0
- package/dist/deprecated/internals/procedure.d.ts.map +1 -0
- package/dist/deprecated/interop.d.ts +61 -0
- package/dist/deprecated/interop.d.ts.map +1 -0
- package/dist/deprecated/router.d.ts +194 -0
- package/dist/deprecated/router.d.ts.map +1 -0
- package/dist/error/TRPCError.d.ts +11 -0
- package/dist/error/TRPCError.d.ts.map +1 -0
- package/dist/error/formatter.d.ts +33 -0
- package/dist/error/formatter.d.ts.map +1 -0
- package/dist/{internals/errors.d.ts → error/utils.d.ts} +3 -2
- package/dist/error/utils.d.ts.map +1 -0
- package/dist/http/index.d.ts +1 -1
- package/dist/http/index.d.ts.map +1 -1
- package/dist/http/internals/getHTTPStatusCode.d.ts +2 -1
- package/dist/http/internals/getHTTPStatusCode.d.ts.map +1 -1
- package/dist/http/internals/types.d.ts +11 -8
- package/dist/http/internals/types.d.ts.map +1 -1
- package/dist/http/resolveHTTPResponse.d.ts +4 -4
- package/dist/http/resolveHTTPResponse.d.ts.map +1 -1
- package/dist/http/{ResponseMeta.d.ts → types.d.ts} +1 -1
- package/dist/http/types.d.ts.map +1 -0
- package/dist/index-47817162.mjs +26 -0
- package/dist/index-9d687d33.js +28 -0
- package/dist/index.d.ts +4 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +78 -516
- package/dist/index.mjs +71 -508
- package/dist/internals/invert.d.ts.map +1 -1
- package/dist/internals/transformTRPCResponse.d.ts +5 -3
- package/dist/internals/transformTRPCResponse.d.ts.map +1 -1
- package/dist/internals/types.d.ts +23 -0
- package/dist/internals/types.d.ts.map +1 -0
- package/dist/internals.d.ts +11 -0
- package/dist/internals.d.ts.map +1 -0
- package/dist/nodeHTTPRequestHandler-2c467c02.mjs +80 -0
- package/dist/nodeHTTPRequestHandler-6609461a.js +82 -0
- package/dist/observable/index.d.ts +5 -0
- package/dist/observable/index.d.ts.map +1 -0
- package/dist/observable/index.js +157 -0
- package/dist/observable/index.mjs +148 -0
- package/dist/observable/internals/identity.d.ts +2 -0
- package/dist/observable/internals/identity.d.ts.map +1 -0
- package/dist/observable/internals/observableToPromise.d.ts +10 -0
- package/dist/observable/internals/observableToPromise.d.ts.map +1 -0
- package/dist/observable/internals/pipe.d.ts +4 -0
- package/dist/observable/internals/pipe.d.ts.map +1 -0
- package/dist/observable/observable.d.ts +5 -0
- package/dist/observable/observable.d.ts.map +1 -0
- package/dist/observable/operators/index.d.ts +4 -0
- package/dist/observable/operators/index.d.ts.map +1 -0
- package/dist/observable/operators/map.d.ts +3 -0
- package/dist/observable/operators/map.d.ts.map +1 -0
- package/dist/observable/operators/share.d.ts +6 -0
- package/dist/observable/operators/share.d.ts.map +1 -0
- package/dist/observable/operators/tap.d.ts +3 -0
- package/dist/observable/operators/tap.d.ts.map +1 -0
- package/dist/observable/types.d.ts +29 -0
- package/dist/observable/types.d.ts.map +1 -0
- package/dist/observable-b651bf11.js +84 -0
- package/dist/observable-e129ac9d.mjs +81 -0
- package/dist/resolveHTTPResponse-11d52bd0.mjs +255 -0
- package/dist/resolveHTTPResponse-29d4b64a.js +259 -0
- package/dist/router-3ee4babe.js +903 -0
- package/dist/router-a2a75de3.mjs +893 -0
- package/dist/rpc/codes.d.ts +2 -0
- package/dist/rpc/codes.d.ts.map +1 -1
- package/dist/rpc/envelopes.d.ts +64 -41
- package/dist/rpc/envelopes.d.ts.map +1 -1
- package/dist/rpc/index.d.ts.map +1 -1
- package/dist/rpc/index.js +1 -1
- package/dist/rpc/index.mjs +1 -1
- package/dist/rpc/internals/invert.d.ts +18 -0
- package/dist/rpc/internals/invert.d.ts.map +1 -0
- package/dist/shared/createProxy/index.d.ts +12 -0
- package/dist/shared/createProxy/index.d.ts.map +1 -0
- package/dist/shared/index.d.ts +2 -0
- package/dist/shared/index.d.ts.map +1 -0
- package/dist/shared/index.js +9 -0
- package/dist/shared/index.mjs +1 -0
- package/dist/subscription.d.ts +3 -52
- package/dist/subscription.d.ts.map +1 -1
- package/dist/subscription.js +34 -0
- package/dist/subscription.mjs +30 -0
- package/dist/transformTRPCResponse-11ac69cc.js +27 -0
- package/dist/transformTRPCResponse-c8138d5f.mjs +25 -0
- package/dist/transformer.d.ts +14 -0
- package/dist/transformer.d.ts.map +1 -1
- package/dist/types.d.ts +37 -10
- package/dist/types.d.ts.map +1 -1
- package/observable/index.d.ts +1 -0
- package/observable/index.js +1 -0
- package/package.json +53 -25
- package/rpc/dist/trpc-server-rpc.cjs.dev.js +1 -1
- package/rpc/dist/trpc-server-rpc.cjs.prod.js +1 -1
- package/rpc/dist/trpc-server-rpc.esm.js +1 -1
- package/rpc/index.js +1 -1
- package/shared/index.d.ts +1 -0
- package/shared/index.js +1 -0
- package/src/adapters/aws-lambda/index.ts +173 -0
- package/src/adapters/aws-lambda/utils.ts +92 -0
- package/src/adapters/express.ts +4 -4
- package/src/adapters/fastify/fastifyRequestHandler.ts +6 -8
- package/src/adapters/fastify/fastifyTRPCPlugin.ts +17 -9
- package/src/adapters/fetch/fetchRequestHandler.ts +61 -0
- package/src/adapters/fetch/index.ts +2 -0
- package/src/adapters/fetch/types.ts +28 -0
- package/src/adapters/lambda/index.ts +18 -0
- package/src/adapters/next.ts +10 -8
- package/src/adapters/node-http/internals/getPostBody.test.ts +2 -1
- package/src/adapters/node-http/internals/getPostBody.ts +1 -1
- package/src/adapters/node-http/nodeHTTPRequestHandler.ts +7 -7
- package/src/adapters/node-http/types.ts +11 -9
- package/src/adapters/standalone.ts +12 -4
- package/src/adapters/ws.ts +150 -91
- package/src/assertNotBrowser.ts +1 -0
- package/src/core/index.ts +15 -0
- package/src/core/initTRPC.ts +94 -0
- package/src/core/internals/__generated__/mergeRoutersGeneric.ts +406 -0
- package/src/core/internals/config.ts +43 -0
- package/src/core/internals/getParseFn.ts +47 -0
- package/src/core/internals/mergeRouters.ts +45 -0
- package/src/core/internals/mergeWithoutOverrides.ts +19 -0
- package/src/core/internals/omitPrototype.ts +9 -0
- package/src/core/internals/prefixObjectKeys.ts +9 -0
- package/src/core/internals/procedureBuilder.ts +430 -0
- package/src/core/internals/utils.ts +64 -0
- package/src/core/middleware.ts +96 -0
- package/src/core/parser.ts +45 -0
- package/src/core/procedure.ts +121 -0
- package/src/core/router.ts +351 -0
- package/src/core/types.ts +58 -0
- package/src/{internals → deprecated/internals}/callProcedure.ts +9 -3
- package/src/{internals → deprecated/internals}/middlewares.ts +23 -3
- package/src/deprecated/internals/procedure.ts +415 -0
- package/src/deprecated/interop.ts +272 -0
- package/src/{router.ts → deprecated/router.ts} +221 -108
- package/src/{TRPCError.ts → error/TRPCError.ts} +6 -14
- package/src/error/formatter.ts +51 -0
- package/src/{internals/errors.ts → error/utils.ts} +24 -5
- package/src/http/index.ts +1 -1
- package/src/http/internals/getHTTPStatusCode.ts +3 -2
- package/src/http/internals/types.ts +11 -14
- package/src/http/resolveHTTPResponse.ts +34 -39
- package/src/http/{ResponseMeta.ts → types.ts} +0 -0
- package/src/index.ts +4 -7
- package/src/internals/transformTRPCResponse.ts +21 -16
- package/src/internals/types.ts +24 -0
- package/src/internals.ts +14 -0
- package/src/observable/index.ts +4 -0
- package/src/observable/internals/identity.ts +3 -0
- package/src/observable/internals/observableToPromise.ts +49 -0
- package/src/observable/internals/pipe.ts +23 -0
- package/src/observable/observable.test.ts +101 -0
- package/src/observable/observable.ts +78 -0
- package/src/observable/operators/index.ts +3 -0
- package/src/observable/operators/map.test.ts +92 -0
- package/src/observable/operators/map.ts +25 -0
- package/src/observable/operators/share.test.ts +60 -0
- package/src/observable/operators/share.ts +67 -0
- package/src/observable/operators/tap.ts +26 -0
- package/src/observable/types.ts +69 -0
- package/src/rpc/codes.ts +2 -1
- package/src/rpc/envelopes.ts +94 -68
- package/src/rpc/internals/invert.ts +27 -0
- package/src/shared/createProxy/index.ts +38 -0
- package/src/shared/index.ts +1 -0
- package/src/subscription.ts +7 -125
- package/src/transformer.ts +28 -0
- package/src/types.ts +45 -15
- package/subscription/index.d.ts +1 -0
- package/subscription/index.js +1 -0
- package/adapters/fastify/package.json +0 -4
- package/dist/TRPCError.d.ts +0 -19
- package/dist/TRPCError.d.ts.map +0 -1
- package/dist/adapters/express.ts.js +0 -1
- package/dist/adapters/next.ts.js +0 -1
- package/dist/adapters/node-http/index.ts.js +0 -1
- package/dist/adapters/standalone.ts.js +0 -1
- package/dist/adapters/ws.ts.js +0 -1
- package/dist/codes-7a3d4f65.mjs +0 -56
- package/dist/codes-7f46544e.js +0 -60
- package/dist/deprecated/LegacyRouter.d.ts +0 -3
- package/dist/deprecated/LegacyRouter.d.ts.map +0 -1
- package/dist/deprecated/createHttpServer.d.ts +0 -19
- package/dist/deprecated/createHttpServer.d.ts.map +0 -1
- package/dist/deprecated/requestHandler.d.ts +0 -15
- package/dist/deprecated/requestHandler.d.ts.map +0 -1
- package/dist/http/ResponseMeta.d.ts.map +0 -1
- package/dist/index.ts.js +0 -1
- package/dist/internals/BaseHandlerOptions.d.ts +0 -13
- package/dist/internals/BaseHandlerOptions.d.ts.map +0 -1
- package/dist/internals/OnErrorFunction.d.ts +0 -11
- package/dist/internals/OnErrorFunction.d.ts.map +0 -1
- package/dist/internals/callProcedure.d.ts.map +0 -1
- package/dist/internals/errors.d.ts.map +0 -1
- package/dist/internals/middlewares.d.ts.map +0 -1
- package/dist/internals/procedure.d.ts +0 -74
- package/dist/internals/procedure.d.ts.map +0 -1
- package/dist/internals/wrapCallSafe.d.ts +0 -16
- package/dist/internals/wrapCallSafe.d.ts.map +0 -1
- package/dist/nodeHTTPRequestHandler-10e6d2f9.mjs +0 -394
- package/dist/nodeHTTPRequestHandler-d7c307d3.js +0 -399
- package/dist/router.d.ts +0 -176
- package/dist/router.d.ts.map +0 -1
- package/dist/rpc/index.ts.js +0 -1
- package/dist/subscription-5b7e1eba.js +0 -136
- package/dist/subscription-e1d42e69.mjs +0 -133
- package/dist/transformTRPCResponse-76e0c91e.mjs +0 -109
- package/dist/transformTRPCResponse-bd24f548.js +0 -114
- package/dist/ws/index.d.ts +0 -7
- package/dist/ws/index.d.ts.map +0 -1
- package/dist/ws/index.js +0 -15
- package/dist/ws/index.mjs +0 -11
- package/dist/ws/index.ts.js +0 -1
- package/src/deprecated/LegacyRouter.ts +0 -3
- package/src/deprecated/createHttpServer.ts +0 -29
- package/src/deprecated/requestHandler.ts +0 -26
- package/src/internals/BaseHandlerOptions.ts +0 -13
- package/src/internals/OnErrorFunction.ts +0 -11
- package/src/internals/procedure.ts +0 -283
- package/src/internals/wrapCallSafe.ts +0 -19
- package/src/ws/index.ts +0 -8
- package/ws/dist/trpc-server-ws.cjs.d.ts +0 -1
- package/ws/dist/trpc-server-ws.cjs.dev.js +0 -15
- package/ws/dist/trpc-server-ws.cjs.js +0 -7
- package/ws/dist/trpc-server-ws.cjs.prod.js +0 -15
- package/ws/dist/trpc-server-ws.esm.js +0 -11
- package/ws/index.d.ts +0 -1
- package/ws/index.js +0 -1
package/src/adapters/next.ts
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
2
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
3
|
-
import type {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
import type {
|
|
4
|
+
NextApiHandler,
|
|
5
|
+
NextApiRequest,
|
|
6
|
+
NextApiResponse,
|
|
7
|
+
} from 'next/types';
|
|
8
|
+
import { AnyRouter } from '../core';
|
|
9
|
+
import { TRPCError } from '../error/TRPCError';
|
|
7
10
|
import { nodeHTTPRequestHandler } from './node-http';
|
|
8
11
|
import {
|
|
9
12
|
NodeHTTPCreateContextFnOptions,
|
|
@@ -42,12 +45,11 @@ export function createNextApiHandler<TRouter extends AnyRouter>(
|
|
|
42
45
|
path: undefined,
|
|
43
46
|
input: undefined,
|
|
44
47
|
});
|
|
45
|
-
|
|
48
|
+
res.statusCode = 500;
|
|
49
|
+
res.json({
|
|
46
50
|
id: -1,
|
|
47
51
|
error,
|
|
48
|
-
};
|
|
49
|
-
res.statusCode = 500;
|
|
50
|
-
res.json(json);
|
|
52
|
+
});
|
|
51
53
|
return;
|
|
52
54
|
}
|
|
53
55
|
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
|
2
|
-
import { URLSearchParams } from 'url';
|
|
3
2
|
import { assertNotBrowser } from '../../assertNotBrowser';
|
|
3
|
+
import { AnyRouter } from '../../core';
|
|
4
|
+
import { inferRouterDef } from '../../core/types';
|
|
5
|
+
import { HTTPRequest } from '../../http/internals/types';
|
|
6
|
+
import { resolveHTTPResponse } from '../../http/resolveHTTPResponse';
|
|
7
|
+
import { getPostBody } from './internals/getPostBody';
|
|
4
8
|
import {
|
|
9
|
+
NodeHTTPHandlerOptions,
|
|
5
10
|
NodeHTTPRequest,
|
|
6
11
|
NodeHTTPResponse,
|
|
7
|
-
NodeHTTPHandlerOptions,
|
|
8
12
|
} from './types';
|
|
9
|
-
import { AnyRouter, inferRouterContext } from '../../router';
|
|
10
|
-
import { getPostBody } from './internals/getPostBody';
|
|
11
|
-
import { HTTPRequest } from '../../http/internals/types';
|
|
12
|
-
import { resolveHTTPResponse } from '../../http/resolveHTTPResponse';
|
|
13
13
|
|
|
14
14
|
assertNotBrowser();
|
|
15
15
|
|
|
@@ -29,7 +29,7 @@ export async function nodeHTTPRequestHandler<
|
|
|
29
29
|
TResponse extends NodeHTTPResponse,
|
|
30
30
|
>(opts: NodeHTTPRequestHandlerOptions<TRouter, TRequest, TResponse>) {
|
|
31
31
|
const createContext = async function _createContext(): Promise<
|
|
32
|
-
|
|
32
|
+
inferRouterDef<TRouter>['_ctx']
|
|
33
33
|
> {
|
|
34
34
|
return await opts.createContext?.(opts);
|
|
35
35
|
};
|
|
@@ -1,15 +1,17 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
1
|
+
import { IncomingMessage, ServerResponse } from 'http';
|
|
2
|
+
import { AnyRouter, inferRouterContext } from '../../core';
|
|
3
|
+
import { inferRouterDef } from '../../core';
|
|
4
4
|
import { HTTPBaseHandlerOptions } from '../../http/internals/types';
|
|
5
|
-
import { AnyRouter } from '../../router';
|
|
6
5
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
interface ParsedQs {
|
|
7
|
+
[key: string]: undefined | string | string[] | ParsedQs | ParsedQs[];
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export type NodeHTTPRequest = IncomingMessage & {
|
|
11
|
+
query?: ParsedQs;
|
|
10
12
|
body?: unknown;
|
|
11
13
|
};
|
|
12
|
-
export type NodeHTTPResponse =
|
|
14
|
+
export type NodeHTTPResponse = ServerResponse;
|
|
13
15
|
|
|
14
16
|
export type NodeHTTPCreateContextOption<
|
|
15
17
|
TRouter extends AnyRouter,
|
|
@@ -48,4 +50,4 @@ export type NodeHTTPCreateContextFn<
|
|
|
48
50
|
TResponse,
|
|
49
51
|
> = (
|
|
50
52
|
opts: NodeHTTPCreateContextFnOptions<TRequest, TResponse>,
|
|
51
|
-
) =>
|
|
53
|
+
) => inferRouterDef<TRouter>['_ctx'] | Promise<inferRouterDef<TRouter>['_ctx']>;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
|
2
|
+
|
|
2
3
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
3
4
|
import http from 'http';
|
|
4
|
-
import
|
|
5
|
-
import { AnyRouter } from '../router';
|
|
5
|
+
import { AnyRouter } from '../core';
|
|
6
6
|
import {
|
|
7
7
|
NodeHTTPCreateContextFnOptions,
|
|
8
8
|
NodeHTTPHandlerOptions,
|
|
@@ -21,12 +21,20 @@ export function createHTTPHandler<TRouter extends AnyRouter>(
|
|
|
21
21
|
opts: CreateHTTPHandlerOptions<TRouter>,
|
|
22
22
|
) {
|
|
23
23
|
return async (req: http.IncomingMessage, res: http.ServerResponse) => {
|
|
24
|
-
|
|
24
|
+
// if no hostname, set a dummy one
|
|
25
|
+
const href = req.url!.startsWith('/')
|
|
26
|
+
? `http://127.0.0.1${req.url}`
|
|
27
|
+
: req.url!;
|
|
28
|
+
|
|
29
|
+
// get procedure path and remove the leading slash
|
|
30
|
+
// /procedure -> procedure
|
|
31
|
+
const path = new URL(href).pathname.slice(1);
|
|
32
|
+
|
|
25
33
|
await nodeHTTPRequestHandler({
|
|
26
34
|
...opts,
|
|
27
35
|
req,
|
|
28
36
|
res,
|
|
29
|
-
path
|
|
37
|
+
path,
|
|
30
38
|
});
|
|
31
39
|
};
|
|
32
40
|
}
|
package/src/adapters/ws.ts
CHANGED
|
@@ -1,20 +1,22 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { IncomingMessage } from 'http';
|
|
2
2
|
import ws from 'ws';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { getErrorFromUnknown } from '../
|
|
3
|
+
import { AnyRouter, ProcedureType, inferRouterContext } from '../core';
|
|
4
|
+
import { TRPCError } from '../error/TRPCError';
|
|
5
|
+
import { getCauseFromUnknown, getErrorFromUnknown } from '../error/utils';
|
|
6
6
|
import { transformTRPCResponse } from '../internals/transformTRPCResponse';
|
|
7
|
-
import {
|
|
7
|
+
import { BaseHandlerOptions } from '../internals/types';
|
|
8
|
+
import { Unsubscribable, isObservable } from '../observable';
|
|
8
9
|
import {
|
|
9
|
-
|
|
10
|
+
JSONRPC2,
|
|
11
|
+
TRPCClientOutgoingMessage,
|
|
10
12
|
TRPCReconnectNotification,
|
|
11
|
-
|
|
12
|
-
TRPCResponse,
|
|
13
|
+
TRPCResponseMessage,
|
|
13
14
|
} from '../rpc';
|
|
14
|
-
import { Subscription } from '../subscription';
|
|
15
15
|
import { CombinedDataTransformer } from '../transformer';
|
|
16
|
-
import {
|
|
17
|
-
|
|
16
|
+
import {
|
|
17
|
+
NodeHTTPCreateContextFnOptions,
|
|
18
|
+
NodeHTTPCreateContextOption,
|
|
19
|
+
} from './node-http';
|
|
18
20
|
|
|
19
21
|
/* istanbul ignore next */
|
|
20
22
|
function assertIsObject(obj: unknown): asserts obj is Record<string, unknown> {
|
|
@@ -58,7 +60,7 @@ function assertIsJSONRPC2OrUndefined(
|
|
|
58
60
|
function parseMessage(
|
|
59
61
|
obj: unknown,
|
|
60
62
|
transformer: CombinedDataTransformer,
|
|
61
|
-
):
|
|
63
|
+
): TRPCClientOutgoingMessage {
|
|
62
64
|
assertIsObject(obj);
|
|
63
65
|
const { method, params, id, jsonrpc } = obj;
|
|
64
66
|
assertIsRequestId(id);
|
|
@@ -66,8 +68,8 @@ function parseMessage(
|
|
|
66
68
|
if (method === 'subscription.stop') {
|
|
67
69
|
return {
|
|
68
70
|
id,
|
|
71
|
+
jsonrpc,
|
|
69
72
|
method,
|
|
70
|
-
params: undefined,
|
|
71
73
|
};
|
|
72
74
|
}
|
|
73
75
|
assertIsProcedureType(method);
|
|
@@ -76,7 +78,15 @@ function parseMessage(
|
|
|
76
78
|
const { input: rawInput, path } = params;
|
|
77
79
|
assertIsString(path);
|
|
78
80
|
const input = transformer.input.deserialize(rawInput);
|
|
79
|
-
return {
|
|
81
|
+
return {
|
|
82
|
+
id,
|
|
83
|
+
jsonrpc,
|
|
84
|
+
method,
|
|
85
|
+
params: {
|
|
86
|
+
input,
|
|
87
|
+
path,
|
|
88
|
+
},
|
|
89
|
+
};
|
|
80
90
|
}
|
|
81
91
|
|
|
82
92
|
/**
|
|
@@ -84,11 +94,16 @@ function parseMessage(
|
|
|
84
94
|
*/
|
|
85
95
|
export type WSSHandlerOptions<TRouter extends AnyRouter> = BaseHandlerOptions<
|
|
86
96
|
TRouter,
|
|
87
|
-
|
|
97
|
+
IncomingMessage
|
|
88
98
|
> & {
|
|
89
99
|
wss: ws.Server;
|
|
90
100
|
process?: NodeJS.Process;
|
|
91
|
-
} & NodeHTTPCreateContextOption<TRouter,
|
|
101
|
+
} & NodeHTTPCreateContextOption<TRouter, IncomingMessage, ws>;
|
|
102
|
+
|
|
103
|
+
export type CreateWSSContextFnOptions = NodeHTTPCreateContextFnOptions<
|
|
104
|
+
IncomingMessage,
|
|
105
|
+
ws
|
|
106
|
+
>;
|
|
92
107
|
|
|
93
108
|
export function applyWSSHandler<TRouter extends AnyRouter>(
|
|
94
109
|
opts: WSSHandlerOptions<TRouter>,
|
|
@@ -96,22 +111,35 @@ export function applyWSSHandler<TRouter extends AnyRouter>(
|
|
|
96
111
|
const { wss, createContext, router } = opts;
|
|
97
112
|
|
|
98
113
|
const { transformer } = router._def;
|
|
99
|
-
wss.on('connection', (client, req) => {
|
|
100
|
-
const clientSubscriptions = new Map<
|
|
101
|
-
number | string,
|
|
102
|
-
Subscription<TRouter>
|
|
103
|
-
>();
|
|
114
|
+
wss.on('connection', async (client, req) => {
|
|
115
|
+
const clientSubscriptions = new Map<number | string, Unsubscribable>();
|
|
104
116
|
|
|
105
|
-
function respond(untransformedJSON:
|
|
117
|
+
function respond(untransformedJSON: TRPCResponseMessage) {
|
|
106
118
|
client.send(
|
|
107
119
|
JSON.stringify(transformTRPCResponse(router, untransformedJSON)),
|
|
108
120
|
);
|
|
109
121
|
}
|
|
122
|
+
|
|
123
|
+
function stopSubscription(
|
|
124
|
+
subscription: Unsubscribable,
|
|
125
|
+
{ id, jsonrpc }: { id: JSONRPC2.RequestId } & JSONRPC2.BaseEnvelope,
|
|
126
|
+
) {
|
|
127
|
+
subscription.unsubscribe();
|
|
128
|
+
|
|
129
|
+
respond({
|
|
130
|
+
id,
|
|
131
|
+
jsonrpc,
|
|
132
|
+
result: {
|
|
133
|
+
type: 'stopped',
|
|
134
|
+
},
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
|
|
110
138
|
const ctxPromise = createContext?.({ req, res: client });
|
|
111
139
|
let ctx: inferRouterContext<TRouter> | undefined = undefined;
|
|
112
140
|
|
|
113
|
-
async function handleRequest(msg:
|
|
114
|
-
const { id } = msg;
|
|
141
|
+
async function handleRequest(msg: TRPCClientOutgoingMessage) {
|
|
142
|
+
const { id, jsonrpc } = msg;
|
|
115
143
|
/* istanbul ignore next */
|
|
116
144
|
if (id === null) {
|
|
117
145
|
throw new TRPCError({
|
|
@@ -122,7 +150,7 @@ export function applyWSSHandler<TRouter extends AnyRouter>(
|
|
|
122
150
|
if (msg.method === 'subscription.stop') {
|
|
123
151
|
const sub = clientSubscriptions.get(id);
|
|
124
152
|
if (sub) {
|
|
125
|
-
sub
|
|
153
|
+
stopSubscription(sub, { id, jsonrpc });
|
|
126
154
|
}
|
|
127
155
|
clientSubscriptions.delete(id);
|
|
128
156
|
return;
|
|
@@ -131,17 +159,22 @@ export function applyWSSHandler<TRouter extends AnyRouter>(
|
|
|
131
159
|
const type = msg.method;
|
|
132
160
|
try {
|
|
133
161
|
await ctxPromise; // asserts context has been set
|
|
134
|
-
const result = await callProcedure({
|
|
135
|
-
path,
|
|
136
|
-
input,
|
|
137
|
-
type,
|
|
138
|
-
router,
|
|
139
|
-
ctx,
|
|
140
|
-
});
|
|
141
162
|
|
|
142
|
-
|
|
163
|
+
const caller = router.createCaller(ctx);
|
|
164
|
+
const result = await caller[type](path, input as any);
|
|
165
|
+
|
|
166
|
+
if (type === 'subscription') {
|
|
167
|
+
if (!isObservable(result)) {
|
|
168
|
+
throw new TRPCError({
|
|
169
|
+
message: `Subscription ${path} did not return an observable`,
|
|
170
|
+
code: 'INTERNAL_SERVER_ERROR',
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
} else {
|
|
174
|
+
// send the value as data if the method is not a subscription
|
|
143
175
|
respond({
|
|
144
176
|
id,
|
|
177
|
+
jsonrpc,
|
|
145
178
|
result: {
|
|
146
179
|
type: 'data',
|
|
147
180
|
data: result,
|
|
@@ -150,86 +183,98 @@ export function applyWSSHandler<TRouter extends AnyRouter>(
|
|
|
150
183
|
return;
|
|
151
184
|
}
|
|
152
185
|
|
|
153
|
-
const
|
|
186
|
+
const observable = result;
|
|
187
|
+
const sub = observable.subscribe({
|
|
188
|
+
next(data) {
|
|
189
|
+
respond({
|
|
190
|
+
id,
|
|
191
|
+
jsonrpc,
|
|
192
|
+
result: {
|
|
193
|
+
type: 'data',
|
|
194
|
+
data,
|
|
195
|
+
},
|
|
196
|
+
});
|
|
197
|
+
},
|
|
198
|
+
error(err) {
|
|
199
|
+
const error = getErrorFromUnknown(err);
|
|
200
|
+
opts.onError?.({ error, path, type, ctx, req, input });
|
|
201
|
+
respond({
|
|
202
|
+
id,
|
|
203
|
+
jsonrpc,
|
|
204
|
+
error: router.getErrorShape({
|
|
205
|
+
error,
|
|
206
|
+
type,
|
|
207
|
+
path,
|
|
208
|
+
input,
|
|
209
|
+
ctx,
|
|
210
|
+
}),
|
|
211
|
+
});
|
|
212
|
+
},
|
|
213
|
+
complete() {
|
|
214
|
+
respond({
|
|
215
|
+
id,
|
|
216
|
+
jsonrpc,
|
|
217
|
+
result: {
|
|
218
|
+
type: 'stopped',
|
|
219
|
+
},
|
|
220
|
+
});
|
|
221
|
+
},
|
|
222
|
+
});
|
|
154
223
|
/* istanbul ignore next */
|
|
155
224
|
if (client.readyState !== client.OPEN) {
|
|
156
225
|
// if the client got disconnected whilst initializing the subscription
|
|
157
|
-
|
|
226
|
+
// no need to send stopped message if the client is disconnected
|
|
227
|
+
sub.unsubscribe();
|
|
158
228
|
return;
|
|
159
229
|
}
|
|
230
|
+
|
|
160
231
|
/* istanbul ignore next */
|
|
161
232
|
if (clientSubscriptions.has(id)) {
|
|
162
233
|
// duplicate request ids for client
|
|
163
|
-
sub
|
|
234
|
+
stopSubscription(sub, { id, jsonrpc });
|
|
164
235
|
throw new TRPCError({
|
|
165
236
|
message: `Duplicate id ${id}`,
|
|
166
237
|
code: 'BAD_REQUEST',
|
|
167
238
|
});
|
|
168
239
|
}
|
|
169
240
|
clientSubscriptions.set(id, sub);
|
|
170
|
-
sub.on('data', (data: unknown) => {
|
|
171
|
-
respond({
|
|
172
|
-
id,
|
|
173
|
-
result: {
|
|
174
|
-
type: 'data',
|
|
175
|
-
data,
|
|
176
|
-
},
|
|
177
|
-
});
|
|
178
|
-
});
|
|
179
|
-
sub.on('error', (_error: unknown) => {
|
|
180
|
-
const error = getErrorFromUnknown(_error);
|
|
181
|
-
const json: TRPCErrorResponse = {
|
|
182
|
-
id,
|
|
183
|
-
error: router.getErrorShape({
|
|
184
|
-
error,
|
|
185
|
-
type,
|
|
186
|
-
path,
|
|
187
|
-
input,
|
|
188
|
-
ctx,
|
|
189
|
-
}),
|
|
190
|
-
};
|
|
191
|
-
opts.onError?.({ error, path, type, ctx, req, input });
|
|
192
|
-
respond(json);
|
|
193
|
-
});
|
|
194
|
-
sub.on('destroy', () => {
|
|
195
|
-
respond({
|
|
196
|
-
id,
|
|
197
|
-
result: {
|
|
198
|
-
type: 'stopped',
|
|
199
|
-
},
|
|
200
|
-
});
|
|
201
|
-
});
|
|
202
241
|
|
|
203
242
|
respond({
|
|
204
243
|
id,
|
|
244
|
+
jsonrpc,
|
|
205
245
|
result: {
|
|
206
246
|
type: 'started',
|
|
207
247
|
},
|
|
208
248
|
});
|
|
209
|
-
await sub.start();
|
|
210
249
|
} catch (cause) /* istanbul ignore next */ {
|
|
211
250
|
// procedure threw an error
|
|
212
251
|
const error = getErrorFromUnknown(cause);
|
|
213
|
-
const json = router.getErrorShape({
|
|
214
|
-
error,
|
|
215
|
-
type,
|
|
216
|
-
path,
|
|
217
|
-
input,
|
|
218
|
-
ctx,
|
|
219
|
-
});
|
|
220
252
|
opts.onError?.({ error, path, type, ctx, req, input });
|
|
221
|
-
respond({
|
|
253
|
+
respond({
|
|
254
|
+
id,
|
|
255
|
+
jsonrpc,
|
|
256
|
+
error: router.getErrorShape({
|
|
257
|
+
error,
|
|
258
|
+
type,
|
|
259
|
+
path,
|
|
260
|
+
input,
|
|
261
|
+
ctx,
|
|
262
|
+
}),
|
|
263
|
+
});
|
|
222
264
|
}
|
|
223
265
|
}
|
|
224
266
|
client.on('message', async (message) => {
|
|
225
267
|
try {
|
|
226
268
|
const msgJSON: unknown = JSON.parse(message.toString());
|
|
227
269
|
const msgs: unknown[] = Array.isArray(msgJSON) ? msgJSON : [msgJSON];
|
|
228
|
-
|
|
270
|
+
const promises = msgs
|
|
271
|
+
.map((raw) => parseMessage(raw, transformer))
|
|
272
|
+
.map(handleRequest);
|
|
273
|
+
await Promise.all(promises);
|
|
229
274
|
} catch (cause) {
|
|
230
275
|
const error = new TRPCError({
|
|
231
276
|
code: 'PARSE_ERROR',
|
|
232
|
-
cause,
|
|
277
|
+
cause: getCauseFromUnknown(cause),
|
|
233
278
|
});
|
|
234
279
|
|
|
235
280
|
respond({
|
|
@@ -245,9 +290,24 @@ export function applyWSSHandler<TRouter extends AnyRouter>(
|
|
|
245
290
|
}
|
|
246
291
|
});
|
|
247
292
|
|
|
293
|
+
// WebSocket errors should be handled, as otherwise unhandled exceptions will crash Node.js.
|
|
294
|
+
// This line was introduced after the following error brought down production systems:
|
|
295
|
+
// "RangeError: Invalid WebSocket frame: RSV2 and RSV3 must be clear"
|
|
296
|
+
// Here is the relevant discussion: https://github.com/websockets/ws/issues/1354#issuecomment-774616962
|
|
297
|
+
client.on('error', (cause) => {
|
|
298
|
+
opts.onError?.({
|
|
299
|
+
ctx,
|
|
300
|
+
error: getErrorFromUnknown(cause),
|
|
301
|
+
input: undefined,
|
|
302
|
+
path: undefined,
|
|
303
|
+
type: 'unknown',
|
|
304
|
+
req,
|
|
305
|
+
});
|
|
306
|
+
});
|
|
307
|
+
|
|
248
308
|
client.once('close', () => {
|
|
249
309
|
for (const sub of clientSubscriptions.values()) {
|
|
250
|
-
sub.
|
|
310
|
+
sub.unsubscribe();
|
|
251
311
|
}
|
|
252
312
|
clientSubscriptions.clear();
|
|
253
313
|
});
|
|
@@ -256,7 +316,15 @@ export function applyWSSHandler<TRouter extends AnyRouter>(
|
|
|
256
316
|
ctx = await ctxPromise;
|
|
257
317
|
} catch (cause) {
|
|
258
318
|
const error = getErrorFromUnknown(cause);
|
|
259
|
-
|
|
319
|
+
opts.onError?.({
|
|
320
|
+
error,
|
|
321
|
+
path: undefined,
|
|
322
|
+
type: 'unknown',
|
|
323
|
+
ctx,
|
|
324
|
+
req,
|
|
325
|
+
input: undefined,
|
|
326
|
+
});
|
|
327
|
+
respond({
|
|
260
328
|
id: null,
|
|
261
329
|
error: router.getErrorShape({
|
|
262
330
|
error,
|
|
@@ -265,16 +333,7 @@ export function applyWSSHandler<TRouter extends AnyRouter>(
|
|
|
265
333
|
input: undefined,
|
|
266
334
|
ctx,
|
|
267
335
|
}),
|
|
268
|
-
};
|
|
269
|
-
opts.onError?.({
|
|
270
|
-
error,
|
|
271
|
-
path: undefined,
|
|
272
|
-
type: 'unknown',
|
|
273
|
-
ctx,
|
|
274
|
-
req,
|
|
275
|
-
input: undefined,
|
|
276
336
|
});
|
|
277
|
-
respond(json);
|
|
278
337
|
|
|
279
338
|
// close in next tick
|
|
280
339
|
(global.setImmediate ?? global.setTimeout)(() => {
|
|
@@ -282,7 +341,7 @@ export function applyWSSHandler<TRouter extends AnyRouter>(
|
|
|
282
341
|
});
|
|
283
342
|
}
|
|
284
343
|
}
|
|
285
|
-
createContextAsync();
|
|
344
|
+
await createContextAsync();
|
|
286
345
|
});
|
|
287
346
|
|
|
288
347
|
return {
|
package/src/assertNotBrowser.ts
CHANGED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export type {
|
|
2
|
+
AnyRouter,
|
|
3
|
+
ProcedureRecord,
|
|
4
|
+
ProcedureRouterRecord,
|
|
5
|
+
} from './router';
|
|
6
|
+
export { callProcedure } from './router';
|
|
7
|
+
export type {
|
|
8
|
+
Procedure,
|
|
9
|
+
ProcedureParams,
|
|
10
|
+
ProcedureArgs,
|
|
11
|
+
ProcedureOptions,
|
|
12
|
+
} from './procedure';
|
|
13
|
+
|
|
14
|
+
export { initTRPC } from './initTRPC';
|
|
15
|
+
export * from './types';
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { mergeRoutersGeneric } from './internals/__generated__/mergeRoutersGeneric';
|
|
2
|
+
import {
|
|
3
|
+
DefaultErrorShape,
|
|
4
|
+
ErrorFormatter,
|
|
5
|
+
ErrorFormatterShape,
|
|
6
|
+
defaultFormatter,
|
|
7
|
+
} from '../error/formatter';
|
|
8
|
+
import {
|
|
9
|
+
CombinedDataTransformer,
|
|
10
|
+
DataTransformerOptions,
|
|
11
|
+
DefaultDataTransformer,
|
|
12
|
+
defaultTransformer,
|
|
13
|
+
getDataTransformer,
|
|
14
|
+
} from '../transformer';
|
|
15
|
+
import {
|
|
16
|
+
CreateInitGenerics,
|
|
17
|
+
CreateRootConfig,
|
|
18
|
+
InitGenerics,
|
|
19
|
+
InitOptions,
|
|
20
|
+
} from './internals/config';
|
|
21
|
+
import { createBuilder } from './internals/procedureBuilder';
|
|
22
|
+
import { PickFirstDefined, ValidateShape } from './internals/utils';
|
|
23
|
+
import { createMiddlewareFactory } from './middleware';
|
|
24
|
+
import { createRouterFactory } from './router';
|
|
25
|
+
|
|
26
|
+
export function initTRPC<TParams extends Partial<InitGenerics> = {}>() {
|
|
27
|
+
type $Generics = CreateInitGenerics<{
|
|
28
|
+
ctx: TParams['ctx'] extends undefined ? {} : NonNullable<TParams['ctx']>;
|
|
29
|
+
meta: TParams['meta'] extends undefined ? {} : NonNullable<TParams['meta']>;
|
|
30
|
+
}>;
|
|
31
|
+
|
|
32
|
+
type $Context = $Generics['ctx'];
|
|
33
|
+
type $Meta = PickFirstDefined<$Generics['meta'], undefined>;
|
|
34
|
+
type $Options = Partial<InitOptions<$Generics>>;
|
|
35
|
+
|
|
36
|
+
return function initTRPCInner<TOptions extends $Options>(
|
|
37
|
+
options?: ValidateShape<TOptions, $Options>,
|
|
38
|
+
) {
|
|
39
|
+
type $Formatter = PickFirstDefined<
|
|
40
|
+
TOptions['errorFormatter'],
|
|
41
|
+
ErrorFormatter<$Context, DefaultErrorShape>
|
|
42
|
+
>;
|
|
43
|
+
type $Transformer = TOptions['transformer'] extends DataTransformerOptions
|
|
44
|
+
? TOptions['transformer'] extends DataTransformerOptions
|
|
45
|
+
? CombinedDataTransformer
|
|
46
|
+
: DefaultDataTransformer
|
|
47
|
+
: DefaultDataTransformer;
|
|
48
|
+
type $ErrorShape = ErrorFormatterShape<$Formatter>;
|
|
49
|
+
|
|
50
|
+
type $Config = CreateRootConfig<{
|
|
51
|
+
ctx: $Context;
|
|
52
|
+
meta: $Meta;
|
|
53
|
+
errorShape: $ErrorShape;
|
|
54
|
+
transformer: $Transformer;
|
|
55
|
+
}>;
|
|
56
|
+
|
|
57
|
+
const errorFormatter = options?.errorFormatter ?? defaultFormatter;
|
|
58
|
+
const transformer = getDataTransformer(
|
|
59
|
+
options?.transformer ?? defaultTransformer,
|
|
60
|
+
) as $Transformer;
|
|
61
|
+
const _config: $Config = {
|
|
62
|
+
transformer,
|
|
63
|
+
errorShape: null as any,
|
|
64
|
+
ctx: null as any,
|
|
65
|
+
meta: null as any,
|
|
66
|
+
};
|
|
67
|
+
return {
|
|
68
|
+
/**
|
|
69
|
+
* These are just types, they can't be used
|
|
70
|
+
* @internal
|
|
71
|
+
*/
|
|
72
|
+
_config,
|
|
73
|
+
/**
|
|
74
|
+
* Builder object for creating procedures
|
|
75
|
+
*/
|
|
76
|
+
procedure: createBuilder<$Config>(),
|
|
77
|
+
/**
|
|
78
|
+
* Create reusable middlewares
|
|
79
|
+
*/
|
|
80
|
+
middleware: createMiddlewareFactory<$Config>(),
|
|
81
|
+
/**
|
|
82
|
+
* Create a router
|
|
83
|
+
*/
|
|
84
|
+
router: createRouterFactory<$Config>({
|
|
85
|
+
errorFormatter,
|
|
86
|
+
transformer,
|
|
87
|
+
}),
|
|
88
|
+
/**
|
|
89
|
+
* Merge Routers
|
|
90
|
+
*/
|
|
91
|
+
mergeRouters: mergeRoutersGeneric,
|
|
92
|
+
};
|
|
93
|
+
};
|
|
94
|
+
}
|