import type { Constructor, Container } from '../Container.js'; import type { EventSubscriber } from './EventSubscriber.js'; export type ListenerFn = (event: object) => Promise | void; type WildcardListenerFn = (eventName: string, event: object) => Promise | void; /** * Central event dispatcher. */ export declare class EventDispatcher { private readonly container; private readonly listeners; private readonly wildcard; private readonly pushed; private readonly macros; constructor(container: Container); /** * Register a listener class or function for an event. */ listen(eventClass: Constructor, listener: Constructor | ((event: TEvent) => Promise | void)): this; listenMany(map: Record[]>): this; subscribe(subscriber: Constructor | EventSubscriber): this; forget(eventClass: Constructor): this; forgetListener(eventClass: Constructor, listener: Constructor | ListenerFn): this; hasListeners(eventClass: Constructor): boolean; getListeners(eventClass: Constructor): (Constructor | ListenerFn)[]; getRawListeners(): Map, (Constructor | ListenerFn)[]>; /** * Register wildcard listener for event name patterns (`user.*`). */ listenWildcard(pattern: string, listener: WildcardListenerFn): this; /** * Dispatch an event. */ dispatch(event: object): Promise; /** * Dispatch synchronously (inline listeners, immediate broadcasting). */ dispatchSync(event: object): void; /** * Alias for dispatch() that bypasses afterCommit checks (currently no-op). */ dispatchNow(event: object): Promise; /** * Dispatch and halt if any listener returns `false`. */ until(event: object): Promise; /** * Best-effort defer until after response; falls back to immediate dispatch. */ dispatchAfterResponse(event: object): void; /** * Push events for deferred batch dispatch. */ push(eventClass: Constructor, payload: unknown[]): this; flush(eventClass: Constructor): Promise; forgetPushed(): this; /** * Extend dispatcher at runtime. */ macro(name: string, fn: Function): void; private resolveEventClass; private getWildcardListenersFor; private dispatchInternal; private invokeListener; private tryBroadcast; } export {}; //# sourceMappingURL=EventDispatcher.d.ts.map