// Type definitions for better-queue 3.8 // Project: https://github.com/diamondio/better-queue // Definitions by: Ostap Nagovitsyn // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.3 /* =================== USAGE =================== import * as Queue from "better-queue"; var queue = new Queue(...); =============================================== */ /// declare class BetterQueue extends NodeJS.EventEmitter { constructor(options: BetterQueue.QueueOptions); constructor(process: BetterQueue.ProcessFunction, options?: Partial>); push(task: T, cb?: (err: any, result: K) => void): BetterQueue.Ticket; cancel(taskId: any, cb?: () => void): void; pause(): void; resume(): void; destroy(cb: () => void): void; use(store: BetterQueue.Store): void; getStats(): BetterQueue.QueueStats; resetStats(): void; on(event: 'task_finish', listener: (taskId: any, result: K) => void): this; on(event: 'task_failed', listener: (taskId: any, errorMessage: string) => void): this; on(event: 'task_progress', listener: (taskId: any, completed: number, total: number) => void): this; on(event: BetterQueue.QueueEvent, listener: (...args: any[]) => void): this; } declare namespace BetterQueue { interface QueueOptions { process: ProcessFunction; filter?(task: T, cb: (error: any, task: T) => void): void; merge?(oldTask: T, newTask: T, cb: (error: any, mergedTask: T) => void): void; priority?(task: T, cb: (error: any, priority: number) => void): void; precondition?(cb: (error: any, passOrFail: boolean) => void): void; id?: keyof T | ((task: T, cb: (error: any, id: keyof T) => void) => void); cancelIfRunning?: boolean; autoResume?: boolean; failTaskOnProcessException?: boolean; filo?: boolean; batchSize?: number; batchDelay?: number; batchDelayTimeout?: number; concurrent?: number; maxTimeout?: number; afterProcessDelay?: number; maxRetries?: number; retryDelay?: number; storeMaxRetries?: number; storeRetryTimeout?: number; preconditionRetryTimeout?: number; store?: string | StoreOptions | Store; } // TODO reflect task types somehow (task: T | T[]) type ProcessFunction = (task: any, cb: ProcessFunctionCb) => void; type ProcessFunctionCb = (error?: any, result?: K) => void; type QueueEvent = 'task_queued' | 'task_accepted' | 'task_started' | 'task_finish' | 'task_failed' | 'task_progress' | 'batch_finish' | 'batch_failed' | 'batch_progress' | 'drain' | 'empty' | 'error'; type TicketEvent = 'accept' | 'queued' | 'started' | 'progress' | 'finish' | 'failed' | 'error'; interface Store { connect(cb: (error: any, length: number) => void): void; getTask(taskId: any, cb: (error: any, task: T) => void): void; deleteTask(taskId: any, cb: () => void): void; putTask(taskId: any, task: T, priority: number, cb: (error: any) => void): void; takeFirstN(n: number, cb: (error: any, lockId: string) => void): void; takeLastN(n: number, cb: (error: any, lockId: string) => void): void; getLock(lockId: string, cb: (error: any, tasks: { [taskId: string]: T }) => void): void; releaseLock(lockId: string, cb: (error: any) => void): void; } interface StoreOptions { type: string; // store-specific options [key: string]: any; } class Ticket extends NodeJS.EventEmitter { on(event: TicketEvent, listener: (...args: any[]) => void): this; } interface TickerProgress { eta: string; pct: number; complete: number; total: number; message: string; } interface QueueStats { total: number; average: number; successRate: number; peak: number; } } export = BetterQueue;