MCPcopy Create free account
hub / github.com/GCWing/BitFun / EventManager

Class EventManager

src/web-ui/src/shared/utils/eventManager.ts:31–215  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

29
30
31export class EventManager implements EventManagerInterface {
32 private listeners: Map<string, EventListener[]> = new Map();
33 private executionCounts: Map<string, Map<EventCallback, number>> = new Map();
34 private readonly debugMode: boolean;
35
36 constructor(debugMode: boolean = false) {
37 this.debugMode = debugMode;
38 }
39
40
41 on<T = any>(event: string, callback: EventCallback<T>, options: EventListenerOptions = {}): () => void {
42 const listener: EventListener<T> = {
43 callback,
44 once: false,
45 priority: options.priority ?? 0
46 };
47
48 if (this.debugMode) {
49 log.debug('Registering event listener', { event });
50 }
51
52 if (!this.listeners.has(event)) {
53 this.listeners.set(event, []);
54 }
55
56 const eventListeners = this.listeners.get(event)!;
57 eventListeners.push(listener);
58
59
60 eventListeners.sort((a, b) => b.priority - a.priority);
61
62
63 if (options.maxExecutions) {
64 if (!this.executionCounts.has(event)) {
65 this.executionCounts.set(event, new Map());
66 }
67 this.executionCounts.get(event)!.set(callback, 0);
68 }
69
70
71
72 return () => this.off(event, callback);
73 }
74
75
76 once<T = any>(event: string, callback: EventCallback<T>, options: EventListenerOptions = {}): () => void {
77 const listener: EventListener<T> = {
78 callback,
79 once: true,
80 priority: options.priority ?? 0
81 };
82
83 if (!this.listeners.has(event)) {
84 this.listeners.set(event, []);
85 }
86
87 const eventListeners = this.listeners.get(event)!;
88 eventListeners.push(listener);

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected