ly-utils-lib 2.6.0 → 2.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +130 -0
- package/dist/event.cjs +234 -0
- package/dist/event.cjs.map +1 -0
- package/dist/event.d.cts +2 -0
- package/dist/event.d.ts +2 -0
- package/dist/event.js +220 -0
- package/dist/event.js.map +1 -0
- package/dist/index-g6UFPtxf.d.cts +260 -0
- package/dist/index-g6UFPtxf.d.ts +260 -0
- package/dist/index.cjs +228 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +227 -1
- package/dist/index.js.map +1 -1
- package/package.json +12 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/modules/event/index.ts"],"names":[],"mappings":"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","file":"event.js","sourcesContent":["/**\n * Event Module - 事件管理工具\n *\n * 基于 mitt 封装的事件发布订阅系统,提供类型安全的事件管理\n */\n\nimport mitt, { Emitter, EventType, Handler } from 'mitt'\n\n// ==================== 类型定义 ====================\n\n/**\n * 事件类型映射\n * 使用字符串索引签名,可以注册任意事件\n */\nexport type EventHandler<T = any> = (data: T) => void | Promise<void>\n\n/**\n * 事件总线配置选项\n */\nexport interface EventBusOptions {\n /** 是否记录日志 */\n debug?: boolean\n /** 事件名称前缀 */\n prefix?: string\n}\n\n/**\n * 事件监听器元数据\n */\nexport interface ListenerMeta {\n /** 事件名称 */\n event: string\n /** 处理函数 */\n handler: EventHandler\n /** 是否只监听一次 */\n once: boolean\n /** 监听时间 */\n timestamp: number\n}\n\n/**\n * 事件总线实例接口\n */\nexport interface IEventBus<E extends Record<EventType, unknown>> {\n /**\n * 订阅事件\n * @param event - 事件名称\n * @param handler - 事件处理函数\n * @returns 取消订阅的函数\n */\n on<K extends keyof E>(event: K, handler: EventHandler<E[K]>): () => void\n on(event: string | string[], handler: EventHandler): () => void\n\n /**\n * 订阅事件(只执行一次)\n * @param event - 事件名称\n * @param handler - 事件处理函数\n * @returns 取消订阅的函数\n */\n once<K extends keyof E>(event: K, handler: EventHandler<E[K]>): () => void\n once(event: string | string[], handler: EventHandler): () => void\n\n /**\n * 取消订阅\n * @param event - 事件名称\n * @param handler - 事件处理函数\n */\n off<K extends keyof E>(event: K, handler?: EventHandler<E[K]>): void\n off(event: string | string[], handler?: EventHandler): void\n\n /**\n * 发布事件\n * @param event - 事件名称\n * @param data - 事件数据\n */\n emit<K extends keyof E>(event: K, data?: E[K]): void\n emit(event: string, data?: unknown): void\n\n /**\n * 清空所有事件监听器\n */\n clear(): void\n\n /**\n * 获取所有事件名称\n */\n all: Emitter<E>['all']\n}\n\n// ==================== EventBus 类 ====================\n\n/**\n * 事件总线类\n * @template E - 事件类型映射\n * @example\n * ```ts\n * // 定义事件类型\n * interface Events {\n * user: { id: number; name: string }\n * message: string\n * error: Error\n * }\n *\n * const bus = createEventBus<Events>()\n *\n * // 订阅事件\n * bus.on('user', (user) => console.log(user.name))\n *\n * // 发布事件\n * bus.emit('user', { id: 1, name: 'Alice' })\n * ```\n */\nexport class EventBus<E extends Record<EventType, unknown> = Record<string, any>>\n implements IEventBus<E>\n{\n private emitter: Emitter<E>\n private options: Required<Omit<EventBusOptions, 'prefix'>> & Pick<EventBusOptions, 'prefix'>\n private listeners: Map<string, ListenerMeta[]> = new Map()\n\n constructor(options: EventBusOptions = {}) {\n this.options = {\n debug: options.debug ?? false,\n prefix: options.prefix ?? '',\n }\n\n this.emitter = mitt<E>()\n this.log('EventBus created')\n }\n\n /**\n * 订阅事件\n */\n on<K extends keyof E>(\n event: K,\n handler: EventHandler<E[K]>\n ): () => void\n on(event: string | string[], handler: EventHandler): () => void\n on(event: any, handler: any): () => void {\n const events = Array.isArray(event) ? event : [event]\n const unsubscribers: (() => void)[] = []\n\n events.forEach((eventName) => {\n const fullName = this.getFullName(eventName)\n\n const wrappedHandler: Handler = (data: any) => {\n this.log(`Event triggered: ${fullName}`, data)\n return handler(data)\n }\n\n this.emitter.on(fullName, wrappedHandler)\n\n // 记录监听器\n const meta: ListenerMeta = {\n event: fullName,\n handler: wrappedHandler,\n once: false,\n timestamp: Date.now(),\n }\n this.addListener(fullName, meta)\n\n // 返回取消订阅函数\n unsubscribers.push(() => {\n this.emitter.off(fullName, wrappedHandler)\n this.removeListener(fullName, wrappedHandler)\n this.log(`Unsubscribed from: ${fullName}`)\n })\n })\n\n // 返回一个取消所有订阅的函数\n return () => {\n unsubscribers.forEach((unsub) => unsub())\n }\n }\n\n /**\n * 订阅事件(只执行一次)\n */\n once<K extends keyof E>(\n event: K,\n handler: EventHandler<E[K]>\n ): () => void\n once(event: string | string[], handler: EventHandler): () => void\n once(event: any, handler: any): () => void {\n const events = Array.isArray(event) ? event : [event]\n const unsubscribers: (() => void)[] = []\n\n events.forEach((eventName) => {\n const fullName = this.getFullName(eventName)\n\n const wrappedHandler: Handler = (data: any) => {\n this.log(`One-time event triggered: ${fullName}`, data)\n\n // 执行后立即取消订阅\n this.emitter.off(fullName, wrappedHandler)\n this.removeListener(fullName, wrappedHandler)\n\n return handler(data)\n }\n\n this.emitter.on(fullName, wrappedHandler)\n\n // 记录监听器\n const meta: ListenerMeta = {\n event: fullName,\n handler: wrappedHandler,\n once: true,\n timestamp: Date.now(),\n }\n this.addListener(fullName, meta)\n\n unsubscribers.push(() => {\n this.emitter.off(fullName, wrappedHandler)\n this.removeListener(fullName, wrappedHandler)\n })\n })\n\n return () => {\n unsubscribers.forEach((unsub) => unsub())\n }\n }\n\n /**\n * 取消订阅\n */\n off<K extends keyof E>(event: K, handler?: EventHandler<E[K]>): void\n off(event: string | string[], handler?: EventHandler): void\n off(event: any, handler?: any): void {\n const events = Array.isArray(event) ? event : [event]\n\n events.forEach((eventName) => {\n const fullName = this.getFullName(eventName)\n const listeners = this.listeners.get(fullName) || []\n\n if (handler) {\n // 移除特定处理函数\n const index = listeners.findIndex((meta) => meta.handler === handler)\n if (index !== -1) {\n this.emitter.off(fullName, listeners[index].handler)\n listeners.splice(index, 1)\n this.log(`Removed handler from: ${fullName}`)\n }\n } else {\n // 移除所有处理函数\n listeners.forEach((meta) => {\n this.emitter.off(fullName, meta.handler)\n })\n this.listeners.delete(fullName)\n this.log(`Cleared all listeners for: ${fullName}`)\n }\n })\n }\n\n /**\n * 发布事件\n */\n emit<K extends keyof E>(event: K, data?: E[K]): void\n emit(event: string, data?: unknown): void\n emit(event: any, data?: any): void {\n const fullName = this.getFullName(event)\n this.log(`Emitting event: ${fullName}`, data)\n this.emitter.emit(fullName, data)\n }\n\n /**\n * 清空所有事件监听器\n */\n clear(): void {\n this.emitter.all.clear()\n this.listeners.clear()\n this.log('All event listeners cleared')\n }\n\n /**\n * 获取所有事件\n */\n get all(): any {\n return this.emitter.all\n }\n\n /**\n * 获取事件监听器数量\n */\n getListenerCount(event?: string): number {\n if (event) {\n const fullName = this.getFullName(event)\n return this.listeners.get(fullName)?.length || 0\n }\n return Array.from(this.listeners.values()).reduce((total, list) => total + list.length, 0)\n }\n\n /**\n * 获取所有事件名称\n */\n getEventNames(): string[] {\n return Array.from(this.listeners.keys())\n }\n\n /**\n * 获取事件监听器列表\n */\n getListeners(event: string): ListenerMeta[] {\n const fullName = this.getFullName(event)\n return this.listeners.get(fullName) || []\n }\n\n /**\n * 添加监听器记录\n */\n private addListener(event: string, meta: ListenerMeta): void {\n if (!this.listeners.has(event)) {\n this.listeners.set(event, [])\n }\n this.listeners.get(event)!.push(meta)\n }\n\n /**\n * 移除监听器记录\n */\n private removeListener(event: string, handler: Handler): void {\n const listeners = this.listeners.get(event)\n if (listeners) {\n const index = listeners.findIndex((meta) => meta.handler === handler)\n if (index !== -1) {\n listeners.splice(index, 1)\n }\n if (listeners.length === 0) {\n this.listeners.delete(event)\n }\n }\n }\n\n /**\n * 获取完整的事件名称(带前缀)\n */\n private getFullName(event: string): string {\n return this.options.prefix ? `${this.options.prefix}:${event}` : event\n }\n\n /**\n * 日志输出\n */\n private log(...args: unknown[]): void {\n if (this.options.debug) {\n console.log('[EventBus]', ...args)\n }\n }\n}\n\n// ==================== 工厂函数 ====================\n\n/**\n * 创建事件总线实例\n * @param options - 配置选项\n * @returns 事件总线实例\n * @example\n * ```ts\n * // 创建事件总线\n * const bus = createEventBus({\n * debug: true,\n * prefix: 'app'\n * })\n *\n * // 订阅事件\n * const unsubscribe = bus.on('user:login', (user) => {\n * console.log('User logged in:', user)\n * })\n *\n * // 发布事件\n * bus.emit('user:login', { id: 1, name: 'Alice' })\n *\n * // 取消订阅\n * unsubscribe()\n * ```\n */\nexport function createEventBus<E extends Record<EventType, unknown> = Record<string, any>>(\n options?: EventBusOptions\n): IEventBus<E> {\n return new EventBus<E>(options)\n}\n\n/**\n * 创建全局事件总线(单例)\n * @param options - 配置选项\n * @returns 全局事件总线实例\n * @example\n * ```ts\n * // 获取全局事件总线\n * const globalBus = getGlobalEventBus({ debug: true })\n *\n * // 在任何地方使用\n * globalBus.emit('app:ready')\n * ```\n */\nlet globalEventBus: IEventBus<any> | null = null\n\nexport function getGlobalEventBus<E extends Record<EventType, unknown> = Record<string, any>>(\n options?: EventBusOptions\n): IEventBus<E> {\n if (!globalEventBus) {\n globalEventBus = createEventBus<E>(options)\n }\n return globalEventBus as IEventBus<E>\n}\n\n// ==================== 工具函数 ====================\n\n/**\n * 等待事件触发\n * @param bus - 事件总线\n * @param event - 事件名称\n * @param timeout - 超时时间(毫秒),默认 5000\n * @returns Promise,在事件触发时 resolve\n * @example\n * ```ts\n * const bus = createEventBus()\n *\n * // 等待事件\n * const data = await waitForEvent(bus, 'data:ready')\n * console.log('Data ready:', data)\n * ```\n */\nexport function waitForEvent<T = any>(\n bus: IEventBus<Record<string, any>>,\n event: string,\n timeout: number = 5000\n): Promise<T> {\n return new Promise((resolve, reject) => {\n const timer = setTimeout(() => {\n unsubscribe()\n reject(new Error(`Timeout waiting for event: ${event}`))\n }, timeout)\n\n const unsubscribe = bus.on(event, (data: T) => {\n clearTimeout(timer)\n unsubscribe()\n resolve(data)\n })\n })\n}\n\n/**\n * 批量订阅事件\n * @param bus - 事件总线\n * @param events - 事件映射\n * @returns 取消所有订阅的函数\n * @example\n * ```ts\n * const bus = createEventBus()\n *\n * const unsubscribe = batchSubscribe(bus, {\n * 'user:login': (user) => console.log('Login:', user),\n * 'user:logout': () => console.log('Logout'),\n * 'error': (error) => console.error('Error:', error)\n * })\n * ```\n */\nexport function batchSubscribe(\n bus: IEventBus<Record<string, any>>,\n events: Record<string, EventHandler<any>>\n): () => void {\n const unsubscribers: (() => void)[] = []\n\n Object.entries(events).forEach(([event, handler]) => {\n unsubscribers.push(bus.on(event, handler))\n })\n\n return () => {\n unsubscribers.forEach((unsub) => unsub())\n }\n}\n\n/**\n * 创建命名空间事件总线\n * @param namespace - 命名空间\n * @param options - 配置选项\n * @returns 事件总线实例\n * @example\n * ```ts\n * const userBus = createNamespacedEventBus('user')\n * const appBus = createNamespacedEventBus('app')\n *\n * userBus.emit('login') // 实际事件名: user:login\n * appBus.emit('ready') // 实际事件名: app:ready\n * ```\n */\nexport function createNamespacedEventBus<E extends Record<EventType, unknown> = Record<string, any>>(\n namespace: string,\n options?: Omit<EventBusOptions, 'prefix'>\n): IEventBus<E> {\n return createEventBus<E>({\n ...options,\n prefix: namespace,\n }) as IEventBus<E>\n}\n\n// ==================== 导出 ====================\n\nexport default {\n EventBus,\n createEventBus,\n getGlobalEventBus,\n waitForEvent,\n batchSubscribe,\n createNamespacedEventBus,\n}\n"]}
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
import { EventType, Emitter } from 'mitt';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Event Module - 事件管理工具
|
|
5
|
+
*
|
|
6
|
+
* 基于 mitt 封装的事件发布订阅系统,提供类型安全的事件管理
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* 事件类型映射
|
|
11
|
+
* 使用字符串索引签名,可以注册任意事件
|
|
12
|
+
*/
|
|
13
|
+
type EventHandler<T = any> = (data: T) => void | Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* 事件总线配置选项
|
|
16
|
+
*/
|
|
17
|
+
interface EventBusOptions {
|
|
18
|
+
/** 是否记录日志 */
|
|
19
|
+
debug?: boolean;
|
|
20
|
+
/** 事件名称前缀 */
|
|
21
|
+
prefix?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* 事件监听器元数据
|
|
25
|
+
*/
|
|
26
|
+
interface ListenerMeta {
|
|
27
|
+
/** 事件名称 */
|
|
28
|
+
event: string;
|
|
29
|
+
/** 处理函数 */
|
|
30
|
+
handler: EventHandler;
|
|
31
|
+
/** 是否只监听一次 */
|
|
32
|
+
once: boolean;
|
|
33
|
+
/** 监听时间 */
|
|
34
|
+
timestamp: number;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* 事件总线实例接口
|
|
38
|
+
*/
|
|
39
|
+
interface IEventBus<E extends Record<EventType, unknown>> {
|
|
40
|
+
/**
|
|
41
|
+
* 订阅事件
|
|
42
|
+
* @param event - 事件名称
|
|
43
|
+
* @param handler - 事件处理函数
|
|
44
|
+
* @returns 取消订阅的函数
|
|
45
|
+
*/
|
|
46
|
+
on<K extends keyof E>(event: K, handler: EventHandler<E[K]>): () => void;
|
|
47
|
+
on(event: string | string[], handler: EventHandler): () => void;
|
|
48
|
+
/**
|
|
49
|
+
* 订阅事件(只执行一次)
|
|
50
|
+
* @param event - 事件名称
|
|
51
|
+
* @param handler - 事件处理函数
|
|
52
|
+
* @returns 取消订阅的函数
|
|
53
|
+
*/
|
|
54
|
+
once<K extends keyof E>(event: K, handler: EventHandler<E[K]>): () => void;
|
|
55
|
+
once(event: string | string[], handler: EventHandler): () => void;
|
|
56
|
+
/**
|
|
57
|
+
* 取消订阅
|
|
58
|
+
* @param event - 事件名称
|
|
59
|
+
* @param handler - 事件处理函数
|
|
60
|
+
*/
|
|
61
|
+
off<K extends keyof E>(event: K, handler?: EventHandler<E[K]>): void;
|
|
62
|
+
off(event: string | string[], handler?: EventHandler): void;
|
|
63
|
+
/**
|
|
64
|
+
* 发布事件
|
|
65
|
+
* @param event - 事件名称
|
|
66
|
+
* @param data - 事件数据
|
|
67
|
+
*/
|
|
68
|
+
emit<K extends keyof E>(event: K, data?: E[K]): void;
|
|
69
|
+
emit(event: string, data?: unknown): void;
|
|
70
|
+
/**
|
|
71
|
+
* 清空所有事件监听器
|
|
72
|
+
*/
|
|
73
|
+
clear(): void;
|
|
74
|
+
/**
|
|
75
|
+
* 获取所有事件名称
|
|
76
|
+
*/
|
|
77
|
+
all: Emitter<E>['all'];
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* 事件总线类
|
|
81
|
+
* @template E - 事件类型映射
|
|
82
|
+
* @example
|
|
83
|
+
* ```ts
|
|
84
|
+
* // 定义事件类型
|
|
85
|
+
* interface Events {
|
|
86
|
+
* user: { id: number; name: string }
|
|
87
|
+
* message: string
|
|
88
|
+
* error: Error
|
|
89
|
+
* }
|
|
90
|
+
*
|
|
91
|
+
* const bus = createEventBus<Events>()
|
|
92
|
+
*
|
|
93
|
+
* // 订阅事件
|
|
94
|
+
* bus.on('user', (user) => console.log(user.name))
|
|
95
|
+
*
|
|
96
|
+
* // 发布事件
|
|
97
|
+
* bus.emit('user', { id: 1, name: 'Alice' })
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
100
|
+
declare class EventBus<E extends Record<EventType, unknown> = Record<string, any>> implements IEventBus<E> {
|
|
101
|
+
private emitter;
|
|
102
|
+
private options;
|
|
103
|
+
private listeners;
|
|
104
|
+
constructor(options?: EventBusOptions);
|
|
105
|
+
/**
|
|
106
|
+
* 订阅事件
|
|
107
|
+
*/
|
|
108
|
+
on<K extends keyof E>(event: K, handler: EventHandler<E[K]>): () => void;
|
|
109
|
+
on(event: string | string[], handler: EventHandler): () => void;
|
|
110
|
+
/**
|
|
111
|
+
* 订阅事件(只执行一次)
|
|
112
|
+
*/
|
|
113
|
+
once<K extends keyof E>(event: K, handler: EventHandler<E[K]>): () => void;
|
|
114
|
+
once(event: string | string[], handler: EventHandler): () => void;
|
|
115
|
+
/**
|
|
116
|
+
* 取消订阅
|
|
117
|
+
*/
|
|
118
|
+
off<K extends keyof E>(event: K, handler?: EventHandler<E[K]>): void;
|
|
119
|
+
off(event: string | string[], handler?: EventHandler): void;
|
|
120
|
+
/**
|
|
121
|
+
* 发布事件
|
|
122
|
+
*/
|
|
123
|
+
emit<K extends keyof E>(event: K, data?: E[K]): void;
|
|
124
|
+
emit(event: string, data?: unknown): void;
|
|
125
|
+
/**
|
|
126
|
+
* 清空所有事件监听器
|
|
127
|
+
*/
|
|
128
|
+
clear(): void;
|
|
129
|
+
/**
|
|
130
|
+
* 获取所有事件
|
|
131
|
+
*/
|
|
132
|
+
get all(): any;
|
|
133
|
+
/**
|
|
134
|
+
* 获取事件监听器数量
|
|
135
|
+
*/
|
|
136
|
+
getListenerCount(event?: string): number;
|
|
137
|
+
/**
|
|
138
|
+
* 获取所有事件名称
|
|
139
|
+
*/
|
|
140
|
+
getEventNames(): string[];
|
|
141
|
+
/**
|
|
142
|
+
* 获取事件监听器列表
|
|
143
|
+
*/
|
|
144
|
+
getListeners(event: string): ListenerMeta[];
|
|
145
|
+
/**
|
|
146
|
+
* 添加监听器记录
|
|
147
|
+
*/
|
|
148
|
+
private addListener;
|
|
149
|
+
/**
|
|
150
|
+
* 移除监听器记录
|
|
151
|
+
*/
|
|
152
|
+
private removeListener;
|
|
153
|
+
/**
|
|
154
|
+
* 获取完整的事件名称(带前缀)
|
|
155
|
+
*/
|
|
156
|
+
private getFullName;
|
|
157
|
+
/**
|
|
158
|
+
* 日志输出
|
|
159
|
+
*/
|
|
160
|
+
private log;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* 创建事件总线实例
|
|
164
|
+
* @param options - 配置选项
|
|
165
|
+
* @returns 事件总线实例
|
|
166
|
+
* @example
|
|
167
|
+
* ```ts
|
|
168
|
+
* // 创建事件总线
|
|
169
|
+
* const bus = createEventBus({
|
|
170
|
+
* debug: true,
|
|
171
|
+
* prefix: 'app'
|
|
172
|
+
* })
|
|
173
|
+
*
|
|
174
|
+
* // 订阅事件
|
|
175
|
+
* const unsubscribe = bus.on('user:login', (user) => {
|
|
176
|
+
* console.log('User logged in:', user)
|
|
177
|
+
* })
|
|
178
|
+
*
|
|
179
|
+
* // 发布事件
|
|
180
|
+
* bus.emit('user:login', { id: 1, name: 'Alice' })
|
|
181
|
+
*
|
|
182
|
+
* // 取消订阅
|
|
183
|
+
* unsubscribe()
|
|
184
|
+
* ```
|
|
185
|
+
*/
|
|
186
|
+
declare function createEventBus<E extends Record<EventType, unknown> = Record<string, any>>(options?: EventBusOptions): IEventBus<E>;
|
|
187
|
+
declare function getGlobalEventBus<E extends Record<EventType, unknown> = Record<string, any>>(options?: EventBusOptions): IEventBus<E>;
|
|
188
|
+
/**
|
|
189
|
+
* 等待事件触发
|
|
190
|
+
* @param bus - 事件总线
|
|
191
|
+
* @param event - 事件名称
|
|
192
|
+
* @param timeout - 超时时间(毫秒),默认 5000
|
|
193
|
+
* @returns Promise,在事件触发时 resolve
|
|
194
|
+
* @example
|
|
195
|
+
* ```ts
|
|
196
|
+
* const bus = createEventBus()
|
|
197
|
+
*
|
|
198
|
+
* // 等待事件
|
|
199
|
+
* const data = await waitForEvent(bus, 'data:ready')
|
|
200
|
+
* console.log('Data ready:', data)
|
|
201
|
+
* ```
|
|
202
|
+
*/
|
|
203
|
+
declare function waitForEvent<T = any>(bus: IEventBus<Record<string, any>>, event: string, timeout?: number): Promise<T>;
|
|
204
|
+
/**
|
|
205
|
+
* 批量订阅事件
|
|
206
|
+
* @param bus - 事件总线
|
|
207
|
+
* @param events - 事件映射
|
|
208
|
+
* @returns 取消所有订阅的函数
|
|
209
|
+
* @example
|
|
210
|
+
* ```ts
|
|
211
|
+
* const bus = createEventBus()
|
|
212
|
+
*
|
|
213
|
+
* const unsubscribe = batchSubscribe(bus, {
|
|
214
|
+
* 'user:login': (user) => console.log('Login:', user),
|
|
215
|
+
* 'user:logout': () => console.log('Logout'),
|
|
216
|
+
* 'error': (error) => console.error('Error:', error)
|
|
217
|
+
* })
|
|
218
|
+
* ```
|
|
219
|
+
*/
|
|
220
|
+
declare function batchSubscribe(bus: IEventBus<Record<string, any>>, events: Record<string, EventHandler<any>>): () => void;
|
|
221
|
+
/**
|
|
222
|
+
* 创建命名空间事件总线
|
|
223
|
+
* @param namespace - 命名空间
|
|
224
|
+
* @param options - 配置选项
|
|
225
|
+
* @returns 事件总线实例
|
|
226
|
+
* @example
|
|
227
|
+
* ```ts
|
|
228
|
+
* const userBus = createNamespacedEventBus('user')
|
|
229
|
+
* const appBus = createNamespacedEventBus('app')
|
|
230
|
+
*
|
|
231
|
+
* userBus.emit('login') // 实际事件名: user:login
|
|
232
|
+
* appBus.emit('ready') // 实际事件名: app:ready
|
|
233
|
+
* ```
|
|
234
|
+
*/
|
|
235
|
+
declare function createNamespacedEventBus<E extends Record<EventType, unknown> = Record<string, any>>(namespace: string, options?: Omit<EventBusOptions, 'prefix'>): IEventBus<E>;
|
|
236
|
+
declare const _default: {
|
|
237
|
+
EventBus: typeof EventBus;
|
|
238
|
+
createEventBus: typeof createEventBus;
|
|
239
|
+
getGlobalEventBus: typeof getGlobalEventBus;
|
|
240
|
+
waitForEvent: typeof waitForEvent;
|
|
241
|
+
batchSubscribe: typeof batchSubscribe;
|
|
242
|
+
createNamespacedEventBus: typeof createNamespacedEventBus;
|
|
243
|
+
};
|
|
244
|
+
|
|
245
|
+
type index_EventBus<E extends Record<EventType, unknown> = Record<string, any>> = EventBus<E>;
|
|
246
|
+
declare const index_EventBus: typeof EventBus;
|
|
247
|
+
type index_EventBusOptions = EventBusOptions;
|
|
248
|
+
type index_EventHandler<T = any> = EventHandler<T>;
|
|
249
|
+
type index_IEventBus<E extends Record<EventType, unknown>> = IEventBus<E>;
|
|
250
|
+
type index_ListenerMeta = ListenerMeta;
|
|
251
|
+
declare const index_batchSubscribe: typeof batchSubscribe;
|
|
252
|
+
declare const index_createEventBus: typeof createEventBus;
|
|
253
|
+
declare const index_createNamespacedEventBus: typeof createNamespacedEventBus;
|
|
254
|
+
declare const index_getGlobalEventBus: typeof getGlobalEventBus;
|
|
255
|
+
declare const index_waitForEvent: typeof waitForEvent;
|
|
256
|
+
declare namespace index {
|
|
257
|
+
export { index_EventBus as EventBus, type index_EventBusOptions as EventBusOptions, type index_EventHandler as EventHandler, type index_IEventBus as IEventBus, type index_ListenerMeta as ListenerMeta, index_batchSubscribe as batchSubscribe, index_createEventBus as createEventBus, index_createNamespacedEventBus as createNamespacedEventBus, _default as default, index_getGlobalEventBus as getGlobalEventBus, index_waitForEvent as waitForEvent };
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
export { EventBus as E, type IEventBus as I, type ListenerMeta as L, _default as _, type EventBusOptions as a, type EventHandler as b, batchSubscribe as c, createEventBus as d, createNamespacedEventBus as e, getGlobalEventBus as g, index as i, waitForEvent as w };
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
import { EventType, Emitter } from 'mitt';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Event Module - 事件管理工具
|
|
5
|
+
*
|
|
6
|
+
* 基于 mitt 封装的事件发布订阅系统,提供类型安全的事件管理
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* 事件类型映射
|
|
11
|
+
* 使用字符串索引签名,可以注册任意事件
|
|
12
|
+
*/
|
|
13
|
+
type EventHandler<T = any> = (data: T) => void | Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* 事件总线配置选项
|
|
16
|
+
*/
|
|
17
|
+
interface EventBusOptions {
|
|
18
|
+
/** 是否记录日志 */
|
|
19
|
+
debug?: boolean;
|
|
20
|
+
/** 事件名称前缀 */
|
|
21
|
+
prefix?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* 事件监听器元数据
|
|
25
|
+
*/
|
|
26
|
+
interface ListenerMeta {
|
|
27
|
+
/** 事件名称 */
|
|
28
|
+
event: string;
|
|
29
|
+
/** 处理函数 */
|
|
30
|
+
handler: EventHandler;
|
|
31
|
+
/** 是否只监听一次 */
|
|
32
|
+
once: boolean;
|
|
33
|
+
/** 监听时间 */
|
|
34
|
+
timestamp: number;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* 事件总线实例接口
|
|
38
|
+
*/
|
|
39
|
+
interface IEventBus<E extends Record<EventType, unknown>> {
|
|
40
|
+
/**
|
|
41
|
+
* 订阅事件
|
|
42
|
+
* @param event - 事件名称
|
|
43
|
+
* @param handler - 事件处理函数
|
|
44
|
+
* @returns 取消订阅的函数
|
|
45
|
+
*/
|
|
46
|
+
on<K extends keyof E>(event: K, handler: EventHandler<E[K]>): () => void;
|
|
47
|
+
on(event: string | string[], handler: EventHandler): () => void;
|
|
48
|
+
/**
|
|
49
|
+
* 订阅事件(只执行一次)
|
|
50
|
+
* @param event - 事件名称
|
|
51
|
+
* @param handler - 事件处理函数
|
|
52
|
+
* @returns 取消订阅的函数
|
|
53
|
+
*/
|
|
54
|
+
once<K extends keyof E>(event: K, handler: EventHandler<E[K]>): () => void;
|
|
55
|
+
once(event: string | string[], handler: EventHandler): () => void;
|
|
56
|
+
/**
|
|
57
|
+
* 取消订阅
|
|
58
|
+
* @param event - 事件名称
|
|
59
|
+
* @param handler - 事件处理函数
|
|
60
|
+
*/
|
|
61
|
+
off<K extends keyof E>(event: K, handler?: EventHandler<E[K]>): void;
|
|
62
|
+
off(event: string | string[], handler?: EventHandler): void;
|
|
63
|
+
/**
|
|
64
|
+
* 发布事件
|
|
65
|
+
* @param event - 事件名称
|
|
66
|
+
* @param data - 事件数据
|
|
67
|
+
*/
|
|
68
|
+
emit<K extends keyof E>(event: K, data?: E[K]): void;
|
|
69
|
+
emit(event: string, data?: unknown): void;
|
|
70
|
+
/**
|
|
71
|
+
* 清空所有事件监听器
|
|
72
|
+
*/
|
|
73
|
+
clear(): void;
|
|
74
|
+
/**
|
|
75
|
+
* 获取所有事件名称
|
|
76
|
+
*/
|
|
77
|
+
all: Emitter<E>['all'];
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* 事件总线类
|
|
81
|
+
* @template E - 事件类型映射
|
|
82
|
+
* @example
|
|
83
|
+
* ```ts
|
|
84
|
+
* // 定义事件类型
|
|
85
|
+
* interface Events {
|
|
86
|
+
* user: { id: number; name: string }
|
|
87
|
+
* message: string
|
|
88
|
+
* error: Error
|
|
89
|
+
* }
|
|
90
|
+
*
|
|
91
|
+
* const bus = createEventBus<Events>()
|
|
92
|
+
*
|
|
93
|
+
* // 订阅事件
|
|
94
|
+
* bus.on('user', (user) => console.log(user.name))
|
|
95
|
+
*
|
|
96
|
+
* // 发布事件
|
|
97
|
+
* bus.emit('user', { id: 1, name: 'Alice' })
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
100
|
+
declare class EventBus<E extends Record<EventType, unknown> = Record<string, any>> implements IEventBus<E> {
|
|
101
|
+
private emitter;
|
|
102
|
+
private options;
|
|
103
|
+
private listeners;
|
|
104
|
+
constructor(options?: EventBusOptions);
|
|
105
|
+
/**
|
|
106
|
+
* 订阅事件
|
|
107
|
+
*/
|
|
108
|
+
on<K extends keyof E>(event: K, handler: EventHandler<E[K]>): () => void;
|
|
109
|
+
on(event: string | string[], handler: EventHandler): () => void;
|
|
110
|
+
/**
|
|
111
|
+
* 订阅事件(只执行一次)
|
|
112
|
+
*/
|
|
113
|
+
once<K extends keyof E>(event: K, handler: EventHandler<E[K]>): () => void;
|
|
114
|
+
once(event: string | string[], handler: EventHandler): () => void;
|
|
115
|
+
/**
|
|
116
|
+
* 取消订阅
|
|
117
|
+
*/
|
|
118
|
+
off<K extends keyof E>(event: K, handler?: EventHandler<E[K]>): void;
|
|
119
|
+
off(event: string | string[], handler?: EventHandler): void;
|
|
120
|
+
/**
|
|
121
|
+
* 发布事件
|
|
122
|
+
*/
|
|
123
|
+
emit<K extends keyof E>(event: K, data?: E[K]): void;
|
|
124
|
+
emit(event: string, data?: unknown): void;
|
|
125
|
+
/**
|
|
126
|
+
* 清空所有事件监听器
|
|
127
|
+
*/
|
|
128
|
+
clear(): void;
|
|
129
|
+
/**
|
|
130
|
+
* 获取所有事件
|
|
131
|
+
*/
|
|
132
|
+
get all(): any;
|
|
133
|
+
/**
|
|
134
|
+
* 获取事件监听器数量
|
|
135
|
+
*/
|
|
136
|
+
getListenerCount(event?: string): number;
|
|
137
|
+
/**
|
|
138
|
+
* 获取所有事件名称
|
|
139
|
+
*/
|
|
140
|
+
getEventNames(): string[];
|
|
141
|
+
/**
|
|
142
|
+
* 获取事件监听器列表
|
|
143
|
+
*/
|
|
144
|
+
getListeners(event: string): ListenerMeta[];
|
|
145
|
+
/**
|
|
146
|
+
* 添加监听器记录
|
|
147
|
+
*/
|
|
148
|
+
private addListener;
|
|
149
|
+
/**
|
|
150
|
+
* 移除监听器记录
|
|
151
|
+
*/
|
|
152
|
+
private removeListener;
|
|
153
|
+
/**
|
|
154
|
+
* 获取完整的事件名称(带前缀)
|
|
155
|
+
*/
|
|
156
|
+
private getFullName;
|
|
157
|
+
/**
|
|
158
|
+
* 日志输出
|
|
159
|
+
*/
|
|
160
|
+
private log;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* 创建事件总线实例
|
|
164
|
+
* @param options - 配置选项
|
|
165
|
+
* @returns 事件总线实例
|
|
166
|
+
* @example
|
|
167
|
+
* ```ts
|
|
168
|
+
* // 创建事件总线
|
|
169
|
+
* const bus = createEventBus({
|
|
170
|
+
* debug: true,
|
|
171
|
+
* prefix: 'app'
|
|
172
|
+
* })
|
|
173
|
+
*
|
|
174
|
+
* // 订阅事件
|
|
175
|
+
* const unsubscribe = bus.on('user:login', (user) => {
|
|
176
|
+
* console.log('User logged in:', user)
|
|
177
|
+
* })
|
|
178
|
+
*
|
|
179
|
+
* // 发布事件
|
|
180
|
+
* bus.emit('user:login', { id: 1, name: 'Alice' })
|
|
181
|
+
*
|
|
182
|
+
* // 取消订阅
|
|
183
|
+
* unsubscribe()
|
|
184
|
+
* ```
|
|
185
|
+
*/
|
|
186
|
+
declare function createEventBus<E extends Record<EventType, unknown> = Record<string, any>>(options?: EventBusOptions): IEventBus<E>;
|
|
187
|
+
declare function getGlobalEventBus<E extends Record<EventType, unknown> = Record<string, any>>(options?: EventBusOptions): IEventBus<E>;
|
|
188
|
+
/**
|
|
189
|
+
* 等待事件触发
|
|
190
|
+
* @param bus - 事件总线
|
|
191
|
+
* @param event - 事件名称
|
|
192
|
+
* @param timeout - 超时时间(毫秒),默认 5000
|
|
193
|
+
* @returns Promise,在事件触发时 resolve
|
|
194
|
+
* @example
|
|
195
|
+
* ```ts
|
|
196
|
+
* const bus = createEventBus()
|
|
197
|
+
*
|
|
198
|
+
* // 等待事件
|
|
199
|
+
* const data = await waitForEvent(bus, 'data:ready')
|
|
200
|
+
* console.log('Data ready:', data)
|
|
201
|
+
* ```
|
|
202
|
+
*/
|
|
203
|
+
declare function waitForEvent<T = any>(bus: IEventBus<Record<string, any>>, event: string, timeout?: number): Promise<T>;
|
|
204
|
+
/**
|
|
205
|
+
* 批量订阅事件
|
|
206
|
+
* @param bus - 事件总线
|
|
207
|
+
* @param events - 事件映射
|
|
208
|
+
* @returns 取消所有订阅的函数
|
|
209
|
+
* @example
|
|
210
|
+
* ```ts
|
|
211
|
+
* const bus = createEventBus()
|
|
212
|
+
*
|
|
213
|
+
* const unsubscribe = batchSubscribe(bus, {
|
|
214
|
+
* 'user:login': (user) => console.log('Login:', user),
|
|
215
|
+
* 'user:logout': () => console.log('Logout'),
|
|
216
|
+
* 'error': (error) => console.error('Error:', error)
|
|
217
|
+
* })
|
|
218
|
+
* ```
|
|
219
|
+
*/
|
|
220
|
+
declare function batchSubscribe(bus: IEventBus<Record<string, any>>, events: Record<string, EventHandler<any>>): () => void;
|
|
221
|
+
/**
|
|
222
|
+
* 创建命名空间事件总线
|
|
223
|
+
* @param namespace - 命名空间
|
|
224
|
+
* @param options - 配置选项
|
|
225
|
+
* @returns 事件总线实例
|
|
226
|
+
* @example
|
|
227
|
+
* ```ts
|
|
228
|
+
* const userBus = createNamespacedEventBus('user')
|
|
229
|
+
* const appBus = createNamespacedEventBus('app')
|
|
230
|
+
*
|
|
231
|
+
* userBus.emit('login') // 实际事件名: user:login
|
|
232
|
+
* appBus.emit('ready') // 实际事件名: app:ready
|
|
233
|
+
* ```
|
|
234
|
+
*/
|
|
235
|
+
declare function createNamespacedEventBus<E extends Record<EventType, unknown> = Record<string, any>>(namespace: string, options?: Omit<EventBusOptions, 'prefix'>): IEventBus<E>;
|
|
236
|
+
declare const _default: {
|
|
237
|
+
EventBus: typeof EventBus;
|
|
238
|
+
createEventBus: typeof createEventBus;
|
|
239
|
+
getGlobalEventBus: typeof getGlobalEventBus;
|
|
240
|
+
waitForEvent: typeof waitForEvent;
|
|
241
|
+
batchSubscribe: typeof batchSubscribe;
|
|
242
|
+
createNamespacedEventBus: typeof createNamespacedEventBus;
|
|
243
|
+
};
|
|
244
|
+
|
|
245
|
+
type index_EventBus<E extends Record<EventType, unknown> = Record<string, any>> = EventBus<E>;
|
|
246
|
+
declare const index_EventBus: typeof EventBus;
|
|
247
|
+
type index_EventBusOptions = EventBusOptions;
|
|
248
|
+
type index_EventHandler<T = any> = EventHandler<T>;
|
|
249
|
+
type index_IEventBus<E extends Record<EventType, unknown>> = IEventBus<E>;
|
|
250
|
+
type index_ListenerMeta = ListenerMeta;
|
|
251
|
+
declare const index_batchSubscribe: typeof batchSubscribe;
|
|
252
|
+
declare const index_createEventBus: typeof createEventBus;
|
|
253
|
+
declare const index_createNamespacedEventBus: typeof createNamespacedEventBus;
|
|
254
|
+
declare const index_getGlobalEventBus: typeof getGlobalEventBus;
|
|
255
|
+
declare const index_waitForEvent: typeof waitForEvent;
|
|
256
|
+
declare namespace index {
|
|
257
|
+
export { index_EventBus as EventBus, type index_EventBusOptions as EventBusOptions, type index_EventHandler as EventHandler, type index_IEventBus as IEventBus, type index_ListenerMeta as ListenerMeta, index_batchSubscribe as batchSubscribe, index_createEventBus as createEventBus, index_createNamespacedEventBus as createNamespacedEventBus, _default as default, index_getGlobalEventBus as getGlobalEventBus, index_waitForEvent as waitForEvent };
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
export { EventBus as E, type IEventBus as I, type ListenerMeta as L, _default as _, type EventBusOptions as a, type EventHandler as b, batchSubscribe as c, createEventBus as d, createNamespacedEventBus as e, getGlobalEventBus as g, index as i, waitForEvent as w };
|