@trpc/server 10.43.0 → 11.0.0-next.91

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 (164) hide show
  1. package/dist/adapters/aws-lambda/index.d.ts.map +1 -1
  2. package/dist/adapters/aws-lambda/index.js +6 -4
  3. package/dist/adapters/aws-lambda/index.mjs +6 -4
  4. package/dist/adapters/aws-lambda/utils.d.ts +3 -1
  5. package/dist/adapters/aws-lambda/utils.d.ts.map +1 -1
  6. package/dist/adapters/express.js +4 -3
  7. package/dist/adapters/express.mjs +4 -3
  8. package/dist/adapters/fastify/fastifyRequestHandler.d.ts.map +1 -1
  9. package/dist/adapters/fastify/index.js +8 -5
  10. package/dist/adapters/fastify/index.mjs +8 -5
  11. package/dist/adapters/fetch/fetchRequestHandler.d.ts.map +1 -1
  12. package/dist/adapters/fetch/index.js +6 -4
  13. package/dist/adapters/fetch/index.mjs +6 -4
  14. package/dist/adapters/fetch/types.d.ts +2 -1
  15. package/dist/adapters/fetch/types.d.ts.map +1 -1
  16. package/dist/adapters/next.js +4 -3
  17. package/dist/adapters/next.mjs +4 -3
  18. package/dist/adapters/node-http/index.js +4 -3
  19. package/dist/adapters/node-http/index.mjs +4 -3
  20. package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts.map +1 -1
  21. package/dist/adapters/node-http/types.d.ts +2 -1
  22. package/dist/adapters/node-http/types.d.ts.map +1 -1
  23. package/dist/adapters/standalone.d.ts +1 -6
  24. package/dist/adapters/standalone.d.ts.map +1 -1
  25. package/dist/adapters/standalone.js +8 -19
  26. package/dist/adapters/standalone.mjs +8 -19
  27. package/dist/adapters/ws.d.ts +25 -4
  28. package/dist/adapters/ws.d.ts.map +1 -1
  29. package/dist/adapters/ws.js +67 -14
  30. package/dist/adapters/ws.mjs +58 -6
  31. package/dist/bundle-analysis.json +910 -0
  32. package/dist/config-5de7eae5.js +10 -0
  33. package/dist/config-60fc2667.js +7 -0
  34. package/dist/config-ab4c1c6b.mjs +5 -0
  35. package/dist/core/index.d.ts +1 -1
  36. package/dist/core/index.d.ts.map +1 -1
  37. package/dist/core/initTRPC.d.ts +1 -1
  38. package/dist/core/internals/builderTypes.d.ts +11 -0
  39. package/dist/core/internals/builderTypes.d.ts.map +1 -0
  40. package/dist/core/internals/getParseFn.d.ts +0 -5
  41. package/dist/core/internals/getParseFn.d.ts.map +1 -1
  42. package/dist/core/internals/mergeRouters.d.ts +0 -3
  43. package/dist/core/internals/mergeRouters.d.ts.map +1 -1
  44. package/dist/core/internals/procedureBuilder.d.ts +24 -27
  45. package/dist/core/internals/procedureBuilder.d.ts.map +1 -1
  46. package/dist/core/internals/utils.d.ts +7 -8
  47. package/dist/core/internals/utils.d.ts.map +1 -1
  48. package/dist/core/middleware.d.ts +16 -15
  49. package/dist/core/middleware.d.ts.map +1 -1
  50. package/dist/core/procedure.d.ts +41 -42
  51. package/dist/core/procedure.d.ts.map +1 -1
  52. package/dist/core/router.d.ts +9 -56
  53. package/dist/core/router.d.ts.map +1 -1
  54. package/dist/core/types.d.ts +7 -12
  55. package/dist/core/types.d.ts.map +1 -1
  56. package/dist/http/index.js +3 -2
  57. package/dist/http/index.mjs +3 -2
  58. package/dist/http/resolveHTTPResponse.d.ts +3 -3
  59. package/dist/http/resolveHTTPResponse.d.ts.map +1 -1
  60. package/dist/http/types.d.ts +22 -1
  61. package/dist/http/types.d.ts.map +1 -1
  62. package/dist/index.d.ts +10 -2
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +24 -811
  65. package/dist/index.mjs +15 -802
  66. package/dist/{nodeHTTPRequestHandler-cf01c646.mjs → nodeHTTPRequestHandler-0986c5a1.mjs} +8 -3
  67. package/dist/{nodeHTTPRequestHandler-b7d358fe.js → nodeHTTPRequestHandler-18f3370e.js} +8 -3
  68. package/dist/{nodeHTTPRequestHandler-9781faee.js → nodeHTTPRequestHandler-388f5fce.js} +8 -3
  69. package/dist/{resolveHTTPResponse-68c8befb.mjs → resolveHTTPResponse-55c648bd.mjs} +14 -12
  70. package/dist/{resolveHTTPResponse-79011e44.js → resolveHTTPResponse-5def1b0c.js} +15 -13
  71. package/dist/{resolveHTTPResponse-051b3a40.js → resolveHTTPResponse-8d474952.js} +12 -12
  72. package/dist/{config-3ab6b85e.js → router-3c22fe56.js} +9 -46
  73. package/dist/{config-4c0f8e88.mjs → router-5274e533.mjs} +10 -45
  74. package/dist/{config-f356f2fd.js → router-a1635eab.js} +9 -44
  75. package/dist/rpc/envelopes.d.ts +1 -5
  76. package/dist/rpc/envelopes.d.ts.map +1 -1
  77. package/dist/rpc/index.d.ts +0 -1
  78. package/dist/rpc/index.d.ts.map +1 -1
  79. package/dist/rpc/index.js +0 -2
  80. package/dist/rpc/index.mjs +0 -1
  81. package/dist/shared/getErrorShape.d.ts +1 -1
  82. package/dist/shared/getErrorShape.d.ts.map +1 -1
  83. package/dist/shared/index.d.ts +1 -0
  84. package/dist/shared/index.d.ts.map +1 -1
  85. package/dist/shared/jsonify.d.ts +3 -2
  86. package/dist/shared/jsonify.d.ts.map +1 -1
  87. package/dist/shared/transformTRPCResponse.d.ts +1 -1
  88. package/dist/shared/transformTRPCResponse.d.ts.map +1 -1
  89. package/dist/shared/types.d.ts +6 -0
  90. package/dist/shared/types.d.ts.map +1 -0
  91. package/dist/types.d.ts +5 -0
  92. package/dist/types.d.ts.map +1 -1
  93. package/dist/unstableInternalsExport-10cc2bae.mjs +353 -0
  94. package/dist/unstableInternalsExport-a064a7dd.js +349 -0
  95. package/dist/unstableInternalsExport-bf8496ea.js +363 -0
  96. package/dist/unstableInternalsExport.d.ts +11 -0
  97. package/dist/unstableInternalsExport.d.ts.map +1 -0
  98. package/dist/unstableInternalsExport.js +16 -0
  99. package/dist/unstableInternalsExport.mjs +5 -0
  100. package/package.json +9 -3
  101. package/src/adapters/aws-lambda/index.ts +11 -7
  102. package/src/adapters/aws-lambda/utils.ts +3 -0
  103. package/src/adapters/fastify/fastifyRequestHandler.ts +9 -5
  104. package/src/adapters/fetch/fetchRequestHandler.ts +9 -3
  105. package/src/adapters/fetch/types.ts +2 -1
  106. package/src/adapters/node-http/nodeHTTPRequestHandler.ts +15 -4
  107. package/src/adapters/node-http/types.ts +2 -1
  108. package/src/adapters/standalone.ts +4 -22
  109. package/src/adapters/ws.ts +110 -14
  110. package/src/core/index.ts +1 -0
  111. package/src/core/internals/builderTypes.ts +11 -0
  112. package/src/core/internals/getParseFn.ts +0 -13
  113. package/src/core/internals/mergeRouters.ts +0 -4
  114. package/src/core/internals/procedureBuilder.ts +50 -70
  115. package/src/core/internals/utils.ts +11 -8
  116. package/src/core/middleware.ts +37 -31
  117. package/src/core/procedure.ts +46 -54
  118. package/src/core/router.ts +19 -117
  119. package/src/core/types.ts +11 -20
  120. package/src/http/resolveHTTPResponse.ts +17 -14
  121. package/src/http/types.ts +24 -1
  122. package/src/index.ts +16 -2
  123. package/src/rpc/envelopes.ts +1 -6
  124. package/src/rpc/index.ts +0 -1
  125. package/src/shared/getErrorShape.ts +2 -1
  126. package/src/shared/index.ts +2 -0
  127. package/src/shared/jsonify.ts +9 -5
  128. package/src/shared/transformTRPCResponse.ts +1 -1
  129. package/src/shared/types.ts +9 -0
  130. package/src/types.ts +8 -0
  131. package/src/unstableInternalsExport.ts +10 -0
  132. package/unstableInternalsExport/index.d.ts +1 -0
  133. package/unstableInternalsExport/index.js +1 -0
  134. package/adapters/zodFileSchema/index.d.ts +0 -1
  135. package/adapters/zodFileSchema/index.js +0 -1
  136. package/dist/adapters/lambda/index.d.ts +0 -12
  137. package/dist/adapters/lambda/index.d.ts.map +0 -1
  138. package/dist/deprecated/internals/middlewares.d.ts +0 -52
  139. package/dist/deprecated/internals/middlewares.d.ts.map +0 -1
  140. package/dist/deprecated/internals/procedure.d.ts +0 -96
  141. package/dist/deprecated/internals/procedure.d.ts.map +0 -1
  142. package/dist/deprecated/interop.d.ts +0 -44
  143. package/dist/deprecated/interop.d.ts.map +0 -1
  144. package/dist/deprecated/router.d.ts +0 -204
  145. package/dist/deprecated/router.d.ts.map +0 -1
  146. package/dist/internals.d.ts +0 -10
  147. package/dist/internals.d.ts.map +0 -1
  148. package/dist/parseTRPCMessage-1377f305.js +0 -56
  149. package/dist/parseTRPCMessage-95955211.js +0 -63
  150. package/dist/parseTRPCMessage-a0f17853.mjs +0 -54
  151. package/dist/rpc/parseTRPCMessage.d.ts +0 -5
  152. package/dist/rpc/parseTRPCMessage.d.ts.map +0 -1
  153. package/dist/subscription.d.ts +0 -13
  154. package/dist/subscription.d.ts.map +0 -1
  155. package/dist/subscription.js +0 -38
  156. package/dist/subscription.mjs +0 -34
  157. package/src/adapters/lambda/index.ts +0 -18
  158. package/src/deprecated/internals/middlewares.ts +0 -61
  159. package/src/deprecated/internals/procedure.ts +0 -411
  160. package/src/deprecated/interop.ts +0 -232
  161. package/src/deprecated/router.ts +0 -945
  162. package/src/internals.ts +0 -12
  163. package/src/rpc/parseTRPCMessage.ts +0 -84
  164. package/src/subscription.ts +0 -43
@@ -11,66 +11,51 @@ import { inferParser, Parser } from '../parser';
11
11
  import {
12
12
  AnyMutationProcedure,
13
13
  AnyProcedure,
14
+ AnyProcedureParams,
14
15
  AnyQueryProcedure,
15
16
  AnySubscriptionProcedure,
16
- Procedure,
17
+ MutationProcedure,
17
18
  ProcedureParams,
19
+ QueryProcedure,
20
+ SubscriptionProcedure,
18
21
  } from '../procedure';
19
22
  import { ProcedureType } from '../types';
23
+ import { AnyProcedureBuilderParams } from './builderTypes';
20
24
  import { AnyRootConfig } from './config';
21
25
  import { getParseFn } from './getParseFn';
22
26
  import { mergeWithoutOverrides } from './mergeWithoutOverrides';
23
27
  import {
24
- DefaultValue as FallbackValue,
28
+ DefaultValue,
29
+ GetRawInputFn,
25
30
  middlewareMarker,
26
31
  Overwrite,
27
- OverwriteKnown,
28
32
  ResolveOptions,
29
33
  UnsetMarker,
30
34
  } from './utils';
31
35
 
32
36
  type CreateProcedureReturnInput<
33
- TPrev extends ProcedureParams,
34
- TNext extends ProcedureParams,
37
+ TPrev extends ProcedureParams<AnyProcedureParams>,
38
+ TNext extends ProcedureParams<AnyProcedureParams>,
35
39
  > = ProcedureBuilder<{
36
40
  _config: TPrev['_config'];
37
41
  _meta: TPrev['_meta'];
38
42
  _ctx_out: Overwrite<TPrev['_ctx_out'], TNext['_ctx_out']>;
39
- _input_in: FallbackValue<TNext['_input_in'], TPrev['_input_in']>;
43
+ _input_in: DefaultValue<TNext['_input_in'], TPrev['_input_in']>;
40
44
  _input_out: UnsetMarker extends TNext['_input_out']
41
45
  ? TPrev['_input_out']
42
46
  : Overwrite<TPrev['_input_out'], TNext['_input_out']>;
43
- _output_in: FallbackValue<TNext['_output_in'], TPrev['_output_in']>;
44
- _output_out: FallbackValue<TNext['_output_out'], TPrev['_output_out']>;
47
+ _output_in: DefaultValue<TNext['_output_in'], TPrev['_output_in']>;
48
+ _output_out: DefaultValue<TNext['_output_out'], TPrev['_output_out']>;
45
49
  }>;
46
50
 
47
- /**
48
- * @internal
49
- */
50
- export interface BuildProcedure<
51
- TType extends ProcedureType,
52
- TParams extends ProcedureParams,
53
- TOutput,
54
- > extends Procedure<
55
- TType,
56
- UnsetMarker extends TParams['_output_out']
57
- ? OverwriteKnown<
58
- TParams,
59
- {
60
- _output_in: TOutput;
61
- _output_out: TOutput;
62
- }
63
- >
64
- : TParams
65
- > {}
66
-
67
51
  type OverwriteIfDefined<TType, TWith> = UnsetMarker extends TType
68
52
  ? TWith
69
53
  : Simplify<TType & TWith>;
70
54
 
71
55
  type ErrorMessage<TMessage extends string> = TMessage;
72
56
 
73
- export type ProcedureBuilderDef<TParams extends ProcedureParams> = {
57
+ export type ProcedureBuilderDef<TParams extends AnyProcedureBuilderParams> = {
58
+ procedure: true;
74
59
  inputs: Parser[];
75
60
  output?: Parser;
76
61
  meta?: TParams['_meta'];
@@ -83,7 +68,7 @@ export type ProcedureBuilderDef<TParams extends ProcedureParams> = {
83
68
 
84
69
  export type AnyProcedureBuilderDef = ProcedureBuilderDef<any>;
85
70
 
86
- export interface ProcedureBuilder<TParams extends ProcedureParams> {
71
+ export interface ProcedureBuilder<TParams extends AnyProcedureBuilderParams> {
87
72
  /**
88
73
  * Add an input parser to the procedure.
89
74
  */
@@ -136,28 +121,22 @@ export interface ProcedureBuilder<TParams extends ProcedureParams> {
136
121
  /**
137
122
  * Add a middleware to the procedure.
138
123
  */
139
- use<$Params extends ProcedureParams>(
124
+ use<$Params extends ProcedureParams<AnyProcedureParams>>(
140
125
  fn:
141
126
  | MiddlewareBuilder<TParams, $Params>
142
127
  | MiddlewareFunction<TParams, $Params>,
143
128
  ): CreateProcedureReturnInput<TParams, $Params>;
144
- /**
145
- * Extend the procedure with another procedure.
146
- * @warning The TypeScript inference fails when chaining concatenated procedures.
147
- */
148
- unstable_concat<$ProcedureBuilder extends AnyProcedureBuilder>(
149
- proc: $ProcedureBuilder,
150
- ): $ProcedureBuilder extends ProcedureBuilder<infer $TParams>
151
- ? CreateProcedureReturnInput<TParams, $TParams>
152
- : never;
153
129
  /**
154
130
  * Query procedure
155
131
  */
156
132
  query<$Output>(
157
133
  resolver: (
158
134
  opts: ResolveOptions<TParams>,
159
- ) => MaybePromise<FallbackValue<TParams['_output_in'], $Output>>,
160
- ): BuildProcedure<'query', TParams, $Output>;
135
+ ) => MaybePromise<DefaultValue<TParams['_output_in'], $Output>>,
136
+ ): QueryProcedure<{
137
+ input: DefaultValue<TParams['_input_in'], void>;
138
+ output: DefaultValue<TParams['_output_out'], $Output>;
139
+ }>;
161
140
 
162
141
  /**
163
142
  * Mutation procedure
@@ -165,8 +144,11 @@ export interface ProcedureBuilder<TParams extends ProcedureParams> {
165
144
  mutation<$Output>(
166
145
  resolver: (
167
146
  opts: ResolveOptions<TParams>,
168
- ) => MaybePromise<FallbackValue<TParams['_output_in'], $Output>>,
169
- ): BuildProcedure<'mutation', TParams, $Output>;
147
+ ) => MaybePromise<DefaultValue<TParams['_output_in'], $Output>>,
148
+ ): MutationProcedure<{
149
+ input: DefaultValue<TParams['_input_in'], void>;
150
+ output: DefaultValue<TParams['_output_out'], $Output>;
151
+ }>;
170
152
 
171
153
  /**
172
154
  * Mutation procedure
@@ -174,8 +156,11 @@ export interface ProcedureBuilder<TParams extends ProcedureParams> {
174
156
  subscription<$Output>(
175
157
  resolver: (
176
158
  opts: ResolveOptions<TParams>,
177
- ) => MaybePromise<FallbackValue<TParams['_output_in'], $Output>>,
178
- ): BuildProcedure<'subscription', TParams, $Output>;
159
+ ) => MaybePromise<DefaultValue<TParams['_output_in'], $Output>>,
160
+ ): SubscriptionProcedure<{
161
+ input: DefaultValue<TParams['_input_in'], void>;
162
+ output: DefaultValue<TParams['_output_out'], $Output>;
163
+ }>;
179
164
  /**
180
165
  * @internal
181
166
  */
@@ -217,6 +202,7 @@ export function createBuilder<TConfig extends AnyRootConfig>(
217
202
  _meta: TConfig['$types']['meta'];
218
203
  }> {
219
204
  const _def: AnyProcedureBuilderDef = {
205
+ procedure: true,
220
206
  inputs: [],
221
207
  middlewares: [],
222
208
  ...initDef,
@@ -243,13 +229,6 @@ export function createBuilder<TConfig extends AnyRootConfig>(
243
229
  meta: meta as Record<string, unknown>,
244
230
  }) as AnyProcedureBuilder;
245
231
  },
246
- /**
247
- * @deprecated
248
- * This functionality is deprecated and will be removed in the next major version.
249
- */
250
- unstable_concat(builder) {
251
- return createNewBuilder(_def, builder._def) as any;
252
- },
253
232
  use(middlewareBuilderOrFn) {
254
233
  // Distinguish between a middleware builder and a middleware function
255
234
  const middlewares =
@@ -263,19 +242,19 @@ export function createBuilder<TConfig extends AnyRootConfig>(
263
242
  },
264
243
  query(resolver) {
265
244
  return createResolver(
266
- { ..._def, query: true },
245
+ { ..._def, type: 'query' },
267
246
  resolver,
268
247
  ) as AnyQueryProcedure;
269
248
  },
270
249
  mutation(resolver) {
271
250
  return createResolver(
272
- { ..._def, mutation: true },
251
+ { ..._def, type: 'mutation' },
273
252
  resolver,
274
253
  ) as AnyMutationProcedure;
275
254
  },
276
255
  subscription(resolver) {
277
256
  return createResolver(
278
- { ..._def, subscription: true },
257
+ { ..._def, type: 'subscription' },
279
258
  resolver,
280
259
  ) as AnySubscriptionProcedure;
281
260
  },
@@ -283,7 +262,7 @@ export function createBuilder<TConfig extends AnyRootConfig>(
283
262
  }
284
263
 
285
264
  function createResolver(
286
- _def: AnyProcedureBuilderDef,
265
+ _def: AnyProcedureBuilderDef & { type: ProcedureType },
287
266
  resolver: (opts: ResolveOptions<any>) => MaybePromise<any>,
288
267
  ) {
289
268
  const finalBuilder = createNewBuilder(_def, {
@@ -309,7 +288,7 @@ function createResolver(
309
288
  */
310
289
  export interface ProcedureCallOptions {
311
290
  ctx: unknown;
312
- rawInput: unknown;
291
+ getRawInput: GetRawInputFn;
313
292
  input?: unknown;
314
293
  path: string;
315
294
  type: ProcedureType;
@@ -327,9 +306,9 @@ const result = await caller.call('myProcedure', input);
327
306
  `.trim();
328
307
 
329
308
  function createProcedureCaller(_def: AnyProcedureBuilderDef): AnyProcedure {
330
- const procedure = async function resolve(opts: ProcedureCallOptions) {
309
+ async function procedure(opts: ProcedureCallOptions) {
331
310
  // is direct server-side call
332
- if (!opts || !('rawInput' in opts)) {
311
+ if (!opts || !('getRawInput' in opts)) {
333
312
  throw new Error(codeblock);
334
313
  }
335
314
 
@@ -339,7 +318,7 @@ function createProcedureCaller(_def: AnyProcedureBuilderDef): AnyProcedure {
339
318
  ctx: any;
340
319
  index: number;
341
320
  input?: unknown;
342
- rawInput?: unknown;
321
+ getRawInput?: GetRawInputFn;
343
322
  } = {
344
323
  index: 0,
345
324
  ctx: opts.ctx,
@@ -352,7 +331,7 @@ function createProcedureCaller(_def: AnyProcedureBuilderDef): AnyProcedure {
352
331
  ctx: callOpts.ctx,
353
332
  type: opts.type,
354
333
  path: opts.path,
355
- rawInput: callOpts.rawInput ?? opts.rawInput,
334
+ getRawInput: callOpts.getRawInput ?? opts.getRawInput,
356
335
  meta: _def.meta,
357
336
  input: callOpts.input,
358
337
  next(_nextOpts?: any) {
@@ -360,7 +339,7 @@ function createProcedureCaller(_def: AnyProcedureBuilderDef): AnyProcedure {
360
339
  | {
361
340
  ctx?: Record<string, unknown>;
362
341
  input?: unknown;
363
- rawInput?: unknown;
342
+ getRawInput?: GetRawInputFn;
364
343
  }
365
344
  | undefined;
366
345
 
@@ -374,10 +353,10 @@ function createProcedureCaller(_def: AnyProcedureBuilderDef): AnyProcedure {
374
353
  nextOpts && 'input' in nextOpts
375
354
  ? nextOpts.input
376
355
  : callOpts.input,
377
- rawInput:
378
- nextOpts && 'rawInput' in nextOpts
379
- ? nextOpts.rawInput
380
- : callOpts.rawInput,
356
+ getRawInput:
357
+ nextOpts && 'getRawInput' in nextOpts
358
+ ? nextOpts.getRawInput
359
+ : callOpts.getRawInput,
381
360
  });
382
361
  },
383
362
  });
@@ -406,9 +385,10 @@ function createProcedureCaller(_def: AnyProcedureBuilderDef): AnyProcedure {
406
385
  throw result.error;
407
386
  }
408
387
  return result.data;
409
- };
388
+ }
389
+
410
390
  procedure._def = _def;
411
- procedure.meta = _def.meta;
412
391
 
413
- return procedure as AnyProcedure;
392
+ // FIXME typecast shouldn't be needed - fixittt
393
+ return procedure as unknown as AnyProcedure;
414
394
  }
@@ -1,5 +1,5 @@
1
1
  import { Simplify } from '../../types';
2
- import { ProcedureParams } from '../procedure';
2
+ import { AnyProcedureParams, ProcedureParams } from '../procedure';
3
3
 
4
4
  /**
5
5
  * @internal
@@ -15,12 +15,7 @@ export type Overwrite<TType, TWith> = TType extends any
15
15
  }
16
16
  : never
17
17
  : never;
18
- /**
19
- * @internal
20
- */
21
- export type OverwriteKnown<TType, TWith> = {
22
- [K in keyof TType]: K extends keyof TWith ? TWith[K] : TType[K];
23
- };
18
+
24
19
  /**
25
20
  * @internal
26
21
  */
@@ -52,7 +47,9 @@ export type UnsetMarker = typeof unsetMarker;
52
47
  /**
53
48
  * @internal
54
49
  */
55
- export interface ResolveOptions<TParams extends ProcedureParams> {
50
+ export interface ResolveOptions<
51
+ TParams extends ProcedureParams<AnyProcedureParams>,
52
+ > {
56
53
  ctx: Simplify<
57
54
  Overwrite<TParams['_config']['$types']['ctx'], TParams['_ctx_out']>
58
55
  >;
@@ -79,3 +76,9 @@ export type PickFirstDefined<TType, TPick> = undefined extends TType
79
76
  ? never
80
77
  : TPick
81
78
  : TType;
79
+
80
+ /**
81
+ * @internal
82
+ * Returns the raw input type of a procedure
83
+ */
84
+ export type GetRawInputFn = () => Promise<unknown>;
@@ -5,11 +5,12 @@ import { ParseFn } from './internals/getParseFn';
5
5
  import { ProcedureBuilderMiddleware } from './internals/procedureBuilder';
6
6
  import {
7
7
  DefaultValue as FallbackValue,
8
+ GetRawInputFn,
8
9
  MiddlewareMarker,
9
10
  Overwrite,
10
11
  UnsetMarker,
11
12
  } from './internals/utils';
12
- import { ProcedureParams } from './procedure';
13
+ import { AnyProcedureParams, ProcedureParams } from './procedure';
13
14
  import { ProcedureType } from './types';
14
15
 
15
16
  /**
@@ -26,8 +27,9 @@ interface MiddlewareResultBase {
26
27
  /**
27
28
  * @internal
28
29
  */
29
- interface MiddlewareOKResult<_TParams extends ProcedureParams>
30
- extends MiddlewareResultBase {
30
+ interface MiddlewareOKResult<
31
+ _TParams extends ProcedureParams<AnyProcedureParams>,
32
+ > extends MiddlewareResultBase {
31
33
  ok: true;
32
34
  data: unknown;
33
35
  // this could be extended with `input`/`rawInput` later
@@ -36,8 +38,9 @@ interface MiddlewareOKResult<_TParams extends ProcedureParams>
36
38
  /**
37
39
  * @internal
38
40
  */
39
- interface MiddlewareErrorResult<_TParams extends ProcedureParams>
40
- extends MiddlewareResultBase {
41
+ interface MiddlewareErrorResult<
42
+ _TParams extends ProcedureParams<AnyProcedureParams>,
43
+ > extends MiddlewareResultBase {
41
44
  ok: false;
42
45
  error: TRPCError;
43
46
  }
@@ -45,21 +48,21 @@ interface MiddlewareErrorResult<_TParams extends ProcedureParams>
45
48
  /**
46
49
  * @internal
47
50
  */
48
- export type MiddlewareResult<TParams extends ProcedureParams> =
49
- | MiddlewareErrorResult<TParams>
50
- | MiddlewareOKResult<TParams>;
51
+ export type MiddlewareResult<
52
+ TParams extends ProcedureParams<AnyProcedureParams>,
53
+ > = MiddlewareErrorResult<TParams> | MiddlewareOKResult<TParams>;
51
54
 
52
55
  /**
53
56
  * @internal
54
57
  */
55
58
  export interface MiddlewareBuilder<
56
- TRoot extends ProcedureParams,
57
- TNewParams extends ProcedureParams,
59
+ TRoot extends ProcedureParams<AnyProcedureParams>,
60
+ TNewParams extends ProcedureParams<AnyProcedureParams>,
58
61
  > {
59
62
  /**
60
63
  * Create a new builder based on the current middleware builder
61
64
  */
62
- unstable_pipe<$Params extends ProcedureParams>(
65
+ unstable_pipe<$Params extends ProcedureParams<AnyProcedureParams>>(
63
66
  fn: {
64
67
  _config: TRoot['_config'];
65
68
  _meta: TRoot['_meta'];
@@ -73,7 +76,7 @@ export interface MiddlewareBuilder<
73
76
  TRoot['_output_out'],
74
77
  TNewParams['_output_out']
75
78
  >;
76
- } extends infer OParams extends ProcedureParams
79
+ } extends infer OParams extends ProcedureParams<AnyProcedureParams>
77
80
  ?
78
81
  | MiddlewareBuilder<OParams, $Params>
79
82
  | MiddlewareFunction<OParams, $Params>
@@ -95,9 +98,9 @@ export interface MiddlewareBuilder<
95
98
  * FIXME: there must be a nicer way of doing this, it's hard to maintain when we have several structures like this
96
99
  */
97
100
  type CreateMiddlewareReturnInput<
98
- TRoot extends ProcedureParams,
99
- TPrev extends ProcedureParams,
100
- TNext extends ProcedureParams,
101
+ TRoot extends ProcedureParams<AnyProcedureParams>,
102
+ TPrev extends ProcedureParams<AnyProcedureParams>,
103
+ TNext extends ProcedureParams<AnyProcedureParams>,
101
104
  > = MiddlewareBuilder<
102
105
  TRoot,
103
106
  {
@@ -133,8 +136,8 @@ type deriveParamsFromConfig<
133
136
  * @internal
134
137
  */
135
138
  export type MiddlewareFunction<
136
- TParams extends ProcedureParams,
137
- TParamsAfter extends ProcedureParams,
139
+ TParams extends ProcedureParams<AnyProcedureParams>,
140
+ TParamsAfter extends ProcedureParams<AnyProcedureParams>,
138
141
  > = {
139
142
  (opts: {
140
143
  ctx: Simplify<
@@ -143,11 +146,11 @@ export type MiddlewareFunction<
143
146
  type: ProcedureType;
144
147
  path: string;
145
148
  input: TParams['_input_out'];
146
- rawInput: unknown;
149
+ getRawInput: GetRawInputFn;
147
150
  meta: TParams['_meta'] | undefined;
148
151
  next: {
149
152
  (): Promise<MiddlewareResult<TParams>>;
150
- <$Context>(opts: { ctx: $Context }): Promise<
153
+ <$Context>(opts: { ctx?: $Context; input?: unknown }): Promise<
151
154
  MiddlewareResult<{
152
155
  _config: TParams['_config'];
153
156
  _ctx_out: $Context;
@@ -158,7 +161,9 @@ export type MiddlewareFunction<
158
161
  _meta: TParams['_meta'];
159
162
  }>
160
163
  >;
161
- (opts: { rawInput: unknown }): Promise<MiddlewareResult<TParams>>;
164
+ (opts: { getRawInput: GetRawInputFn }): Promise<
165
+ MiddlewareResult<TParams>
166
+ >;
162
167
  };
163
168
  }): Promise<MiddlewareResult<TParamsAfter>>;
164
169
  _type?: string | undefined;
@@ -171,7 +176,9 @@ export function createMiddlewareFactory<
171
176
  TConfig extends AnyRootConfig,
172
177
  TInputIn = unknown,
173
178
  >() {
174
- function createMiddlewareInner<TNewParams extends ProcedureParams>(
179
+ function createMiddlewareInner<
180
+ TNewParams extends ProcedureParams<AnyProcedureParams>,
181
+ >(
175
182
  middlewares: MiddlewareFunction<any, any>[],
176
183
  ): MiddlewareBuilder<deriveParamsFromConfig<TConfig, TInputIn>, TNewParams> {
177
184
  return {
@@ -190,7 +197,9 @@ export function createMiddlewareFactory<
190
197
  };
191
198
  }
192
199
 
193
- function createMiddleware<TNewParams extends ProcedureParams>(
200
+ function createMiddleware<
201
+ TNewParams extends ProcedureParams<AnyProcedureParams>,
202
+ >(
194
203
  fn: MiddlewareFunction<
195
204
  deriveParamsFromConfig<TConfig, TInputIn>,
196
205
  TNewParams
@@ -229,12 +238,10 @@ function isPlainObject(obj: unknown) {
229
238
  * Please note, `trpc-openapi` uses this function.
230
239
  */
231
240
  export function createInputMiddleware<TInput>(parse: ParseFn<TInput>) {
232
- const inputMiddleware: ProcedureBuilderMiddleware = async ({
233
- next,
234
- rawInput,
235
- input,
236
- }) => {
241
+ const inputMiddleware: ProcedureBuilderMiddleware = async (opts) => {
237
242
  let parsedInput: ReturnType<typeof parse>;
243
+
244
+ const rawInput = await opts.getRawInput();
238
245
  try {
239
246
  parsedInput = await parse(rawInput);
240
247
  } catch (cause) {
@@ -246,15 +253,14 @@ export function createInputMiddleware<TInput>(parse: ParseFn<TInput>) {
246
253
 
247
254
  // Multiple input parsers
248
255
  const combinedInput =
249
- isPlainObject(input) && isPlainObject(parsedInput)
256
+ isPlainObject(opts.input) && isPlainObject(parsedInput)
250
257
  ? {
251
- ...input,
258
+ ...opts.input,
252
259
  ...parsedInput,
253
260
  }
254
261
  : parsedInput;
255
262
 
256
- // TODO fix this typing?
257
- return next({ input: combinedInput } as any);
263
+ return opts.next({ input: combinedInput });
258
264
  };
259
265
  inputMiddleware._type = 'input';
260
266
  return inputMiddleware;
@@ -1,9 +1,5 @@
1
1
  import { AnyRootConfig } from './internals/config';
2
- import {
3
- ProcedureBuilderDef,
4
- ProcedureCallOptions,
5
- } from './internals/procedureBuilder';
6
- import { UnsetMarker } from './internals/utils';
2
+ import { ProcedureCallOptions } from './internals/procedureBuilder';
7
3
  import { ProcedureType } from './types';
8
4
 
9
5
  type ClientContext = Record<string, unknown>;
@@ -20,77 +16,73 @@ export interface ProcedureOptions {
20
16
  }
21
17
 
22
18
  /**
23
- * FIXME: this should only take 1 generic argument instead of a list
24
19
  * @internal
20
+ * @deprecated
25
21
  */
26
- export interface ProcedureParams<
27
- TConfig extends AnyRootConfig = AnyRootConfig,
28
- TContextOut = unknown,
29
- TInputIn = unknown,
30
- TInputOut = unknown,
31
- TOutputIn = unknown,
32
- TOutputOut = unknown,
33
- TMeta = unknown,
34
- > {
35
- _config: TConfig;
36
- /**
37
- * @internal
38
- */
39
- _meta: TMeta;
40
- /**
41
- * @internal
42
- */
43
- _ctx_out: TContextOut;
44
- /**
45
- * @internal
46
- */
47
- _input_in: TInputIn;
48
- /**
49
- * @internal
50
- */
51
- _input_out: TInputOut;
52
- /**
53
- * @internal
54
- */
55
- _output_in: TOutputIn;
56
- /**
57
- * @internal
58
- */
59
- _output_out: TOutputOut;
60
- }
22
+ export type AnyProcedureParams = {
23
+ _config: AnyRootConfig;
24
+ _meta: unknown;
25
+ _ctx_out: unknown;
26
+ _input_in: unknown;
27
+ _input_out: unknown;
28
+ _output_in: unknown;
29
+ _output_out: unknown;
30
+ };
31
+
32
+ /**
33
+ * @deprecated
34
+ */
35
+ export type ProcedureParams<TParams extends AnyProcedureParams> = TParams;
61
36
 
62
37
  /**
63
38
  * @internal
64
39
  */
65
- export type ProcedureArgs<TParams extends ProcedureParams> =
66
- TParams['_input_in'] extends UnsetMarker
40
+ export type ProcedureArgs<TParams extends AnyProcedure['_def']> =
41
+ void extends TParams['_input_in']
67
42
  ? [input?: undefined | void, opts?: ProcedureOptions]
68
43
  : undefined extends TParams['_input_in']
69
44
  ? [input?: TParams['_input_in'] | void, opts?: ProcedureOptions]
70
45
  : [input: TParams['_input_in'], opts?: ProcedureOptions];
71
46
 
47
+ interface BuiltProcedureDef {
48
+ input: unknown;
49
+ output: unknown;
50
+ }
72
51
  /**
73
52
  *
74
53
  * @internal
75
54
  */
76
55
  export interface Procedure<
77
56
  TType extends ProcedureType,
78
- TParams extends ProcedureParams,
57
+ TDef extends BuiltProcedureDef,
79
58
  > {
80
- _type: TType;
81
- _def: ProcedureBuilderDef<TParams> & TParams;
82
- /**
83
- * @deprecated use `._def.meta` instead
84
- */
85
- meta?: TParams['_meta'];
86
- _procedure: true;
59
+ _def: {
60
+ _input_in: TDef['input'];
61
+ _output_out: TDef['output'];
62
+ procedure: true;
63
+ type: TType;
64
+ /**
65
+ * @internal
66
+ * Meta is not inferrable on individual procedures, only on the router
67
+ */
68
+ meta: unknown;
69
+ };
87
70
  /**
88
71
  * @internal
89
72
  */
90
73
  (opts: ProcedureCallOptions): Promise<unknown>;
91
74
  }
92
75
 
93
- export type AnyQueryProcedure = Procedure<'query', any>;
94
- export type AnyMutationProcedure = Procedure<'mutation', any>;
95
- export type AnySubscriptionProcedure = Procedure<'subscription', any>;
76
+ export interface QueryProcedure<TDef extends BuiltProcedureDef>
77
+ extends Procedure<'query', TDef> {}
78
+
79
+ export interface MutationProcedure<TDef extends BuiltProcedureDef>
80
+ extends Procedure<'mutation', TDef> {}
81
+
82
+ export interface SubscriptionProcedure<TDef extends BuiltProcedureDef>
83
+ extends Procedure<'subscription', TDef> {}
84
+
85
+ export type AnyQueryProcedure = QueryProcedure<any>;
86
+ export type AnyMutationProcedure = MutationProcedure<any>;
87
+ export type AnySubscriptionProcedure = SubscriptionProcedure<any>;
96
88
  export type AnyProcedure = Procedure<ProcedureType, any>;