5 changed files with 48 additions and 1 deletions
@ -0,0 +1,42 @@ |
|||||||
|
// EventEmitter.js
|
||||||
|
class EventEmitter { |
||||||
|
constructor(debug = false) { |
||||||
|
this.events = {}; |
||||||
|
this.debug = debug; |
||||||
|
} |
||||||
|
|
||||||
|
on(event, listener) { |
||||||
|
if (!this.events[event]) this.events[event] = []; |
||||||
|
this.events[event].push(listener); |
||||||
|
} |
||||||
|
|
||||||
|
once(event, listener) { |
||||||
|
const wrapper = (...args) => { |
||||||
|
listener(...args); |
||||||
|
this.off(event, wrapper); |
||||||
|
}; |
||||||
|
this.on(event, wrapper); |
||||||
|
} |
||||||
|
|
||||||
|
off(event, listener) { |
||||||
|
if (this.events[event]) { |
||||||
|
this.events[event] = this.events[event].filter(l => l !== listener); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
emit(event, data) { |
||||||
|
if (this.debug) console.log(`Event emitted: ${event}`, data); |
||||||
|
(this.events[event] || []).forEach(listener => listener(data)); |
||||||
|
(this.events['*'] || []).forEach(listener => listener(event, data)); |
||||||
|
} |
||||||
|
|
||||||
|
listeners(event) { |
||||||
|
return this.events[event] || []; |
||||||
|
} |
||||||
|
|
||||||
|
clear() { |
||||||
|
this.events = {}; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
export default EventEmitter; |
||||||
Loading…
Reference in new issue