https://github.com/listar/event-bus-common
一个强大的 TypeScript 事件总线库,支持事件管理、状态管理和事件分组。
https://github.com/listar/event-bus-common
emit eventbus events
Last synced: about 1 month ago
JSON representation
一个强大的 TypeScript 事件总线库,支持事件管理、状态管理和事件分组。
- Host: GitHub
- URL: https://github.com/listar/event-bus-common
- Owner: listar
- Created: 2025-04-02T12:37:57.000Z (6 months ago)
- Default Branch: main
- Last Pushed: 2025-04-02T14:00:56.000Z (6 months ago)
- Last Synced: 2025-08-20T03:22:27.170Z (about 2 months ago)
- Topics: emit, eventbus, events
- Language: TypeScript
- Homepage: https://www.npmjs.com/package/event-bus-common
- Size: 58.6 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Event Bus
一个强大的 TypeScript 事件总线库,支持事件管理、状态管理和事件分组。
## 特性
- 基础事件发布/订阅
- 事件优先级
- 一次性事件订阅
- 通配符(全局)事件订阅
- 异步事件处理
- 错误捕获和处理
- 事件分组管理
- 事件历史记录
- 状态管理
- 事件过滤器
- 事件总线快照
- 实用工具函数(节流、防抖、Promise 转事件)## 安装
```bash
npm install event-bus-common --save
```## 使用
### 基础用法
```typescript
import { EventBus, EventPriority } from 'event-bus-common';const eventBus = new EventBus();
// 订阅事件
eventBus.on('userCreated', (user) => {
console.log('新用户创建:', user);
});// 发布事件
eventBus.emit('userCreated', { id: 1, name: '张三' });
```### 事件优先级
```typescript
const results: number[] = [];eventBus.on('test', () => { void results.push(3); }, EventPriority.Low);
eventBus.on('test', () => { void results.push(1); }, EventPriority.High);
eventBus.on('test', () => { void results.push(2); }, EventPriority.Normal);
eventBus.on('test', () => { void results.push(0); }, EventPriority.Critical);eventBus.emit('test');
// 结果: [0, 1, 2, 3]
```### 一次性订阅
```typescript
eventBus.once('oneTime', (data) => {
console.log('只触发一次:', data);
});
```### 通配符订阅
```typescript
eventBus.onAny(({ event, data }) => {
console.log(`收到事件 ${event}:`, data);
});
```### 事件分组
```typescript
import { EventManager } from 'event-bus-common';const manager = new EventManager();
// 创建事件组
manager.createGroup('userEvents', {
events: ['userCreated', 'userUpdated', 'userDeleted'],
description: '用户相关事件'
});// 订阅组内所有事件
manager.onGroup('userEvents', (event, data) => {
console.log(`用户事件 ${event}:`, data);
});
```### 状态管理
```typescript
const manager = new EventManager({
enableStateManagement: true
});// 设置状态
manager.setState('user', { id: 1, name: '张三' });// 监听状态变化
manager.onStateChange('user', (newState) => {
console.log('用户状态更新:', newState);
});
```### 事件历史记录
```typescript
const eventBus = new EventBus({
maxHistorySize: 100
});// 获取历史记录
const history = eventBus.getHistory();
```### 事件过滤器
```typescript
const eventBus = new EventBus();// 使用过滤器订阅事件
eventBus.on('userCreated', (user) => {
console.log('新用户创建:', user);
}, {
filter: (data) => data.age > 18
});
```### 事件总线快照
```typescript
const eventBus = new EventBus();// 获取快照
const snapshot = eventBus.getSnapshot();// 从快照恢复
eventBus.restoreFromSnapshot(snapshot);
```### 实用工具
```typescript
import { EventUtils } from 'event-bus-common';// 节流
const throttledFn = EventUtils.throttle((data) => {
console.log('节流函数:', data);
}, 1000);// 防抖
const debouncedFn = EventUtils.debounce((data) => {
console.log('防抖函数:', data);
}, 1000);// Promise 转事件
const promise = fetch('/api/data');
EventUtils.promiseToEvent(promise, 'dataLoaded', { source: 'api' });
```## API 文档
### EventBus
- `on(event: string, handler: EventHandler, priority?: EventPriority): EventSubscription`
- `once(event: string, handler: EventHandler, priority?: EventPriority): EventSubscription`
- `onAny(handler: EventHandler<{ event: string; data: any }>): EventSubscription`
- `off(event: string): void`
- `emit(event: string, data?: any): void | Promise`
- `clear(): void`
- `getSnapshot(): EventBusSnapshot`
- `restoreFromSnapshot(snapshot: EventBusSnapshot): void`
- `getHistory(): Array<{ event: string; data: any; timestamp: number }>`
- `clearHistory(): void`
- `getListenerCount(event: string): number`
- `getWildcardListenerCount(): number`
- `hasAnyListeners(): boolean`
- `hasListeners(event: string): boolean`
- `eventNames(): string[]`
- `listenerCount(event: string): number`
- `getState(): { eventCount: number; totalListeners: number; historySize: number; options: EventBusOptions }`### EventManager
- `createGroup(name: string, options: { events: string[]; description?: string }): EventGroup`
- `updateGroup(name: string, options: { events?: string[]; description?: string }): EventGroup`
- `deleteGroup(name: string): void`
- `onGroup(groupName: string, handler: (event: string, data: any) => void): EventSubscription`
- `setState(key: string, value: any): void`
- `getState(key: string): any`
- `onStateChange(key: string, handler: (value: any) => void): EventSubscription`
- `reset(): void`
- `getSnapshot(): EventManagerSnapshot`
- `restoreFromSnapshot(snapshot: EventManagerSnapshot): void`### EventUtils
- `throttle any>(fn: T, wait: number): (...args: Parameters) => ReturnType`
- `debounce any>(fn: T, wait: number): (...args: Parameters) => ReturnType`
- `promiseToEvent(promise: Promise, eventName: string, metadata?: Record): Promise`## 许可证
MIT