UNPKG

@webeach/event-manager

Version:

EventManager is a library for simplifying event handling in JavaScript

43 lines (39 loc) 3.93 kB
type EventManagerAnyHandlerMap = Record<string, ((event: Event) => void) | ReadonlyArray<(event: Event) => void>>; type EventManagerCustomEventMap = Record<string, Event>; type EventManagerCustomHandlerMap<CustomEventMap extends EventManagerCustomEventMap> = { [K in keyof CustomEventMap]?: EventManagerHandlerList<CustomEventMap[K]>; } & EventManagerAnyHandlerMap; type EventManagerEventBaseHandler<EventType extends Event> = (event: EventType) => void; type EventManagerEventHandler<Target extends EventTarget, EventType extends EventManagerEventType<Target, CustomEventMap>, CustomEventMap extends EventManagerCustomEventMap> = EventType extends EventManagerWindowEventType ? EventManagerWindowHandlerList<EventType> : EventType extends EventManagerDOMEventType ? EventManagerDOMHandlerList<EventType> : EventType extends keyof CustomEventMap ? EventManagerHandlerList<CustomEventMap[EventType]> : EventManagerHandlerList<Event>; type EventManagerEventMap<Target extends EventTarget, CustomEventMap extends EventManagerCustomEventMap> = Target extends Window ? WindowEventMap : Target extends GlobalEventHandlers ? GlobalEventHandlersEventMap : CustomEventMap; type EventManagerEventType<Target extends EventTarget, CustomEventMap extends EventManagerCustomEventMap> = keyof EventManagerEventMap<Target, CustomEventMap> | string; type EventManagerDOMEventType = keyof GlobalEventHandlersEventMap; type EventManagerDOMHandlerList<EventType extends EventManagerDOMEventType> = EventManagerHandlerList<GlobalEventHandlersEventMap[EventType]>; type EventManagerDOMHandlerMap = { [K in EventManagerDOMEventType]?: EventManagerDOMHandlerList<K>; } & EventManagerAnyHandlerMap; type EventManagerHandlerList<EventType extends Event> = EventManagerEventBaseHandler<EventType> | ReadonlyArray<EventManagerEventBaseHandler<EventType>>; type EventManagerWindowEventType = keyof WindowEventMap; type EventManagerWindowHandlerList<EventType extends EventManagerWindowEventType> = EventManagerHandlerList<WindowEventMap[EventType]>; type EventManagerWindowHandlerMap = { [K in EventManagerWindowEventType]?: EventManagerWindowHandlerList<K>; } & EventManagerAnyHandlerMap; type EventManagerHandlerMap<Target extends EventTarget, CustomEventMap extends EventManagerCustomEventMap> = Target extends Window ? EventManagerWindowHandlerMap : Target extends GlobalEventHandlers ? EventManagerDOMHandlerMap : EventManagerCustomHandlerMap<CustomEventMap>; type EventManagerHandlerOptions = { capture?: boolean; once?: boolean; }; declare class EventManager<Target extends EventTarget, CustomEventMap extends EventManagerCustomEventMap> { private readonly handlerSerializedMap; private readonly target; constructor(target: Target, initialHandlerMap?: EventManagerHandlerMap<Target, CustomEventMap> | null); add<EventType extends EventManagerEventType<Target, CustomEventMap>>(type: EventType, handlers: EventManagerEventHandler<Target, EventType, CustomEventMap>, options?: EventManagerHandlerOptions): this; capture<EventType extends EventManagerEventType<Target, CustomEventMap>>(type: EventType, handlers: EventManagerEventHandler<Target, EventType, CustomEventMap>): this; once<EventType extends EventManagerEventType<Target, CustomEventMap>>(type: EventType, handlers: EventManagerEventHandler<Target, EventType, CustomEventMap>): this; remove<EventType extends EventManagerEventType<Target, CustomEventMap>>(type?: EventType | EventType[] | null): this; trigger<EventType extends EventManagerEventType<Target, CustomEventMap>>(event: EventType, detail?: unknown): this; trigger(event: Event): this; private removeAllHandlers; } declare function listen<Target extends EventTarget, CustomEventMap extends EventManagerCustomEventMap>(target?: Target | null, handlers?: EventManagerHandlerMap<Target, CustomEventMap>): EventManager<Target, CustomEventMap>; export { EventManager, listen };