synapse-storage
Version:
Набор инструментов для управления состоянием и апи-запросами
89 lines (88 loc) • 3.43 kB
TypeScript
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 {};