import { ChannelEventSource } from "./ChannelEventSource"; import { ChannelRegistry } from "./ChannelRegistry"; export declare type EventHandler = (...any: any[]) => void | Promise; declare type EventHandlersMap = { [key in EventName]?: EventHandler[] | undefined; }; declare type EventSourceMap = { [key in EventName]?: ChannelEventSource; }; /** * @date 16/12/2021 * @export * @class Channel * @template EventName * @member {ChannelConfig} _config (channel config) * @member {ChannelRegistry} _channelRegistry (register the channel instance under this scope) * @member {EventSourceMap} _eventSourceMap (a channel can bind several event sources; event source can trigger the channel to emit an event) * @member {EventHandlersMap} _eventHandlersMap () */ export declare class Channel { protected readonly _channelRegistry?: ChannelRegistry | undefined; private _eventSourceMap; private _eventHandlersMap; constructor(_channelRegistry?: ChannelRegistry | undefined); get hasNoHandlers(): boolean; on(eventName: EventName, handler: EventHandler): () => void; off(eventName: EventName, handler: EventHandler): void; offEvent(eventName: EventName): void; offAll(): void; once(eventName: EventName, handler: EventHandler): void; emit(eventName: EventName, ...args: any[]): void; getHandlers(eventName: EventName): EventHandlersMap[EventName] | null; protected _getEventSourceMap?(): EventSourceMap; private _tryRegistryAdd; private _tryRegistryRemove; private _tryEventSourceStop; } export {};