Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | 2x 2x 62x 2x 59x 2x 111x 9x 102x 111x 2x 16x 7x 9x | import { invokeEach } from "./utils"; export type Listener<T = any> = (data: T) => void; /** * Unsubscribes the bound listener. * @returns Returns true if the listener existed and has been removed, * or false if the listener does not exist. */ export type RemoveListener = () => boolean; export interface EventObject<T = any> { /** @internal */ multi_?: Set<Listener<T>> | null; /** @internal */ single_?: Listener<T> | null; } export const send = <T = any>(eventObject: EventObject<T>, data: T): void => eventObject.multi_ ? invokeEach(eventObject.multi_, data) : eventObject.single_?.(data); export const size = (eventObject: EventObject): number => eventObject.multi_ ? eventObject.multi_.size : eventObject.single_ ? 1 : 0; export const on = (eventObject: EventObject, listener: Listener): RemoveListener => ( eventObject.multi_ || eventObject.single_ ? (eventObject.single_ = void (eventObject.multi_ ??= new Set<Listener>().add(eventObject.single_!)).add(listener)) : (eventObject.single_ = listener), () => off(eventObject, listener) ); export const off = (eventObject: EventObject, listener: Listener): boolean => eventObject.multi_ ? eventObject.multi_.delete(listener) : eventObject.single_ === listener && !(eventObject.single_ = null); |