UNPKG

evnty

Version:

Async-first, reactive event handling library for complex event flows in browser and Node.js

55 lines (54 loc) 1.85 kB
import { Action, Fn } from './types.js'; import { DispatchResultItem } from './dispatch-result.js'; /** * @internal */ export declare class ListenerRegistry<P extends unknown[], R> { #private; readonly [Symbol.toStringTag] = "ListenerRegistry"; /** * The number of listeners currently registered. */ get size(): number; /** * Checks whether the listener is currently registered. */ has(listener: Fn<P, R>): boolean; /** * Convenience inverse of `has`. */ lacks(listener: Fn<P, R>): boolean; /** * Removes a listener if present. * * @returns `true` if removed, `false` if it was not registered. */ off(listener: Fn<P, R>): boolean; /** * Registers a listener if not already present. * * @param onRemove Optional callback invoked when this listener is removed. * @returns `true` if added, `false` if it was already registered. */ on(listener: Fn<P, R>, onRemove?: Action): boolean; /** * Registers a listener that will automatically unregister after its next dispatch. * * @param onRemove Optional callback invoked when this listener is removed. * @returns `true` if added, `false` if it was already registered. */ once(listener: Fn<P, R>, onRemove?: Action): boolean; /** * Removes all listeners and clears the dispatch snapshot. */ clear(): void; /** * Dispatches to all listeners in snapshot order. * One-time listeners are removed before invocation. * Exceptions are captured as ResultError so dispatch continues (unwrap to surface rejections). * * @param values Arguments forwarded to each listener. * @returns Array of listener results or promises, one per listener. */ dispatch(...values: P): DispatchResultItem<R | void>[]; }