{"version":3,"file":"Events-YNfwLJe1.js","sources":["../../../app/frontend/entrypoints/utils/eventBus/Events.ts"],"sourcesContent":["export default class Events {\n channelOptions: IChannelOptions | undefined\n isChannelPaused = false\n\n private readonly listenersList: any = []\n private eventsQueue: any = []\n private doneQueue: any = []\n private isRunning = false\n private triggerExecOnEmptyQueue: (() => void) | undefined\n private triggerExecOnEmptyQueueOnce?: () => void\n\n addEventListener(eventName: string, callback: (...args: any) => void, context?: any, once?: any) {\n this.listenersList[eventName] = this.listenersList[eventName] || []\n this.listenersList[eventName].push({ callback, context, once })\n }\n\n removeEventListener(eventName: string, callback: (...args: any) => void, context: any) {\n const listeners = this.listenersList[eventName]\n\n // if no listeners subscribed to this event stop execution\n if (!listeners) return\n\n // remove all listeners with the same signature\n for (let i = 0; i < listeners.length; i++) {\n if (listeners[i].callback === callback && listeners[i].context === context) {\n listeners.splice(i, 1)\n }\n }\n }\n\n trigger(eventName: string, args?: any[]) {\n const listeners = this.listenersList[eventName]\n\n // if no listeners subscribed to this event stop execution\n if (!listeners && !this.isChannelPaused) return\n\n // push new event to the queue\n this.eventsQueue = this.eventsQueue || []\n this.eventsQueue.push({ eventName, args })\n\n this.proceed()\n }\n\n execOnEmptyQueue(cb: any) {\n this.triggerExecOnEmptyQueue = cb\n }\n\n execOnEmptyQueueOnce(cb: any) {\n this.triggerExecOnEmptyQueueOnce = cb\n }\n\n proceed() {\n // do not proceed if queue is being processed\n if (this.isRunning || this.isChannelPaused) return\n\n const queue = this.eventsQueue\n\n if (queue.length > 0) {\n this.isRunning = true\n\n while (queue.length > 0) {\n const event = queue.shift()\n\n const listeners = this.listenersList[event.eventName]\n\n if (!listeners) return\n // if no listeners subscribed to this event stop execution\n if (listeners.length === 0) return\n\n const listenersToBeRemoved: any[] = []\n\n for (const listener of listeners) {\n let { args } = event\n\n if (this.channelOptions && this.channelOptions.isSequence) {\n const control = {\n callback: listener,\n done: () => {\n if (control.isDone) {\n throw new Error('done() is being called multiple times.')\n } else {\n // lets not process every event on the same JS call stack\n this.isRunning = false\n setTimeout(() => this.proceed())\n }\n\n control.isDone = true\n this.doneQueue.splice(this.doneQueue.indexOf(control), 1)\n },\n isDone: false,\n }\n\n this.doneQueue.push(control)\n\n // control is always the last element in arguments\n if (event.args) {\n args = args.concat(control)\n } else {\n args = [control]\n }\n }\n listener.callback.apply(listener.context, args)\n\n if (listener.once) {\n listenersToBeRemoved.push({\n eventName: event.eventName,\n eventListener: listener,\n })\n }\n }\n\n while (listenersToBeRemoved.length > 0) {\n const current: any = listenersToBeRemoved.shift()\n this.removeEventListener(current.eventName, current.eventListener.callback, current.eventListener.context)\n }\n }\n } else {\n if (this.doneQueue.length === 0 && this.triggerExecOnEmptyQueue) {\n this.triggerExecOnEmptyQueue()\n }\n if (this.doneQueue.length === 0 && this.triggerExecOnEmptyQueueOnce) {\n this.triggerExecOnEmptyQueueOnce()\n delete this.triggerExecOnEmptyQueueOnce\n }\n }\n\n if (this.channelOptions && !this.channelOptions.isSequence) {\n this.isRunning = false\n }\n }\n\n flush() {\n this.eventsQueue = []\n }\n}\n"],"names":[],"mappings":"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"}