communication-bus
Version:
Publisher subscriber library for communication in JS across components
49 lines (40 loc) • 1.19 kB
JavaScript
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
}