@tanstack/start-client-core 1.132.0-alpha.8 → 1.132.0

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 (90) hide show
  1. package/dist/esm/{serializer → client}/ServerFunctionSerializationAdapter.js +2 -2
  2. package/dist/esm/client/ServerFunctionSerializationAdapter.js.map +1 -0
  3. package/dist/esm/client/createClientRpc.d.ts +6 -0
  4. package/dist/esm/{createClientRpc.js → client/createClientRpc.js} +4 -4
  5. package/dist/esm/client/createClientRpc.js.map +1 -0
  6. package/dist/esm/client/hydrateStart.d.ts +2 -0
  7. package/dist/esm/client/hydrateStart.js +29 -0
  8. package/dist/esm/client/hydrateStart.js.map +1 -0
  9. package/dist/esm/client/index.d.ts +2 -0
  10. package/dist/esm/client/index.js +7 -0
  11. package/dist/esm/client/index.js.map +1 -0
  12. package/dist/esm/{serverFnFetcher.js → client/serverFnFetcher.js} +6 -6
  13. package/dist/esm/client/serverFnFetcher.js.map +1 -0
  14. package/dist/esm/constants.d.ts +1 -0
  15. package/dist/esm/constants.js +4 -0
  16. package/dist/esm/constants.js.map +1 -1
  17. package/dist/esm/createMiddleware.d.ts +95 -86
  18. package/dist/esm/createMiddleware.js +5 -5
  19. package/dist/esm/createMiddleware.js.map +1 -1
  20. package/dist/esm/createServerFn.d.ts +64 -61
  21. package/dist/esm/createServerFn.js +57 -30
  22. package/dist/esm/createServerFn.js.map +1 -1
  23. package/dist/esm/createStart.d.ts +27 -0
  24. package/dist/esm/createStart.js +14 -0
  25. package/dist/esm/createStart.js.map +1 -0
  26. package/dist/esm/fake-start-entry.d.ts +5 -0
  27. package/dist/esm/fake-start-entry.js +11 -0
  28. package/dist/esm/fake-start-entry.js.map +1 -0
  29. package/dist/esm/getDefaultSerovalPlugins.d.ts +1 -0
  30. package/dist/esm/getDefaultSerovalPlugins.js +14 -0
  31. package/dist/esm/getDefaultSerovalPlugins.js.map +1 -0
  32. package/dist/esm/getGlobalStartContext.d.ts +3 -0
  33. package/dist/esm/getGlobalStartContext.js +15 -0
  34. package/dist/esm/getGlobalStartContext.js.map +1 -0
  35. package/dist/esm/getRouterInstance.d.ts +2 -1
  36. package/dist/esm/getRouterInstance.js +1 -1
  37. package/dist/esm/getRouterInstance.js.map +1 -1
  38. package/dist/esm/getServerContextAfterGlobalMiddlewares.d.ts +1 -0
  39. package/dist/esm/getServerContextAfterGlobalMiddlewares.js +10 -0
  40. package/dist/esm/getServerContextAfterGlobalMiddlewares.js.map +1 -0
  41. package/dist/esm/getStartOptions.d.ts +1 -0
  42. package/dist/esm/getStartOptions.js +7 -0
  43. package/dist/esm/getStartOptions.js.map +1 -0
  44. package/dist/esm/global.d.ts +7 -0
  45. package/dist/esm/index.d.ts +11 -6
  46. package/dist/esm/index.js +9 -9
  47. package/dist/esm/index.js.map +1 -1
  48. package/dist/esm/serverRoute.d.ts +66 -0
  49. package/dist/esm/startEntry.d.ts +8 -0
  50. package/package.json +18 -5
  51. package/src/{serializer → client}/ServerFunctionSerializationAdapter.ts +2 -2
  52. package/src/{createClientRpc.ts → client/createClientRpc.ts} +5 -3
  53. package/src/client/hydrateStart.ts +33 -0
  54. package/src/client/index.ts +3 -0
  55. package/src/{serverFnFetcher.ts → client/serverFnFetcher.ts} +11 -16
  56. package/src/constants.ts +3 -0
  57. package/src/createMiddleware.ts +269 -255
  58. package/src/createServerFn.ts +277 -290
  59. package/src/createStart.ts +122 -0
  60. package/src/fake-start-entry.ts +4 -0
  61. package/src/getDefaultSerovalPlugins.ts +17 -0
  62. package/src/getGlobalStartContext.ts +18 -0
  63. package/src/getRouterInstance.ts +5 -4
  64. package/src/getServerContextAfterGlobalMiddlewares.ts +7 -0
  65. package/src/getStartOptions.ts +6 -0
  66. package/src/global.ts +9 -0
  67. package/src/index.tsx +12 -11
  68. package/src/serverRoute.ts +474 -0
  69. package/src/start-entry.d.ts +11 -0
  70. package/src/startEntry.ts +10 -0
  71. package/src/tests/createServerFn.test-d.ts +147 -123
  72. package/src/tests/createServerMiddleware.test-d.ts +22 -17
  73. package/dist/esm/createClientRpc.d.ts +0 -6
  74. package/dist/esm/createClientRpc.js.map +0 -1
  75. package/dist/esm/registerGlobalMiddleware.d.ts +0 -5
  76. package/dist/esm/registerGlobalMiddleware.js +0 -9
  77. package/dist/esm/registerGlobalMiddleware.js.map +0 -1
  78. package/dist/esm/serializer/ServerFunctionSerializationAdapter.js.map +0 -1
  79. package/dist/esm/serializer/getClientSerovalPlugins.d.ts +0 -3
  80. package/dist/esm/serializer/getClientSerovalPlugins.js +0 -13
  81. package/dist/esm/serializer/getClientSerovalPlugins.js.map +0 -1
  82. package/dist/esm/serializer/getDefaultSerovalPlugins.d.ts +0 -3
  83. package/dist/esm/serializer/getDefaultSerovalPlugins.js +0 -19
  84. package/dist/esm/serializer/getDefaultSerovalPlugins.js.map +0 -1
  85. package/dist/esm/serverFnFetcher.js.map +0 -1
  86. package/src/registerGlobalMiddleware.ts +0 -9
  87. package/src/serializer/getClientSerovalPlugins.ts +0 -10
  88. package/src/serializer/getDefaultSerovalPlugins.ts +0 -24
  89. /package/dist/esm/{serializer → client}/ServerFunctionSerializationAdapter.d.ts +0 -0
  90. /package/dist/esm/{serverFnFetcher.d.ts → client/serverFnFetcher.d.ts} +0 -0
@@ -1,50 +1,34 @@
1
+ import type { StartInstanceOptions } from './createStart'
2
+ import type { AnyServerFn, ConstrainValidator, Method } from './createServerFn'
1
3
  import type {
2
- ConstrainValidator,
3
- Method,
4
- ServerFnResponseType,
5
- } from './createServerFn'
6
- import type {
7
- AnyRouter,
4
+ AnyContext,
8
5
  Assign,
9
6
  Constrain,
10
7
  Expand,
11
8
  IntersectAssign,
12
9
  Register,
13
- RegisteredRouter,
14
10
  ResolveValidatorInput,
15
11
  ResolveValidatorOutput,
16
12
  ValidateSerializableInput,
17
13
  } from '@tanstack/router-core'
18
14
 
19
- export function createMiddleware<
20
- TRegister extends Register,
21
- TType extends MiddlewareType,
22
- >(
23
- options: {
24
- type: TType
25
- validateClient?: boolean
15
+ export type CreateMiddlewareFn<TRegister> = <TType extends MiddlewareType>(
16
+ options?: {
17
+ type?: TType
26
18
  },
27
19
  __opts?: FunctionMiddlewareOptions<
28
20
  TRegister,
29
21
  unknown,
30
22
  undefined,
31
23
  undefined,
32
- undefined,
33
- ServerFnResponseType
24
+ undefined
34
25
  >,
35
- ): CreateMiddlewareResult<TRegister, TType> {
36
- // const resolvedOptions = (__opts || options) as MiddlewareOptions<
26
+ ) => CreateMiddlewareResult<TRegister, TType>
27
+
28
+ export const createMiddleware: CreateMiddlewareFn<{}> = (options, __opts) => {
37
29
  const resolvedOptions = {
38
- type: 'function',
39
- ...(__opts ||
40
- (options as FunctionMiddlewareOptions<
41
- TRegister,
42
- unknown,
43
- undefined,
44
- undefined,
45
- undefined,
46
- ServerFnResponseType
47
- >)),
30
+ type: 'request',
31
+ ...(__opts || options),
48
32
  }
49
33
 
50
34
  return {
@@ -55,10 +39,10 @@ export function createMiddleware<
55
39
  Object.assign(resolvedOptions, { middleware }),
56
40
  ) as any
57
41
  },
58
- validator: (validator: any) => {
42
+ inputValidator: (inputValidator: any) => {
59
43
  return createMiddleware(
60
44
  {} as any,
61
- Object.assign(resolvedOptions, { validator }),
45
+ Object.assign(resolvedOptions, { inputValidator }),
62
46
  ) as any
63
47
  },
64
48
  client: (client: any) => {
@@ -73,85 +57,61 @@ export function createMiddleware<
73
57
  Object.assign(resolvedOptions, { server }),
74
58
  ) as any
75
59
  },
76
- } as unknown as CreateMiddlewareResult<TRegister, TType>
60
+ } as any
77
61
  }
78
62
 
79
63
  export type MiddlewareType = 'request' | 'function'
80
64
 
81
65
  export type CreateMiddlewareResult<
82
- TRegister extends Register,
66
+ TRegister,
83
67
  TType extends MiddlewareType,
84
- > = 'function' extends TType
85
- ? FunctionMiddleware<TRegister, ServerFnResponseType>
86
- : RequestMiddleware
87
-
88
- export interface FunctionMiddleware<
89
- TRegister extends Register,
90
- TServerFnResponseType extends ServerFnResponseType,
91
- > extends FunctionMiddlewareAfterMiddleware<
92
- TRegister,
93
- unknown,
94
- TServerFnResponseType
95
- > {
68
+ > = 'request' extends TType
69
+ ? RequestMiddleware<TRegister>
70
+ : FunctionMiddleware<TRegister>
71
+
72
+ export interface FunctionMiddleware<TRegister>
73
+ extends FunctionMiddlewareAfterMiddleware<TRegister, unknown> {
96
74
  middleware: <const TNewMiddlewares = undefined>(
97
75
  middlewares: Constrain<
98
76
  TNewMiddlewares,
99
- ReadonlyArray<AnyFunctionMiddleware>
77
+ ReadonlyArray<AnyRequestMiddleware | AnyFunctionMiddleware>
100
78
  >,
101
- ) => FunctionMiddlewareAfterMiddleware<
102
- TRegister,
103
- TNewMiddlewares,
104
- TServerFnResponseType
105
- >
79
+ ) => FunctionMiddlewareAfterMiddleware<TRegister, TNewMiddlewares>
106
80
  }
107
81
 
108
- export interface FunctionMiddlewareAfterMiddleware<
109
- TRegister extends Register,
110
- TMiddlewares,
111
- TServerFnResponseType extends ServerFnResponseType,
112
- > extends FunctionMiddlewareWithTypes<
82
+ export interface FunctionMiddlewareAfterMiddleware<TRegister, TMiddlewares>
83
+ extends FunctionMiddlewareWithTypes<
113
84
  TRegister,
114
85
  TMiddlewares,
115
86
  undefined,
116
87
  undefined,
117
88
  undefined,
118
89
  undefined,
119
- undefined,
120
- TServerFnResponseType
90
+ undefined
121
91
  >,
122
92
  FunctionMiddlewareServer<
123
93
  TRegister,
124
94
  TMiddlewares,
125
95
  undefined,
126
96
  undefined,
127
- undefined,
128
- TServerFnResponseType
129
- >,
130
- FunctionMiddlewareClient<
131
- TRegister,
132
- TMiddlewares,
133
- undefined,
134
- TServerFnResponseType
97
+ undefined
135
98
  >,
136
- FunctionMiddlewareValidator<
137
- TRegister,
138
- TMiddlewares,
139
- TServerFnResponseType
140
- > {}
99
+ FunctionMiddlewareClient<TRegister, TMiddlewares, undefined>,
100
+ FunctionMiddlewareValidator<TRegister, TMiddlewares> {}
141
101
 
142
102
  export interface FunctionMiddlewareWithTypes<
143
- TRegister extends Register,
103
+ TRegister,
144
104
  TMiddlewares,
145
- TValidator,
105
+ TInputValidator,
146
106
  TServerContext,
147
107
  TServerSendContext,
148
108
  TClientContext,
149
109
  TClientSendContext,
150
- TServerFnResponseType extends ServerFnResponseType,
151
110
  > {
152
111
  _types: FunctionMiddlewareTypes<
112
+ TRegister,
153
113
  TMiddlewares,
154
- TValidator,
114
+ TInputValidator,
155
115
  TServerContext,
156
116
  TServerSendContext,
157
117
  TClientContext,
@@ -160,16 +120,16 @@ export interface FunctionMiddlewareWithTypes<
160
120
  options: FunctionMiddlewareOptions<
161
121
  TRegister,
162
122
  TMiddlewares,
163
- TValidator,
123
+ TInputValidator,
164
124
  TServerContext,
165
- TClientContext,
166
- TServerFnResponseType
125
+ TClientContext
167
126
  >
168
127
  }
169
128
 
170
129
  export interface FunctionMiddlewareTypes<
130
+ in out TRegister,
171
131
  in out TMiddlewares,
172
- in out TValidator,
132
+ in out TInputValidator,
173
133
  in out TServerContext,
174
134
  in out TServerSendContext,
175
135
  in out TClientContext,
@@ -177,10 +137,10 @@ export interface FunctionMiddlewareTypes<
177
137
  > {
178
138
  type: 'function'
179
139
  middlewares: TMiddlewares
180
- input: ResolveValidatorInput<TValidator>
181
- allInput: IntersectAllValidatorInputs<TMiddlewares, TValidator>
182
- output: ResolveValidatorOutput<TValidator>
183
- allOutput: IntersectAllValidatorOutputs<TMiddlewares, TValidator>
140
+ input: ResolveValidatorInput<TInputValidator>
141
+ allInput: IntersectAllValidatorInputs<TMiddlewares, TInputValidator>
142
+ output: ResolveValidatorOutput<TInputValidator>
143
+ allOutput: IntersectAllValidatorOutputs<TMiddlewares, TInputValidator>
184
144
  clientContext: TClientContext
185
145
  allClientContextBeforeNext: AssignAllClientContextBeforeNext<
186
146
  TMiddlewares,
@@ -197,7 +157,8 @@ export interface FunctionMiddlewareTypes<
197
157
  TMiddlewares,
198
158
  TServerSendContext
199
159
  >
200
- allServerContext: AssignAllServerContext<
160
+ allServerContext: AssignAllServerFnContext<
161
+ TRegister,
201
162
  TMiddlewares,
202
163
  TServerSendContext,
203
164
  TServerContext
@@ -207,30 +168,34 @@ export interface FunctionMiddlewareTypes<
207
168
  TMiddlewares,
208
169
  TClientSendContext
209
170
  >
210
- validator: TValidator
171
+ inputValidator: TInputValidator
211
172
  }
212
173
 
213
174
  /**
214
175
  * Recursively resolve the input type produced by a sequence of middleware
215
176
  */
216
- export type IntersectAllValidatorInputs<TMiddlewares, TValidator> =
217
- unknown extends TValidator
218
- ? TValidator
219
- : TValidator extends undefined
177
+ export type IntersectAllValidatorInputs<TMiddlewares, TInputValidator> =
178
+ unknown extends TInputValidator
179
+ ? TInputValidator
180
+ : TInputValidator extends undefined
220
181
  ? IntersectAllMiddleware<TMiddlewares, 'allInput'>
221
182
  : IntersectAssign<
222
183
  IntersectAllMiddleware<TMiddlewares, 'allInput'>,
223
- ResolveValidatorInput<TValidator>
184
+ ResolveValidatorInput<TInputValidator>
224
185
  >
225
186
 
226
187
  export type IntersectAllMiddleware<
227
188
  TMiddlewares,
228
189
  TType extends
229
190
  | keyof AnyFunctionMiddleware['_types']
230
- | keyof AnyRequestMiddleware['_types'],
191
+ | keyof AnyRequestMiddleware['_types']
192
+ | keyof AnyServerFn['_types'],
231
193
  TAcc = undefined,
232
194
  > = TMiddlewares extends readonly [infer TMiddleware, ...infer TRest]
233
- ? TMiddleware extends AnyFunctionMiddleware | AnyRequestMiddleware
195
+ ? TMiddleware extends
196
+ | AnyFunctionMiddleware
197
+ | AnyRequestMiddleware
198
+ | AnyServerFn
234
199
  ? IntersectAllMiddleware<
235
200
  TRest,
236
201
  TType,
@@ -249,21 +214,20 @@ export type AnyFunctionMiddleware = FunctionMiddlewareWithTypes<
249
214
  any,
250
215
  any,
251
216
  any,
252
- any,
253
217
  any
254
218
  >
255
219
 
256
220
  /**
257
221
  * Recursively merge the output type produced by a sequence of middleware
258
222
  */
259
- export type IntersectAllValidatorOutputs<TMiddlewares, TValidator> =
260
- unknown extends TValidator
261
- ? TValidator
262
- : TValidator extends undefined
223
+ export type IntersectAllValidatorOutputs<TMiddlewares, TInputValidator> =
224
+ unknown extends TInputValidator
225
+ ? TInputValidator
226
+ : TInputValidator extends undefined
263
227
  ? IntersectAllMiddleware<TMiddlewares, 'allOutput'>
264
228
  : IntersectAssign<
265
229
  IntersectAllMiddleware<TMiddlewares, 'allOutput'>,
266
- ResolveValidatorOutput<TValidator>
230
+ ResolveValidatorOutput<TInputValidator>
267
231
  >
268
232
 
269
233
  /**
@@ -283,10 +247,14 @@ export type AssignAllMiddleware<
283
247
  TMiddlewares,
284
248
  TType extends
285
249
  | keyof AnyFunctionMiddleware['_types']
286
- | keyof AnyRequestMiddleware['_types'],
250
+ | keyof AnyRequestMiddleware['_types']
251
+ | keyof AnyServerFn['_types'],
287
252
  TAcc = undefined,
288
253
  > = TMiddlewares extends readonly [infer TMiddleware, ...infer TRest]
289
- ? TMiddleware extends AnyFunctionMiddleware | AnyRequestMiddleware
254
+ ? TMiddleware extends
255
+ | AnyFunctionMiddleware
256
+ | AnyRequestMiddleware
257
+ | AnyServerFn
290
258
  ? AssignAllMiddleware<
291
259
  TRest,
292
260
  TType,
@@ -316,10 +284,74 @@ export type AssignAllServerSendContext<
316
284
  TSendContext
317
285
  >
318
286
 
319
- /**
320
- * Recursively resolve the server context type produced by a sequence of middleware
321
- */
322
- export type AssignAllServerContext<
287
+ export type AssignAllServerRequestContext<
288
+ TRegister,
289
+ TMiddlewares,
290
+ TSendContext = undefined,
291
+ TServerContext = undefined,
292
+ > = Assign<
293
+ // Fetch Request Context
294
+ GlobalFetchRequestContext,
295
+ // AnyContext,
296
+ Assign<
297
+ GlobalServerRequestContext<TRegister>, // TODO: This enabled global middleware
298
+ // type inference, but creates a circular types issue. No idea how to fix this.
299
+ // AnyContext,
300
+ __AssignAllServerRequestContext<TMiddlewares, TSendContext, TServerContext>
301
+ >
302
+ >
303
+
304
+ // export type GlobalFetchRequestContext<TRegister> = AnyContext
305
+ export type GlobalFetchRequestContext = Register extends {
306
+ server: { requestContext: infer TRequestContext }
307
+ }
308
+ ? TRequestContext
309
+ : AnyContext
310
+
311
+ export type GlobalServerRequestContext<TRegister> = TRegister extends {
312
+ config: StartInstanceOptions<any, any, infer TRequestMiddlewares, any>
313
+ }
314
+ ? AssignAllMiddleware<TRequestMiddlewares, 'allServerContext'>
315
+ : AnyContext
316
+
317
+ type __AssignAllServerRequestContext<
318
+ TMiddlewares,
319
+ TSendContext = undefined,
320
+ TServerContext = undefined,
321
+ > = unknown extends TSendContext
322
+ ? Assign<TSendContext, TServerContext>
323
+ : Assign<
324
+ AssignAllMiddleware<TMiddlewares, 'allServerContext'>,
325
+ Assign<TSendContext, TServerContext>
326
+ >
327
+
328
+ export type AssignAllServerFnContext<
329
+ TRegister,
330
+ TMiddlewares,
331
+ TSendContext = undefined,
332
+ TServerContext = undefined,
333
+ > = Assign<
334
+ GlobalFetchRequestContext,
335
+ Assign<
336
+ GlobalServerRequestContext<TRegister>, // TODO: This enabled global middleware
337
+ // type inference, but creates a circular types issue. No idea how to fix this.
338
+ // AnyContext,
339
+ Assign<
340
+ GlobalServerFnContext<TRegister>, // TODO: This enabled global middleware
341
+ // type inference, but creates a circular types issue. No idea how to fix this.
342
+ // AnyContext,/
343
+ __AssignAllServerFnContext<TMiddlewares, TSendContext, TServerContext>
344
+ >
345
+ >
346
+ >
347
+
348
+ type GlobalServerFnContext<TRegister> = TRegister extends {
349
+ config: StartInstanceOptions<any, any, any, infer TFunctionMiddlewares>
350
+ }
351
+ ? AssignAllMiddleware<TFunctionMiddlewares, 'allServerContext'>
352
+ : AnyContext
353
+
354
+ type __AssignAllServerFnContext<
323
355
  TMiddlewares,
324
356
  TSendContext = undefined,
325
357
  TServerContext = undefined,
@@ -341,39 +373,35 @@ export type AssignAllClientSendContext<
341
373
  >
342
374
 
343
375
  export interface FunctionMiddlewareOptions<
344
- in out TRegister extends Register,
376
+ in out TRegister,
345
377
  in out TMiddlewares,
346
- in out TValidator,
378
+ in out TInputValidator,
347
379
  in out TServerContext,
348
380
  in out TClientContext,
349
- in out TServerFnResponseType extends ServerFnResponseType,
350
381
  > {
351
- validateClient?: boolean
352
382
  middleware?: TMiddlewares
353
- validator?: ConstrainValidator<TRegister, TValidator>
383
+ inputValidator?: ConstrainValidator<TRegister, 'GET', TInputValidator>
354
384
  client?: FunctionMiddlewareClientFn<
355
385
  TRegister,
356
386
  TMiddlewares,
357
- TValidator,
387
+ TInputValidator,
358
388
  TServerContext,
359
- TClientContext,
360
- TServerFnResponseType
389
+ TClientContext
361
390
  >
362
391
  server?: FunctionMiddlewareServerFn<
363
392
  TRegister,
364
393
  TMiddlewares,
365
- TValidator,
394
+ TInputValidator,
366
395
  TServerContext,
367
396
  unknown,
368
- unknown,
369
- TServerFnResponseType
397
+ unknown
370
398
  >
371
399
  }
372
400
 
373
- export type FunctionMiddlewareClientNextFn<
374
- TRegister extends Register,
375
- TMiddlewares,
376
- > = <TSendContext = undefined, TNewClientContext = undefined>(ctx?: {
401
+ export type FunctionMiddlewareClientNextFn<TRegister, TMiddlewares> = <
402
+ TSendContext = undefined,
403
+ TNewClientContext = undefined,
404
+ >(ctx?: {
377
405
  context?: TNewClientContext
378
406
  sendContext?: ValidateSerializableInput<TRegister, TSendContext>
379
407
  headers?: HeadersInit
@@ -382,77 +410,56 @@ export type FunctionMiddlewareClientNextFn<
382
410
  >
383
411
 
384
412
  export interface FunctionMiddlewareServer<
385
- TRegister extends Register,
413
+ TRegister,
386
414
  TMiddlewares,
387
- TValidator,
415
+ TInputValidator,
388
416
  TServerSendContext,
389
417
  TClientContext,
390
- TServerFnResponseType extends ServerFnResponseType,
391
418
  > {
392
419
  server: <TNewServerContext = undefined, TSendContext = undefined>(
393
420
  server: FunctionMiddlewareServerFn<
394
421
  TRegister,
395
422
  TMiddlewares,
396
- TValidator,
423
+ TInputValidator,
397
424
  TServerSendContext,
398
425
  TNewServerContext,
399
- TSendContext,
400
- TServerFnResponseType
426
+ TSendContext
401
427
  >,
402
428
  ) => FunctionMiddlewareAfterServer<
403
429
  TRegister,
404
430
  TMiddlewares,
405
- TValidator,
431
+ TInputValidator,
406
432
  TNewServerContext,
407
433
  TServerSendContext,
408
434
  TClientContext,
409
- TSendContext,
410
- ServerFnResponseType
435
+ TSendContext
411
436
  >
412
437
  }
413
438
 
414
439
  export type FunctionMiddlewareServerFn<
415
- TRegister extends Register,
440
+ TRegister,
416
441
  TMiddlewares,
417
- TValidator,
442
+ TInputValidator,
418
443
  TServerSendContext,
419
444
  TNewServerContext,
420
445
  TSendContext,
421
- TServerFnResponseType extends ServerFnResponseType,
422
446
  > = (
423
447
  options: FunctionMiddlewareServerFnOptions<
424
448
  TRegister,
425
449
  TMiddlewares,
426
- TValidator,
427
- TServerSendContext,
428
- TServerFnResponseType
450
+ TInputValidator,
451
+ TServerSendContext
429
452
  >,
430
453
  ) => FunctionMiddlewareServerFnResult<
454
+ TRegister,
431
455
  TMiddlewares,
432
456
  TServerSendContext,
433
457
  TNewServerContext,
434
458
  TSendContext
435
459
  >
436
460
 
437
- export interface RequestMiddlewareServerFnOptions<
438
- in out TRegister extends Register,
439
- in out TMiddlewares,
440
- in out TServerSendContext,
441
- > {
442
- request: Request
443
- context: Expand<AssignAllServerContext<TMiddlewares, TServerSendContext>>
444
- next: FunctionMiddlewareServerNextFn<
445
- TRegister,
446
- TMiddlewares,
447
- TServerSendContext
448
- >
449
- response: Response
450
- method: Method
451
- signal: AbortSignal
452
- }
453
-
454
461
  export type FunctionMiddlewareServerNextFn<
455
- TRegister extends Register,
462
+ TRegister,
456
463
  TMiddlewares,
457
464
  TServerSendContext,
458
465
  > = <TNewServerContext = undefined, TSendContext = undefined>(ctx?: {
@@ -460,6 +467,7 @@ export type FunctionMiddlewareServerNextFn<
460
467
  sendContext?: ValidateSerializableInput<TRegister, TSendContext>
461
468
  }) => Promise<
462
469
  FunctionServerResultWithContext<
470
+ TRegister,
463
471
  TMiddlewares,
464
472
  TServerSendContext,
465
473
  TNewServerContext,
@@ -468,6 +476,7 @@ export type FunctionMiddlewareServerNextFn<
468
476
  >
469
477
 
470
478
  export type FunctionServerResultWithContext<
479
+ in out TRegister,
471
480
  in out TMiddlewares,
472
481
  in out TServerSendContext,
473
482
  in out TServerContext,
@@ -479,26 +488,31 @@ export type FunctionServerResultWithContext<
479
488
  sendContext: TSendContext
480
489
  }
481
490
  context: Expand<
482
- AssignAllServerContext<TMiddlewares, TServerSendContext, TServerContext>
491
+ AssignAllServerFnContext<
492
+ TRegister,
493
+ TMiddlewares,
494
+ TServerSendContext,
495
+ TServerContext
496
+ >
483
497
  >
484
498
  sendContext: Expand<AssignAllClientSendContext<TMiddlewares, TSendContext>>
485
499
  }
486
500
 
487
501
  export interface FunctionMiddlewareServerFnOptions<
488
- in out TRegister extends Register,
502
+ in out TRegister,
489
503
  in out TMiddlewares,
490
- in out TValidator,
504
+ in out TInputValidator,
491
505
  in out TServerSendContext,
492
- in out TServerFnResponseType,
493
506
  > {
494
- data: Expand<IntersectAllValidatorOutputs<TMiddlewares, TValidator>>
495
- context: Expand<AssignAllServerContext<TMiddlewares, TServerSendContext>>
507
+ data: Expand<IntersectAllValidatorOutputs<TMiddlewares, TInputValidator>>
508
+ context: Expand<
509
+ AssignAllServerFnContext<TRegister, TMiddlewares, TServerSendContext>
510
+ >
496
511
  next: FunctionMiddlewareServerNextFn<
497
512
  TRegister,
498
513
  TMiddlewares,
499
514
  TServerSendContext
500
515
  >
501
- response: TServerFnResponseType
502
516
  method: Method
503
517
  filename: string
504
518
  functionId: string
@@ -506,6 +520,7 @@ export interface FunctionMiddlewareServerFnOptions<
506
520
  }
507
521
 
508
522
  export type FunctionMiddlewareServerFnResult<
523
+ TRegister,
509
524
  TMiddlewares,
510
525
  TServerSendContext,
511
526
  TServerContext,
@@ -513,6 +528,7 @@ export type FunctionMiddlewareServerFnResult<
513
528
  > =
514
529
  | Promise<
515
530
  FunctionServerResultWithContext<
531
+ TRegister,
516
532
  TMiddlewares,
517
533
  TServerSendContext,
518
534
  TServerContext,
@@ -520,6 +536,7 @@ export type FunctionMiddlewareServerFnResult<
520
536
  >
521
537
  >
522
538
  | FunctionServerResultWithContext<
539
+ TRegister,
523
540
  TMiddlewares,
524
541
  TServerSendContext,
525
542
  TServerContext,
@@ -527,67 +544,56 @@ export type FunctionMiddlewareServerFnResult<
527
544
  >
528
545
 
529
546
  export interface FunctionMiddlewareAfterServer<
530
- TRegister extends Register,
547
+ TRegister,
531
548
  TMiddlewares,
532
- TValidator,
549
+ TInputValidator,
533
550
  TServerContext,
534
551
  TServerSendContext,
535
552
  TClientContext,
536
553
  TClientSendContext,
537
- TServerFnResponseType extends ServerFnResponseType,
538
554
  > extends FunctionMiddlewareWithTypes<
539
555
  TRegister,
540
556
  TMiddlewares,
541
- TValidator,
557
+ TInputValidator,
542
558
  TServerContext,
543
559
  TServerSendContext,
544
560
  TClientContext,
545
- TClientSendContext,
546
- TServerFnResponseType
561
+ TClientSendContext
547
562
  > {}
548
563
 
549
564
  export interface FunctionMiddlewareClient<
550
- TRegister extends Register,
565
+ TRegister,
551
566
  TMiddlewares,
552
- TValidator,
553
- TServerFnResponseType extends ServerFnResponseType,
554
- TRouter extends AnyRouter = RegisteredRouter,
567
+ TInputValidator,
555
568
  > {
556
569
  client: <TSendServerContext = undefined, TNewClientContext = undefined>(
557
570
  client: FunctionMiddlewareClientFn<
558
571
  TRegister,
559
572
  TMiddlewares,
560
- TValidator,
573
+ TInputValidator,
561
574
  TSendServerContext,
562
- TNewClientContext,
563
- TServerFnResponseType,
564
- TRouter
575
+ TNewClientContext
565
576
  >,
566
577
  ) => FunctionMiddlewareAfterClient<
567
578
  TRegister,
568
579
  TMiddlewares,
569
- TValidator,
580
+ TInputValidator,
570
581
  TSendServerContext,
571
- TNewClientContext,
572
- ServerFnResponseType
582
+ TNewClientContext
573
583
  >
574
584
  }
575
585
 
576
586
  export type FunctionMiddlewareClientFn<
577
- TRegister extends Register,
587
+ TRegister,
578
588
  TMiddlewares,
579
- TValidator,
589
+ TInputValidator,
580
590
  TSendContext,
581
591
  TClientContext,
582
- TServerFnResponseType extends ServerFnResponseType,
583
- TRouter extends AnyRouter = RegisteredRouter,
584
592
  > = (
585
593
  options: FunctionMiddlewareClientFnOptions<
586
594
  TRegister,
587
595
  TMiddlewares,
588
- TValidator,
589
- TServerFnResponseType,
590
- TRouter
596
+ TInputValidator
591
597
  >,
592
598
  ) => FunctionMiddlewareClientFnResult<
593
599
  TMiddlewares,
@@ -596,22 +602,18 @@ export type FunctionMiddlewareClientFn<
596
602
  >
597
603
 
598
604
  export interface FunctionMiddlewareClientFnOptions<
599
- in out TRegister extends Register,
605
+ in out TRegister,
600
606
  in out TMiddlewares,
601
- in out TValidator,
602
- in out TServerFnResponseType extends ServerFnResponseType,
603
- in out TRouter extends AnyRouter,
607
+ in out TInputValidator,
604
608
  > {
605
- data: Expand<IntersectAllValidatorInputs<TMiddlewares, TValidator>>
609
+ data: Expand<IntersectAllValidatorInputs<TMiddlewares, TInputValidator>>
606
610
  context: Expand<AssignAllClientContextBeforeNext<TMiddlewares>>
607
611
  sendContext: Expand<AssignAllServerSendContext<TMiddlewares>>
608
612
  method: Method
609
- response: TServerFnResponseType
610
613
  signal: AbortSignal
611
614
  next: FunctionMiddlewareClientNextFn<TRegister, TMiddlewares>
612
615
  filename: string
613
616
  functionId: string
614
- router: TRouter
615
617
  }
616
618
 
617
619
  export type FunctionMiddlewareClientFnResult<
@@ -640,141 +642,153 @@ export type FunctionClientResultWithContext<
640
642
  }
641
643
 
642
644
  export interface FunctionMiddlewareAfterClient<
643
- TRegister extends Register,
645
+ TRegister,
644
646
  TMiddlewares,
645
- TValidator,
647
+ TInputValidator,
646
648
  TServerSendContext,
647
649
  TClientContext,
648
- TServerFnResponseType extends ServerFnResponseType,
649
650
  > extends FunctionMiddlewareWithTypes<
650
651
  TRegister,
651
652
  TMiddlewares,
652
- TValidator,
653
+ TInputValidator,
653
654
  undefined,
654
655
  TServerSendContext,
655
656
  TClientContext,
656
- undefined,
657
- TServerFnResponseType
657
+ undefined
658
658
  >,
659
659
  FunctionMiddlewareServer<
660
660
  TRegister,
661
661
  TMiddlewares,
662
- TValidator,
662
+ TInputValidator,
663
663
  TServerSendContext,
664
- TClientContext,
665
- TServerFnResponseType
664
+ TClientContext
666
665
  > {}
667
666
 
668
- export interface FunctionMiddlewareValidator<
669
- TRegister extends Register,
670
- TMiddlewares,
671
- TServerFnResponseType extends ServerFnResponseType,
672
- > {
673
- validator: <TNewValidator>(
674
- input: ConstrainValidator<TRegister, TNewValidator>,
675
- ) => FunctionMiddlewareAfterValidator<
676
- TRegister,
677
- TMiddlewares,
678
- TNewValidator,
679
- TServerFnResponseType
680
- >
667
+ export interface FunctionMiddlewareValidator<TRegister, TMiddlewares> {
668
+ inputValidator: <TNewValidator>(
669
+ inputValidator: ConstrainValidator<TRegister, 'GET', TNewValidator>,
670
+ ) => FunctionMiddlewareAfterValidator<TRegister, TMiddlewares, TNewValidator>
681
671
  }
682
672
 
683
673
  export interface FunctionMiddlewareAfterValidator<
684
- TRegister extends Register,
674
+ TRegister,
685
675
  TMiddlewares,
686
- TValidator,
687
- TServerFnResponseType extends ServerFnResponseType,
676
+ TInputValidator,
688
677
  > extends FunctionMiddlewareWithTypes<
689
678
  TRegister,
690
679
  TMiddlewares,
691
- TValidator,
692
- undefined,
680
+ TInputValidator,
693
681
  undefined,
694
682
  undefined,
695
683
  undefined,
696
- ServerFnResponseType
684
+ undefined
697
685
  >,
698
686
  FunctionMiddlewareServer<
699
687
  TRegister,
700
688
  TMiddlewares,
701
- TValidator,
689
+ TInputValidator,
702
690
  undefined,
703
- undefined,
704
- TServerFnResponseType
691
+ undefined
705
692
  >,
706
- FunctionMiddlewareClient<
707
- TRegister,
708
- TMiddlewares,
709
- TValidator,
710
- ServerFnResponseType
711
- > {}
693
+ FunctionMiddlewareClient<TRegister, TMiddlewares, TInputValidator> {}
712
694
 
713
- export interface RequestMiddleware
714
- extends RequestMiddlewareAfterMiddleware<undefined> {
695
+ export interface RequestMiddleware<TRegister>
696
+ extends RequestMiddlewareAfterMiddleware<TRegister, undefined> {
715
697
  middleware: <const TMiddlewares = undefined>(
716
698
  middlewares: Constrain<TMiddlewares, ReadonlyArray<AnyRequestMiddleware>>,
717
- ) => RequestMiddlewareAfterMiddleware<TMiddlewares>
699
+ ) => RequestMiddlewareAfterMiddleware<TRegister, TMiddlewares>
718
700
  }
719
701
 
720
- export type AnyRequestMiddleware = RequestMiddlewareWithTypes<any, any>
702
+ export type AnyRequestMiddleware = RequestMiddlewareWithTypes<any, any, any>
721
703
 
722
- export interface RequestMiddlewareWithTypes<TMiddlewares, TServerContext> {
723
- _types: RequestMiddlewareTypes<TMiddlewares, TServerContext>
704
+ export interface RequestMiddlewareWithTypes<
705
+ TRegister,
706
+ TMiddlewares,
707
+ TServerContext,
708
+ > {
709
+ _types: RequestMiddlewareTypes<TRegister, TMiddlewares, TServerContext>
710
+ options: RequestMiddlewareOptions<TRegister, TMiddlewares, TServerContext>
724
711
  }
725
712
 
726
- export interface RequestMiddlewareTypes<TMiddlewares, TServerContext> {
713
+ export interface RequestMiddlewareOptions<
714
+ in out TRegister,
715
+ in out TMiddlewares,
716
+ in out TServerContext,
717
+ > {
718
+ middleware?: TMiddlewares
719
+ server?: RequestServerFn<TRegister, TMiddlewares, TServerContext>
720
+ }
721
+ export interface RequestMiddlewareTypes<
722
+ TRegister,
723
+ TMiddlewares,
724
+ TServerContext,
725
+ > {
727
726
  type: 'request'
728
727
  middlewares: TMiddlewares
729
728
  serverContext: TServerContext
730
- allServerContext: AssignAllServerContext<
729
+ allServerContext: AssignAllServerRequestContext<
730
+ TRegister,
731
731
  TMiddlewares,
732
732
  undefined,
733
733
  TServerContext
734
734
  >
735
735
  }
736
736
 
737
- export interface RequestMiddlewareAfterMiddleware<TMiddlewares>
738
- extends RequestMiddlewareWithTypes<TMiddlewares, undefined>,
739
- RequestMiddlewareServer<TMiddlewares> {}
737
+ export interface RequestMiddlewareAfterMiddleware<TRegister, TMiddlewares>
738
+ extends RequestMiddlewareWithTypes<TRegister, TMiddlewares, undefined>,
739
+ RequestMiddlewareServer<TRegister, TMiddlewares> {}
740
740
 
741
- export interface RequestMiddlewareServer<TMiddlewares> {
741
+ export interface RequestMiddlewareServer<TRegister, TMiddlewares> {
742
742
  server: <TServerContext = undefined>(
743
- fn: RequestServerFn<TMiddlewares, TServerContext>,
744
- ) => RequestMiddlewareAfterServer<TMiddlewares, TServerContext>
743
+ fn: RequestServerFn<TRegister, TMiddlewares, TServerContext>,
744
+ ) => RequestMiddlewareAfterServer<TRegister, TMiddlewares, TServerContext>
745
745
  }
746
746
 
747
- export type RequestServerFn<TMiddlewares, TServerContext> = (
748
- options: RequestServerOptions<TMiddlewares>,
749
- ) => RequestMiddlewareServerFnResult<TMiddlewares, TServerContext>
747
+ export type RequestServerFn<TRegister, TMiddlewares, TServerContext> = (
748
+ options: RequestServerOptions<TRegister, TMiddlewares>,
749
+ ) => RequestMiddlewareServerFnResult<TRegister, TMiddlewares, TServerContext>
750
750
 
751
- export interface RequestServerOptions<TMiddlewares> {
751
+ export interface RequestServerOptions<TRegister, TMiddlewares> {
752
752
  request: Request
753
753
  pathname: string
754
- context: AssignAllServerContext<TMiddlewares>
755
- next: RequestServerNextFn<TMiddlewares>
754
+ context: Expand<AssignAllServerRequestContext<TRegister, TMiddlewares>>
755
+ next: RequestServerNextFn<TRegister, TMiddlewares>
756
756
  }
757
757
 
758
- export type RequestServerNextFn<TMiddlewares> = <TServerContext = undefined>(
758
+ export type RequestServerNextFn<TRegister, TMiddlewares> = <
759
+ TServerContext = undefined,
760
+ >(
759
761
  options?: RequestServerNextFnOptions<TServerContext>,
760
- ) => RequestMiddlewareServerFnResult<TMiddlewares, TServerContext>
762
+ ) => RequestMiddlewareServerFnResult<TRegister, TMiddlewares, TServerContext>
761
763
 
762
764
  export interface RequestServerNextFnOptions<TServerContext> {
763
765
  context?: TServerContext
764
766
  }
765
767
 
766
- export type RequestMiddlewareServerFnResult<TMiddlewares, TServerContext> =
767
- | Promise<RequestServerResult<TMiddlewares, TServerContext>>
768
- | RequestServerResult<TMiddlewares, TServerContext>
768
+ export type RequestMiddlewareServerFnResult<
769
+ TRegister,
770
+ TMiddlewares,
771
+ TServerContext,
772
+ > =
773
+ | Promise<RequestServerResult<TRegister, TMiddlewares, TServerContext>>
774
+ | RequestServerResult<TRegister, TMiddlewares, TServerContext>
769
775
 
770
- export interface RequestServerResult<TMiddlewares, TServerContext> {
776
+ export interface RequestServerResult<TRegister, TMiddlewares, TServerContext> {
771
777
  request: Request
772
778
  pathname: string
773
779
  context: Expand<
774
- AssignAllServerContext<TMiddlewares, undefined, TServerContext>
780
+ AssignAllServerRequestContext<
781
+ TRegister,
782
+ TMiddlewares,
783
+ undefined,
784
+ TServerContext
785
+ >
775
786
  >
776
787
  response: Response
777
788
  }
778
789
 
779
- export interface RequestMiddlewareAfterServer<TMiddlewares, TServerContext>
780
- extends RequestMiddlewareWithTypes<TMiddlewares, TServerContext> {}
790
+ export interface RequestMiddlewareAfterServer<
791
+ TRegister,
792
+ TMiddlewares,
793
+ TServerContext,
794
+ > extends RequestMiddlewareWithTypes<TRegister, TMiddlewares, TServerContext> {}