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