UNPKG

ubus

Version:

Micro message bus for the browser.

1 lines 882 B
class Bus{constructor(){this._q=new Set}emit(a,b){if(!a){throw new TypeError(this._invalidTokenMessage('emit'))}for(const s of this._q){if(s.token===a){s.cb(b);if(s.once){this._q.delete(s);break}}}}on(a,b){if(!a){throw new TypeError(this._invalidTokenMessage('on'))}let d=this._genId();this._q.add({_id:d,token:a,cb:b,once:!1,del:!1});return()=>{for(const s of this._q){if(s._id===d){this._q.delete(s);break}}}}once(a,b){if(!a){throw new TypeError(this._invalidTokenMessage('once'))}this._q.add({_id:this._genId(),token:a,cb:b,once:!0,del:!1})}off(...a){if(typeof a=='object'&&!!a.length){a.forEach(t=>{for(const s of this._q){if(s.token===t){this._q.delete(s)}}})}}_invalidTokenMessage(a){return`[${a}] - Token not informed.`}_genId(){return'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,c=>{const r=Math.random()*16|0,v=c=='x'?r:r&3|8;return v.toString(16)})}}export{Bus};