EventEmitter.sys.mjs (931B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 // Simple event emitter abstraction for storage objects to use. 6 export function EventEmitter() { 7 this._events = new Map(); 8 } 9 10 EventEmitter.prototype = { 11 on(event, listener) { 12 if (this._events.has(event)) { 13 this._events.get(event).add(listener); 14 } else { 15 this._events.set(event, new Set([listener])); 16 } 17 }, 18 off(event, listener) { 19 if (!this._events.has(event)) { 20 return; 21 } 22 this._events.get(event).delete(listener); 23 }, 24 emit(event, ...args) { 25 if (!this._events.has(event)) { 26 return; 27 } 28 for (let listener of this._events.get(event).values()) { 29 try { 30 listener.apply(this, args); 31 } catch (e) { 32 console.error(e); 33 } 34 } 35 }, 36 };