@web-deps/event-manager
Version:
A JavaScript library for managing events. It can be used both on the frontend and backend.
29 lines (28 loc) • 1.59 kB
TypeScript
import type { EventInterface } from "../event/event";
declare type EventObserverType = <SubjectInterface, DataType>(event: EventInterface<SubjectInterface, DataType>) => void;
interface ObserverCollectionInterface {
[eventName: string]: Array<EventObserverType>;
}
declare abstract class AbstractEventEmitter<SubjectInterface, DataType> {
abstract readonly subject: SubjectInterface;
abstract readonly events: Array<string>;
protected abstract observers: ObserverCollectionInterface;
abstract eventIsRegistered(eventName: string): boolean;
abstract addObserver(eventName: string, observer: EventObserverType): void;
abstract removeObserver(eventName: string, observer: EventObserverType): void;
protected abstract notifyObservers(eventName: string, data?: DataType): void;
abstract emit(eventName: string, data?: DataType): void;
}
declare class EventEmitter<SubjectInterface, DataType> extends AbstractEventEmitter<SubjectInterface, DataType> {
readonly subject: SubjectInterface;
readonly events: Array<string>;
protected observers: ObserverCollectionInterface;
constructor(subject: SubjectInterface, events: Array<string>);
eventIsRegistered(eventName: string): boolean;
addObserver(eventName: string, observer: EventObserverType): void;
removeObserver(eventName: string, observer: EventObserverType): void;
protected notifyObservers(eventName: string, data?: DataType): void;
emit(eventName: string, data?: DataType): void;
}
export default EventEmitter;
export type { AbstractEventEmitter, EventObserverType };