UNPKG

synapse-storage

Version:

Набор инструментов для управления состоянием и апи-запросами

89 lines (88 loc) 3.43 kB
import { MemoryStorage } from '../core'; import { Dispatcher } from '../reactive'; export interface EventBusEvent { id: string; event: string; data: any; metadata: { ttl?: number | null; priority?: 'low' | 'normal' | 'high'; [key: string]: any; }; timestamp: number; } export interface EventBusState { events: Record<string, EventBusEvent>; subscriptions: Record<string, any>; } export interface EventBusConfig { name?: string; autoCleanup?: boolean; maxEvents?: number; } /** * Class-диспетчер EventBus. Экшены объявляются как поля (имя экшена = имя поля), * сервисы (storage-каст, реестр активных подписок, config) захватываются в замыкания * через конструктор. */ declare class EventBusDispatcher extends Dispatcher<EventBusState> { #private; constructor(storage: MemoryStorage<EventBusState>, config: EventBusConfig); /** Публикация события в EventBus. */ readonly publish: import("..").DispatchFunction<{ event: string; data: any; metadata?: Record<string, any>; }, { eventId: string; event: string; data: any; }>; /** Подписка на события в EventBus. */ readonly subscribe: import("..").DispatchFunction<{ eventPattern: string; handler: (data: any, event: EventBusEvent) => void | Promise<void>; options?: Record<string, any>; }, { subscriptionId: string; unsubscribe: () => void; }>; /** Получение истории событий. */ readonly getEventHistory: import("..").DispatchFunction<{ eventType: string; limit?: number; }, EventBusEvent[]>; /** Очистка событий. */ readonly clearEvents: import("..").DispatchFunction<{ olderThan?: number; }, void>; /** Получение активных подписок. */ readonly getActiveSubscriptions: import("..").DispatchFunction<void, any[]>; destroy(): void; } /** * Создает EventBus для связи между модулями. * * Возвращает `SynapseModule`-handle (ленивый, PromiseLike): фабрика исполняется при * первом `await`/`ready()`. `eventBus.dispatcher` — инстанс class-диспетчера, его поля * (`publish`/`subscribe`/...) и есть dispatch-функции. * * @example * ```typescript * const eventBus = createEventBus({ name: 'app-events', autoCleanup: true, maxEvents: 500 }) * const bus = await eventBus * * bus.dispatcher.publish({ event: 'USER_UPDATED', data: { userId: 123 } }) * bus.dispatcher.subscribe({ eventPattern: 'CORE_*', handler: (data, event) => {} }) * * // Использование как внешнего диспетчера другого synapse: * const mySynapse = createSynapse({ * storage: () => new MemoryStorage<MyState>({ name: 'my', initialState }), * dispatcher: (s) => new MyDispatcher(s), * externalDispatchers: () => ({ eventBus: eventBus.dispatcher }), * effects: () => new MyEffects(), * }) * ``` */ export declare const createEventBus: (config?: EventBusConfig) => import("./createSynapse").SyncSynapseModule<EventBusState, EventBusDispatcher, undefined>; export {};