evnty
Version:
Async-first, reactive event handling library for complex event flows in browser and Node.js
55 lines (54 loc) • 1.85 kB
TypeScript
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>[];
}