UNPKG

synapse-storage

Version:

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

140 lines (136 loc) 5.13 kB
import { a as SynapseStoreWithDispatcher, A as AnySynapseStore } from './createSynapse-vkfKjRob.js'; export { S as SynapseStoreBasic, b as SynapseStoreWithEffects, c as createSynapse } from './createSynapse-vkfKjRob.js'; import { j as IStorage } from './storage.interface-BA_ktyDz.js'; import { D as DispatchFunction, f as DispatchActions } from './dispatcher.module-BOsMHbD5.js'; import 'rxjs'; import './selector.interface-CA5y-kD_.js'; interface EventBusEvent { id: string; event: string; data: any; metadata: { ttl?: number | null; priority?: 'low' | 'normal' | 'high'; [key: string]: any; }; timestamp: number; } interface EventBusState { events: Record<string, EventBusEvent>; subscriptions: Record<string, any>; } interface EventBusConfig { name?: string; autoCleanup?: boolean; maxEvents?: number; } /** * Создает EventBus для связи между модулями * * @example * ```typescript * // Создание EventBus * const eventBus = await createEventBus({ * name: 'app-events', * autoCleanup: true, * maxEvents: 500 * }) * * // Использование в Synapse * const mySynapse = await createSynapse({ * dependencies: [eventBus], * createEffectConfig: (dispatcher) => ({ * dispatchers: { * dispatcher, * eventBus: eventBus.dispatcher * } * }), * effects: [ * createEffect((action$, _, __, { eventBus }) => { * // Публикация события * eventBus.dispatch.publish({ * event: 'USER_UPDATED', * data: { userId: 123 } * }) * * // Подписка на события * eventBus.dispatch.subscribe({ * eventPattern: 'CORE_*', * handler: (data, event) => console.log('Received:', event.event, data) * }) * }) * ] * }) * ``` */ declare const createEventBus: (config?: EventBusConfig) => Promise<SynapseStoreWithDispatcher<EventBusState, IStorage<EventBusState>, any, Record<string, DispatchFunction<any, any>> & DispatchActions<{ publish: DispatchFunction<{ event: string; data: any; metadata?: Record<string, any>; }, { eventId: string; event: string; data: any; }>; subscribe: DispatchFunction<{ eventPattern: string; handler: (data: any, event: EventBusEvent) => void | Promise<void>; options?: Record<string, any>; }, { subscriptionId: string; unsubscribe: VoidFunction; }>; getEventHistory: DispatchFunction<{ eventType: string; limit?: number; }, EventBusEvent[]>; clearEvents: DispatchFunction<{ olderThan?: number; } | undefined, void>; getActiveSubscriptions: DispatchFunction<any, any[]>; }>>>; interface SynapseAwaiter<TStore extends Record<string, any>, TStorage extends IStorage<TStore>, TSelectors, TActions> { /** * Возвращает Promise, который резолвится когда Synapse готов */ waitForReady(): Promise<AnySynapseStore<TStore, TStorage, TSelectors, TActions>>; /** * Проверяет, готов ли Synapse прямо сейчас (синхронно) */ isReady(): boolean; /** * Получает store если он готов, иначе undefined */ getStoreIfReady(): AnySynapseStore<TStore, TStorage, TSelectors, TActions> | undefined; /** * Подписывается на событие готовности * @param callback Функция, вызываемая когда store становится готов * @returns Функция отписки */ onReady(callback: (store: AnySynapseStore<TStore, TStorage, TSelectors, TActions>) => void): VoidFunction; /** * Подписывается на ошибки инициализации * @param callback Функция, вызываемая при ошибке * @returns Функция отписки */ onError(callback: (error: Error) => void): VoidFunction; /** * Получает текущий статус */ getStatus(): 'pending' | 'ready' | 'error'; /** * Получает ошибку если есть */ getError(): Error | null; /** * Очищает ресурсы */ destroy(): void; } /** * Создает фреймворк-независимую утилиту для ожидания готовности Synapse * Работает в любом JS окружении: Node.js, браузер, React Native, и т.д. */ declare function createSynapseAwaiter<TStore extends Record<string, any>, TStorage extends IStorage<TStore>, TSelectors, TActions>(synapseStorePromise: Promise<AnySynapseStore<TStore, TStorage, TSelectors, TActions>> | AnySynapseStore<TStore, TStorage, TSelectors, TActions>): SynapseAwaiter<TStore, TStorage, TSelectors, TActions>; export { AnySynapseStore, type EventBusConfig, type EventBusEvent, type EventBusState, SynapseStoreWithDispatcher, createEventBus, createSynapseAwaiter };