import type { ModuleInfo, PartialResolvedId } from "rollup";
import { Server } from ".";
import { TransformResult } from "./transformRequest";
/**
 * 模块节点类
 *
 * url 和id 的区别在于：
 * url是实际请求的url，id是通过插件进行转换标记后的唯一标志
 * id默认值是url，它可以理解为是url的一个值的变种，比url参数更多，更精准
 * 当然也可以通过插件来更改id指向，可能会指向不通的文件也可能路径不是一个路径
 *
 * filePath 是url的一个无参数的指向，所以他的映射是一对多的关系
 *
 * meta 是对module的标注， 提供插件方做标记和过滤分类用
 */
export declare class ModuleNode {
    url: string;
    /**
     * id提供扩展用，默认为url，将由插件三方去自由扩展对文件进行特殊化标记
     */
    id?: string;
    file?: string;
    type: "css" | "js";
    info?: ModuleInfo;
    /**
     * 模块meta标记，供插件做标注
     */
    meta?: Record<string, any>;
    lastHMRTimer: number;
    lastDisposeTimestamp: number;
    /**
     * 编译结果
     */
    transformResult?: TransformResult;
    /** 是否存在import.meta.hot.accept 自我处理程序 */
    isSelfAccepting?: boolean;
    importers: Set<ModuleNode>;
    importedModules: Set<ModuleNode>;
    acceptedHMRDeps: Set<ModuleNode>;
    acceptedHMRExports: Set<string> | null;
    constructor(url: string, setDefaultSelfAcceping?: boolean);
}
export declare class ModuleMap {
    private server;
    private resolveIdCallBack;
    /**
     * URL -> 模块 映射表
     */
    urlModuleMap: Map<string, ModuleNode>;
    /**
     * moduleId  -> 模块映射表
     */
    idModuleMap: Map<string, ModuleNode>;
    /**
     * 文件 -> 模块映射表 一个文件可能存在多版本多参数，多转换module
     */
    fileModuleMap: Map<string, Set<ModuleNode>>;
    safeModulesPath: Set<string>;
    constructor(server: Server, resolveIdCallBack: (url: string) => Promise<PartialResolvedId | null>);
    /**
     * 根据id查询module
     * @param id
     * @returns
     */
    getModuleById(id: string): ModuleNode | undefined;
    getModuleByUrl(strUrl: string): Promise<ModuleNode | undefined>;
    getModulesByFile(file: string): Set<ModuleNode> | undefined;
    /**
     * 作废一个module，只做销毁标记，清除过程产物，不做数据移除
     * 不移除，留作后续可能会被重新执行
     * @param module
     */
    disposeModule(module: ModuleNode, isHmr?: boolean, timestamp?: number): void;
    /**
     *  作废所有module结果
     */
    disposeAllModule(): void;
    /**
     * 根据文件销毁相关Module
     * @param file
     */
    disposeModuleByFile(file: string): void;
    /**
     * 根据url添加入口模块，存在则返回，没有则创建
     * @param url
     * @returns
     */
    addEntryModuleUrl(url: string, setDefaultSelfAcceping?: boolean): Promise<ModuleNode>;
    addEntryByFile(file: string): ModuleNode;
    /**
     * 对URL进行解析转换
     * 1. 去除hmr 时间戳
     * 2. 去除import query
     * 3. 去plugin中转换id以及meta
     * 4. 对url进行合理化转换
     * @param url
     * @returns
     */
    resolveUrl(url: string): Promise<{
        url: string;
        id: string;
        meta?: Record<string, any> | null;
    }>;
    /**
     * 更新模块Node
     * @param module
     * @param importedModules
     * @param acceptedModules
     * @param acceptedExports
     * @param isSelfAccepting
     * @returns 返回去除的引用(不再使用的)
     */
    updateModuleInfo(module: ModuleNode, importedModules: Set<string | ModuleNode>, acceptedModules: Set<string | ModuleNode>, acceptedExports: Set<string> | null, isSelfAccepting: boolean): Promise<Set<ModuleNode> | undefined>;
}
