Skip to content

Commit d69578e

Browse files
authored
Merge pull request #16 from maitamdev/feat/event-emitter
feat(utils): add event emitter
2 parents 2c39e7f + 084edf8 commit d69578e

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)