import type { ModuleSystem } from '@farmfe/runtime';
import { HotModuleState } from './hot-module-state.js';
import { HMRPayload, HmrUpdateResult, RawHmrUpdateResult } from './types.js';
export declare class HmrClient {
    private moduleSystem;
    socket: WebSocket;
    registeredHotModulesMap: Map<string, HotModuleState>;
    disposeMap: Map<string, (data: any) => void | Promise<void>>;
    pruneMap: Map<string, (data: any) => void | Promise<void>>;
    customListenersMap: Map<string, ((data: any) => void | Promise<void>)[]>;
    constructor(moduleSystem: ModuleSystem);
    connect(): WebSocket;
    closeConnectionGracefully(): void;
    applyHotUpdates(result: HmrUpdateResult, moduleSystem: ModuleSystem): Promise<void>;
    notifyListeners(event: string, data: any): Promise<void>;
    /**
     * handle vite HMR message, except farm-update which is handled by handleFarmUpdate, other messages are handled the same as vite
     * @param payload Vite HMR payload
     */
    handleMessage(payload: HMRPayload): Promise<void>;
    handleFarmUpdate(result: RawHmrUpdateResult): void;
}
export declare function createOverlay(err: any): void;
export declare function waitForWindowShow(): Promise<void>;
export declare function wait(ms: number): Promise<unknown>;
