import fs from 'fs';
import HotModule from './HotModule';
import Module from 'module';
import ListReplacement from './updater/ListReplacement';
type Hooks = HotModule['hooks'];
type HookTypeKeys = keyof Hooks;
export declare class NodeHotModule extends Module {
    hot: HotModule;
}
export declare class HotOptions {
    /**
     * 热更新监听目录
     */
    cwd: string | Array<string>;
    /**
     * 热更新执行频率，单位：毫秒
     */
    reloadTimeout?: number;
    /**
     * 排除目录或者文件
     */
    exclude?: RegExp;
    /**
     * 是否解除node_modules限制
     */
    includeNodeModules?: boolean;
}
declare class HotReload {
    ListReplacement: typeof ListReplacement;
    /**
     * 热更新配置
     */
    options: HotOptions;
    /**
     * 当前所有热更新模块
     */
    private hotModules;
    /**
     * 热更新执行频率单位：毫秒
     */
    private reloadTimeout;
    private isHotUpdating;
    private allHash;
    constructor();
    /**
     * 创建一个数据热更新器
     */
    createHotUpdater<T>(data: any, now: any, old: any): import("./updater/ArrayUpdater").default<T> | import("./updater/MapUpdater").default<T> | import("./updater/ObjectUpdater").default<T>;
    /**
     * 创建指定id的热更新模块，如果模块已存在，则直接返回
     * @param {Module} mod 模块对象
     */
    create(mod: any): HotModule;
    /**
     * 监听文件改动
     */
    watch(cwd: any): fs.FSWatcher;
    hotWatch(type: any, filename: any): void;
    renderId(id: any): any;
    /**
     * 文件改动时，处理热更新
     * @param id
     */
    handleReload(file: string): void;
    /**
     * 重载模块
     */
    tryReload(old: NodeHotModule): boolean;
    /**
     * 广播注册的热更新消息
     */
    invokeHook<K extends HookTypeKeys>(name: K, ...args: Parameters<Hooks[K]['invoke']>): void;
    /**
     * 项目启动后，初始化构建热更新模块
     */
    findAllReasons(old: NodeHotModule): HotModule[];
    makeHash(file: string): string;
    createHash(file: string): string;
    /**
     * 监听改变
     */
    run(options?: HotOptions): {
        options: HotOptions;
        dirs: string[];
        close(): void;
    };
}
declare const _default: HotReload;
export default _default;
