Skip to content

Commit 47f897b

Browse files
fix: make middleware types compatible (#5056)
1 parent 6658f75 commit 47f897b

File tree

2 files changed

+31
-11
lines changed

2 files changed

+31
-11
lines changed

packages/start-client-core/src/createMiddleware.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -650,8 +650,16 @@ export type AnyRequestMiddleware = RequestMiddlewareWithTypes<any, any>
650650

651651
export interface RequestMiddlewareWithTypes<TMiddlewares, TServerContext> {
652652
_types: RequestMiddlewareTypes<TMiddlewares, TServerContext>
653+
options: RequestMiddlewareOptions<TMiddlewares, TServerContext>
653654
}
654655

656+
export interface RequestMiddlewareOptions<
657+
in out TMiddlewares,
658+
in out TServerContext,
659+
> {
660+
middleware?: TMiddlewares
661+
server?: RequestServerFn<TMiddlewares, TServerContext>
662+
}
655663
export interface RequestMiddlewareTypes<TMiddlewares, TServerContext> {
656664
type: 'request'
657665
middlewares: TMiddlewares

packages/start-client-core/src/createServerFn.ts

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import type {
2020
import type { JsonResponse } from '@tanstack/router-core/ssr/client'
2121
import type {
2222
AnyFunctionMiddleware,
23+
AnyRequestMiddleware,
2324
AssignAllServerContext,
2425
FunctionMiddlewareClientFnResult,
2526
FunctionMiddlewareServerFnResult,
@@ -175,7 +176,7 @@ export function createServerFn<
175176
}
176177

177178
export async function executeMiddleware(
178-
middlewares: Array<AnyFunctionMiddleware>,
179+
middlewares: Array<AnyFunctionMiddleware | AnyRequestMiddleware>,
179180
env: 'client' | 'server',
180181
opts: ServerFnMiddlewareOptions,
181182
): Promise<ServerFnMiddlewareResult> {
@@ -193,13 +194,17 @@ export async function executeMiddleware(
193194
return ctx
194195
}
195196

196-
if (nextMiddleware.options.validator && env === 'server') {
197+
if (
198+
'validator' in nextMiddleware.options &&
199+
nextMiddleware.options.validator &&
200+
env === 'server'
201+
) {
197202
// Execute the middleware's input function
198203
ctx.data = await execValidator(nextMiddleware.options.validator, ctx.data)
199204
}
200205

201206
const middlewareFn = (
202-
env === 'client'
207+
env === 'client' && 'client' in nextMiddleware.options
203208
? nextMiddleware.options.client
204209
: nextMiddleware.options.server
205210
) as MiddlewareFn | undefined
@@ -351,7 +356,10 @@ export type ServerFnBaseOptions<
351356
TInput = unknown,
352357
> = {
353358
method: TMethod
354-
middleware?: Constrain<TMiddlewares, ReadonlyArray<AnyFunctionMiddleware>>
359+
middleware?: Constrain<
360+
TMiddlewares,
361+
ReadonlyArray<AnyFunctionMiddleware | AnyRequestMiddleware>
362+
>
355363
validator?: ConstrainValidator<TRegister, TInput>
356364
extractedFn?: CompiledFetcherFn<TRegister, TResponse>
357365
serverFn?: ServerFn<TRegister, TMethod, TMiddlewares, TInput, TResponse>
@@ -409,7 +417,9 @@ export interface ServerFnMiddleware<
409417
middlewares: Constrain<
410418
TNewMiddlewares,
411419
ReadonlyArray<
412-
AnyFunctionMiddleware | ServerFnAfterMiddleware<any, any, any, any>
420+
| AnyFunctionMiddleware
421+
| AnyRequestMiddleware
422+
| ServerFnAfterMiddleware<any, any, any, any>
413423
>
414424
>,
415425
) => ServerFnAfterMiddleware<
@@ -500,12 +510,14 @@ export interface ServerFnBuilder<
500510
}
501511

502512
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+
) => {
509521
middleware.forEach((m) => {
510522
if (m.options.middleware) {
511523
recurse(m.options.middleware)

0 commit comments

Comments
 (0)