alistair
Version:
42 lines (37 loc) • 911 B
JavaScript
;
var chunkMPTPBO7T_cjs = require('../chunk-MPTPBO7T.cjs');
// Copyright 2026 Alistair Smith https://github.com/alii/alistair
// src/bus/index.ts
var EventBus = class {
listeners;
constructor() {
this.listeners = new chunkMPTPBO7T_cjs.StrictMap();
}
on(key, listener) {
const list = this.listeners.getOr(key, () => /* @__PURE__ */ new Set());
list.add(listener);
return () => {
this.off(key, listener);
};
}
off(key, listener) {
const list = this.listeners.getElse(key, () => null);
if (!list) {
return;
}
list.delete(listener);
if (list.size === 0) {
this.listeners.delete(key);
}
}
emit(key, ...args) {
const listeners = this.listeners.getElse(key, () => null);
if (!listeners) {
return;
}
for (const listener of listeners) {
listener(...args);
}
}
};
exports.EventBus = EventBus;