Skip to content

Commit 5b51948

Browse files
committed
feat: add event name
1 parent 79cc5b8 commit 5b51948

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

src/index.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ export interface EventMap { [key: string | symbol]: any[] }
22

33
export type Listener<A extends any[]> = (...args: A) => void;
44

5-
export type WildcardListener<EM extends EventMap> = Listener<EM[keyof EM]>;
5+
type _WildcardListener<EM extends EventMap, K extends keyof EM = keyof EM> = Listener<K extends unknown ? [...EM[K], K] : [...EM[K], K]>;
6+
export type WildcardListener<EM extends EventMap> = _WildcardListener<EM>;
67

78
export type ListenerMap<EM extends EventMap> = {
89
[K in keyof EM]: Set<Listener<EM[K]>>
@@ -22,13 +23,15 @@ export class LiteEmit<EM extends EventMap = EventMap> {
2223
if (!this.listenerMap[event]) {
2324
this.listenerMap[event] = new Set();
2425
}
25-
this.listenerMap[event].add(listener);
26+
this.listenerMap[event].add(listener as Listener<EM[K]>);
2627
return this;
2728
}
2829

2930
emit<K extends keyof EM>(event: K, ...args: EM[K]): this {
30-
this.wildcardListeners.forEach(listener => listener(...args));
31-
this.listenerMap[event]?.forEach(listener => listener(...args));
31+
if (this.listenerMap[event]) {
32+
this.wildcardListeners.forEach(listener => listener(...[...args, event] as any));
33+
this.listenerMap[event].forEach(listener => listener(...args));
34+
}
3235
return this;
3336
}
3437

@@ -49,7 +52,7 @@ export class LiteEmit<EM extends EventMap = EventMap> {
4952
return this;
5053
}
5154
if (listener) {
52-
this.listenerMap[event]?.delete(listener);
55+
this.listenerMap[event]?.delete(listener as Listener<EM[K]>);
5356
} else {
5457
this.listenerMap[event]?.clear();
5558
}

0 commit comments

Comments
 (0)