@knighttower/utility
Version:
UtilityJs is a utility library that provides a collection of utility functions for various tasks. The library is designed to be easy to use and covers the most common use cases.
1 lines • 2.04 kB
JavaScript
var e,t;e=this,t=()=>(()=>{"use strict";var e={d:(t,r)=>{for(var s in r){e.o(r,s)&&!e.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:r[s]})}},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)},t={};e.d(t,{EventBus:()=>r});class r{constructor(){this.listeners={}}on(e,t){this.registerListener(e,t)}once(e,t){this.registerListener(e,t,1)}exactly(e,t,r){this.registerListener(e,t,r)}off(e){delete this.listeners[e]}detach(e,t){const r=(this.listeners[e]||[]).filter(function(e){return e.callback!==t});return e in this.listeners&&(this.listeners[e]=r,!0)}emit(e,...t){let r=[],s=null;const i=this.extractContextFromArgs(t),n=i[0];if(t=i[1],this.hasListener(e)){r=this.listeners[e]}else if(e.includes("*")){s=this.patternSearch(e,Object.keys(this.listeners)),s.length>0&&s.forEach(e=>{r=r.concat(this.listeners[e])})}else{for(const t in this.listeners){t.includes("*")&&(s=this.patternSearch(t,[e]),s&&(r=r.concat(this.listeners[t])))}}r.forEach((s,i)=>{let c=s.callback;n&&(c=c.bind(n)),void 0!==s.triggerCapacity&&(s.triggerCapacity--,r[i].triggerCapacity=s.triggerCapacity),this.checkToRemoveListener(s)&&this.listeners[e].splice(i,1),c(...t)})}patternSearch(e,t){let r=[];const s=new RegExp(this.setWildCardString(e),"g");return r=t.filter(e=>s.test(e)),0===r.length?null:r}setWildCardString(e){let t=e.replace(/([.+?^${}()|\[\]\/\\])/g,"\\$&");return t=t.replace(/\*/g,"(.*?)"),`^${t}`}extractContextFromArgs(e){let t=null;for(let r=0;r<e.length;r++){const s=e[r];if(s&&"object"==typeof s&&s.hasOwnProperty("__context")){t=s.__context,e.splice(r,1);break}}return[t,e]}registerListener(e,t,r){this.hasListener(e)||(this.listeners[e]=[]),this.listeners[e].push({callback:t,triggerCapacity:r})}checkToRemoveListener(e){return void 0!==e.triggerCapacity&&e.triggerCapacity<=0}hasListener(e){return e in this.listeners}}return t=t.EventBus})(),"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("EventBus",[],t):"object"==typeof exports?exports.EventBus=t():e.EventBus=t();