@joker.front/cli
Version:
The Next-Generation Front-End Toolchain: Swift, Efficient, and Adaptive.
164 lines (163 loc) • 4.1 kB
TypeScript
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;
}