import { AsyncEventEmitter } from '@vladfrangu/async_event_emitter'; import { ArangoCollection } from 'arangojs/collection.js'; import { AqStrict, AqQuery, AqBuilder } from 'aql-builder'; import { Entity, JobStatus } from '../../index.js'; /** * Options to manage the {@link WorkerQuery}'s rate and concurrency. */ export interface WorkerQueryOptions extends Record { /** * The number of workers to run simultaneously. * * @defaultValue 1 */ concurrency?: number; /** * The maximum number of workers to launch within the interval period. * Setting the limit to -1 disables rate limiting. * * @defaultValue Infinity */ intervalCap?: number; /** * The time (in ms) that the limit applies to. * * @defaultValue 0 */ interval?: number; } type WorkerEventMap = Record & { progress: [status: JobStatus, item?: Entity, message?: string]; failure: [status: JobStatus, error?: Error, message?: string]; end: [status: JobStatus]; }; type WorkerEventType = keyof WorkerEventMap; type WorkerEventParams = WorkerEventMap[T]; type WorkerEventListener = (...args: WorkerEventParams) => unknown; export type WorkerQueryTask = (item: T, status: JobStatus) => Promise; export declare class WorkerQuery extends AqBuilder { protected events: AsyncEventEmitter; status: JobStatus; options: Required; /** * Returns a new {@link AqBuilder} containing a buildable {@link AqStrict}. */ constructor(input: string | ArangoCollection | AqStrict | AqQuery, options?: WorkerQueryOptions); on(event: T, listener: WorkerEventListener): this; off(event: T, listener: WorkerEventListener): this; return(): this; run(task?: WorkerQueryTask): Promise; protected performTask(id: string, task: WorkerQueryTask): Promise; protected updateStatus(success?: boolean): void; } export {}; //# sourceMappingURL=worker-query.d.ts.map