alistair
Version:
40 lines (36 loc) • 862 B
JavaScript
import { StrictMap } from '../chunk-JMMXLLD5.js';
// Copyright 2026 Alistair Smith https://github.com/alii/alistair
// src/bus/index.ts
var EventBus = class {
listeners;
constructor() {
this.listeners = new 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);
}
}
};
export { EventBus };