UNPKG

@infectedbyjs/emitts

Version:

A type-safe event emitter for TypeScript with priority-based listeners, sequential/parallel execution strategies, and memory leak detection

82 lines (81 loc) 3.14 kB
import type { CleanUpFn, DebugLog, EmitOptions, EventCallback, EventMap, IEmitTS } from "./types"; /** * A type-safe event emitter with priority-based event handling. * * Features: * - Priority-based listeners (higher numbers execute first) * - Sequential or parallel execution strategies * - Debugging capabilities with custom loggers * - Memory leak detection with maxListeners warning * * @template Events A map of event names to their payload types */ export declare class EmitTS<Events extends EventMap = EventMap> implements IEmitTS<Events> { private subscriptions; private maxListeners; private logger; /** * Creates a new event emitter instance. * * @param options Configuration options * @param options.debug Whether to enable debug logging (defaults to false) * @param options.logger Custom debug logger (defaults to internal logger) * @param options.maxListeners Maximum listeners per event before warning (defaults to 10) */ constructor(options?: { debug?: boolean; logger?: DebugLog; maxListeners?: number; }); /** * Checks whether the emitter has listeners for the given event. * @param event Event name * @returns `true` if any listeners are registered */ has(event: keyof Events): boolean; /** * Returns the number of listeners for the given event. * @param event Event name * @returns The number of listeners */ listenersCount(event: keyof Events): number; /** * Returns a list of all currently registered event names. */ get eventNames(): (keyof Events)[]; /** * Checks whether the emitter has no listeners at all. */ isEmpty(): boolean; /** * Removes all listeners for all events. */ clear(): void; /** * Subscribes a callback function to an event with optional priority. * Higher priority listeners are called first. */ on<E extends keyof Events>(event: E, callback: EventCallback<Events[E]>, priority?: number): CleanUpFn; /** * Subscribes a one-time callback function that automatically unsubscribes after execution. */ once<E extends keyof Events>(event: E, callback: EventCallback<Events[E]>, priority?: number): void; /** * Removes listeners from an event. If no callback is provided, removes all listeners. * If no event is provided, clears all listeners from all events. */ off<E extends keyof Events>(event?: E, callback?: EventCallback<Events[E]>): void; /** * Triggers an event with payload data and executes all listeners. * Supports both parallel (default) and sequential execution strategies. * Handles errors to prevent one listener from breaking others. */ emit<E extends keyof Events>(event: E, data: Events[E], options?: EmitOptions): Promise<void>; /** * Returns a promise that resolves when the given event is emitted. * * @param event Event name * @returns Promise that resolves with the event payload */ toPromise<E extends keyof Events>(event: E): Promise<Events[E]>; }