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