@slippi/slippi-js
Version:
Official Project Slippi Javascript SDK
37 lines (34 loc) • 1.02 kB
JavaScript
;
class TypedEventEmitter {
constructor() {
this.listeners = new Map();
}
on(type, listener) {
let listeners = this.listeners.get(type);
if (!listeners) {
listeners = new Set();
this.listeners.set(type, listeners);
}
listeners.add(listener);
return () => this.off(type, listener);
}
once(type, listener) {
const wrappedListener = (data) => {
this.off(type, wrappedListener);
listener(data);
};
return this.on(type, wrappedListener);
}
off(type, listener) {
var _a;
(_a = this.listeners.get(type)) === null || _a === void 0 ? void 0 : _a.delete(listener);
}
removeListener(type, listener) {
this.off(type, listener);
}
emit(type, data) {
var _a;
(_a = this.listeners.get(type)) === null || _a === void 0 ? void 0 : _a.forEach((fn) => fn(data));
}
}
exports.TypedEventEmitter = TypedEventEmitter;