import type { Event } from './events/Event.js'; import type { Listener } from './listeners/Listener.js'; type ListenerConstructor = new () => Listener; type ListenerFn = (event: T) => Promise | void; type AnyListener = ListenerConstructor | ListenerFn; type EventConstructor = new (...args: never[]) => T; export type EventErrorHandler = (err: unknown, event: Event) => void; export declare class EventDispatcher { private readonly listeners; private readonly wildcardListeners; private errorHandler; /** * Register a global error handler for unhandled listener errors during * `dispatchSync`. Replaces the default console.error behavior so APM / * Sentry / etc. can observe failures. Pass `null` to restore default. */ onError(handler: EventErrorHandler | null): this; on(event: EventConstructor, listener: AnyListener): this; once(event: EventConstructor, listener: AnyListener): this; /** Listen to ALL events */ onAny(listener: ListenerFn): this; /** Listen to ALL events — fires once then removes itself */ onceAny(listener: ListenerFn): this; off(event: EventConstructor, listener: AnyListener): this; dispatch(event: T): Promise; /** * Dispatch without awaiting — fire and forget. * Unhandled listener errors are routed through the registered * `onError` handler, falling back to console.error. */ dispatchSync(event: T): void; hasListeners(event: EventConstructor): boolean; listenerCount(event: EventConstructor): number; forget(event: EventConstructor): this; forgetAll(): this; private addListener; private invoke; } export {}; //# sourceMappingURL=EventDispatcher.d.ts.map