UNPKG

takin

Version:

Front end engineering base toolchain and scaffold

96 lines (95 loc) 2.93 kB
import { AsyncParallelHook, AsyncSeriesHook, AsyncSeriesWaterfallHook, HookMap, SyncBailHook, SyncHook } from 'tapable'; import { AnyZodObject, z } from 'zod'; import { Cli, CommandOptions } from '../cli'; import type { Runner } from '../index'; import { UserConfig } from '../types'; declare type Zod = typeof z; export interface RunnerHooks { /** * 初始化, 当 runner 被初始化并完成插件加载之后运行 */ initialize: SyncHook<Runner>; /** * 构建命令行时运行 */ cli: SyncHook<Cli>; /** * 获取到匹配命令的阶段 */ matchedCommand: AsyncSeriesHook<CommandOptions>; /** * 加载用户 config 阶段 */ loadConfig: AsyncSeriesHook<CommandOptions>; /** * 修改用户配置 */ modifyUserConfig: AsyncSeriesWaterfallHook<[UserConfig, CommandOptions]>; /** * 注册用户配置及校验 schema */ registerUserConfig: AsyncSeriesWaterfallHook<[AnyZodObject, Zod]>; /** * 是否需要运行后续逻辑 * 执行的时机为 校验用户配置之前 */ shouldRun: SyncBailHook<Runner, boolean | undefined>; /** * 是否校验用户配置, 部分不使用配置的命令, 可使用该 hook 结合 runner 的上下文 * 来选择是否跳过用户配置校验 */ shouldValidateUserConfig: SyncBailHook<Runner, boolean | undefined>; /** * 用户配置校验完成之后执行 */ userConfigValidated: AsyncSeriesHook<UserConfig>; /** * 开始 run 之前的 hook, 可用于准备一些运行命令需要的数据或内容 */ beforeRun: AsyncSeriesHook<Runner>; /** * 运行命令逻辑 */ run: HookMap<AsyncParallelHook<CommandOptions>>; /** * runner 运行完成 */ done: AsyncParallelHook<Runner>; /** * runner 运行失败 */ failed: AsyncSeriesHook<Error>; /** * runner 主动关闭 runner 时执行 */ shutdown: AsyncSeriesHook<Runner>; } /** * Hook 工厂对象, 用于扩展已有的 Hooks */ export declare type RunnerHookFactories = { [P in keyof RunnerHooks]?: () => RunnerHooks[P]; }; /** * 判定自定义 hook 工厂函数是否已被注册 * @param hookName - hook 名称 * @retuns `true` or `false` */ export declare function isHookRegistered(hookName: keyof RunnerHooks): boolean; /** * 自定义 hook 工厂, 用于拓展 RunnerHooks * @param hookName - hook 名称 * @param hookFactory - 工厂函数 */ export declare function registerHook<T extends keyof RunnerHookFactories>(hookName: T, hookFactory: RunnerHookFactories[T]): void; /** * 批量注册 hook 工厂函数 * @param hooks - Hook 工厂对象 */ export declare function registerHooks(hooks: RunnerHookFactories): void; /** * 创建 Runner 相关默认 Hooks * @returns 创建的 hooks */ export declare function createHooks(): RunnerHooks; export {};