@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.13 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){for(var t=arguments.length,r=new Array(t>1?t-1:0),s=1;s<t;s++){r[s-1]=arguments[s]}let i=[],n=null;const c=this.extractContextFromArgs(r),l=c[0];if(r=c[1],this.hasListener(e)){i=this.listeners[e]}else if(e.includes("*")){n=this.patternSearch(e,Object.keys(this.listeners)),n.length>0&&n.forEach((e=>{i=i.concat(this.listeners[e])}))}else{for(const t in this.listeners){t.includes("*")&&(n=this.patternSearch(t,[e]),n&&(i=i.concat(this.listeners[t])))}}i.forEach(((t,s)=>{let n=t.callback;l&&(n=n.bind(l)),void 0!==t.triggerCapacity&&(t.triggerCapacity--,i[s].triggerCapacity=t.triggerCapacity),this.checkToRemoveListener(t)&&this.listeners[e].splice(s,1),n(...r)}))}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();