/** * 认证事件管理器 * 管理认证相关的事件监听和触发 */ import type { AuthEventType, AuthEventListener } from './types'; import { AuthError } from './errors'; /** * 认证事件管理器 */ export class AuthEventManager { private listeners: Map = new Map(); /** * 添加事件监听器 */ on(event: AuthEventType, listener: AuthEventListener): void { if (!this.listeners.has(event)) { this.listeners.set(event, []); } const eventListeners = this.listeners.get(event); // 神人判断 if (eventListeners) { eventListeners.push(listener); } } /** * 移除事件监听器 */ off(event: AuthEventType, listener: AuthEventListener): void { const eventListeners = this.listeners.get(event); if (eventListeners) { const index = eventListeners.indexOf(listener); if (index !== -1) { eventListeners.splice(index, 1); } } } /** * 触发事件 */ emit(event: AuthEventType, ...args: unknown[]): void { const eventListeners = this.listeners.get(event); if (eventListeners) { eventListeners.forEach(listener => { try { listener(...args); } catch (error) { throw AuthError.unknown(`Error in auth event listener for ${event}`, error); } }); } } /** * 清除所有监听器 */ clear(): void { this.listeners.clear(); } } // 创建全局事件管理器实例 export const authEventManager = new AuthEventManager();