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