Skip to content

Commit 084edf8

Browse files
maitamdevDHV Team
andcommitted
feat(utils): add event emitter utility
Co-authored-by: DHV Team <dhvteam@users.noreply.github.com>
1 parent 2c39e7f commit 084edf8

File tree

1 file changed

+22
-0
lines changed

1 file changed

+22
-0
lines changed

src/utils/eventEmitter.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// Simple event emitter for app-wide events
2+
type EventHandler = (...args: unknown[]) => void;
3+
class EventEmitter {
4+
private events: Map<string, EventHandler[]> = new Map();
5+
on(event: string, handler: EventHandler): () => void {
6+
if (!this.events.has(event)) this.events.set(event, []);
7+
this.events.get(event)!.push(handler);
8+
return () => this.off(event, handler);
9+
}
10+
off(event: string, handler: EventHandler): void {
11+
const handlers = this.events.get(event);
12+
if (handlers) this.events.set(event, handlers.filter(h => h !== handler));
13+
}
14+
emit(event: string, ...args: unknown[]): void {
15+
this.events.get(event)?.forEach(handler => handler(...args));
16+
}
17+
once(event: string, handler: EventHandler): void {
18+
const wrapper = (...args: unknown[]) => { handler(...args); this.off(event, wrapper); };
19+
this.on(event, wrapper);
20+
}
21+
}
22+
export const appEvents = new EventEmitter();

0 commit comments

Comments
 (0)