import { AnyRouter, ControllablePromise, MakeRouteMatch } from '@tanstack/react-router';
import { DeferredPromiseState, Manifest } from '@tanstack/router-core';
declare global {
    interface Window {
        __TSR_SSR__?: StartSsrGlobal;
    }
}
export interface StartSsrGlobal {
    matches: Array<SsrMatch>;
    streamedValues: Record<string, {
        value: any;
        parsed: any;
    }>;
    cleanScripts: () => void;
    dehydrated?: any;
    initMatch: (match: SsrMatch) => void;
    resolvePromise: (opts: {
        matchId: string;
        id: number;
        promiseState: DeferredPromiseState<any>;
    }) => void;
    injectChunk: (opts: {
        matchId: string;
        id: number;
        chunk: string;
    }) => void;
    closeStream: (opts: {
        matchId: string;
        id: number;
    }) => void;
}
export interface SsrMatch {
    id: string;
    __beforeLoadContext: string;
    loaderData?: string;
    error?: string;
    extracted?: Array<ClientExtractedEntry>;
    updatedAt: MakeRouteMatch['updatedAt'];
    status: MakeRouteMatch['status'];
}
export type ClientExtractedEntry = ClientExtractedStream | ClientExtractedPromise;
export interface ClientExtractedPromise extends ClientExtractedBaseEntry {
    type: 'promise';
    value?: ControllablePromise<any>;
}
export interface ClientExtractedStream extends ClientExtractedBaseEntry {
    type: 'stream';
    value?: ReadableStream & {
        controller?: ReadableStreamDefaultController;
    };
}
export interface ClientExtractedBaseEntry {
    type: string;
    path: Array<string>;
}
export interface ResolvePromiseState {
    matchId: string;
    id: number;
    promiseState: DeferredPromiseState<any>;
}
export interface DehydratedRouter {
    manifest: Manifest | undefined;
    dehydratedData: any;
}
export declare function hydrate(router: AnyRouter): Promise<void[][]>;
