import { EventEmitter } from 'events';
export declare class IterableEventQueue<Event extends object = any> extends EventEmitter {
    resolveNext: null | ((args: {
        value: Event;
    }) => void);
    queue: any[];
    hasDataListeners: boolean;
    drainCloseListener: boolean;
    currentDrainResolver: null | ((draining: boolean) => void);
    [Symbol.asyncIterator](): AsyncIterator<Event>;
    push(message: Event): void;
    send(message: Event): void;
    getNextMessage(): any;
    /**
     * Wait for the queue to be drained, resolving to true to continue or false if the queue was closed before draining.
     */
    waitForDrain(): Promise<boolean>;
    on(eventName: 'data' | string, listener: ((data: Event) => void) | any): this;
}
