import { Signal } from './signal.js'; /** * Basic type safe event emitter * @example * ```ts * const ms = new EventEmitter<{ onChange: { id: 'onChange' }; onDelete: { id: 'onDelete' } }>(); * ms.subscribe('onChange', (event) => { * event.id; // 'onChange' * }); * ms.subscribe('onDelete', (event) => { * event.id; // 'onDelete' * }); * * ms.notify('onChange', { id: 'onChange' }); // event is type safe * ``` * @example payload type mismatch * ```ts * ms.notify('onChange', { id: 'onDelete' }); // ERROR!!! * ``` * @example payload type mismatch * ```ts * ms.notify('onSomethingElse', { id: 'onDelete' }); // ERROR!!! * ``` */ export declare class EventEmitter { protected events: Map>; /** * Check if an event has subscribers * @returns true if event has subscribers */ hasSubscribers: (event: EventId) => boolean; /** * Subscribe a handler for event * * @returns unsubscribe fn */ subscribe: (event: Event, handler: (data: Events[Event]) => void) => () => void; /** * {@inheritDoc EventEmitter.subscribe} */ on: (event: Event, handler: (data: Events[Event]) => void) => () => void; /** * Adds a handler that will be called at most once. * * @returns unsubscribe fn */ once: (event: Event, handler: (data: Events[Event]) => void) => () => void; /** * Unsubscribe a handler from event */ unsubscribe: (event: Event, handler: (data: Events[Event]) => void) => void; /** * {@inheritDoc EventEmitter.unsubscribe} */ off: (event: Event, handler: (data: Events[Event]) => void) => void; /** * Drop all subscriptions of a signal * @param event - signal id */ delete: (event: Event) => void; /** * Drop all subscriptions */ clear: () => void; /** * {@inheritDoc Signal.notify} * @param event - eve * @param data - event data */ notify: (event: Event, data: Events[Event]) => void; /** * {@inheritDoc EventEmitter.notify} */ emit: (event: Event, data: Events[Event]) => void; } export type IEventEmitter> = Pick, keyof EventEmitter>; //# sourceMappingURL=event-emitter.d.ts.map