import { IAppStatus, IAppStatusCN, MustardName } from '../typings';
export type EventName = MustardName;
export type BindMethod = string;
export type TCallback = (value: unknown, oldValue: unknown, source: MustardName) => void;
export type TLifeCallback = (key: MustardName) => void;
export type TDataChangeCallback = (key: MustardName, data: unknown) => void;
type EventGlobalLifeKey = `globalLife_${IAppStatusCN}`;
type EventGlobalDataChangeKey = 'globalDataChange';
type EventDataKey = `data_${EventName}`;
type EventDataChangeKey = `dataChange_${EventName}`;
type EventLifeKey = `life_${EventName}_${IAppStatusCN}`;
type EventBindKey = `bind_${EventName}_${BindMethod}`;
export type EventKey = EventDataKey | EventDataChangeKey | EventLifeKey | EventBindKey | EventGlobalLifeKey | EventGlobalDataChangeKey;
export interface EventValue {
    data: unknown;
    sourceOfData: MustardName;
    assignment: boolean;
    callbacks: Set<TCallback>;
    repeatSend: WeakSet<TCallback>;
}
export declare class EventCenter {
    eventList: Map<EventKey, EventValue>;
    /**
     * 初始化
     * @param name 事件名
     * @param options 事件配置
     */
    private initEvent;
    /**
     * 订阅事件
     * @param name 事件名
     * @param fn 事件
     * @param param2.immediately 是否立即执行（对应消息dispatch过）
     * @param param2.repeatSend 多次dispatch相同的data,只有第一次生效
     */
    on(name: EventKey, fn: TCallback, { immediately, repeatSend }?: {
        immediately?: boolean;
        repeatSend?: boolean;
    }): void;
    /**
     * 注销订阅事件
     * @param name 事件名
     * @param fn 事件 不传递全部清空
     */
    off(name: EventKey, fn?: TCallback): void;
    /**
     * 发布消息
     * @param name 事件名
     * @param source 那个应用发送的消息
     * @param data 数据
     */
    dispatch(name: EventKey, source: MustardName, data?: unknown): void;
}
export declare function getEventGlobalLifeKeyByValue(value: IAppStatusCN): EventGlobalLifeKey;
export declare function getEventGlobalDataChangeKey(): EventGlobalDataChangeKey;
export declare function getEventDataKey(name: EventName): EventDataKey;
export declare function getEventDataChangeKey(name: EventName): EventDataChangeKey;
export declare function getEventLifeKeyByKey(name: EventName, key: IAppStatusCN): EventLifeKey;
export declare function getEventLifeKeyByValue(name: EventName, value: IAppStatus): EventLifeKey;
export declare function getEventBindKey(name: EventName, method: BindMethod): EventBindKey;
export {};
