UNPKG

synapse-storage

Version:

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

52 lines (51 loc) 3.02 kB
import { StorageType } from '../storage.interface'; import { Middleware, StorageAction, SyncMiddleware } from '../utils/middleware-module'; /** * Общая часть кросс-табных мидлвар (`broadcast`/`shared-worker` и их sync-аналогов). * * Все четыре мидлвары были почти-побайтовыми копиями — различались только (a) классом * канала (`SyncBroadcastChannel` vs `WorkerChannel`), (b) значением `name` и (c) префиксом * в сообщениях об ошибках. Оба класса канала намеренно зеркалят один и тот же API * ({@link SharedStateChannel}) — это и есть шов, через который фабрика получает канал. * * Async и sync фабрики оставлены раздельными: они порождают разные типы мидлвар * (async — с `await`/`doDelete`; sync — синхронные, `doRemove`). */ export interface SharedStateChannel<T> { subscribe(handler: (message: { type: string; payload?: T; }) => void | Promise<void>): () => void; setSyncHandler(handler: () => T | Promise<T>): void; broadcast(type: string, payload?: T): void; requestSync(): Promise<T | null>; close(): void; } export interface SharedStateMiddlewareProps { storageType: StorageType; storageName: string; } interface SharedStateFactoryConfig { /** Значение поля `name` мидлвары (например, 'broadcast'). Публичная часть API. */ name: string; /** Префикс в сообщениях об ошибках, чтобы логи оставались атрибутируемыми (например, 'broadcastMiddleware'). */ label: string; /** Фабрика канала — единственное отличие между конкретными мидлварами. */ createChannel: (channelName: string) => SharedStateChannel<StorageAction>; } /** * Фабрика async кросс-табной мидлвары. Возвращает `(props) => Middleware` — ту же * сигнатуру, что у публичных `broadcastMiddleware`/`sharedWorkerMiddleware`. */ export declare function createSharedStateMiddleware(config: SharedStateFactoryConfig): (props: SharedStateMiddlewareProps) => Middleware; interface SyncSharedStateFactoryConfig { name: string; label: string; createChannel: (channelName: string) => SharedStateChannel<StorageAction>; } /** * Фабрика sync кросс-табной мидлвары. Возвращает `(props) => SyncMiddleware` — ту же * сигнатуру, что у публичных `syncBroadcastMiddleware`/`syncSharedWorkerMiddleware`. */ export declare function createSyncSharedStateMiddleware(config: SyncSharedStateFactoryConfig): (props: SharedStateMiddlewareProps) => SyncMiddleware; export {};