import { AsyncContext } from '../../scopes/async.context'; import { IEvent } from './event.interface'; /** * Represents an event bus. */ export interface IEventBus { /** * Publishes an event. * @param event The event to publish. */ publish(event: TEvent): any; /** * Publishes an event. * @param event The event to publish. * @param asyncContext Async context */ publish(event: TEvent, asyncContext: AsyncContext): any; /** * Publishes an event. * @param event The event to publish. * @param dispatcherContext Dispatcher context */ publish(event: TEvent, dispatcherContext: TContext): any; /** * Publishes an event. * @param event The event to publish. * @param dispatcherContext Dispatcher context * @param asyncContext Async context */ publish(event: TEvent, dispatcherContext: TContext, asyncContext: AsyncContext): any; /** * Publishes multiple events. * @param events The events to publish. */ publishAll(events: TEvent[]): any; /** * Publishes multiple events. * @param events The events to publish. * @param asyncContext Async context */ publishAll(events: TEvent[], asyncContext: AsyncContext): any; /** * Publishes multiple events. * @param events The events to publish. * @param dispatcherContext Dispatcher context */ publishAll(events: TEvent[], dispatcherContext: TContext): any; /** * Publishes multiple events. * @param events The events to publish. * @param dispatcherContext Dispatcher context * @param asyncContext Async context */ publishAll(events: TEvent[], dispatcherContext: TContext, asyncContext: AsyncContext): any; }