UNPKG

@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
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 };