import { ConstructorType } from '@dooboostore/core'; import { DomRenderConfig } from '../configs/DomRenderConfig'; declare enum CallBackType { FILTER = 0, MAP = 1, SUBSCRIBE = 2 } export type ChannelData = { channel: Channel; data?: (any | undefined); }; export type ChannelMetaData = { channel?: Channel; action?: string; }; export declare class ChannelSubscription { channel: Channel; subscriber: ChannelSubscriber; constructor(channel: Channel, subscriber: ChannelSubscriber); unsubscribe(): void; } export declare class ChannelSubscriber { channel: Channel; parentSubscriber?: ChannelSubscriber; callbacks: ({ type: CallBackType; callback: (data: any, metaData: ChannelMetaData) => any | undefined; })[]; constructor(channel: Channel); exeCallback(data: any, metaData: ChannelMetaData): any; filter(callback: (data: D, meta: ChannelMetaData) => boolean): ChannelSubscriber; map(callback: (data: D, meta: ChannelMetaData) => R): ChannelSubscriber; subscribe(callback: (data: SD, metaData: ChannelMetaData) => any | undefined): ChannelSubscription; unsubscribe(): void; deleteSubscriber(): void; } export declare class Channel { private messenger; obj: object; key: string; subscribers: Set>; constructor(messenger: Messenger, obj: object, key: string); publish(key: string | object | ConstructorType, data: any, action?: string): ChannelData[]; allPublish(data: any, action: string): any[]; filter(filterF: (data: D, meta: ChannelMetaData) => boolean): ChannelSubscriber; map(filterF: (data: D, meta: ChannelMetaData) => R): ChannelSubscriber; subscribe(subscribeCallback: (data: D, meta: ChannelMetaData) => any | void | undefined): ChannelSubscription; deleteChannel(): void; } type MessengerEventDetail = { key: string | object | ConstructorType; data?: any; action?: string; result?: (c: ChannelData[]) => void; }; type MessengerSubscribeEventDetail = { obj: any; key?: string | object | ConstructorType; init: (channel: Channel, subscription: ChannelSubscription) => void; subscribe: (data: any, meta: ChannelMetaData) => void; }; export declare abstract class Messenger { private config; private channels; static readonly EVENT_PUBLISH_KEY = "domRenderMessenger_publish"; static readonly EVENT_SUBSCRIBE_KEY = "domRenderMessenger_subscribe"; constructor(config: DomRenderConfig); static publish(window: Window, detail: MessengerEventDetail): void; static subscribe(window: Window, detail: MessengerSubscribeEventDetail): void; createChannel(obj: any, key?: any): Channel; deleteChannel(channel: Channel): void; deleteChannelFromObj(obj: any): void; addChannel(channel: Channel): void; getChannels(key: string | object | ConstructorType): Channel[]; getAllChannels(): Channel[]; getAllChannelKeys(): string[]; } export {}; //# sourceMappingURL=Messenger.d.ts.map