import { AnyContext, AnyRoute, Assign, Constrain, Expand, ResolveAllParamsFromParent, UnionToIntersection } from '@tanstack/router-core'; import { AnyRequestMiddleware, AssignAllServerRequestContext } from './createMiddleware.js'; declare module '@tanstack/router-core' { interface FilebaseRouteOptionsInterface = {}, TLoaderFn = undefined, TRouterContext = {}, TRouteContextFn = AnyContext, TBeforeLoadFn = AnyContext, TRemountDepsFn = AnyContext, TSSR = unknown, TServerMiddlewares = unknown, THandlers = undefined> { server?: RouteServerOptions; } interface RouteTypes { middleware: TServerMiddlewares; allServerContext: ResolveAllServerContext; } interface BeforeLoadContextOptions { serverContext?: Expand, ExtractHandlersContext>>; } interface LoaderFnContext { serverContext?: Expand, ExtractHandlersContext>>; } } type ExtractHandlersContext = THandlers extends (...args: any) => CustomHandlerFunctionsRecord ? UnionToIntersection : THandlers extends Record> ? UnionToIntersection : undefined; export interface RouteServerOptions { middleware?: Constrain>; handlers?: Constrain>> | ((opts: HandlersFnOpts) => CustomHandlerFunctionsRecord)>; } declare const createHandlersSymbol: unique symbol; type CustomHandlerFunctionsRecord = { [createHandlersSymbol]: true; } & Partial>>; export interface HandlersFnOpts { createHandlers: CreateHandlersFn; } export type CreateHandlersFn = (opts: CreateMethodFnOpts) => CustomHandlerFunctionsRecord; export interface CreateMethodFnOpts { ANY?: RouteMethodHandler; GET?: RouteMethodHandler; POST?: RouteMethodHandler; PUT?: RouteMethodHandler; PATCH?: RouteMethodHandler; DELETE?: RouteMethodHandler; OPTIONS?: RouteMethodHandler; HEAD?: RouteMethodHandler; } export type RouteMethodHandler = RouteMethodHandlerFn | RouteMethodBuilderOptions; export interface RouteMethodBuilderOptions { handler?: RouteMethodHandlerFn; middleware?: Constrain>; } export type ResolveAllServerContext = unknown extends TParentRoute ? AssignAllServerRequestContext : Assign>; export type RouteMethod = 'ANY' | 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS' | 'HEAD'; export type RouteMethodHandlerFn = (ctx: RouteMethodHandlerCtx) => RouteMethodResult | Promise>; export type RouteMethodResult = Response | undefined | RouteMethodNextResult; export type RouteMethodNextResult = { isNext: true; context: TContext; }; export interface RouteMethodHandlerCtx { context: Expand>; request: Request; params: Expand>; pathname: TFullPath; next: (options?: { context?: TContext; }) => RouteMethodNextResult; } export type MergeMethodMiddlewares = TServerMiddlewares extends ReadonlyArray ? TMethodMiddlewares extends ReadonlyArray ? readonly [...TServerMiddlewares, ...TMethodMiddlewares] : TServerMiddlewares : TMethodMiddlewares; export type AssignAllMethodContext = ResolveAllServerContext>; export {};