@snap/camera-kit
Version:
Camera Kit Web
42 lines • 1.45 kB
JavaScript
export class TypedEventTarget {
constructor() {
this.listeners = new Map();
this.options = new Map();
}
addEventListener(type, callback, options) {
var _a;
const listener = callback;
const listeners = (_a = this.listeners.get(type)) !== null && _a !== void 0 ? _a : [];
this.listeners.set(type, [...listeners, listener]);
if (options)
this.options.set(listener, options);
}
dispatchEvent(event) {
const listeners = this.listeners.get(event.type);
if (!listeners)
return true;
listeners.forEach((listener) => {
var _a;
const options = (_a = this.options.get(listener)) !== null && _a !== void 0 ? _a : {};
try {
listener(event);
}
catch (error) {
if (window)
window.dispatchEvent(new CustomEvent("error", { detail: error }));
}
if (options.once)
this.removeEventListener(event.type, listener);
});
return true;
}
removeEventListener(type, callback) {
const listener = callback;
const listeners = this.listeners.get(type);
if (!listeners)
return;
this.listeners.set(type, listeners.filter((l) => l !== listener));
this.options.delete(listener);
}
}
//# sourceMappingURL=TypedEventTarget.js.map