/**
 * @module HotModule
 * 热更新模块
 */
import { NodeHotModule } from '.';
import Hook from './Hook';
export type HookTypes = 'accept' | 'pre' | 'preend' | 'created' | 'postend';
export type OnChangedHandler = (now: NodeHotModule, old: NodeHotModule) => void;
export default class HotModule {
    /**
     * 当前接受的accept
     */
    hooks: {
        /**
      * 在更新后执行
      */
        accept: Hook<OnChangedHandler>;
        /**
         * 在执行accept前执行
         */
        pre: Hook<(oldModule: NodeHotModule) => void>;
        /**
         * 在执行完pre在accept之前执行
         */
        preend: Hook<(oldModule: NodeHotModule) => void>;
        /**
         * 再热更新完毕后
         */
        postend: Hook<OnChangedHandler>;
        /**
         * 新增文件后触发
         */
        created: Hook<(current: NodeHotModule) => void>;
        /**
         * 热更新结束
         */
        done: Hook<OnChangedHandler>;
    };
    hotExports: any;
    /**
     * 模块的唯一id
     */
    id: string;
    /**
     * 当前模块被哪些模块依赖
     */
    reasons: Array<HotModule>;
    /**
     * 构建一个热更新模块
     * @param id 模块id
     */
    constructor(id: any);
    /**
     * 判断，是否有任意钩子监听
     */
    get hasAnyHooks(): boolean;
    /**
     * 判断当前执行，是否是从热更新触发
     */
    accept(handler: OnChangedHandler): this;
    /**
     * 监听预更新，在热更新前执行
     */
    preload(handler: (old: NodeHotModule) => void): this;
    /**
     * 在pre钩子执行后执行
     */
    preend(handler: (old: NodeHotModule) => void): this;
    created(handler: (m: NodeHotModule) => void): this;
    /**
     * 清除hooks
     * @param types 要清除的hooks类型
     */
    clean(...types: Array<string>): this;
    /**
     * 热更新完毕
     * @param params
     */
    postend(handler: OnChangedHandler): this;
    allDone(handler: OnChangedHandler): this;
}
