UNPKG

synapse-storage

Version:

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

64 lines (62 loc) 2.46 kB
interface Selector<T, R> { (state: T): R; } interface SelectorOptions<T> { equals?: (a: T, b: T) => boolean; name?: string; } interface Subscriber<T> { notify: (value: T) => void | Promise<void>; } interface SelectorAPI<T> { select: () => Promise<T>; subscribe: (subscriber: Subscriber<T>) => VoidFunction; getId: () => string; } /** * Интерфейс для модуля селекторов * Определяет контракт для работы с селекторами, который должен реализовывать SelectorModule */ interface ISelectorModule<TStore extends Record<string, any>> { /** * Имя связанного хранилища */ readonly storageName: string; /** * Создает простой селектор на основе функции выбора * * @param selector Функция, извлекающая данные из состояния * @param options Опции селектора * @returns API селектора * * @example * const isActive = selectorModule.createSelector( * (state) => state.user.isActive, * { name: 'userIsActive' } * ); */ createSelector<T>(selector: Selector<TStore, T>, options?: SelectorOptions<T>): SelectorAPI<T>; /** * Создает комбинированный селектор на основе других селекторов * * @param dependencies Массив селекторов, от которых зависит новый селектор * @param resultFn Функция, комбинирующая результаты зависимостей * @param options Опции селектора * @returns API селектора * * @example * const userWithStatus = selectorModule.createSelector( * [userSelector, statusSelector], * (user, status) => ({ ...user, status }), * { name: 'userWithStatus' } * ); */ createSelector<Deps extends unknown[], T>(dependencies: { [K in keyof Deps]: SelectorAPI<Deps[K]>; }, resultFn: (...args: Deps) => T, options?: SelectorOptions<T>): SelectorAPI<T>; /** * Освобождает ресурсы, связанные с модулем селекторов */ destroy(): void; } export type { ISelectorModule as I, SelectorAPI as S, Selector as a, SelectorOptions as b };