import { TSS_SERVER_FUNCTION_FACTORY, TSS_SERVER_FUNCTION } from './constants.js'; import { AnyValidator, Constrain, Expand, Register, RegisteredSerializableInput, ResolveValidatorInput, ValidateSerializable, ValidateSerializableInput, Validator } from '@tanstack/router-core'; import { AnyFunctionMiddleware, AnyRequestMiddleware, AssignAllServerFnContext, IntersectAllValidatorInputs, IntersectAllValidatorOutputs } from './createMiddleware.js'; export type CreateServerFn = (options?: { method?: TMethod; }, __opts?: ServerFnBaseOptions) => ServerFnBuilder; export declare const createServerFn: CreateServerFn; export declare function executeMiddleware(middlewares: Array, env: 'client' | 'server', opts: ServerFnMiddlewareOptions): 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 { [TSS_SERVER_FUNCTION]: true; url: string; __executeServer: (opts: { method: Method; data: unknown; headers?: HeadersInit; context?: any; signal: AbortSignal; }) => Promise; } export interface OptionalFetcher extends FetcherBase { (options?: OptionalFetcherDataOptions): Promise>; } export interface RequiredFetcher extends FetcherBase { (opts: RequiredFetcherDataOptions): Promise>; } export type FetcherBaseOptions = { headers?: HeadersInit; signal?: AbortSignal; }; export interface OptionalFetcherDataOptions extends FetcherBaseOptions { data?: Expand>; } export interface RequiredFetcherDataOptions extends FetcherBaseOptions { data: Expand>; } export type RscStream = { __cacheState: T; }; export type Method = 'GET' | 'POST'; export type ServerFnReturnType = TResponse extends PromiseLike ? Promise> : TResponse extends Response ? TResponse : ValidateSerializableInput; export type ServerFn = (ctx: ServerFnCtx) => ServerFnReturnType; export interface ServerFnCtx { data: Expand>; context: Expand>; signal: AbortSignal; } export type CompiledFetcherFn = { (opts: CompiledFetcherFnOptions & ServerFnBaseOptions): Promise; url: string; }; export type ServerFnBaseOptions = { method: TMethod; middleware?: Constrain>; inputValidator?: ConstrainValidator; extractedFn?: CompiledFetcherFn; serverFn?: ServerFn; functionId: string; }; export type ValidateValidatorInput = TMethod extends 'POST' ? ResolveValidatorInput extends FormData ? ResolveValidatorInput : ValidateSerializable, RegisteredSerializableInput> : ValidateSerializable, RegisteredSerializableInput>; export type ValidateValidator = ValidateValidatorInput extends infer TInput ? Validator : never; export type ConstrainValidator = (unknown extends TInputValidator ? TInputValidator : ResolveValidatorInput extends ValidateValidator ? TInputValidator : never) | ValidateValidator; export type AppendMiddlewares = TMiddlewares extends ReadonlyArray ? TNewMiddlewares extends ReadonlyArray ? readonly [...TMiddlewares, ...TNewMiddlewares] : TMiddlewares : TNewMiddlewares; export interface ServerFnMiddleware { middleware: (middlewares: Constrain>) => ServerFnAfterMiddleware, TInputValidator>; } export interface ServerFnAfterMiddleware extends ServerFnWithTypes, ServerFnMiddleware, ServerFnValidator, ServerFnHandler { (options?: { method?: TNewMethod; }): ServerFnAfterMiddleware; } export type ValidatorFn = (inputValidator: ConstrainValidator) => ServerFnAfterValidator; export interface ServerFnValidator { inputValidator: ValidatorFn; } export interface ServerFnAfterValidator extends ServerFnWithTypes, ServerFnMiddleware, ServerFnHandler { } export interface ServerFnAfterTyper extends ServerFnWithTypes, ServerFnHandler { } export interface ServerFnHandler { handler: (fn?: ServerFn) => Fetcher; } export interface ServerFnBuilder extends ServerFnWithTypes, ServerFnMiddleware, ServerFnValidator, ServerFnHandler { options: ServerFnBaseOptions; } export interface ServerFnWithTypes { _types: ServerFnTypes; options: ServerFnBaseOptions; [TSS_SERVER_FUNCTION_FACTORY]: true; } export type AnyServerFn = ServerFnWithTypes; export interface ServerFnTypes { method: TMethod; middlewares: TMiddlewares; inputValidator: TInputValidator; response: TResponse; allServerContext: AssignAllServerFnContext; allInput: IntersectAllValidatorInputs; allOutput: IntersectAllValidatorOutputs; } export declare function flattenMiddlewares(middlewares: Array): Array; export type ServerFnMiddlewareOptions = { method: Method; data: any; headers?: HeadersInit; signal?: AbortSignal; sendContext?: any; context?: any; functionId: string; }; export type ServerFnMiddlewareResult = ServerFnMiddlewareOptions & { result?: unknown; error?: unknown; }; export type NextFn = (ctx: ServerFnMiddlewareResult) => Promise; export type MiddlewareFn = (ctx: ServerFnMiddlewareOptions & { next: NextFn; }) => Promise; export declare const applyMiddleware: (middlewareFn: MiddlewareFn, ctx: ServerFnMiddlewareOptions, nextFn: NextFn) => Promise; export declare function execValidator(validator: AnyValidator, input: unknown): unknown;