UNPKG

beaverjs

Version:

An abstraction around WebExtension messaging

25 lines (24 loc) 1.34 kB
declare type EventFn<S, T> = (data: T, sender: S) => void; declare type EventEntry<S, T> = EventFn<S, T> | { fn: EventFn<S, T>; once?: boolean; }; declare type ArrayOrSingle<T> = T | Array<T>; export declare abstract class BaseEventHandler<EventMap extends Record<string, any>, SerializedEvent, SendArgs extends Array<any>, Sender> { protected eventMap: Map<keyof EventMap, ArrayOrSingle<EventEntry<Sender, EventMap[keyof EventMap]>>>; constructor(); protected abstract serialize<K extends keyof EventMap>(type: K, data: EventMap[K]): SerializedEvent; protected abstract deserialize<K extends keyof EventMap>(serialized: SerializedEvent): { type: K; data: EventMap[K]; }; protected abstract sendEvent(serialized: SerializedEvent, ...args: SendArgs): void; protected abstract setup(): void; private insertEvent; on<K extends keyof EventMap>(key: K, fn: EventFn<Sender, EventMap[K]>): this; once<K extends keyof EventMap>(key: K, fn: EventFn<Sender, EventMap[K]>): this; emit<K extends keyof EventMap>(key: K, data: EventMap[K], ...args: SendArgs): void; protected handleEvent<K extends keyof EventMap>(key: K, data: EventMap[K], sender: Sender): void; protected handleSerialized(serialized: SerializedEvent, sender: Sender): void; } export {};