MCPcopy
hub / github.com/callumalpass/tasknotes / EventEmitter

Class EventEmitter

src/utils/EventEmitter.ts:4–59  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2 * A simple event emitter class for communication between views
3 */
4export class EventEmitter {
5 private events: { [key: string]: Array<(...args: unknown[]) => void> } = {};
6
7 /**
8 * Subscribe to an event
9 * @param event The event name to listen for
10 * @param listener The callback function to execute when the event is triggered
11 * @returns An unsubscribe function
12 */
13 on(event: string, listener: (...args: unknown[]) => void): () => void {
14 if (!this.events[event]) {
15 this.events[event] = [];
16 }
17 this.events[event].push(listener);
18
19 // Return unsubscribe function
20 return () => {
21 const listeners = this.events[event];
22 if (!listeners) {
23 return;
24 }
25
26 const remainingListeners = listeners.filter((l) => l !== listener);
27 if (remainingListeners.length > 0) {
28 this.events[event] = remainingListeners;
29 } else {
30 delete this.events[event];
31 }
32 };
33 }
34
35 /**
36 * Emit an event with data
37 * @param event The event name to emit
38 * @param args The data to pass to the event listeners
39 */
40 emit(event: string, ...args: unknown[]): void {
41 if (this.events[event]) {
42 this.events[event].forEach((listener) => {
43 listener(...args);
44 });
45 }
46 }
47
48 /**
49 * Remove all listeners for a specific event
50 * @param event The event name to clear listeners for
51 */
52 removeAllListeners(event?: string): void {
53 if (event) {
54 delete this.events[event];
55 } else {
56 this.events = {};
57 }
58 }
59}

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected