UNPKG

@joker.front/cli

Version:

The Next-Generation Front-End Toolchain: Swift, Efficient, and Adaptive.

164 lines (163 loc) 4.1 kB
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; }