flemo
Version:
A modern React router library with built-in motion animations and smooth transitions
63 lines (62 loc) • 1.8 kB
TypeScript
interface TaskResult<T> {
success: boolean;
error?: Error;
result?: T;
taskId?: string;
timestamp?: number;
instanceId?: string;
}
type TaskStatus = "PENDING" | "MANUAL_PENDING" | "SIGNAL_PENDING" | "PROCESSING" | "COMPLETED" | "FAILED" | "ROLLEDBACK";
interface Control {
manual?: boolean;
delay?: number;
condition?: () => Promise<boolean>;
signal?: string;
}
interface Task<T> {
id: string;
execute: (abortController: AbortController) => Promise<T>;
validate?: () => Promise<boolean>;
rollback?: () => Promise<void>;
control?: Control;
timestamp: number;
retryCount: number;
status: TaskStatus;
dependencies: string[];
instanceId: string;
abortController?: AbortController;
manualResolver?: {
resolve: (value: TaskResult<T>) => void;
reject: (error: Error) => void;
result: T;
};
}
declare class TaskManager {
private tasks;
private readonly instanceId;
private isLocked;
private currentTaskId;
private taskQueue;
private signalListeners;
private pendingTaskQueue;
private isProcessingPending;
private acquireLock;
private releaseLock;
generateTaskId(): string;
emitSignal(signalName: string): void;
private processPendingTasks;
private waitForPendingTasks;
private onTaskStatusChange;
addTask<T>(execute: Task<T>["execute"], options?: {
id?: string;
delay?: number;
validate?: () => Promise<boolean>;
rollback?: () => Promise<void>;
dependencies?: string[];
control?: Control;
}): Promise<TaskResult<T>>;
resolveTask(taskId: string): Promise<boolean>;
resolveAllPending(): Promise<void>;
}
declare const instance: TaskManager;
export default instance;