import forEach from 'lodash/forEach' import * as types from './types/sdk' const subscriptions = (function() { const _subscriptions: types.Subscriptions = {} return { publish(eventName: string, data: any) { if (!Array.isArray(_subscriptions[eventName])) { _subscriptions[eventName] = [] } forEach(_subscriptions[eventName], (fn) => fn && fn(data)) }, subscribe(eventName: string, fn: types.Fn) { if (!eventName) { console.warn( 'WARNING! You tried to set an event listener but it was not successful ' + 'because the eventName value was invalid. The event registration was skipped.', ) return this } if (!Array.isArray(_subscriptions[eventName])) { _subscriptions[eventName] = [] } _subscriptions[eventName].push(fn) return this }, unsubscribe(eventName: string, fn: types.Fn) { if (!Array.isArray(_subscriptions[eventName])) return this for (let i = 0; i < _subscriptions[eventName].length; i++) { if (_subscriptions[eventName][i] === fn) { _subscriptions[eventName].splice(i, 1) break } } return this }, } })() export default subscriptions