@trpc/server 10.0.0-alpha.24 → 10.0.0-alpha.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.d.ts +1 -1
- package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.dev.js +100 -20
- package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.prod.js +100 -20
- package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.esm.js +99 -19
- package/adapters/aws-lambda/index.d.ts +1 -0
- package/adapters/aws-lambda/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/dist/{TRPCError-ddec3395.js → TRPCError-9050a68d.js} +0 -0
- package/dist/{TRPCError-7971540a.mjs → TRPCError-b7fa0c31.mjs} +0 -0
- package/dist/adapters/aws-lambda/index.d.ts +14 -0
- package/dist/adapters/aws-lambda/index.d.ts.map +1 -0
- package/dist/adapters/aws-lambda/utils.d.ts +34 -0
- package/dist/adapters/aws-lambda/utils.d.ts.map +1 -0
- package/dist/adapters/express.d.ts +1 -1
- package/dist/adapters/express.d.ts.map +1 -1
- package/dist/adapters/express.js +5 -5
- package/dist/adapters/express.mjs +5 -5
- package/dist/adapters/fastify/fastifyRequestHandler.d.ts +1 -1
- package/dist/adapters/fastify/fastifyRequestHandler.d.ts.map +1 -1
- package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts +1 -1
- package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts.map +1 -1
- package/dist/adapters/fastify/index.js +4 -4
- package/dist/adapters/fastify/index.mjs +4 -4
- package/dist/adapters/fetch/fetchRequestHandler.d.ts +1 -1
- package/dist/adapters/fetch/fetchRequestHandler.d.ts.map +1 -1
- package/dist/adapters/fetch/index.js +4 -4
- package/dist/adapters/fetch/index.mjs +4 -4
- package/dist/adapters/fetch/types.d.ts +1 -1
- package/dist/adapters/fetch/types.d.ts.map +1 -1
- 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 +1 -1
- package/dist/adapters/next.d.ts.map +1 -1
- package/dist/adapters/next.js +5 -5
- package/dist/adapters/next.mjs +5 -5
- package/dist/adapters/node-http/index.js +5 -5
- package/dist/adapters/node-http/index.mjs +5 -5
- 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 +1 -1
- package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts.map +1 -1
- package/dist/adapters/node-http/types.d.ts +3 -2
- 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 +5 -5
- package/dist/adapters/standalone.mjs +5 -5
- package/dist/adapters/ws.d.ts +3 -2
- package/dist/adapters/ws.d.ts.map +1 -1
- package/dist/adapters/ws.js +4 -9
- package/dist/adapters/ws.mjs +4 -9
- package/dist/core/index.d.ts +5 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/initTRPC.d.ts +82 -0
- package/dist/core/initTRPC.d.ts.map +1 -0
- package/dist/core/internals/__generated__/mergeRoutersGeneric.d.ts +262 -0
- package/dist/core/internals/__generated__/mergeRoutersGeneric.d.ts.map +1 -0
- package/dist/core/internals/config.d.ts +38 -0
- package/dist/core/internals/config.d.ts.map +1 -0
- package/dist/core/internals/getParseFn.d.ts +9 -0
- package/dist/core/internals/getParseFn.d.ts.map +1 -0
- package/dist/core/internals/internalProcedure.d.ts +61 -0
- package/dist/core/internals/internalProcedure.d.ts.map +1 -0
- package/dist/core/internals/mergeRouters.d.ts +3 -0
- package/dist/core/internals/mergeRouters.d.ts.map +1 -0
- package/dist/core/internals/mergeRoutersGeneric.d.ts +21 -0
- package/dist/core/internals/mergeRoutersGeneric.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/procedureBuilder.d.ts +72 -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 +78 -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 +57 -0
- package/dist/core/procedure.d.ts.map +1 -0
- package/dist/core/router.d.ts +122 -0
- package/dist/core/router.d.ts.map +1 -0
- package/dist/core/types.d.ts +17 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/{internals → deprecated/internals}/callProcedure.d.ts +4 -1
- package/dist/deprecated/internals/callProcedure.d.ts.map +1 -0
- package/dist/{internals → deprecated/internals}/middlewares.d.ts +16 -1
- package/dist/deprecated/internals/middlewares.d.ts.map +1 -0
- package/dist/{internals → deprecated/internals}/procedure.d.ts +10 -1
- 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/{router.d.ts → deprecated/router.d.ts} +27 -6
- package/dist/deprecated/router.d.ts.map +1 -0
- package/dist/{envelopes-1deb2fa7.mjs → envelopes-af8c2959.mjs} +12 -1
- package/dist/{envelopes-a953b930.js → envelopes-b6dd0367.js} +11 -1
- package/dist/{TRPCError.d.ts → error/TRPCError.d.ts} +2 -2
- 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} +2 -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 +1 -1
- package/dist/http/internals/getHTTPStatusCode.d.ts.map +1 -1
- package/dist/http/internals/types.d.ts +10 -8
- package/dist/http/internals/types.d.ts.map +1 -1
- package/dist/http/resolveHTTPResponse.d.ts +2 -2
- package/dist/http/resolveHTTPResponse.d.ts.map +1 -1
- package/dist/http/{responseMeta.d.ts → types.d.ts} +1 -1
- package/dist/http/types.d.ts.map +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +711 -30
- package/dist/index.mjs +711 -32
- package/dist/internals/transformTRPCResponse.d.ts +1 -1
- package/dist/internals/transformTRPCResponse.d.ts.map +1 -1
- package/dist/internals/types.d.ts +23 -0
- package/dist/internals/types.d.ts.map +1 -0
- package/dist/{nodeHTTPRequestHandler-1cdb6383.mjs → nodeHTTPRequestHandler-174459c5.mjs} +2 -2
- package/dist/{nodeHTTPRequestHandler-848f07b5.js → nodeHTTPRequestHandler-6b7c8622.js} +2 -2
- package/dist/{resolveHTTPResponse-54a79e6c.mjs → resolveHTTPResponse-8657b8de.mjs} +16 -10
- package/dist/{resolveHTTPResponse-ec3dccaa.js → resolveHTTPResponse-fcc8f644.js} +17 -11
- package/dist/rpc/envelopes.d.ts +1 -1
- package/dist/rpc/envelopes.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/subscription.js +1 -1
- package/dist/subscription.mjs +1 -1
- package/dist/{transformTRPCResponse-333bed6c.js → transformTRPCResponse-0c261655.js} +0 -27
- package/dist/{transformTRPCResponse-e0cba527.mjs → transformTRPCResponse-747b9a68.mjs} +1 -27
- package/dist/transformer.d.ts +14 -0
- package/dist/transformer.d.ts.map +1 -1
- package/dist/types.d.ts +9 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +12 -4
- package/src/adapters/aws-lambda/index.ts +156 -0
- package/src/adapters/aws-lambda/utils.ts +91 -0
- package/src/adapters/express.ts +1 -1
- package/src/adapters/fastify/fastifyRequestHandler.ts +1 -1
- package/src/adapters/fastify/fastifyTRPCPlugin.ts +2 -2
- package/src/adapters/fetch/fetchRequestHandler.ts +1 -1
- package/src/adapters/fetch/types.ts +1 -1
- package/src/adapters/lambda/index.ts +18 -0
- package/src/adapters/next.ts +2 -2
- package/src/adapters/node-http/internals/getPostBody.ts +1 -1
- package/src/adapters/node-http/nodeHTTPRequestHandler.ts +3 -2
- package/src/adapters/node-http/types.ts +5 -2
- package/src/adapters/standalone.ts +1 -1
- package/src/adapters/ws.ts +7 -12
- package/src/core/index.ts +5 -0
- package/src/core/initTRPC.ts +90 -0
- package/src/core/internals/__generated__/mergeRoutersGeneric.ts +366 -0
- package/src/core/internals/config.ts +44 -0
- package/src/core/internals/getParseFn.ts +47 -0
- package/src/core/internals/internalProcedure.ts +265 -0
- package/src/core/internals/mergeRouters.ts +57 -0
- package/src/core/internals/mergeRoutersGeneric.ts +35 -0
- package/src/core/internals/mergeWithoutOverrides.ts +19 -0
- package/src/core/internals/omitPrototype.ts +9 -0
- package/src/core/internals/procedureBuilder.ts +101 -0
- package/src/core/internals/utils.ts +64 -0
- package/src/core/middleware.ts +93 -0
- package/src/core/parser.ts +45 -0
- package/src/core/procedure.ts +72 -0
- package/src/core/router.ts +358 -0
- package/src/core/types.ts +37 -0
- package/src/{internals → deprecated/internals}/callProcedure.ts +4 -1
- package/src/{internals → deprecated/internals}/middlewares.ts +17 -1
- package/src/{internals → deprecated/internals}/procedure.ts +16 -4
- package/src/deprecated/interop.ts +169 -0
- package/src/{router.ts → deprecated/router.ts} +51 -24
- package/src/{TRPCError.ts → error/TRPCError.ts} +3 -3
- package/src/error/formatter.ts +51 -0
- package/src/{internals/errors.ts → error/utils.ts} +1 -1
- package/src/http/index.ts +1 -1
- package/src/http/internals/getHTTPStatusCode.ts +1 -1
- package/src/http/internals/types.ts +10 -12
- package/src/http/resolveHTTPResponse.ts +7 -12
- package/src/http/{responseMeta.ts → types.ts} +0 -0
- package/src/index.ts +3 -2
- package/src/internals/transformTRPCResponse.ts +1 -1
- package/src/internals/types.ts +24 -0
- package/src/rpc/codes.ts +1 -1
- package/src/rpc/envelopes.ts +1 -1
- package/src/rpc/internals/invert.ts +27 -0
- package/src/subscription.ts +1 -1
- package/src/transformer.ts +28 -0
- package/src/types.ts +12 -0
- package/dist/TRPCError.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/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/onErrorFunction.d.ts +0 -11
- package/dist/internals/onErrorFunction.d.ts.map +0 -1
- package/dist/internals/procedure.d.ts.map +0 -1
- package/dist/router.d.ts.map +0 -1
- package/src/internals/baseHandlerOptions.ts +0 -13
- package/src/internals/onErrorFunction.ts +0 -11
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { UnsetMarker } from './internals/utils';
|
|
2
|
+
|
|
3
|
+
type ClientContext = Record<string, unknown>;
|
|
4
|
+
export interface ProcedureOptions {
|
|
5
|
+
/**
|
|
6
|
+
* Client-side context
|
|
7
|
+
*/
|
|
8
|
+
context?: ClientContext;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
export interface ProcedureParams<
|
|
15
|
+
TContextIn = unknown,
|
|
16
|
+
TContextOut = unknown,
|
|
17
|
+
TInputIn = unknown,
|
|
18
|
+
TInputOut = unknown,
|
|
19
|
+
TOutputIn = unknown,
|
|
20
|
+
TOutputOut = unknown,
|
|
21
|
+
TMeta = unknown,
|
|
22
|
+
> {
|
|
23
|
+
/**
|
|
24
|
+
* @internal
|
|
25
|
+
*/
|
|
26
|
+
_meta: TMeta;
|
|
27
|
+
/**
|
|
28
|
+
* @internal
|
|
29
|
+
*/
|
|
30
|
+
_ctx_in: TContextIn;
|
|
31
|
+
/**
|
|
32
|
+
* @internal
|
|
33
|
+
*/
|
|
34
|
+
_ctx_out: TContextOut;
|
|
35
|
+
/**
|
|
36
|
+
* @internal
|
|
37
|
+
*/
|
|
38
|
+
_output_in: TOutputIn;
|
|
39
|
+
/**
|
|
40
|
+
* @internal
|
|
41
|
+
*/
|
|
42
|
+
_output_out: TOutputOut;
|
|
43
|
+
/**
|
|
44
|
+
* @internal
|
|
45
|
+
*/
|
|
46
|
+
_input_in: TInputIn;
|
|
47
|
+
/**
|
|
48
|
+
* @internal
|
|
49
|
+
*/
|
|
50
|
+
_input_out: TInputOut;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* @internal
|
|
55
|
+
*/
|
|
56
|
+
export type ProcedureArgs<TParams extends ProcedureParams> =
|
|
57
|
+
TParams['_input_in'] extends UnsetMarker
|
|
58
|
+
? [input?: undefined | void, opts?: ProcedureOptions]
|
|
59
|
+
: undefined extends TParams['_input_in']
|
|
60
|
+
? [input?: TParams['_input_in'] | void, opts?: ProcedureOptions]
|
|
61
|
+
: [input: TParams['_input_in'], opts?: ProcedureOptions];
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* @internal
|
|
65
|
+
*/
|
|
66
|
+
export interface Procedure<TParams extends ProcedureParams> {
|
|
67
|
+
(...args: ProcedureArgs<TParams>): Promise<TParams['_output_out']>;
|
|
68
|
+
/**
|
|
69
|
+
* @deprecated use `._def.meta` instead
|
|
70
|
+
*/
|
|
71
|
+
meta?: TParams['_meta'];
|
|
72
|
+
}
|
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/ban-types */
|
|
2
|
+
import { TRPCError } from '../error/TRPCError';
|
|
3
|
+
import {
|
|
4
|
+
DefaultErrorShape,
|
|
5
|
+
ErrorFormatter,
|
|
6
|
+
defaultFormatter,
|
|
7
|
+
} from '../error/formatter';
|
|
8
|
+
import { getHTTPStatusCodeFromError } from '../http/internals/getHTTPStatusCode';
|
|
9
|
+
import { TRPCErrorShape, TRPC_ERROR_CODES_BY_KEY } from '../rpc';
|
|
10
|
+
import { CombinedDataTransformer, defaultTransformer } from '../transformer';
|
|
11
|
+
import { RootConfig } from './internals/config';
|
|
12
|
+
import {
|
|
13
|
+
InternalProcedure,
|
|
14
|
+
InternalProcedureCallOptions,
|
|
15
|
+
} from './internals/internalProcedure';
|
|
16
|
+
import { mergeWithoutOverrides } from './internals/mergeWithoutOverrides';
|
|
17
|
+
import { omitPrototype } from './internals/omitPrototype';
|
|
18
|
+
import { EnsureRecord, ValidateShape } from './internals/utils';
|
|
19
|
+
import { Procedure } from './procedure';
|
|
20
|
+
import { ProcedureType } from './types';
|
|
21
|
+
|
|
22
|
+
// FIXME this should properly use TContext maybe?
|
|
23
|
+
export type ProcedureRecord<_TContext> = Record<string, Procedure<any>>;
|
|
24
|
+
type AnyProcedureRecord = ProcedureRecord<any>;
|
|
25
|
+
export interface ProcedureStructure {
|
|
26
|
+
queries: AnyProcedureRecord;
|
|
27
|
+
mutations: AnyProcedureRecord;
|
|
28
|
+
subscriptions: AnyProcedureRecord;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export interface RouterParams<
|
|
32
|
+
// FIXME this should use RootConfig
|
|
33
|
+
TContext,
|
|
34
|
+
TErrorShape extends TRPCErrorShape<number>,
|
|
35
|
+
TMeta extends Record<string, unknown>,
|
|
36
|
+
TQueries extends ProcedureRecord<TContext>,
|
|
37
|
+
TMutations extends ProcedureRecord<TContext>,
|
|
38
|
+
TSubscriptions extends ProcedureRecord<TContext>,
|
|
39
|
+
> extends ProcedureStructure {
|
|
40
|
+
/**
|
|
41
|
+
* @internal
|
|
42
|
+
*/
|
|
43
|
+
_ctx: TContext;
|
|
44
|
+
/**
|
|
45
|
+
* @internal
|
|
46
|
+
*/
|
|
47
|
+
_errorShape: TErrorShape;
|
|
48
|
+
/**
|
|
49
|
+
* @internal
|
|
50
|
+
*/
|
|
51
|
+
_meta: TMeta;
|
|
52
|
+
queries: TQueries;
|
|
53
|
+
mutations: TMutations;
|
|
54
|
+
subscriptions: TSubscriptions;
|
|
55
|
+
errorFormatter: ErrorFormatter<TContext, TErrorShape>;
|
|
56
|
+
transformer: CombinedDataTransformer;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export type AnyRouterParams<TContext = any> = RouterParams<
|
|
60
|
+
TContext,
|
|
61
|
+
any,
|
|
62
|
+
any,
|
|
63
|
+
any,
|
|
64
|
+
any,
|
|
65
|
+
any
|
|
66
|
+
>;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* @internal
|
|
70
|
+
*/
|
|
71
|
+
export type inferHandlerInput<TProcedure extends Procedure<any>> =
|
|
72
|
+
TProcedure extends Procedure<infer TParams>
|
|
73
|
+
? undefined extends TParams['_input_in'] // ? is input optional
|
|
74
|
+
? unknown extends TParams['_input_in'] // ? is input unset
|
|
75
|
+
? [(null | undefined)?] // -> there is no input
|
|
76
|
+
: [(TParams['_input_in'] | null | undefined)?] // -> there is optional input
|
|
77
|
+
: [TParams['_input_in']] // -> input is required
|
|
78
|
+
: [(undefined | null)?]; // -> there is no input
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* @internal
|
|
82
|
+
*/
|
|
83
|
+
type inferHandlerFn<TProcedures extends ProcedureRecord<any>> = <
|
|
84
|
+
TProcedure extends TProcedures[TPath],
|
|
85
|
+
TPath extends keyof TProcedures & string,
|
|
86
|
+
>(
|
|
87
|
+
path: TPath,
|
|
88
|
+
...args: inferHandlerInput<TProcedure>
|
|
89
|
+
) => ReturnType<TProcedure>;
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* This only exists b/c of interop mode
|
|
93
|
+
* @internal
|
|
94
|
+
*/
|
|
95
|
+
|
|
96
|
+
type RouterCaller<TParams extends AnyRouterParams> = (ctx: TParams['_ctx']) => {
|
|
97
|
+
/**
|
|
98
|
+
* @deprecated
|
|
99
|
+
*/
|
|
100
|
+
query: inferHandlerFn<TParams['queries']>;
|
|
101
|
+
/**
|
|
102
|
+
* @deprecated
|
|
103
|
+
*/
|
|
104
|
+
mutation: inferHandlerFn<TParams['mutations']>;
|
|
105
|
+
/**
|
|
106
|
+
* @deprecated
|
|
107
|
+
*/
|
|
108
|
+
subscription: inferHandlerFn<TParams['subscriptions']>;
|
|
109
|
+
|
|
110
|
+
queries: TParams['queries'];
|
|
111
|
+
mutations: TParams['mutations'];
|
|
112
|
+
subscriptions: TParams['subscriptions'];
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
export interface Router<TParams extends AnyRouterParams>
|
|
116
|
+
extends ProcedureStructure {
|
|
117
|
+
_def: RouterParams<
|
|
118
|
+
TParams['_ctx'],
|
|
119
|
+
TParams['_errorShape'],
|
|
120
|
+
TParams['_meta'],
|
|
121
|
+
TParams['queries'],
|
|
122
|
+
TParams['mutations'],
|
|
123
|
+
TParams['subscriptions']
|
|
124
|
+
>;
|
|
125
|
+
queries: TParams['queries'];
|
|
126
|
+
mutations: TParams['mutations'];
|
|
127
|
+
subscriptions: TParams['subscriptions'];
|
|
128
|
+
errorFormatter: TParams['errorFormatter'];
|
|
129
|
+
transformer: TParams['transformer'];
|
|
130
|
+
|
|
131
|
+
createCaller: RouterCaller<TParams>;
|
|
132
|
+
getErrorShape(opts: {
|
|
133
|
+
error: TRPCError;
|
|
134
|
+
type: ProcedureType | 'unknown';
|
|
135
|
+
path: string | undefined;
|
|
136
|
+
input: unknown;
|
|
137
|
+
ctx: undefined | TParams['_ctx'];
|
|
138
|
+
}): TParams['_errorShape'];
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* @internal
|
|
143
|
+
*/
|
|
144
|
+
export type RouterOptions<TContext> = Partial<AnyRouterParams<TContext>>;
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* @internal
|
|
148
|
+
*/
|
|
149
|
+
export type RouterDefaultOptions<TContext> = Pick<
|
|
150
|
+
AnyRouterParams<TContext>,
|
|
151
|
+
'transformer' | 'errorFormatter'
|
|
152
|
+
>;
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* @internal
|
|
156
|
+
*/
|
|
157
|
+
type RouterBuildOptions<TContext> = Pick<
|
|
158
|
+
RouterOptions<TContext>,
|
|
159
|
+
'queries' | 'subscriptions' | 'mutations'
|
|
160
|
+
>;
|
|
161
|
+
|
|
162
|
+
export type AnyRouter = Router<any>;
|
|
163
|
+
|
|
164
|
+
function createRouterProxy(callback: (...args: [string, ...unknown[]]) => any) {
|
|
165
|
+
return new Proxy({} as any, {
|
|
166
|
+
get(_, path: string) {
|
|
167
|
+
return (...args: unknown[]) => callback(path, ...args);
|
|
168
|
+
},
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
const emptyRouter = {
|
|
172
|
+
_ctx: null as any,
|
|
173
|
+
_errorShape: null as any,
|
|
174
|
+
_meta: null as any,
|
|
175
|
+
queries: {},
|
|
176
|
+
mutations: {},
|
|
177
|
+
subscriptions: {},
|
|
178
|
+
errorFormatter: defaultFormatter,
|
|
179
|
+
transformer: defaultTransformer,
|
|
180
|
+
};
|
|
181
|
+
// type EmptyRouter = typeof emptyRouter;
|
|
182
|
+
|
|
183
|
+
const PROCEDURE_DEFINITION_MAP: Record<
|
|
184
|
+
ProcedureType,
|
|
185
|
+
'queries' | 'mutations' | 'subscriptions'
|
|
186
|
+
> = {
|
|
187
|
+
query: 'queries',
|
|
188
|
+
mutation: 'mutations',
|
|
189
|
+
subscription: 'subscriptions',
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
*
|
|
194
|
+
* @internal
|
|
195
|
+
*/
|
|
196
|
+
export function createRouterFactory<TSettings extends RootConfig>(
|
|
197
|
+
defaults?: RouterDefaultOptions<TSettings['ctx']>,
|
|
198
|
+
) {
|
|
199
|
+
return function createRouterInner<
|
|
200
|
+
TProcedures extends RouterBuildOptions<TSettings['ctx']>,
|
|
201
|
+
>(
|
|
202
|
+
procedures: ValidateShape<
|
|
203
|
+
TProcedures,
|
|
204
|
+
RouterBuildOptions<TSettings['ctx']>
|
|
205
|
+
>,
|
|
206
|
+
): Router<{
|
|
207
|
+
_ctx: TSettings['ctx'];
|
|
208
|
+
_errorShape: TSettings['errorShape'];
|
|
209
|
+
_meta: TSettings['meta'];
|
|
210
|
+
queries: EnsureRecord<TProcedures['queries']>;
|
|
211
|
+
mutations: EnsureRecord<TProcedures['mutations']>;
|
|
212
|
+
subscriptions: EnsureRecord<TProcedures['subscriptions']>;
|
|
213
|
+
errorFormatter: ErrorFormatter<TSettings['ctx'], TSettings['errorShape']>;
|
|
214
|
+
transformer: TSettings['transformer'];
|
|
215
|
+
}> {
|
|
216
|
+
const result = mergeWithoutOverrides<
|
|
217
|
+
RouterDefaultOptions<TSettings['ctx']> &
|
|
218
|
+
RouterBuildOptions<TSettings['ctx']>
|
|
219
|
+
>(
|
|
220
|
+
{
|
|
221
|
+
transformer: defaults?.transformer ?? defaultTransformer,
|
|
222
|
+
errorFormatter: defaults?.errorFormatter ?? defaultFormatter,
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
queries: omitPrototype(procedures.queries),
|
|
226
|
+
mutations: omitPrototype(procedures.mutations),
|
|
227
|
+
subscriptions: omitPrototype(procedures.subscriptions),
|
|
228
|
+
},
|
|
229
|
+
);
|
|
230
|
+
|
|
231
|
+
const _def: AnyRouterParams<TSettings['ctx']> = {
|
|
232
|
+
...emptyRouter,
|
|
233
|
+
...result,
|
|
234
|
+
};
|
|
235
|
+
const def = {
|
|
236
|
+
_def,
|
|
237
|
+
..._def,
|
|
238
|
+
};
|
|
239
|
+
|
|
240
|
+
function callProcedure(opts: InternalProcedureCallOptions) {
|
|
241
|
+
const { type, path } = opts;
|
|
242
|
+
const defTarget = PROCEDURE_DEFINITION_MAP[type];
|
|
243
|
+
const defs = def[defTarget];
|
|
244
|
+
|
|
245
|
+
if (!(path in defs)) {
|
|
246
|
+
throw new TRPCError({
|
|
247
|
+
code: 'NOT_FOUND',
|
|
248
|
+
message: `No "${type}"-procedure on path "${path}"`,
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
const procedure = defs[path] as InternalProcedure;
|
|
252
|
+
return procedure(opts);
|
|
253
|
+
}
|
|
254
|
+
const router: AnyRouter = {
|
|
255
|
+
...def,
|
|
256
|
+
createCaller(ctx) {
|
|
257
|
+
return {
|
|
258
|
+
query: (path, ...args) =>
|
|
259
|
+
callProcedure({
|
|
260
|
+
path,
|
|
261
|
+
rawInput: args[0],
|
|
262
|
+
ctx,
|
|
263
|
+
type: 'query',
|
|
264
|
+
}) as any,
|
|
265
|
+
mutation: (path, ...args) =>
|
|
266
|
+
callProcedure({
|
|
267
|
+
path,
|
|
268
|
+
rawInput: args[0],
|
|
269
|
+
ctx,
|
|
270
|
+
type: 'mutation',
|
|
271
|
+
}) as any,
|
|
272
|
+
subscription: (path, ...args) =>
|
|
273
|
+
callProcedure({
|
|
274
|
+
path,
|
|
275
|
+
rawInput: args[0],
|
|
276
|
+
ctx,
|
|
277
|
+
type: 'subscription',
|
|
278
|
+
}) as any,
|
|
279
|
+
|
|
280
|
+
queries: createRouterProxy((path, rawInput) =>
|
|
281
|
+
callProcedure({
|
|
282
|
+
path,
|
|
283
|
+
rawInput,
|
|
284
|
+
ctx,
|
|
285
|
+
type: 'query',
|
|
286
|
+
}),
|
|
287
|
+
),
|
|
288
|
+
mutations: createRouterProxy((path, rawInput) =>
|
|
289
|
+
callProcedure({
|
|
290
|
+
path,
|
|
291
|
+
rawInput,
|
|
292
|
+
ctx,
|
|
293
|
+
type: 'mutation',
|
|
294
|
+
}),
|
|
295
|
+
),
|
|
296
|
+
subscriptions: createRouterProxy((path, rawInput) =>
|
|
297
|
+
callProcedure({
|
|
298
|
+
path,
|
|
299
|
+
rawInput,
|
|
300
|
+
ctx,
|
|
301
|
+
type: 'subscription',
|
|
302
|
+
}),
|
|
303
|
+
),
|
|
304
|
+
};
|
|
305
|
+
},
|
|
306
|
+
getErrorShape(opts) {
|
|
307
|
+
const { path, error } = opts;
|
|
308
|
+
const { code } = opts.error;
|
|
309
|
+
const shape: DefaultErrorShape = {
|
|
310
|
+
message: error.message,
|
|
311
|
+
code: TRPC_ERROR_CODES_BY_KEY[code],
|
|
312
|
+
data: {
|
|
313
|
+
code,
|
|
314
|
+
httpStatus: getHTTPStatusCodeFromError(error),
|
|
315
|
+
},
|
|
316
|
+
};
|
|
317
|
+
if (
|
|
318
|
+
process.env.NODE_ENV !== 'production' &&
|
|
319
|
+
typeof opts.error.stack === 'string'
|
|
320
|
+
) {
|
|
321
|
+
shape.data.stack = opts.error.stack;
|
|
322
|
+
}
|
|
323
|
+
if (typeof path === 'string') {
|
|
324
|
+
shape.data.path = path;
|
|
325
|
+
}
|
|
326
|
+
return this._def.errorFormatter({ ...opts, shape });
|
|
327
|
+
},
|
|
328
|
+
};
|
|
329
|
+
return router as any;
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
type combineProcedureRecords<
|
|
334
|
+
A extends Partial<AnyRouter>,
|
|
335
|
+
B extends Partial<AnyRouter>,
|
|
336
|
+
> = {
|
|
337
|
+
queries: A['queries'] & B['queries'];
|
|
338
|
+
mutations: A['mutations'] & B['mutations'];
|
|
339
|
+
subscriptions: A['subscriptions'] & B['subscriptions'];
|
|
340
|
+
};
|
|
341
|
+
/**
|
|
342
|
+
* @internal
|
|
343
|
+
*/
|
|
344
|
+
export type mergeProcedureRecordsVariadic<
|
|
345
|
+
Routers extends Partial<AnyRouter>[],
|
|
346
|
+
> = Routers extends []
|
|
347
|
+
? {
|
|
348
|
+
queries: {};
|
|
349
|
+
mutations: {};
|
|
350
|
+
subscriptions: {};
|
|
351
|
+
}
|
|
352
|
+
: Routers extends [infer First, ...infer Rest]
|
|
353
|
+
? First extends Partial<AnyRouter>
|
|
354
|
+
? Rest extends Partial<AnyRouter>[]
|
|
355
|
+
? combineProcedureRecords<First, mergeProcedureRecordsVariadic<Rest>>
|
|
356
|
+
: never
|
|
357
|
+
: never
|
|
358
|
+
: never;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { inferObservableValue } from '../observable';
|
|
2
|
+
import { inferAsyncReturnType } from '../types';
|
|
3
|
+
import { Procedure, ProcedureArgs } from './procedure';
|
|
4
|
+
import { AnyRouter, AnyRouterParams, Router } from './router';
|
|
5
|
+
|
|
6
|
+
export type inferRouterParams<TRouter extends AnyRouter> =
|
|
7
|
+
TRouter extends Router<infer TParams>
|
|
8
|
+
? TParams extends AnyRouterParams<any>
|
|
9
|
+
? TParams
|
|
10
|
+
: never
|
|
11
|
+
: never;
|
|
12
|
+
|
|
13
|
+
export type inferRouterContext<TRouter extends AnyRouter> =
|
|
14
|
+
inferRouterParams<TRouter>['_ctx'];
|
|
15
|
+
export type inferRouterError<TRouter extends AnyRouter> =
|
|
16
|
+
inferRouterParams<TRouter>['_errorShape'];
|
|
17
|
+
export type inferRouterMeta<TRouter extends AnyRouter> =
|
|
18
|
+
inferRouterParams<TRouter>['_meta'];
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* @public
|
|
22
|
+
*/
|
|
23
|
+
export type ProcedureType = 'query' | 'mutation' | 'subscription';
|
|
24
|
+
|
|
25
|
+
export type inferHandlerInput<TProcedure extends Procedure<any>> =
|
|
26
|
+
TProcedure extends Procedure<infer TParams> ? ProcedureArgs<TParams> : never;
|
|
27
|
+
|
|
28
|
+
export type inferProcedureInput<TProcedure extends Procedure<any>> =
|
|
29
|
+
inferHandlerInput<TProcedure>[0];
|
|
30
|
+
|
|
31
|
+
export type inferProcedureOutput<TProcedure extends Procedure<any>> =
|
|
32
|
+
inferAsyncReturnType<TProcedure>;
|
|
33
|
+
|
|
34
|
+
export type inferSubscriptionOutput<
|
|
35
|
+
TRouter extends AnyRouter,
|
|
36
|
+
TPath extends keyof TRouter['subscriptions'] & string,
|
|
37
|
+
> = inferObservableValue<inferProcedureOutput<TRouter['subscriptions'][TPath]>>;
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import { Observable } from '
|
|
1
|
+
import { Observable } from '../../observable';
|
|
2
2
|
import { AnyRouter, ProcedureType } from '../router';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* @deprecated
|
|
6
|
+
*/
|
|
4
7
|
export async function callProcedure<
|
|
5
8
|
TRouter extends AnyRouter<TContext>,
|
|
6
9
|
TContext,
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import { TRPCError } from '
|
|
1
|
+
import { TRPCError } from '../../error/TRPCError';
|
|
2
2
|
import { ProcedureType } from '../router';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* @deprecated
|
|
6
|
+
*/
|
|
4
7
|
export const middlewareMarker = 'middlewareMarker' as 'middlewareMarker' & {
|
|
5
8
|
__brand: 'middlewareMarker';
|
|
6
9
|
};
|
|
@@ -14,11 +17,18 @@ interface MiddlewareResultBase<TContext> {
|
|
|
14
17
|
ctx: TContext;
|
|
15
18
|
}
|
|
16
19
|
|
|
20
|
+
/**
|
|
21
|
+
* @deprecated
|
|
22
|
+
*/
|
|
17
23
|
interface MiddlewareOKResult<TContext> extends MiddlewareResultBase<TContext> {
|
|
18
24
|
ok: true;
|
|
19
25
|
data: unknown;
|
|
20
26
|
// this could be extended with `input`/`rawInput` later
|
|
21
27
|
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* @deprecated
|
|
31
|
+
*/
|
|
22
32
|
interface MiddlewareErrorResult<TContext>
|
|
23
33
|
extends MiddlewareResultBase<TContext> {
|
|
24
34
|
ok: false;
|
|
@@ -26,10 +36,16 @@ interface MiddlewareErrorResult<TContext>
|
|
|
26
36
|
// we could guarantee it's always of this type
|
|
27
37
|
}
|
|
28
38
|
|
|
39
|
+
/**
|
|
40
|
+
* @deprecated
|
|
41
|
+
*/
|
|
29
42
|
export type MiddlewareResult<TContext> =
|
|
30
43
|
| MiddlewareOKResult<TContext>
|
|
31
44
|
| MiddlewareErrorResult<TContext>;
|
|
32
45
|
|
|
46
|
+
/**
|
|
47
|
+
* @deprecated
|
|
48
|
+
*/
|
|
33
49
|
export type MiddlewareFunction<TInputContext, TContext, TMeta> = (opts: {
|
|
34
50
|
ctx: TInputContext;
|
|
35
51
|
type: ProcedureType;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { assertNotBrowser } from '../../assertNotBrowser';
|
|
3
|
+
import { TRPCError } from '../../error/TRPCError';
|
|
4
|
+
import { getCauseFromUnknown, getErrorFromUnknown } from '../../error/utils';
|
|
5
|
+
import { InferLast } from '../../types';
|
|
4
6
|
import { ProcedureType } from '../router';
|
|
5
|
-
import { InferLast } from '../types';
|
|
6
|
-
import { getCauseFromUnknown, getErrorFromUnknown } from './errors';
|
|
7
7
|
import {
|
|
8
8
|
MiddlewareFunction,
|
|
9
9
|
MiddlewareResult,
|
|
@@ -58,6 +58,7 @@ interface ProcedureOptions<TContext, TMeta, TInput, TOutput, TParsedOutput> {
|
|
|
58
58
|
|
|
59
59
|
/**
|
|
60
60
|
* @internal
|
|
61
|
+
* @deprecated
|
|
61
62
|
*/
|
|
62
63
|
export interface ProcedureCallOptions<TContext> {
|
|
63
64
|
ctx: TContext;
|
|
@@ -101,6 +102,7 @@ function getParseFn<T>(procedureParser: ProcedureParser<T>): ParseFn<T> {
|
|
|
101
102
|
|
|
102
103
|
/**
|
|
103
104
|
* @internal
|
|
105
|
+
* @deprecated
|
|
104
106
|
*/
|
|
105
107
|
export class Procedure<
|
|
106
108
|
TInputContext,
|
|
@@ -138,6 +140,16 @@ export class Procedure<
|
|
|
138
140
|
this.meta = opts.meta;
|
|
139
141
|
}
|
|
140
142
|
|
|
143
|
+
public _def() {
|
|
144
|
+
return {
|
|
145
|
+
middlewares: this.middlewares,
|
|
146
|
+
resolver: this.resolver,
|
|
147
|
+
inputParser: this.inputParser,
|
|
148
|
+
outputParser: this.outputParser,
|
|
149
|
+
meta: this.meta,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
|
|
141
153
|
private async parseInput(rawInput: unknown): Promise<TParsedInput> {
|
|
142
154
|
try {
|
|
143
155
|
return await this.parseInputFn(rawInput);
|