@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.
Files changed (210) hide show
  1. package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.d.ts +1 -1
  2. package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.dev.js +100 -20
  3. package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.prod.js +100 -20
  4. package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.esm.js +99 -19
  5. package/adapters/aws-lambda/index.d.ts +1 -0
  6. package/adapters/aws-lambda/index.js +1 -0
  7. package/adapters/lambda/dist/trpc-server-adapters-lambda.cjs.d.ts +1 -0
  8. package/adapters/lambda/dist/trpc-server-adapters-lambda.cjs.dev.js +25 -0
  9. package/adapters/lambda/dist/trpc-server-adapters-lambda.cjs.js +7 -0
  10. package/adapters/lambda/dist/trpc-server-adapters-lambda.cjs.prod.js +25 -0
  11. package/adapters/lambda/dist/trpc-server-adapters-lambda.esm.js +21 -0
  12. package/dist/{TRPCError-ddec3395.js → TRPCError-9050a68d.js} +0 -0
  13. package/dist/{TRPCError-7971540a.mjs → TRPCError-b7fa0c31.mjs} +0 -0
  14. package/dist/adapters/aws-lambda/index.d.ts +14 -0
  15. package/dist/adapters/aws-lambda/index.d.ts.map +1 -0
  16. package/dist/adapters/aws-lambda/utils.d.ts +34 -0
  17. package/dist/adapters/aws-lambda/utils.d.ts.map +1 -0
  18. package/dist/adapters/express.d.ts +1 -1
  19. package/dist/adapters/express.d.ts.map +1 -1
  20. package/dist/adapters/express.js +5 -5
  21. package/dist/adapters/express.mjs +5 -5
  22. package/dist/adapters/fastify/fastifyRequestHandler.d.ts +1 -1
  23. package/dist/adapters/fastify/fastifyRequestHandler.d.ts.map +1 -1
  24. package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts +1 -1
  25. package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts.map +1 -1
  26. package/dist/adapters/fastify/index.js +4 -4
  27. package/dist/adapters/fastify/index.mjs +4 -4
  28. package/dist/adapters/fetch/fetchRequestHandler.d.ts +1 -1
  29. package/dist/adapters/fetch/fetchRequestHandler.d.ts.map +1 -1
  30. package/dist/adapters/fetch/index.js +4 -4
  31. package/dist/adapters/fetch/index.mjs +4 -4
  32. package/dist/adapters/fetch/types.d.ts +1 -1
  33. package/dist/adapters/fetch/types.d.ts.map +1 -1
  34. package/dist/adapters/lambda/index.d.ts +12 -0
  35. package/dist/adapters/lambda/index.d.ts.map +1 -0
  36. package/dist/adapters/next.d.ts +1 -1
  37. package/dist/adapters/next.d.ts.map +1 -1
  38. package/dist/adapters/next.js +5 -5
  39. package/dist/adapters/next.mjs +5 -5
  40. package/dist/adapters/node-http/index.js +5 -5
  41. package/dist/adapters/node-http/index.mjs +5 -5
  42. package/dist/adapters/node-http/internals/getPostBody.d.ts +1 -1
  43. package/dist/adapters/node-http/internals/getPostBody.d.ts.map +1 -1
  44. package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts +1 -1
  45. package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts.map +1 -1
  46. package/dist/adapters/node-http/types.d.ts +3 -2
  47. package/dist/adapters/node-http/types.d.ts.map +1 -1
  48. package/dist/adapters/standalone.d.ts +2 -2
  49. package/dist/adapters/standalone.d.ts.map +1 -1
  50. package/dist/adapters/standalone.js +5 -5
  51. package/dist/adapters/standalone.mjs +5 -5
  52. package/dist/adapters/ws.d.ts +3 -2
  53. package/dist/adapters/ws.d.ts.map +1 -1
  54. package/dist/adapters/ws.js +4 -9
  55. package/dist/adapters/ws.mjs +4 -9
  56. package/dist/core/index.d.ts +5 -0
  57. package/dist/core/index.d.ts.map +1 -0
  58. package/dist/core/initTRPC.d.ts +82 -0
  59. package/dist/core/initTRPC.d.ts.map +1 -0
  60. package/dist/core/internals/__generated__/mergeRoutersGeneric.d.ts +262 -0
  61. package/dist/core/internals/__generated__/mergeRoutersGeneric.d.ts.map +1 -0
  62. package/dist/core/internals/config.d.ts +38 -0
  63. package/dist/core/internals/config.d.ts.map +1 -0
  64. package/dist/core/internals/getParseFn.d.ts +9 -0
  65. package/dist/core/internals/getParseFn.d.ts.map +1 -0
  66. package/dist/core/internals/internalProcedure.d.ts +61 -0
  67. package/dist/core/internals/internalProcedure.d.ts.map +1 -0
  68. package/dist/core/internals/mergeRouters.d.ts +3 -0
  69. package/dist/core/internals/mergeRouters.d.ts.map +1 -0
  70. package/dist/core/internals/mergeRoutersGeneric.d.ts +21 -0
  71. package/dist/core/internals/mergeRoutersGeneric.d.ts.map +1 -0
  72. package/dist/core/internals/mergeWithoutOverrides.d.ts +5 -0
  73. package/dist/core/internals/mergeWithoutOverrides.d.ts.map +1 -0
  74. package/dist/core/internals/omitPrototype.d.ts +6 -0
  75. package/dist/core/internals/omitPrototype.d.ts.map +1 -0
  76. package/dist/core/internals/procedureBuilder.d.ts +72 -0
  77. package/dist/core/internals/procedureBuilder.d.ts.map +1 -0
  78. package/dist/core/internals/utils.d.ts +44 -0
  79. package/dist/core/internals/utils.d.ts.map +1 -0
  80. package/dist/core/middleware.d.ts +78 -0
  81. package/dist/core/middleware.d.ts.map +1 -0
  82. package/dist/core/parser.d.ts +25 -0
  83. package/dist/core/parser.d.ts.map +1 -0
  84. package/dist/core/procedure.d.ts +57 -0
  85. package/dist/core/procedure.d.ts.map +1 -0
  86. package/dist/core/router.d.ts +122 -0
  87. package/dist/core/router.d.ts.map +1 -0
  88. package/dist/core/types.d.ts +17 -0
  89. package/dist/core/types.d.ts.map +1 -0
  90. package/dist/{internals → deprecated/internals}/callProcedure.d.ts +4 -1
  91. package/dist/deprecated/internals/callProcedure.d.ts.map +1 -0
  92. package/dist/{internals → deprecated/internals}/middlewares.d.ts +16 -1
  93. package/dist/deprecated/internals/middlewares.d.ts.map +1 -0
  94. package/dist/{internals → deprecated/internals}/procedure.d.ts +10 -1
  95. package/dist/deprecated/internals/procedure.d.ts.map +1 -0
  96. package/dist/deprecated/interop.d.ts +34 -0
  97. package/dist/deprecated/interop.d.ts.map +1 -0
  98. package/dist/{router.d.ts → deprecated/router.d.ts} +27 -6
  99. package/dist/deprecated/router.d.ts.map +1 -0
  100. package/dist/{envelopes-1deb2fa7.mjs → envelopes-af8c2959.mjs} +12 -1
  101. package/dist/{envelopes-a953b930.js → envelopes-b6dd0367.js} +11 -1
  102. package/dist/{TRPCError.d.ts → error/TRPCError.d.ts} +2 -2
  103. package/dist/error/TRPCError.d.ts.map +1 -0
  104. package/dist/error/formatter.d.ts +33 -0
  105. package/dist/error/formatter.d.ts.map +1 -0
  106. package/dist/{internals/errors.d.ts → error/utils.d.ts} +2 -2
  107. package/dist/error/utils.d.ts.map +1 -0
  108. package/dist/http/index.d.ts +1 -1
  109. package/dist/http/index.d.ts.map +1 -1
  110. package/dist/http/internals/getHTTPStatusCode.d.ts +1 -1
  111. package/dist/http/internals/getHTTPStatusCode.d.ts.map +1 -1
  112. package/dist/http/internals/types.d.ts +10 -8
  113. package/dist/http/internals/types.d.ts.map +1 -1
  114. package/dist/http/resolveHTTPResponse.d.ts +2 -2
  115. package/dist/http/resolveHTTPResponse.d.ts.map +1 -1
  116. package/dist/http/{responseMeta.d.ts → types.d.ts} +1 -1
  117. package/dist/http/types.d.ts.map +1 -0
  118. package/dist/index.d.ts +3 -2
  119. package/dist/index.d.ts.map +1 -1
  120. package/dist/index.js +711 -30
  121. package/dist/index.mjs +711 -32
  122. package/dist/internals/transformTRPCResponse.d.ts +1 -1
  123. package/dist/internals/transformTRPCResponse.d.ts.map +1 -1
  124. package/dist/internals/types.d.ts +23 -0
  125. package/dist/internals/types.d.ts.map +1 -0
  126. package/dist/{nodeHTTPRequestHandler-1cdb6383.mjs → nodeHTTPRequestHandler-174459c5.mjs} +2 -2
  127. package/dist/{nodeHTTPRequestHandler-848f07b5.js → nodeHTTPRequestHandler-6b7c8622.js} +2 -2
  128. package/dist/{resolveHTTPResponse-54a79e6c.mjs → resolveHTTPResponse-8657b8de.mjs} +16 -10
  129. package/dist/{resolveHTTPResponse-ec3dccaa.js → resolveHTTPResponse-fcc8f644.js} +17 -11
  130. package/dist/rpc/envelopes.d.ts +1 -1
  131. package/dist/rpc/envelopes.d.ts.map +1 -1
  132. package/dist/rpc/index.js +1 -1
  133. package/dist/rpc/index.mjs +1 -1
  134. package/dist/rpc/internals/invert.d.ts +18 -0
  135. package/dist/rpc/internals/invert.d.ts.map +1 -0
  136. package/dist/subscription.js +1 -1
  137. package/dist/subscription.mjs +1 -1
  138. package/dist/{transformTRPCResponse-333bed6c.js → transformTRPCResponse-0c261655.js} +0 -27
  139. package/dist/{transformTRPCResponse-e0cba527.mjs → transformTRPCResponse-747b9a68.mjs} +1 -27
  140. package/dist/transformer.d.ts +14 -0
  141. package/dist/transformer.d.ts.map +1 -1
  142. package/dist/types.d.ts +9 -0
  143. package/dist/types.d.ts.map +1 -1
  144. package/package.json +12 -4
  145. package/src/adapters/aws-lambda/index.ts +156 -0
  146. package/src/adapters/aws-lambda/utils.ts +91 -0
  147. package/src/adapters/express.ts +1 -1
  148. package/src/adapters/fastify/fastifyRequestHandler.ts +1 -1
  149. package/src/adapters/fastify/fastifyTRPCPlugin.ts +2 -2
  150. package/src/adapters/fetch/fetchRequestHandler.ts +1 -1
  151. package/src/adapters/fetch/types.ts +1 -1
  152. package/src/adapters/lambda/index.ts +18 -0
  153. package/src/adapters/next.ts +2 -2
  154. package/src/adapters/node-http/internals/getPostBody.ts +1 -1
  155. package/src/adapters/node-http/nodeHTTPRequestHandler.ts +3 -2
  156. package/src/adapters/node-http/types.ts +5 -2
  157. package/src/adapters/standalone.ts +1 -1
  158. package/src/adapters/ws.ts +7 -12
  159. package/src/core/index.ts +5 -0
  160. package/src/core/initTRPC.ts +90 -0
  161. package/src/core/internals/__generated__/mergeRoutersGeneric.ts +366 -0
  162. package/src/core/internals/config.ts +44 -0
  163. package/src/core/internals/getParseFn.ts +47 -0
  164. package/src/core/internals/internalProcedure.ts +265 -0
  165. package/src/core/internals/mergeRouters.ts +57 -0
  166. package/src/core/internals/mergeRoutersGeneric.ts +35 -0
  167. package/src/core/internals/mergeWithoutOverrides.ts +19 -0
  168. package/src/core/internals/omitPrototype.ts +9 -0
  169. package/src/core/internals/procedureBuilder.ts +101 -0
  170. package/src/core/internals/utils.ts +64 -0
  171. package/src/core/middleware.ts +93 -0
  172. package/src/core/parser.ts +45 -0
  173. package/src/core/procedure.ts +72 -0
  174. package/src/core/router.ts +358 -0
  175. package/src/core/types.ts +37 -0
  176. package/src/{internals → deprecated/internals}/callProcedure.ts +4 -1
  177. package/src/{internals → deprecated/internals}/middlewares.ts +17 -1
  178. package/src/{internals → deprecated/internals}/procedure.ts +16 -4
  179. package/src/deprecated/interop.ts +169 -0
  180. package/src/{router.ts → deprecated/router.ts} +51 -24
  181. package/src/{TRPCError.ts → error/TRPCError.ts} +3 -3
  182. package/src/error/formatter.ts +51 -0
  183. package/src/{internals/errors.ts → error/utils.ts} +1 -1
  184. package/src/http/index.ts +1 -1
  185. package/src/http/internals/getHTTPStatusCode.ts +1 -1
  186. package/src/http/internals/types.ts +10 -12
  187. package/src/http/resolveHTTPResponse.ts +7 -12
  188. package/src/http/{responseMeta.ts → types.ts} +0 -0
  189. package/src/index.ts +3 -2
  190. package/src/internals/transformTRPCResponse.ts +1 -1
  191. package/src/internals/types.ts +24 -0
  192. package/src/rpc/codes.ts +1 -1
  193. package/src/rpc/envelopes.ts +1 -1
  194. package/src/rpc/internals/invert.ts +27 -0
  195. package/src/subscription.ts +1 -1
  196. package/src/transformer.ts +28 -0
  197. package/src/types.ts +12 -0
  198. package/dist/TRPCError.d.ts.map +0 -1
  199. package/dist/http/responseMeta.d.ts.map +0 -1
  200. package/dist/internals/baseHandlerOptions.d.ts +0 -13
  201. package/dist/internals/baseHandlerOptions.d.ts.map +0 -1
  202. package/dist/internals/callProcedure.d.ts.map +0 -1
  203. package/dist/internals/errors.d.ts.map +0 -1
  204. package/dist/internals/middlewares.d.ts.map +0 -1
  205. package/dist/internals/onErrorFunction.d.ts +0 -11
  206. package/dist/internals/onErrorFunction.d.ts.map +0 -1
  207. package/dist/internals/procedure.d.ts.map +0 -1
  208. package/dist/router.d.ts.map +0 -1
  209. package/src/internals/baseHandlerOptions.ts +0 -13
  210. 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 '../observable';
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 '../TRPCError';
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 { TRPCError } from '../TRPCError';
3
- import { assertNotBrowser } from '../assertNotBrowser';
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);