import { AnyValidator, Constrain, Expand, ResolveValidatorInput, SerializerParse, SerializerStringify, SerializerStringifyBy, Validator } from '@tanstack/router-core'; import { AnyMiddleware, AssignAllClientSendContext, AssignAllServerContext, IntersectAllValidatorInputs, IntersectAllValidatorOutputs } from './createMiddleware.js'; export interface JsonResponse extends Response { json: () => Promise; } export type CompiledFetcherFnOptions = { method: Method; data: unknown; headers?: HeadersInit; signal?: AbortSignal; context?: any; }; export type Fetcher = undefined extends IntersectAllValidatorInputs ? OptionalFetcher : RequiredFetcher; export interface FetcherBase { url: string; __executeServer: (opts: { method: Method; data: unknown; headers?: HeadersInit; context?: any; signal: AbortSignal; }) => Promise; } export type FetchResult = false extends TFullResponse ? Promise> : Promise>; export interface OptionalFetcher extends FetcherBase { (options?: OptionalFetcherDataOptions): FetchResult; } export interface RequiredFetcher extends FetcherBase { (opts: RequiredFetcherDataOptions): FetchResult; } export type FetcherBaseOptions = { headers?: HeadersInit; type?: ServerFnType; signal?: AbortSignal; fullResponse?: TFullResponse; }; export type ServerFnType = 'static' | 'dynamic'; export interface OptionalFetcherDataOptions extends FetcherBaseOptions { data?: Expand>; } export interface RequiredFetcherDataOptions extends FetcherBaseOptions { data: Expand>; } export interface FullFetcherData { error: unknown; result: FetcherData; context: AssignAllClientSendContext; } export type FetcherData = TResponse extends JsonResponse ? SerializerParse> : SerializerParse; export type RscStream = { __cacheState: T; }; export type Method = 'GET' | 'POST'; export type ServerFn = (ctx: ServerFnCtx) => Promise> | SerializerStringify; export interface ServerFnCtx { method: TMethod; data: Expand>; context: Expand>; signal: AbortSignal; } export type CompiledFetcherFn = { (opts: CompiledFetcherFnOptions & ServerFnBaseOptions): Promise; url: string; }; type ServerFnBaseOptions = { method: TMethod; validateClient?: boolean; middleware?: Constrain>; validator?: ConstrainValidator; extractedFn?: CompiledFetcherFn; serverFn?: ServerFn; functionId: string; type: ServerFnTypeOrTypeFn; }; export type ValidatorSerializerStringify = Validator, Date | undefined | FormData>, any>; export type ConstrainValidator = unknown extends TValidator ? TValidator : Constrain>; export interface ServerFnMiddleware { middleware: (middlewares: Constrain>) => ServerFnAfterMiddleware; } export interface ServerFnAfterMiddleware extends ServerFnValidator, ServerFnTyper, ServerFnHandler { } export type ValidatorFn = (validator: ConstrainValidator) => ServerFnAfterValidator; export interface ServerFnValidator { validator: ValidatorFn; } export interface ServerFnAfterValidator extends ServerFnMiddleware, ServerFnTyper, ServerFnHandler { } export interface ServerFnTyper { type: (typer: ServerFnTypeOrTypeFn) => ServerFnAfterTyper; } export type ServerFnTypeOrTypeFn = ServerFnType | ((ctx: ServerFnCtx) => ServerFnType); export interface ServerFnAfterTyper extends ServerFnHandler { } export interface ServerFnHandler { handler: (fn?: ServerFn) => Fetcher; } export interface ServerFnBuilder extends ServerFnMiddleware, ServerFnValidator, ServerFnTyper, ServerFnHandler { options: ServerFnBaseOptions; } type StaticCachedResult = { ctx?: { result: any; context: any; }; error?: any; }; export type ServerFnStaticCache = { getItem: (ctx: MiddlewareResult) => StaticCachedResult | Promise; setItem: (ctx: MiddlewareResult, response: StaticCachedResult) => Promise; fetchItem: (ctx: MiddlewareResult) => StaticCachedResult | Promise; }; export declare function setServerFnStaticCache(cache?: ServerFnStaticCache | (() => ServerFnStaticCache | undefined)): () => void; export declare function createServerFnStaticCache(serverFnStaticCache: ServerFnStaticCache): ServerFnStaticCache; export declare function createServerFn(options?: { method?: TMethod; type?: ServerFnType; }, __opts?: ServerFnBaseOptions): ServerFnBuilder; export type MiddlewareOptions = { method: Method; data: any; headers?: HeadersInit; signal?: AbortSignal; sendContext?: any; context?: any; type: ServerFnTypeOrTypeFn; functionId: string; }; export type MiddlewareResult = MiddlewareOptions & { result?: unknown; error?: unknown; type: ServerFnTypeOrTypeFn; }; export type NextFn = (ctx: MiddlewareResult) => Promise; export type MiddlewareFn = (ctx: MiddlewareOptions & { next: NextFn; }) => Promise; export {};