JSPM

event-bus-common

1.2.1
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • 0
  • Score
    100M100P100Q12033F
  • License MIT

A powerful and flexible event bus library for TypeScript

Package Exports

  • event-bus-common
  • event-bus-common/dist/index.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (event-bus-common) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

Event Bus

一个强大的 TypeScript 事件总线库,支持事件管理、状态管理和事件分组。

特性

  • 基础事件发布/订阅
  • 事件优先级
  • 一次性事件订阅
  • 通配符(全局)事件订阅
  • 异步事件处理
  • 错误捕获和处理
  • 事件分组管理
  • 事件历史记录
  • 状态管理
  • 事件过滤器
  • 事件总线快照
  • 实用工具函数(节流、防抖、Promise 转事件)

安装

npm install event-bus-common --save

使用

基础用法

import { EventBus, EventPriority } from 'event-bus-common';

const eventBus = new EventBus();

// 订阅事件
eventBus.on('userCreated', (user) => {
  console.log('新用户创建:', user);
});

// 发布事件
eventBus.emit('userCreated', { id: 1, name: '张三' });

事件优先级

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]

一次性订阅

eventBus.once('oneTime', (data) => {
  console.log('只触发一次:', data);
});

通配符订阅

eventBus.onAny(({ event, data }) => {
  console.log(`收到事件 ${event}:`, data);
});

事件分组

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);
});

状态管理

const manager = new EventManager({
  enableStateManagement: true
});

// 设置状态
manager.setState('user', { id: 1, name: '张三' });

// 监听状态变化
manager.onStateChange('user', (newState) => {
  console.log('用户状态更新:', newState);
});

事件历史记录

const eventBus = new EventBus({
  maxHistorySize: 100
});

// 获取历史记录
const history = eventBus.getHistory();

事件过滤器

const eventBus = new EventBus();

// 使用过滤器订阅事件
eventBus.on('userCreated', (user) => {
  console.log('新用户创建:', user);
}, {
  filter: (data) => data.age > 18
});

事件总线快照

const eventBus = new EventBus();

// 获取快照
const snapshot = eventBus.getSnapshot();

// 从快照恢复
eventBus.restoreFromSnapshot(snapshot);

实用工具

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<void>
  • 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<T extends (...args: any[]) => any>(fn: T, wait: number): (...args: Parameters<T>) => ReturnType<T>
  • debounce<T extends (...args: any[]) => any>(fn: T, wait: number): (...args: Parameters<T>) => ReturnType<T>
  • promiseToEvent<T>(promise: Promise<T>, eventName: string, metadata?: Record<string, any>): Promise<T>

许可证

MIT