UNPKG

communication-bus

Version:

Publisher subscriber library for communication in JS across components

49 lines (40 loc) 1.19 kB
import Publisher from "./publisher"; const Subscribers = { idOffset: 0, order: [], callbacks: {} } const deregister = (id)=>{ if(!id) throw new Error("id is required"); if(Subscribers.order.indexOf(id) !== -1){ Subscribers.order = Subscribers.order.filter((subscriberId)=>id!==subscriberId); delete Subscribers.callbacks[id] return true } return false } const register = (callback, offset=0)=>{ if(typeof callback !== "function") throw new Error("Callback function is required"); const newSubscriberId = ++Subscribers.idOffset; Subscribers.order.push(newSubscriberId); Subscribers.callbacks[newSubscriberId] = callback; if(offset > 0){ Publisher.rePublishEventForSubscriber(newSubscriberId, offset) } return deregister.bind(null,newSubscriberId); } const getOrderedSubscribers = ()=>{ return Subscribers.order.map((id)=>{ return Subscribers.callbacks[id]; }) } const getSubscriberById = (id)=>{ if(!id) throw new Error("id is required"); return Subscribers.callbacks[id] } export default { register, deregister, getSubscriberById, getOrderedSubscribers }