taozen
Version:
一个轻量级的任务管理库
101 lines (100 loc) • 3.23 kB
TypeScript
/** 定义任务事件类型,用于任务执行过程中的事件通知 */
import type { Zen } from "./Zen";
export type TaozenEventType = "zen:start" | "zen:complete" | "zen:fail" | "zen:retry" | "zen:pause" | "zen:resume" | "tao:start" | "tao:complete" | "tao:fail" | "tao:pause" | "tao:resume" | "tao:retry";
/**
* Tao 任务配置接口
* @property name - 任务名称
* @property description - 任务描述(可选)
* @property retryFailedZensOnly - 重试时是否只重试失败的步骤(可选),默认false
*/
export interface TaoConfig {
name: string;
description?: string;
retryFailedZensOnly?: boolean;
}
/**
* 步骤配置接口
* @property retry - 重试配置
* @property timeout - 超时时间
* @property onCancel - 取消回调函数
*/
export interface ZenConfig {
retry?: ZenRetryConfig;
timeout?: number;
onCancel?: () => void;
}
/** 任务状态 */
export type TaoStatus = "pending" | "running" | "completed" | "failed" | "cancelled" | "paused";
/** 步骤状态 */
export type ZenStatus = "pending" | "running" | "completed" | "failed" | "cancelled";
/**
* 执行器类型 - 定义步骤的执行逻辑
* @template TInput - 输入参数类型,通常是ZenInput
* @template TOutput - 输出结果类型
* @param input - 执行器的输入参数
* @returns Promise<TOutput> - 异步执行结果
*/
export type ZenExecutor<TInput = ZenInput, TOutput = any> = (data: TInput) => Promise<TOutput>;
/**
* Zen输入接口 - 提供访问依赖步骤结果的方法
* 允许步骤通过get方法直接访问依赖步骤的输出结果
*/
export interface ZenInput {
get<T>(step: Zen<any, T>): T | undefined;
getById<T>(stepId: string): T | undefined;
getRaw(): Record<string, any>;
}
/**
* 重试配置接口
* @property maxAttempts - 最大重试次数
* @property initialDelay - 初始重试延迟时间(毫秒)
* @property maxDelay - 最大重试延迟时间(毫秒)
* @property backoffFactor - 重试延迟时间的增长因子
*/
export interface ZenRetryConfig {
maxAttempts: number;
initialDelay: number;
maxDelay: number;
backoffFactor: number;
}
/**
* Tao 事件接口
* @property type - 事件类型
* @property zenId - 相关步骤ID(可选)
* @property timestamp - 事件发生时间戳
* @property data - 事件相关数据(可选)
* @property error - 错误信息(可选)
*/
export interface TaoEvent {
type: TaozenEventType;
zenId?: string;
timestamp: number;
data?: any;
error?: Error;
}
/**
* Tao 事件监听器类型
* @param event - Tao事件角色
*/
export type TaoEventListener = (event: TaoEvent) => void;
/**
* 步骤状态接口
* @property id - 步骤唯一标识
* @property name - 步骤名称
* @property status - 步骤执行状态
* @property result - 执行结果(可选)
* @property error - 错误信息(可选)
* @property startTime - 开始执行时间(可选)
* @property endTime - 结束执行时间(可选)
* @property dependencies - 依赖关系数组
*/
export interface ZenState {
id: string;
name: string;
status: ZenStatus;
result?: any;
error?: Error;
startTime?: number;
endTime?: number;
dependencies?: string[];
}