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 {};
