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