export interface IEventData { name: string; data: T; } export type IEventFilter = (event: IEventData) => boolean; export type IEventHandler = (eventData: IEventData) => boolean | void | Promise | Promise; export interface ISubscription { filter: IEventFilter; handler: IEventHandler; } export interface ISubscriptionResult { unsubscribe: () => boolean; } export declare function subscribe(nameOrFilter: string | IEventFilter, handler: IEventHandler): ISubscriptionResult; export declare function subscribeDebounce(nameOrFilter: string | IEventFilter, handler: IEventHandler, debounceMs: number): ISubscriptionResult; export declare function emit(event: IEventData): Promise; export type IHandler = (data: T) => boolean | void | Promise | Promise; export interface IEvent { eventName: () => string; subscribe: (handler: IHandler) => ISubscriptionResult; next: () => Promise; union: (event: IEvent) => IEvent; } export declare class Event implements IEvent { readonly _eventName: string; constructor(_eventName: string); eventName: () => string; emit(data: T): Promise; subscribe: (handler: IHandler, debounceMs?: number) => ISubscriptionResult; next: () => Promise; union: (event: IEvent) => IEvent; } export declare function unionEvents(...events: IEvent[]): IEvent;