Some checks reported errors
continuous-integration/drone/push Build was killed
- 搭建 api、auth、utils 等逻辑模块 - 通过 tsc、eslint、vitest 测试验证 BREAKING CHANGE: 新镜像分支
66 lines
1.5 KiB
TypeScript
66 lines
1.5 KiB
TypeScript
/**
|
|
* 认证事件管理器
|
|
* 管理认证相关的事件监听和触发
|
|
*/
|
|
import type { AuthEventType, AuthEventListener } from './types';
|
|
import { AuthError } from './errors';
|
|
|
|
/**
|
|
* 认证事件管理器
|
|
*/
|
|
export class AuthEventManager {
|
|
private listeners: Map<AuthEventType, AuthEventListener[]> = 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();
|