@@ -20,6 +20,7 @@ import type {
20
20
import type { JsonResponse } from '@tanstack/router-core/ssr/client'
21
21
import type {
22
22
AnyFunctionMiddleware ,
23
+ AnyRequestMiddleware ,
23
24
AssignAllServerContext ,
24
25
FunctionMiddlewareClientFnResult ,
25
26
FunctionMiddlewareServerFnResult ,
@@ -175,7 +176,7 @@ export function createServerFn<
175
176
}
176
177
177
178
export async function executeMiddleware (
178
- middlewares : Array < AnyFunctionMiddleware > ,
179
+ middlewares : Array < AnyFunctionMiddleware | AnyRequestMiddleware > ,
179
180
env : 'client' | 'server' ,
180
181
opts : ServerFnMiddlewareOptions ,
181
182
) : Promise < ServerFnMiddlewareResult > {
@@ -193,13 +194,17 @@ export async function executeMiddleware(
193
194
return ctx
194
195
}
195
196
196
- if ( nextMiddleware . options . validator && env === 'server' ) {
197
+ if (
198
+ 'validator' in nextMiddleware . options &&
199
+ nextMiddleware . options . validator &&
200
+ env === 'server'
201
+ ) {
197
202
// Execute the middleware's input function
198
203
ctx . data = await execValidator ( nextMiddleware . options . validator , ctx . data )
199
204
}
200
205
201
206
const middlewareFn = (
202
- env === 'client'
207
+ env === 'client' && 'client' in nextMiddleware . options
203
208
? nextMiddleware . options . client
204
209
: nextMiddleware . options . server
205
210
) as MiddlewareFn | undefined
@@ -351,7 +356,10 @@ export type ServerFnBaseOptions<
351
356
TInput = unknown ,
352
357
> = {
353
358
method : TMethod
354
- middleware ?: Constrain < TMiddlewares , ReadonlyArray < AnyFunctionMiddleware > >
359
+ middleware ?: Constrain <
360
+ TMiddlewares ,
361
+ ReadonlyArray < AnyFunctionMiddleware | AnyRequestMiddleware >
362
+ >
355
363
validator ?: ConstrainValidator < TRegister , TInput >
356
364
extractedFn ?: CompiledFetcherFn < TRegister , TResponse >
357
365
serverFn ?: ServerFn < TRegister , TMethod , TMiddlewares , TInput , TResponse >
@@ -409,7 +417,9 @@ export interface ServerFnMiddleware<
409
417
middlewares : Constrain <
410
418
TNewMiddlewares ,
411
419
ReadonlyArray <
412
- AnyFunctionMiddleware | ServerFnAfterMiddleware < any , any , any , any >
420
+ | AnyFunctionMiddleware
421
+ | AnyRequestMiddleware
422
+ | ServerFnAfterMiddleware < any , any , any , any >
413
423
>
414
424
> ,
415
425
) => ServerFnAfterMiddleware <
@@ -500,12 +510,14 @@ export interface ServerFnBuilder<
500
510
}
501
511
502
512
export function flattenMiddlewares (
503
- middlewares : Array < AnyFunctionMiddleware > ,
504
- ) : Array < AnyFunctionMiddleware > {
505
- const seen = new Set < AnyFunctionMiddleware > ( )
506
- const flattened : Array < AnyFunctionMiddleware > = [ ]
507
-
508
- const recurse = ( middleware : Array < AnyFunctionMiddleware > ) => {
513
+ middlewares : Array < AnyFunctionMiddleware | AnyRequestMiddleware > ,
514
+ ) : Array < AnyFunctionMiddleware | AnyRequestMiddleware > {
515
+ const seen = new Set < AnyFunctionMiddleware | AnyRequestMiddleware > ( )
516
+ const flattened : Array < AnyFunctionMiddleware | AnyRequestMiddleware > = [ ]
517
+
518
+ const recurse = (
519
+ middleware : Array < AnyFunctionMiddleware | AnyRequestMiddleware > ,
520
+ ) => {
509
521
middleware . forEach ( ( m ) => {
510
522
if ( m . options . middleware ) {
511
523
recurse ( m . options . middleware )
0 commit comments