123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- export type EventType = string | symbol;
- export type Handler<T = any> = (event?: T) => void;
- export type WildcardHandler = (type: EventType, event?: any) => void;
- export type EventHandlerList = Array<Handler>;
- export type WildCardEventHandlerList = Array<WildcardHandler>;
- export type EventHandlerMap = Map<EventType, EventHandlerList | WildCardEventHandlerList>;
- export interface Emitter {
- all: EventHandlerMap;
- on<T = any>(type: EventType, handler: Handler<T>): void;
- on(type: '*', handler: WildcardHandler): void;
- off<T = any>(type: EventType, handler: Handler<T>): void;
- off(type: '*', handler: WildcardHandler): void;
- emit<T = any>(type: EventType, event?: T): void;
- emit(type: '*', event?: any): void;
- clear(): void;
- }
- export default function mitt(all?: EventHandlerMap): Emitter {
- all = all || new Map();
- return {
-
- all,
-
- on<T = any>(type: EventType, handler: Handler<T>) {
- const handlers = all?.get(type);
- const added = handlers && handlers.push(handler);
- if (!added) {
- all?.set(type, [handler]);
- }
- },
-
- off<T = any>(type: EventType, handler: Handler<T>) {
- const handlers = all?.get(type);
- if (handlers) {
- handlers.splice(handlers.indexOf(handler) >>> 0, 1);
- }
- },
-
- emit<T = any>(type: EventType, evt: T) {
- ((all?.get(type) || []) as EventHandlerList).slice().map((handler) => {
- handler(evt);
- });
- ((all?.get('*') || []) as WildCardEventHandlerList).slice().map((handler) => {
- handler(type, evt);
- });
- },
- /**
- * Clear all
- */
- clear() {
- this.all.clear();
- },
- };
- }
|