export class EventDispatcher { constructor() { this._listeners = new Map(); } addEventListener(type, listener) { var _a; this.removeEventListener(type, listener); if (!this._listeners.get(type)) { this._listeners.set(type, []); } (_a = this._listeners.get(type)) === null || _a === void 0 ? void 0 : _a.push(listener); } dispatchEvent(type, args) { var _a; (_a = this._listeners.get(type)) === null || _a === void 0 ? void 0 : _a.forEach((handler) => handler(args)); } hasEventListener(type) { return !!this._listeners.get(type); } removeAllEventListeners(type) { if (!type) { this._listeners = new Map(); } else { this._listeners.delete(type); } } removeEventListener(type, listener) { const arr = this._listeners.get(type); if (!arr) { return; } const length = arr.length, idx = arr.indexOf(listener); if (idx < 0) { return; } if (length === 1) { this._listeners.delete(type); } else { arr.splice(idx, 1); } } }