import { ResolvedConfig } from "../config";
import { DepCache } from "./cache";
import { DepMetadata, DepInfo } from "./metadata";
import { Server } from "../server";
/**
 * 扫描项目内所有引用关系
 * @param config
 */
export declare function scanProjectDependencies(config: ResolvedConfig): Promise<Record<string, string>>;
export declare class DepHandler {
    config: ResolvedConfig;
    configHash: string;
    /**
     * Dep缓存
     */
    depCache: DepCache;
    isInitByCache: boolean;
    /**
     * 配置devServer，用于reload等时机时的websocket通讯
     */
    server?: Server;
    /**
     * Dep 描述
     */
    depMetadata: DepMetadata;
    /**
     * 扫描处理程序，控制项目扫描进程状态
     */
    scanProcessing?: Promise<void>;
    /**
     * 第一次是否已经完成（标记），区分第一次初始化和changed
     */
    private firstEnded;
    /**
     * 是否被执行过首次
     */
    private firstRunEnsured;
    /**
     * dep 数据源扫描程序
     */
    private scanDepMetadataProcessing?;
    /**
     * 是否发现新的dep
     */
    private findNewDep;
    /**
     * 本轮dep扫描进度处理程序
     */
    private depResolveProcessing;
    /**
     * 队列记录（内容参考上述）
     */
    private depResolveProcessingQueue;
    /**
     * 当前是否在运行中
     */
    private currentProcessing;
    /**
     * 注册id的列队
     */
    private registedIdsQueue;
    /**
     * 已经接收到要注册的id列表
     */
    private ids;
    /**
     * worker 注册id
     */
    private workersSources;
    /**
     * 当前执行的列队ID
     */
    private currentQueueId?;
    constructor(config: ResolvedConfig);
    init(): Promise<void>;
    /**
     * 通过id获取缓存文件路径
     * @param id
     * @returns
     */
    getDepPath(id: string): string;
    getDepList(): DepInfo[];
    isOptimizable(id: string): boolean;
    getDepInfoFromFile(fsPath: string): DepInfo | undefined;
    getDepInfoFromId(id: string): DepInfo | undefined;
    /**
     * 判断文件id是否是已解析文件
     * @param id
     * @returns
     */
    isResolvedDepFile(id: string): boolean;
    /**
     * 通过url判断当前文件是否已解析
     * @param url
     * @returns
     */
    isResolvedDepUrl(url: string): boolean;
    /**
     * 开始一个周期扫描
     */
    run(): void;
    /**
     * 获取一个引用的文件id
     * @param depInfo
     * @returns
     */
    getResolvedDepId(depInfo: DepInfo): string;
    /**
     * 添加dep load队列，不接管内容，只做队列控制(用于记录非dep请求)
     * @param id moduleId
     * @param exec load方法
     */
    delayDepResolveUntil(id: string, exec: () => Promise<any>): void;
    /**
     * 重置数据
     */
    reset(): void;
    /**
     * 首次执行，由plugin插件执行
     */
    firstRun(): void;
    /**
     * 注册丢失的import引用
     * @param id
     * @param resolvedId
     * @returns
     */
    registerMissingImport(id: string, resolvedId: string): DepInfo;
    registerWorkersSource(id: string): void;
    /**
     * 根据描述以及file确定是否需要重写import
     * @param metadata
     * @param file
     */
    resolvedDepNeedRewriteImport(file: string): Promise<boolean | undefined>;
    /**
     * 该循环是为了做请求优先级分类
     * 1. 优先处理非dep注册的处理
     * 2. 直到所有非dep处理完毕后，再去处理dep的缓存优化
     *
     * 以上操作可以实现放阻塞机制
     */
    private runNextDepLoad;
    private onQueueEnd;
    private findRewriteDiffs;
    private addMissingDep;
    private getKnownDeps;
    private resolveEnqueuedProcessingPromises;
    /**
     * 重新排队的方法
     */
    private enqueueRerun?;
    private handle?;
    private debouncedRestart;
    /**
     * 开启下一次扫描分支
     */
    private startNextDiscoveredBatch;
    private runResolve;
    private resolveNewDeps;
    private commitProcessing;
    private fullReload;
}
