UNPKG

file-lane

Version:

File conversion tool, can be one-to-one, one to N, N to one

122 lines (121 loc) 3.21 kB
import { ILog, MatchType } from '@aiot-toolkit/shared-utils'; import IFileLaneContext from './IFileLaneContext'; import ILoader from './ILoader'; import IPlugin from './IPlugin'; import FileLaneCompilation from '../FileLaneCompilation'; import { IChangedFile } from './IChangedFile'; export type ILoaderClass = (new (...args: any[]) => ILoader) & { raw?: boolean; }; export interface IRule { /** * 配置文件 */ test: MatchType; /** * 文件的 Loader,从前向后依次执行,前一个 loader 结果做为后一个 loader 的入参 */ loader: ILoaderClass[]; exclude?: MatchType; include?: MatchType; } /** * IFileLaneConfig */ export default interface IFileLaneConfig<O = any> { /** * 项目文件采集器 * * @param entryFileList 输入的文件列表 * * @returns 返回项目中所有待处理的文件路径 * * @description 用于采集所有要处理的真实文件路径列表,或者输入文件列表中要处理的真实文件路径列表 */ collectFile?: (entryFileList?: IChangedFile[]) => string[]; /** * 文件收集器 * * * @param path 文件路径 * * @returns 要合并的文件路径 * * @description 通常用于多转1,例如 src/a.hml -->[src/a.hml, src/a.js, src/a.css] * 不填写,表示直接使用源文件 * */ fileCollector?: (file: string) => string[]; /** * 指定处理的文件范围 * * 此属性的函数形式,在多转1可能很有用 * 例如:a.js 做为js需要处理,但同目录存在 a.ux 时,则排除 * * @example /^src/ * */ include?: MatchType; exclude?: MatchType; /** * 输出目录 * */ output: string; /** * 文件转换配置 */ module: { /** * 转换规则 */ rules: IRule[]; }; /** * 插件 * * 触发时机如下 * 1. 每个文件转换完成 * 2. 所有文件转换完成 */ plugins?: IPlugin[]; /** * 启动阶段的准备工作 */ beforeWorks?: BeforeWork[]; /** * 收尾阶段的工作 */ afterWorks?: AfterWork[]; /** * 项目转换的前置工作 */ beforeCompile?: PreWork[]; /** * 项目转换的后续工作 * * ux--[webpack, zip] * uxInspect--[webpack, zipPhone, zipWatch, zipTv] */ afterCompile?: FollowWoker<O>[]; /** * 配置watch时忽略的文件或者文件夹 */ watchIgnores?: MatchType; } type FollowWoker<O> = { worker: FollowWork<O>; workerDescribe?: string; }; type CompileParam<O = any> = { context: IFileLaneContext; config: IFileLaneConfig; compilerOption?: O; compalition?: FileLaneCompilation; onLog?: (log: ILog[]) => void; }; export type BeforeWork = (context: IFileLaneContext) => Promise<any>; export type PreWork<O = any> = (preWorkParams: CompileParam<O>) => Promise<any>; export type FollowWork<O = any> = (followParams: CompileParam<O>) => Promise<any>; export type AfterWork = (context: IFileLaneContext) => Promise<any>; export {};