@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/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({
|
|
@@ -247,7 +292,7 @@ export function applyWSSHandler<TRouter extends AnyRouter>(
|
|
|
247
292
|
|
|
248
293
|
client.once('close', () => {
|
|
249
294
|
for (const sub of clientSubscriptions.values()) {
|
|
250
|
-
sub.
|
|
295
|
+
sub.unsubscribe();
|
|
251
296
|
}
|
|
252
297
|
clientSubscriptions.clear();
|
|
253
298
|
});
|
|
@@ -256,7 +301,15 @@ export function applyWSSHandler<TRouter extends AnyRouter>(
|
|
|
256
301
|
ctx = await ctxPromise;
|
|
257
302
|
} catch (cause) {
|
|
258
303
|
const error = getErrorFromUnknown(cause);
|
|
259
|
-
|
|
304
|
+
opts.onError?.({
|
|
305
|
+
error,
|
|
306
|
+
path: undefined,
|
|
307
|
+
type: 'unknown',
|
|
308
|
+
ctx,
|
|
309
|
+
req,
|
|
310
|
+
input: undefined,
|
|
311
|
+
});
|
|
312
|
+
respond({
|
|
260
313
|
id: null,
|
|
261
314
|
error: router.getErrorShape({
|
|
262
315
|
error,
|
|
@@ -265,16 +318,7 @@ export function applyWSSHandler<TRouter extends AnyRouter>(
|
|
|
265
318
|
input: undefined,
|
|
266
319
|
ctx,
|
|
267
320
|
}),
|
|
268
|
-
};
|
|
269
|
-
opts.onError?.({
|
|
270
|
-
error,
|
|
271
|
-
path: undefined,
|
|
272
|
-
type: 'unknown',
|
|
273
|
-
ctx,
|
|
274
|
-
req,
|
|
275
|
-
input: undefined,
|
|
276
321
|
});
|
|
277
|
-
respond(json);
|
|
278
322
|
|
|
279
323
|
// close in next tick
|
|
280
324
|
(global.setImmediate ?? global.setTimeout)(() => {
|
|
@@ -282,7 +326,7 @@ export function applyWSSHandler<TRouter extends AnyRouter>(
|
|
|
282
326
|
});
|
|
283
327
|
}
|
|
284
328
|
}
|
|
285
|
-
createContextAsync();
|
|
329
|
+
await createContextAsync();
|
|
286
330
|
});
|
|
287
331
|
|
|
288
332
|
return {
|
package/src/assertNotBrowser.ts
CHANGED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/ban-types */
|
|
2
|
+
import { mergeRoutersGeneric } from './internals/__generated__/mergeRoutersGeneric';
|
|
3
|
+
import {
|
|
4
|
+
DefaultErrorShape,
|
|
5
|
+
ErrorFormatter,
|
|
6
|
+
ErrorFormatterShape,
|
|
7
|
+
defaultFormatter,
|
|
8
|
+
} from '../error/formatter';
|
|
9
|
+
import {
|
|
10
|
+
CombinedDataTransformer,
|
|
11
|
+
DataTransformerOptions,
|
|
12
|
+
DefaultDataTransformer,
|
|
13
|
+
defaultTransformer,
|
|
14
|
+
getDataTransformer,
|
|
15
|
+
} from '../transformer';
|
|
16
|
+
import {
|
|
17
|
+
CreateInitGenerics,
|
|
18
|
+
CreateRootConfig,
|
|
19
|
+
InitGenerics,
|
|
20
|
+
InitOptions,
|
|
21
|
+
} from './internals/config';
|
|
22
|
+
import { createBuilder } from './internals/procedureBuilder';
|
|
23
|
+
import { PickFirstDefined, ValidateShape } from './internals/utils';
|
|
24
|
+
import { createMiddlewareFactory } from './middleware';
|
|
25
|
+
import { createRouterFactory } from './router';
|
|
26
|
+
|
|
27
|
+
export function initTRPC<TParams extends Partial<InitGenerics> = {}>() {
|
|
28
|
+
type $Generics = CreateInitGenerics<{
|
|
29
|
+
ctx: TParams['ctx'] extends undefined ? {} : NonNullable<TParams['ctx']>;
|
|
30
|
+
meta: TParams['meta'] extends undefined ? {} : NonNullable<TParams['meta']>;
|
|
31
|
+
}>;
|
|
32
|
+
|
|
33
|
+
type $Context = $Generics['ctx'];
|
|
34
|
+
type $Meta = PickFirstDefined<$Generics['meta'], undefined>;
|
|
35
|
+
type $Options = Partial<InitOptions<$Generics>>;
|
|
36
|
+
|
|
37
|
+
return function initTRPCInner<TOptions extends $Options>(
|
|
38
|
+
options?: ValidateShape<TOptions, $Options>,
|
|
39
|
+
) {
|
|
40
|
+
type $Formatter = PickFirstDefined<
|
|
41
|
+
TOptions['errorFormatter'],
|
|
42
|
+
ErrorFormatter<$Context, DefaultErrorShape>
|
|
43
|
+
>;
|
|
44
|
+
type $Transformer = TOptions['transformer'] extends DataTransformerOptions
|
|
45
|
+
? TOptions['transformer'] extends DataTransformerOptions
|
|
46
|
+
? CombinedDataTransformer
|
|
47
|
+
: DefaultDataTransformer
|
|
48
|
+
: DefaultDataTransformer;
|
|
49
|
+
type $ErrorShape = ErrorFormatterShape<$Formatter>;
|
|
50
|
+
|
|
51
|
+
type $Config = CreateRootConfig<{
|
|
52
|
+
ctx: $Context;
|
|
53
|
+
meta: $Meta;
|
|
54
|
+
errorShape: $ErrorShape;
|
|
55
|
+
transformer: $Transformer;
|
|
56
|
+
}>;
|
|
57
|
+
|
|
58
|
+
const errorFormatter = options?.errorFormatter ?? defaultFormatter;
|
|
59
|
+
const transformer = getDataTransformer(
|
|
60
|
+
options?.transformer ?? defaultTransformer,
|
|
61
|
+
) as $Transformer;
|
|
62
|
+
const _config: $Config = {
|
|
63
|
+
transformer,
|
|
64
|
+
errorShape: null as any,
|
|
65
|
+
ctx: null as any,
|
|
66
|
+
meta: null as any,
|
|
67
|
+
};
|
|
68
|
+
return {
|
|
69
|
+
/**
|
|
70
|
+
* These are just types, they can't be used
|
|
71
|
+
* @internal
|
|
72
|
+
*/
|
|
73
|
+
_config,
|
|
74
|
+
/**
|
|
75
|
+
* Builder object for creating procedures
|
|
76
|
+
*/
|
|
77
|
+
procedure: createBuilder<$Config>(),
|
|
78
|
+
/**
|
|
79
|
+
* Create reusable middlewares
|
|
80
|
+
*/
|
|
81
|
+
middleware: createMiddlewareFactory<$Config>(),
|
|
82
|
+
/**
|
|
83
|
+
* Create a router
|
|
84
|
+
*/
|
|
85
|
+
router: createRouterFactory<$Config>({
|
|
86
|
+
errorFormatter,
|
|
87
|
+
transformer,
|
|
88
|
+
}),
|
|
89
|
+
/**
|
|
90
|
+
* Merge Routers
|
|
91
|
+
*/
|
|
92
|
+
mergeRouters: mergeRoutersGeneric,
|
|
93
|
+
};
|
|
94
|
+
};
|
|
95
|
+
}
|