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