@nent/core
Version:
4 lines • 1.13 kB
JavaScript
/*!
* NENT 2022
*/
class t{constructor(){this.events={},this.wildcardEvents=[]}recalcWildcardEvents(){const t=[];for(const s in this.events)s.endsWith("*")&&this.events[s]&&this.events[s].length>0&&t.push(s);this.wildcardEvents=t}on(t,s){return"object"!=typeof this.events[t]&&(this.events[t]=[]),this.events[t].push(s),this.recalcWildcardEvents(),()=>{this.removeListener(t,s)}}removeListener(t,s){if("object"!=typeof this.events[t])return;const i=this.events[t].indexOf(s);i>-1&&this.events[t].splice(i,1),this.recalcWildcardEvents()}removeAllListeners(){Object.keys(this.events).forEach((t=>this.events[t].splice(0,this.events[t].length))),this.recalcWildcardEvents()}emit(t,...s){if("object"==typeof this.events[t]&&[...this.events[t]].forEach((t=>{t.apply(this,s)})),"*"===t)for(const i of this.wildcardEvents){const e=i.slice(0,i.endsWith(".*")?-2:-1);!t.endsWith("*")&&t!==e&&t.startsWith(e)&&this.emit(i,t,...s)}else this.emit("*",t,...s)}once(t,s){const i=this.on(t,((...t)=>{i(),s.apply(this,t),this.recalcWildcardEvents()}));return i}destroy(){this.removeAllListeners()}}const s=new t,i=new t;export{t as E,s as a,i as e}