UNPKG

taskon

Version:

A simple JavaScript/TypeScript tasks queue that supports dynamic concurrency control

117 lines (116 loc) 4.88 kB
import TaskQueueBase, { TaskQueueBaseProps } from './base'; import { Task, TaskId, TaskPriority, TaskStatus, TaskStatusUpdateHandler } from './type'; export type { TaskId, TaskStatus, QueueId, TaskPrioritizationMode, Task, } from './type'; export declare const MESSAGE_HUB_KEY = "task-queue"; export interface TaskQueueProps extends TaskQueueBaseProps { } /** * Task queue with concurrency control. By default, all added tasks will be auto * scheduled and executed. You can use stop() and start() to control the * execution. */ export declare class TaskQueue extends TaskQueueBase { private messageHub; constructor(props?: TaskQueueProps); /** * Subscribe to the task status changes. * @param onTaskStatusUpdate The listener for task status updates */ subscribeTaskStatusChange(onTaskStatusUpdate: TaskStatusUpdateHandler): () => void; /** * Unsubscribe from the task status changes. * @param onTaskStatusUpdate The listener for task status updates */ unsubscribeTaskStatusChange(onTaskStatusUpdate: TaskStatusUpdateHandler): void; /** * Add a task with callback function to the queue. * @param callback The callback function of the task */ addTask<ReturnType>(callback: () => ReturnType | Promise<ReturnType>): Promise<ReturnType>; /** * Add a task with callback function to the queue. * @param callback The callback function of the task * @param onStatusUpdate The callback function to subscribe task status * changes */ addTask<ReturnType>(callback: () => ReturnType | Promise<ReturnType>, onStatusUpdate?: TaskStatusUpdateHandler<ReturnType>): Promise<ReturnType>; /** * Add a task with callback function to the queue. * @param callback The callback function of the task * @param taskId The ID of the task * @param onStatusUpdate The callback function to subscribe task status * changes */ addTask<ReturnType>(callback: () => ReturnType | Promise<ReturnType>, taskId?: TaskId | undefined, onStatusUpdate?: TaskStatusUpdateHandler<ReturnType>): Promise<ReturnType>; /** * Add a task with callback function to the prioritized queue. * @param callback The callback function of the task */ addPrioritizedTask<ReturnType>(callback: () => ReturnType | Promise<ReturnType>): Promise<ReturnType>; /** * Add a task with callback function to the prioritized queue. * @param callback The callback function of the task * @param onStatusUpdate The callback function to subscribe task status * changes */ addPrioritizedTask<ReturnType>(callback: () => ReturnType | Promise<ReturnType>, onStatusUpdate?: TaskStatusUpdateHandler<ReturnType>): Promise<ReturnType>; /** * Add a task with callback function to the prioritized queue. * @param callback The callback function of the task * @param taskId The ID of the task * @param onStatusUpdate The callback function to subscribe task status * changes */ addPrioritizedTask<ReturnType>(callback: () => ReturnType | Promise<ReturnType>, taskId?: TaskId | undefined, onStatusUpdate?: TaskStatusUpdateHandler<ReturnType>): Promise<ReturnType>; /** * Add tasks with callback functions to the queue. * @param tasks The array of tasks with callback functions, IDs, task status * update subscribers, and priorities */ addTasks(tasks: Array<{ callback: () => unknown; taskId?: TaskId; onStatusUpdate?: TaskStatusUpdateHandler<unknown>; priority?: TaskPriority; }>): Promise<unknown[]>; /** * Clear all waited tasks from the queue. */ clearWaitedTasks(): void; /** * Remove the task from waited task queue. * @param taskIdOrTask The ID of the task or task object */ removeWaitedTask(taskIdOrTask: TaskId | Task): void; /** * Clear all failed retryable tasks from the queue. */ clearFailedRetryableTasks(): void; /** * Remove the task from failed retryable task queue. * @param taskIdOrTask The ID of the task or task object */ removeFailedRetryableTask(taskIdOrTask: TaskId | Task): void; /** @internal */ private _assertMemorizingTasksEnabled; /** * Get the task details with task ID. * @param taskId The ID of the task */ getTaskDetails(taskId: TaskId): Task<any>; /** * Get all task details with optional matching status. * @param status The matched status or array of statuses */ getAllTasksDetails(status?: TaskStatus | Array<TaskStatus>): Task<any>[]; /** * Clear the task details with task ID. * @param taskId The ID of the task */ clearTaskDetails(taskId: TaskId): void; /** * Clear all task details. */ clearAllTasksDetails(): void; } export default TaskQueue;