UNPKG

@minimaltech/node-infra

Version:

Minimal Technology NodeJS Infrastructure - Loopback 4 Framework

69 lines (68 loc) 2.39 kB
import { BaseHelper } from '../../base/base.helper'; import { ValueOf, ValueOrPromise } from '../../common/types'; export declare class QueueStatuses { static readonly WAITING = "000_WAITING"; static readonly PROCESSING = "100_PROCESSING"; static readonly LOCKED = "200_LOCKED"; static readonly SETTLED = "300_SETTLED"; static readonly SCHEME_SET: Set<string>; static isValid(scheme: string): boolean; } export type TQueueStatus = ValueOf<Omit<typeof QueueStatuses, 'isValid' | 'SCHEME_SET'>>; export type TQueueElement<T> = { isLocked: boolean; payload: T; }; interface IQueueCallback<TElementPayload> { autoDispatch?: boolean; onMessage?: (opts: { identifier: string; queueElement: TQueueElement<TElementPayload>; }) => ValueOrPromise<void>; onDataEnqueue?: (opts: { identifier: string; queueElement: TQueueElement<TElementPayload>; }) => ValueOrPromise<void>; onDataDequeue?: (opts: { identifier: string; queueElement: TQueueElement<TElementPayload>; }) => ValueOrPromise<void>; onStateChange?: (opts: { identifier: string; from: TQueueStatus; to: TQueueStatus; }) => ValueOrPromise<void>; } export declare class QueueHelper<TElementPayload> extends BaseHelper { storage: Array<TQueueElement<TElementPayload>>; protected processingEvents: Set<TQueueElement<TElementPayload>>; protected generator: Generator; protected totalEvent: number; protected autoDispatch: boolean; protected state: TQueueStatus; protected isSettleRequested: boolean; private onMessage?; private onDataEnqueue?; private onDataDequeue?; private onStateChange?; constructor(opts: IQueueCallback<TElementPayload> & { identifier: string; }); protected handleMessage(): Promise<void>; private _messageListener; nextMessage(): void; enqueue(payload: TElementPayload): Promise<void>; dequeue(): TQueueElement<TElementPayload> | undefined; lock(): void; unlock(opts: { shouldProcessNextElement?: boolean; }): void; settle(): void; isSettled(): boolean; close(): void; getElementAt(position: number): TQueueElement<TElementPayload>; getState(): TQueueStatus; getTotalEvent(): number; getProcessingEvents(): Set<TQueueElement<TElementPayload>>; } export {};