@webeach/event-manager
Version:
EventManager is a library for simplifying event handling in JavaScript
43 lines (39 loc) • 3.93 kB
TypeScript
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 };