import { Utils } from '../utils/utils'; interface MediatorFunction { (data?: any): any; } /** * @author Ahmed Ali Elfeky */ export class Mediator { private static listeners: Map> = new Map>(); public static emit(channel: string, data?: any): void { let mediator: Map = this.listeners.get(channel); if (!mediator) { mediator = new Map(); this.listeners.set(channel, mediator); } mediator.forEach((fun, channel, map) => { fun(data); }); } public static subscribe(channel: string, fun: MediatorFunction): string { let mediator: Map = this.listeners.get(channel); if (!mediator) { mediator = new Map(); this.listeners.set(channel, mediator); } let funId = Utils.generateUUID(); mediator.set(funId, fun); return funId; } public static unsubscribe(channel: string, funId: string): void { let mediator: Map = this.listeners.get(channel); if (mediator && mediator.has(funId)) { mediator.delete(funId); } } }