UNPKG

1.84 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.EventEmitter = void 0;
4const assert_1 = require("./assert");
5class EventEmitter {
6 constructor() {
7 this.listeners = new Map();
8 }
9 emitSync(eventName, ...args) {
10 const listeners = this.getListeners(eventName);
11 const ret = new Array();
12 listeners.forEach(listener => ret.push(listener(...args)));
13 return ret;
14 }
15 async emitAsync(eventName, ...args) {
16 const listeners = this.getListeners(eventName);
17 const ret = new Array();
18 for (let i = 0; i < listeners.length; i++) {
19 ret.push(await listeners[i](...args));
20 }
21 return ret;
22 }
23 getListeners(eventName) {
24 const listeners = this.listeners.get(eventName);
25 if (listeners !== undefined) {
26 (0, assert_1.assert)(listeners.length > 0, `No listener for event '${eventName}'`);
27 return listeners;
28 }
29 return [];
30 }
31 addListener(eventName, listener) {
32 if (!this.listeners.has(eventName))
33 this.listeners.set(eventName, []);
34 const listeners = this.listeners.get(eventName);
35 (0, assert_1.assert)(!listeners.includes(listener), `Listener already added for event '${eventName}'`);
36 listeners.push(listener);
37 }
38 removeListener(eventName, listener) {
39 const listeners = this.listeners.get(eventName);
40 (0, assert_1.assert)(listeners !== undefined, `Unknown event '${eventName}'`);
41 const index = listeners.lastIndexOf(listener);
42 (0, assert_1.assert)(index > -1, `Listener not found for event '${eventName}'`);
43 listeners.splice(index, 1);
44 if (listeners.length === 0)
45 this.listeners.delete(eventName);
46 }
47}
48exports.EventEmitter = EventEmitter;