import { type IDisposable } from "./disposable"; /** * A typed event. */ export interface Event { /** * * @param listener The listener function will be called when the event happens. * @return a disposable to remove the listener again. */ (listener: (e: T) => void): IDisposable; } /** * Waits for the event to fire, then resolves the promise once finished */ export declare function listenOnce(event: Event, condition?: (ev: T) => boolean): Promise; export declare function onceEvent(event: Event): Event; export declare class Emitter implements IDisposable { private registeredListeners; private _event; get event(): Event; /** Invoke all listeners registered to this event. */ fire(event: T): void; dispose(): void; } /** * A typed event. */ export interface AsyncEvent { /** * * @param listener The listener function will be called when the event happens * @return a disposable to remove the listener again. */ (listener: (e: T) => Promise): IDisposable; } /** * Works just like Emitter, but requires the listeners to return a promise. When "fire" is called * it will be resolved rejected, based on calling the listeners. The constructor takes a timeout */ export declare class AsyncEmitter implements IDisposable { private timeoutMs; private registeredListeners; private _event; constructor(timeoutMs: number); get event(): AsyncEvent; /** Invoke all listeners registered to this event and wait for them to resolve, unless timeout occurs. */ fire(event: T): Promise; dispose(): void; } /** * EmitterSubscription provides an abstraction that manages a subscription lifecycle * tied to the number of listeners on an emitter. The subscription is created when * the first listener is added and disposed when the last listener is removed. */ export declare class EmitterSubscription implements IDisposable { private createSubscription; private emitter; private subscription; private listenerCount; constructor(createSubscription: (fire: (value: T) => void) => IDisposable); get event(): Event; dispose(): void; }