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