takin
Version:
Front end engineering base toolchain and scaffold
96 lines (95 loc) • 2.93 kB
TypeScript
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 {};