@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
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { pipeFromArray } from './internals/pipe';
|
|
2
|
+
import { Observable, Observer, OperatorFunction, TeardownLogic } from './types';
|
|
3
|
+
|
|
4
|
+
export type inferObservableValue<TObservable> = TObservable extends Observable<
|
|
5
|
+
infer TValue,
|
|
6
|
+
unknown
|
|
7
|
+
>
|
|
8
|
+
? TValue
|
|
9
|
+
: never;
|
|
10
|
+
|
|
11
|
+
export function isObservable(x: unknown): x is Observable<unknown, unknown> {
|
|
12
|
+
return typeof x === 'object' && x !== null && 'subscribe' in x;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function observable<TValue, TError = unknown>(
|
|
16
|
+
subscribe: (observer: Observer<TValue, TError>) => TeardownLogic,
|
|
17
|
+
): Observable<TValue, TError> {
|
|
18
|
+
const self: Observable<TValue, TError> = {
|
|
19
|
+
subscribe(observer) {
|
|
20
|
+
let teardownRef: TeardownLogic | null = null;
|
|
21
|
+
let isDone = false;
|
|
22
|
+
let unsubscribed = false;
|
|
23
|
+
let teardownImmediately = false;
|
|
24
|
+
function unsubscribe() {
|
|
25
|
+
if (teardownRef === null) {
|
|
26
|
+
teardownImmediately = true;
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
if (unsubscribed) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
unsubscribed = true;
|
|
33
|
+
|
|
34
|
+
if (typeof teardownRef === 'function') {
|
|
35
|
+
teardownRef();
|
|
36
|
+
} else if (teardownRef) {
|
|
37
|
+
teardownRef.unsubscribe();
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
teardownRef = subscribe({
|
|
41
|
+
next(value) {
|
|
42
|
+
if (isDone) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
observer.next?.(value);
|
|
46
|
+
},
|
|
47
|
+
error(err) {
|
|
48
|
+
if (isDone) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
isDone = true;
|
|
52
|
+
observer.error?.(err);
|
|
53
|
+
unsubscribe();
|
|
54
|
+
},
|
|
55
|
+
complete() {
|
|
56
|
+
if (isDone) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
isDone = true;
|
|
60
|
+
observer.complete?.();
|
|
61
|
+
unsubscribe();
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
if (teardownImmediately) {
|
|
65
|
+
unsubscribe();
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
unsubscribe,
|
|
69
|
+
};
|
|
70
|
+
},
|
|
71
|
+
pipe(
|
|
72
|
+
...operations: OperatorFunction<any, any, any, any>[]
|
|
73
|
+
): Observable<any, any> {
|
|
74
|
+
return pipeFromArray(operations)(self) as any;
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
return self;
|
|
78
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
import { expectTypeOf } from 'expect-type';
|
|
3
|
+
import { map } from '.';
|
|
4
|
+
import { observable } from '../observable';
|
|
5
|
+
|
|
6
|
+
interface SubscriptionEvents<TOutput> {
|
|
7
|
+
data: (data: TOutput) => void;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
declare interface CustomEventEmitter<TOutput> {
|
|
11
|
+
on<U extends keyof SubscriptionEvents<TOutput>>(
|
|
12
|
+
event: U,
|
|
13
|
+
listener: SubscriptionEvents<TOutput>[U],
|
|
14
|
+
): this;
|
|
15
|
+
|
|
16
|
+
once<U extends keyof SubscriptionEvents<TOutput>>(
|
|
17
|
+
event: U,
|
|
18
|
+
listener: SubscriptionEvents<TOutput>[U],
|
|
19
|
+
): this;
|
|
20
|
+
|
|
21
|
+
emit<U extends keyof SubscriptionEvents<TOutput>>(
|
|
22
|
+
event: U,
|
|
23
|
+
...args: Parameters<SubscriptionEvents<TOutput>[U]>
|
|
24
|
+
): boolean;
|
|
25
|
+
}
|
|
26
|
+
class CustomEventEmitter<TOutput>
|
|
27
|
+
extends EventEmitter
|
|
28
|
+
implements CustomEventEmitter<TOutput> {}
|
|
29
|
+
test('map', () => {
|
|
30
|
+
type EventShape = { num: number };
|
|
31
|
+
const ee = new CustomEventEmitter<EventShape>();
|
|
32
|
+
const eventObservable = observable<EventShape, unknown>((observer) => {
|
|
33
|
+
const callback = (data: EventShape) => {
|
|
34
|
+
observer.next(data);
|
|
35
|
+
};
|
|
36
|
+
ee.on('data', callback);
|
|
37
|
+
|
|
38
|
+
return () => {
|
|
39
|
+
ee.off('data', callback);
|
|
40
|
+
};
|
|
41
|
+
});
|
|
42
|
+
const pipeCalls = jest.fn();
|
|
43
|
+
const piped = eventObservable.pipe(
|
|
44
|
+
map((...args) => {
|
|
45
|
+
pipeCalls(...args);
|
|
46
|
+
const [value] = args;
|
|
47
|
+
return value.num;
|
|
48
|
+
}),
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
const next = jest.fn();
|
|
52
|
+
const subscription = piped.subscribe({
|
|
53
|
+
next(value) {
|
|
54
|
+
expectTypeOf<number>(value);
|
|
55
|
+
next(value);
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
expect(next).not.toHaveBeenCalled();
|
|
59
|
+
ee.emit('data', { num: 1 });
|
|
60
|
+
ee.emit('data', { num: 2 });
|
|
61
|
+
expect(next).toHaveBeenCalledTimes(2);
|
|
62
|
+
expect(next.mock.calls).toMatchInlineSnapshot(`
|
|
63
|
+
Array [
|
|
64
|
+
Array [
|
|
65
|
+
1,
|
|
66
|
+
],
|
|
67
|
+
Array [
|
|
68
|
+
2,
|
|
69
|
+
],
|
|
70
|
+
]
|
|
71
|
+
`);
|
|
72
|
+
expect(pipeCalls.mock.calls).toMatchInlineSnapshot(`
|
|
73
|
+
Array [
|
|
74
|
+
Array [
|
|
75
|
+
Object {
|
|
76
|
+
"num": 1,
|
|
77
|
+
},
|
|
78
|
+
0,
|
|
79
|
+
],
|
|
80
|
+
Array [
|
|
81
|
+
Object {
|
|
82
|
+
"num": 2,
|
|
83
|
+
},
|
|
84
|
+
1,
|
|
85
|
+
],
|
|
86
|
+
]
|
|
87
|
+
`);
|
|
88
|
+
|
|
89
|
+
expect(ee.listeners('data')).toHaveLength(1);
|
|
90
|
+
subscription.unsubscribe();
|
|
91
|
+
expect(ee.listeners('data')).toHaveLength(0);
|
|
92
|
+
});
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { OperatorFunction } from '../types';
|
|
2
|
+
|
|
3
|
+
export function map<TValueBefore, TError, TValueAfter>(
|
|
4
|
+
project: (value: TValueBefore, index: number) => TValueAfter,
|
|
5
|
+
): OperatorFunction<TValueBefore, TError, TValueAfter, TError> {
|
|
6
|
+
return (originalObserver) => {
|
|
7
|
+
return {
|
|
8
|
+
subscribe(observer) {
|
|
9
|
+
let index = 0;
|
|
10
|
+
const subscription = originalObserver.subscribe({
|
|
11
|
+
next(value) {
|
|
12
|
+
observer.next?.(project(value, index++));
|
|
13
|
+
},
|
|
14
|
+
error(error) {
|
|
15
|
+
observer.error?.(error);
|
|
16
|
+
},
|
|
17
|
+
complete() {
|
|
18
|
+
observer.complete?.();
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
return subscription;
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/* eslint-disable no-var */
|
|
2
|
+
import { observable } from '../observable';
|
|
3
|
+
import { share } from './share';
|
|
4
|
+
|
|
5
|
+
test('share', () => {
|
|
6
|
+
const obs = share()(
|
|
7
|
+
observable<number, Error>((observer) => {
|
|
8
|
+
observer.next(1);
|
|
9
|
+
}),
|
|
10
|
+
);
|
|
11
|
+
|
|
12
|
+
{
|
|
13
|
+
const next = jest.fn();
|
|
14
|
+
const error = jest.fn();
|
|
15
|
+
const complete = jest.fn();
|
|
16
|
+
var subscription1 = obs.subscribe({
|
|
17
|
+
next,
|
|
18
|
+
error,
|
|
19
|
+
complete,
|
|
20
|
+
});
|
|
21
|
+
expect(next.mock.calls).toHaveLength(1);
|
|
22
|
+
expect(complete.mock.calls).toHaveLength(0);
|
|
23
|
+
expect(error.mock.calls).toHaveLength(0);
|
|
24
|
+
expect(next.mock.calls[0]![0]!).toBe(1);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
{
|
|
28
|
+
// subscribe again - it's shared so should not propagate any results
|
|
29
|
+
const next = jest.fn();
|
|
30
|
+
const error = jest.fn();
|
|
31
|
+
const complete = jest.fn();
|
|
32
|
+
var subscription2 = obs.subscribe({
|
|
33
|
+
next,
|
|
34
|
+
error,
|
|
35
|
+
complete,
|
|
36
|
+
});
|
|
37
|
+
expect(next.mock.calls).toHaveLength(0);
|
|
38
|
+
expect(complete.mock.calls).toHaveLength(0);
|
|
39
|
+
expect(error.mock.calls).toHaveLength(0);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
subscription1.unsubscribe();
|
|
43
|
+
subscription2.unsubscribe();
|
|
44
|
+
// now it should be reset so we can do a new subscription
|
|
45
|
+
{
|
|
46
|
+
const next = jest.fn();
|
|
47
|
+
const error = jest.fn();
|
|
48
|
+
const complete = jest.fn();
|
|
49
|
+
var subscription3 = obs.subscribe({
|
|
50
|
+
next,
|
|
51
|
+
error,
|
|
52
|
+
complete,
|
|
53
|
+
});
|
|
54
|
+
expect(next.mock.calls).toHaveLength(1);
|
|
55
|
+
expect(complete.mock.calls).toHaveLength(0);
|
|
56
|
+
expect(error.mock.calls).toHaveLength(0);
|
|
57
|
+
expect(next.mock.calls[0]![0]!).toBe(1);
|
|
58
|
+
subscription3.unsubscribe();
|
|
59
|
+
}
|
|
60
|
+
});
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { MonoTypeOperatorFunction, Observer, Unsubscribable } from '../types';
|
|
2
|
+
|
|
3
|
+
/* eslint-disable @typescript-eslint/no-empty-interface */
|
|
4
|
+
interface ShareConfig {}
|
|
5
|
+
export function share<TValue, TError>(
|
|
6
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
7
|
+
_opts?: ShareConfig,
|
|
8
|
+
): MonoTypeOperatorFunction<TValue, TError> {
|
|
9
|
+
return (originalObserver) => {
|
|
10
|
+
let refCount = 0;
|
|
11
|
+
|
|
12
|
+
let subscription: Unsubscribable | null = null;
|
|
13
|
+
const observers: Partial<Observer<TValue, TError>>[] = [];
|
|
14
|
+
|
|
15
|
+
function startIfNeeded() {
|
|
16
|
+
if (subscription) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
subscription = originalObserver.subscribe({
|
|
20
|
+
next(value) {
|
|
21
|
+
for (const observer of observers) {
|
|
22
|
+
observer.next?.(value);
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
error(error) {
|
|
26
|
+
for (const observer of observers) {
|
|
27
|
+
observer.error?.(error);
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
complete() {
|
|
31
|
+
for (const observer of observers) {
|
|
32
|
+
observer.complete?.();
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
function resetIfNeeded() {
|
|
38
|
+
// "resetOnRefCountZero"
|
|
39
|
+
if (refCount === 0 && subscription) {
|
|
40
|
+
const _sub = subscription;
|
|
41
|
+
subscription = null;
|
|
42
|
+
_sub.unsubscribe();
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return {
|
|
47
|
+
subscribe(observer) {
|
|
48
|
+
refCount++;
|
|
49
|
+
|
|
50
|
+
observers.push(observer);
|
|
51
|
+
startIfNeeded();
|
|
52
|
+
return {
|
|
53
|
+
unsubscribe() {
|
|
54
|
+
refCount--;
|
|
55
|
+
resetIfNeeded();
|
|
56
|
+
|
|
57
|
+
const index = observers.findIndex((v) => v === observer);
|
|
58
|
+
|
|
59
|
+
if (index > -1) {
|
|
60
|
+
observers.splice(index, 1);
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { MonoTypeOperatorFunction, Observer } from '../types';
|
|
2
|
+
|
|
3
|
+
export function tap<TValue, TError>(
|
|
4
|
+
observer: Partial<Observer<TValue, TError>>,
|
|
5
|
+
): MonoTypeOperatorFunction<TValue, TError> {
|
|
6
|
+
return (originalObserver) => {
|
|
7
|
+
return {
|
|
8
|
+
subscribe(observer2) {
|
|
9
|
+
return originalObserver.subscribe({
|
|
10
|
+
next(v) {
|
|
11
|
+
observer.next?.(v);
|
|
12
|
+
observer2.next?.(v);
|
|
13
|
+
},
|
|
14
|
+
error(v) {
|
|
15
|
+
observer.error?.(v);
|
|
16
|
+
observer2.error?.(v);
|
|
17
|
+
},
|
|
18
|
+
complete() {
|
|
19
|
+
observer.complete?.();
|
|
20
|
+
observer2.complete?.();
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
export interface Unsubscribable {
|
|
2
|
+
unsubscribe(): void;
|
|
3
|
+
}
|
|
4
|
+
export type UnsubscribeFn = () => void;
|
|
5
|
+
export interface Subscribable<TValue, TError> {
|
|
6
|
+
subscribe(observer: Partial<Observer<TValue, TError>>): Unsubscribable;
|
|
7
|
+
}
|
|
8
|
+
export interface Observable<TValue, TError>
|
|
9
|
+
extends Subscribable<TValue, TError> {
|
|
10
|
+
pipe(): Observable<TValue, TError>;
|
|
11
|
+
pipe<V1, E1>(
|
|
12
|
+
op1: OperatorFunction<TValue, TError, V1, E1>,
|
|
13
|
+
): Observable<V1, E1>;
|
|
14
|
+
pipe<V1, E1, V2, E2>(
|
|
15
|
+
op1: OperatorFunction<TValue, TError, V1, E1>,
|
|
16
|
+
op2: OperatorFunction<V1, E1, V2, E2>,
|
|
17
|
+
): Observable<V2, E2>;
|
|
18
|
+
pipe<V1, E1, V2, E2, V3, E3>(
|
|
19
|
+
op1: OperatorFunction<TValue, TError, V1, E1>,
|
|
20
|
+
op2: OperatorFunction<V1, E1, V2, E2>,
|
|
21
|
+
op3: OperatorFunction<V2, E2, V3, E3>,
|
|
22
|
+
): Observable<V2, E2>;
|
|
23
|
+
pipe<V1, E1, V2, E2, V3, E3, V4, E4>(
|
|
24
|
+
op1: OperatorFunction<TValue, TError, V1, E1>,
|
|
25
|
+
op2: OperatorFunction<V1, E1, V2, E2>,
|
|
26
|
+
op3: OperatorFunction<V2, E2, V3, E3>,
|
|
27
|
+
op4: OperatorFunction<V3, E3, V4, E4>,
|
|
28
|
+
): Observable<V2, E2>;
|
|
29
|
+
pipe<V1, E1, V2, E2, V3, E3, V4, E4, V5, E5>(
|
|
30
|
+
op1: OperatorFunction<TValue, TError, V1, E1>,
|
|
31
|
+
op2: OperatorFunction<V1, E1, V2, E2>,
|
|
32
|
+
op3: OperatorFunction<V2, E2, V3, E3>,
|
|
33
|
+
op4: OperatorFunction<V3, E3, V4, E4>,
|
|
34
|
+
op5: OperatorFunction<V4, E4, V5, E5>,
|
|
35
|
+
): Observable<V2, E2>;
|
|
36
|
+
}
|
|
37
|
+
export interface SubscriptionLike extends Unsubscribable {
|
|
38
|
+
unsubscribe(): void;
|
|
39
|
+
readonly closed: boolean;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export interface Observer<TValue, TError> {
|
|
43
|
+
next: (value: TValue) => void;
|
|
44
|
+
error: (err: TError) => void;
|
|
45
|
+
complete: () => void;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export type TeardownLogic =
|
|
49
|
+
// | SubscriptionLike
|
|
50
|
+
Unsubscribable | UnsubscribeFn | void;
|
|
51
|
+
|
|
52
|
+
export type UnaryFunction<T, R> = (source: T) => R;
|
|
53
|
+
|
|
54
|
+
export type OperatorFunction<
|
|
55
|
+
TValueBefore,
|
|
56
|
+
TErrorBefore,
|
|
57
|
+
TValueAfter,
|
|
58
|
+
TErrorAfter,
|
|
59
|
+
> = UnaryFunction<
|
|
60
|
+
Subscribable<TValueBefore, TErrorBefore>,
|
|
61
|
+
Subscribable<TValueAfter, TErrorAfter>
|
|
62
|
+
>;
|
|
63
|
+
|
|
64
|
+
export type MonoTypeOperatorFunction<TValue, TError> = OperatorFunction<
|
|
65
|
+
TValue,
|
|
66
|
+
TError,
|
|
67
|
+
TValue,
|
|
68
|
+
TError
|
|
69
|
+
>;
|
package/src/rpc/codes.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { invert } from '
|
|
1
|
+
import { invert } from './internals/invert';
|
|
2
2
|
|
|
3
3
|
// reference: https://www.jsonrpc.org/specification
|
|
4
4
|
|
|
@@ -28,6 +28,7 @@ export const TRPC_ERROR_CODES_BY_KEY = {
|
|
|
28
28
|
NOT_FOUND: -32004, // 404
|
|
29
29
|
METHOD_NOT_SUPPORTED: -32005, // 405
|
|
30
30
|
TIMEOUT: -32008, // 408
|
|
31
|
+
CONFLICT: -32009, // 409
|
|
31
32
|
PRECONDITION_FAILED: -32012, // 412
|
|
32
33
|
PAYLOAD_TOO_LARGE: -32013, // 413
|
|
33
34
|
CLIENT_CLOSED_REQUEST: -32099, // 499
|
package/src/rpc/envelopes.ts
CHANGED
|
@@ -1,31 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-namespace */
|
|
2
|
+
import { ProcedureType } from '../deprecated/router';
|
|
2
3
|
import { TRPC_ERROR_CODE_NUMBER } from './codes';
|
|
3
4
|
|
|
4
|
-
type JSONRPC2RequestId = number | string | null;
|
|
5
|
-
|
|
6
5
|
/**
|
|
7
|
-
*
|
|
6
|
+
* Error response
|
|
8
7
|
*/
|
|
9
|
-
interface JSONRPC2BaseEnvelope {
|
|
10
|
-
id: JSONRPC2RequestId;
|
|
11
|
-
jsonrpc?: '2.0';
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
interface JSONRPC2BaseRequest<TMethod extends string = string>
|
|
15
|
-
extends JSONRPC2BaseEnvelope {
|
|
16
|
-
method: TMethod;
|
|
17
|
-
}
|
|
18
|
-
interface JSONRPC2Request<TMethod extends string = string, TParams = unknown>
|
|
19
|
-
extends JSONRPC2BaseRequest<TMethod> {
|
|
20
|
-
params: TParams;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
interface JSONRPC2ResultResponse<TResult = unknown>
|
|
24
|
-
extends JSONRPC2BaseEnvelope {
|
|
25
|
-
result: TResult;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
// inner types
|
|
29
8
|
export interface TRPCErrorShape<
|
|
30
9
|
TCode extends number = TRPC_ERROR_CODE_NUMBER,
|
|
31
10
|
TData extends Record<string, unknown> = Record<string, unknown>,
|
|
@@ -36,74 +15,121 @@ export interface TRPCErrorShape<
|
|
|
36
15
|
}
|
|
37
16
|
|
|
38
17
|
/**
|
|
39
|
-
*
|
|
18
|
+
* JSON-RPC 2.0 Specification
|
|
40
19
|
*/
|
|
41
|
-
export
|
|
42
|
-
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
20
|
+
export namespace JSONRPC2 {
|
|
21
|
+
export type RequestId = number | string | null;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* All requests/responses extends this shape
|
|
25
|
+
*/
|
|
26
|
+
export interface BaseEnvelope {
|
|
27
|
+
id?: RequestId;
|
|
28
|
+
jsonrpc?: '2.0';
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export interface BaseRequest<TMethod extends string = string>
|
|
32
|
+
extends BaseEnvelope {
|
|
33
|
+
method: TMethod;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface Request<TMethod extends string = string, TParams = unknown>
|
|
37
|
+
extends BaseRequest<TMethod> {
|
|
38
|
+
params: TParams;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export interface ResultResponse<TResult = unknown> extends BaseEnvelope {
|
|
42
|
+
result: TResult;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export interface ErrorResponse<TError extends TRPCErrorShape = TRPCErrorShape>
|
|
46
|
+
extends BaseEnvelope {
|
|
47
|
+
error: TError;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/////////////////////////// HTTP envelopes ///////////////////////
|
|
52
|
+
|
|
53
|
+
export interface TRPCRequest
|
|
54
|
+
extends JSONRPC2.Request<ProcedureType, { path: string; input: unknown }> {}
|
|
55
|
+
|
|
56
|
+
export interface TRPCResult<TData = unknown> {
|
|
57
|
+
data: TData;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export interface TRPCSuccessResponse<TData>
|
|
61
|
+
extends JSONRPC2.ResultResponse<
|
|
62
|
+
TRPCResult<TData> & {
|
|
63
|
+
type?: 'data';
|
|
48
64
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
65
|
+
> {}
|
|
66
|
+
export interface TRPCErrorResponse<
|
|
67
|
+
TError extends TRPCErrorShape = TRPCErrorShape,
|
|
68
|
+
> extends JSONRPC2.ErrorResponse<TError> {}
|
|
52
69
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}
|
|
64
|
-
>;
|
|
70
|
+
export type TRPCResponse<
|
|
71
|
+
TData = unknown,
|
|
72
|
+
TError extends TRPCErrorShape = TRPCErrorShape,
|
|
73
|
+
> = TRPCSuccessResponse<TData> | TRPCErrorResponse<TError>;
|
|
74
|
+
|
|
75
|
+
/////////////////////////// WebSocket envelopes ///////////////////////
|
|
76
|
+
|
|
77
|
+
export type TRPCRequestMessage = {
|
|
78
|
+
id: JSONRPC2.RequestId;
|
|
79
|
+
} & TRPCRequest;
|
|
65
80
|
|
|
66
81
|
/**
|
|
67
|
-
*
|
|
82
|
+
* The client asked the server to unsubscribe
|
|
68
83
|
*/
|
|
69
|
-
export
|
|
70
|
-
|
|
71
|
-
|
|
84
|
+
export interface TRPCSubscriptionStopNotification
|
|
85
|
+
extends JSONRPC2.BaseRequest<'subscription.stop'> {
|
|
86
|
+
id: null;
|
|
87
|
+
}
|
|
72
88
|
|
|
73
89
|
/**
|
|
74
|
-
*
|
|
90
|
+
* The client's outgoing request types
|
|
75
91
|
*/
|
|
76
|
-
export type
|
|
77
|
-
TData = unknown,
|
|
78
|
-
TError extends TRPCErrorShape = TRPCErrorShape,
|
|
79
|
-
> = TRPCResultResponse<TData> | TRPCErrorResponse<TError>;
|
|
92
|
+
export type TRPCClientOutgoingRequest = TRPCSubscriptionStopNotification;
|
|
80
93
|
|
|
81
94
|
/**
|
|
82
|
-
*
|
|
95
|
+
* The client's sent messages shape
|
|
83
96
|
*/
|
|
84
|
-
export
|
|
97
|
+
export type TRPCClientOutgoingMessage =
|
|
98
|
+
| TRPCRequestMessage
|
|
99
|
+
| ({ id: JSONRPC2.RequestId } & JSONRPC2.BaseRequest<'subscription.stop'>);
|
|
100
|
+
|
|
101
|
+
export interface TRPCResultMessage<TData>
|
|
102
|
+
extends JSONRPC2.ResultResponse<
|
|
103
|
+
| (TRPCResult<TData> & { type: 'data' })
|
|
104
|
+
| { type: 'started' }
|
|
105
|
+
| { type: 'stopped' }
|
|
106
|
+
> {}
|
|
107
|
+
|
|
108
|
+
export type TRPCResponseMessage<
|
|
109
|
+
TData = unknown,
|
|
85
110
|
TError extends TRPCErrorShape = TRPCErrorShape,
|
|
86
|
-
>
|
|
87
|
-
|
|
88
|
-
|
|
111
|
+
> = { id: JSONRPC2.RequestId } & (
|
|
112
|
+
| TRPCResultMessage<TData>
|
|
113
|
+
| TRPCErrorResponse<TError>
|
|
114
|
+
);
|
|
89
115
|
|
|
90
116
|
/**
|
|
91
117
|
* The server asked the client to reconnect - useful when restarting/redeploying service
|
|
92
118
|
*/
|
|
93
119
|
export interface TRPCReconnectNotification
|
|
94
|
-
extends
|
|
95
|
-
id:
|
|
120
|
+
extends JSONRPC2.BaseRequest<'reconnect'> {
|
|
121
|
+
id: JSONRPC2.RequestId;
|
|
96
122
|
}
|
|
97
123
|
|
|
98
124
|
/**
|
|
99
125
|
* The client's incoming request types
|
|
100
126
|
*/
|
|
101
|
-
export type TRPCClientIncomingRequest =
|
|
102
|
-
TRPCReconnectNotification /* could be extended in future */;
|
|
127
|
+
export type TRPCClientIncomingRequest = TRPCReconnectNotification;
|
|
103
128
|
|
|
104
129
|
/**
|
|
105
130
|
* The client's received messages shape
|
|
106
131
|
*/
|
|
107
|
-
export type TRPCClientIncomingMessage
|
|
108
|
-
|
|
109
|
-
|
|
132
|
+
export type TRPCClientIncomingMessage<
|
|
133
|
+
TResult = unknown,
|
|
134
|
+
TError extends TRPCErrorShape = TRPCErrorShape,
|
|
135
|
+
> = TRPCResponseMessage<TResult, TError> | TRPCClientIncomingRequest;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @internal
|
|
3
|
+
*/
|
|
4
|
+
type KeyFromValue<V, T extends Record<PropertyKey, PropertyKey>> = {
|
|
5
|
+
[K in keyof T]: V extends T[K] ? K : never;
|
|
6
|
+
}[keyof T];
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @internal
|
|
10
|
+
*/
|
|
11
|
+
type Invert<T extends Record<PropertyKey, PropertyKey>> = {
|
|
12
|
+
[V in T[keyof T]]: KeyFromValue<V, T>;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @internal
|
|
17
|
+
*/
|
|
18
|
+
export function invert<T extends Record<PropertyKey, PropertyKey>>(
|
|
19
|
+
obj: T,
|
|
20
|
+
): Invert<T> {
|
|
21
|
+
const newObj = Object.create(null) as any;
|
|
22
|
+
for (const key in obj) {
|
|
23
|
+
const v = obj[key];
|
|
24
|
+
newObj[v] = key;
|
|
25
|
+
}
|
|
26
|
+
return newObj;
|
|
27
|
+
}
|