summaryrefslogtreecommitdiff
path: root/src/core/event-bus.js
diff options
context:
space:
mode:
authorgrothedev <grothedev@gmail.com>2026-05-29 21:49:20 -0400
committergrothedev <grothedev@gmail.com>2026-05-29 21:49:20 -0400
commit6196004b51a6850909c154f5402ff4858eab479a (patch)
tree126b8bb1600d0a656e0df016e25d08c390f3540e /src/core/event-bus.js
parent27dc5849c3eaf4824d79938e7077abdbe2c82e24 (diff)
mv web stuff to root project dirHEADprototypeframeworkmain
Diffstat (limited to 'src/core/event-bus.js')
-rw-r--r--src/core/event-bus.js32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/core/event-bus.js b/src/core/event-bus.js
new file mode 100644
index 0000000..192eb6d
--- /dev/null
+++ b/src/core/event-bus.js
@@ -0,0 +1,32 @@
+export class EventBus {
+ constructor() {
+ this.listeners = new Map();
+ }
+
+ on(eventName, listener) {
+ if (!this.listeners.has(eventName)) {
+ this.listeners.set(eventName, new Set());
+ }
+
+ const listeners = this.listeners.get(eventName);
+ listeners.add(listener);
+
+ return () => {
+ listeners.delete(listener);
+ if (listeners.size === 0) {
+ this.listeners.delete(eventName);
+ }
+ };
+ }
+
+ emit(eventName, payload) {
+ const listeners = this.listeners.get(eventName);
+ if (!listeners) {
+ return;
+ }
+
+ for (const listener of listeners) {
+ listener(payload);
+ }
+ }
+}