UNPKG

synapse-storage

Version:

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

98 lines (95 loc) 5.51 kB
import { Observable } from 'rxjs'; import { I as ISelectorModule } from './selector.interface-CA5y-kD_.js'; import { j as IStorage } from './storage.interface-BA_ktyDz.js'; import { l as ExternalStates, n as Effect } from './dispatcher.module-BOsMHbD5.js'; type ExtractDispatchType<T> = T extends { dispatch: infer D; } ? D : never; type StorageCreatorFunction<T extends Record<string, any>> = () => Promise<IStorage<T>>; type SynapseDependency = { storage: IStorage<any>; [key: string]: any; }; /** * Базовая конфигурация хранилища */ type BaseSynapseConfig<TStore extends Record<string, any>, TSelectors = any, TExternalSelectors extends Record<string, any> = Record<string, any>> = ({ storage: IStorage<TStore>; createStorageFn?: undefined; } | { storage?: undefined; createStorageFn: StorageCreatorFunction<TStore>; }) & { dependencies?: SynapseDependency[]; externalSelectors?: TExternalSelectors; createSelectorsFn?: (selectorModule: ISelectorModule<TStore>, externalSelectors: TExternalSelectors) => TSelectors; }; /** * Конфигурация с dispatcher и effects */ type CreateSynapseConfigWithEffects<TStore extends Record<string, any>, TSelectors = any, TDispatcher = any, TApi extends Record<string, any> = Record<string, never>, TConfig extends Record<string, any> = Record<string, never>, TExternalSelectors extends Record<string, any> = Record<string, any>> = BaseSynapseConfig<TStore, TSelectors, TExternalSelectors> & { createDispatcherFn: (storage: IStorage<TStore>) => TDispatcher; createEffectConfig: (dispatcher: TDispatcher) => { dispatchers: Record<string, any>; api?: TApi; config?: TConfig; externalStates?: ExternalStates; }; effects?: Effect<TStore, any, TApi, TConfig, any>[]; }; /** * Конфигурация только с dispatcher */ type CreateSynapseConfigWithDispatcher<TStore extends Record<string, any>, TSelectors = any, TDispatcher = any, TExternalSelectors extends Record<string, any> = Record<string, any>> = BaseSynapseConfig<TStore, TSelectors, TExternalSelectors> & { createDispatcherFn: (storage: IStorage<TStore>) => TDispatcher; createEffectConfig?: never; effects?: never; }; /** * Конфигурация без dispatcher */ type CreateSynapseConfigBasic<TStore extends Record<string, any>, TSelectors = any, TExternalSelectors extends Record<string, any> = Record<string, any>> = BaseSynapseConfig<TStore, TSelectors, TExternalSelectors> & { createDispatcherFn?: never; createEffectConfig?: never; effects?: never; }; /** * Результат с dispatcher и effects */ interface SynapseStoreWithEffects<TStore extends Record<string, any>, TStorage extends IStorage<TStore>, TSelectors, TActions> { storage: TStorage; selectors: TSelectors; actions: TActions; state$: Observable<TStore>; dispatcher: any; destroy: () => Promise<void>; } /** * Результат только с dispatcher */ interface SynapseStoreWithDispatcher<TStore extends Record<string, any>, TStorage extends IStorage<TStore>, TSelectors, TActions> { storage: TStorage; selectors: TSelectors; actions: TActions; dispatcher: any; destroy: () => Promise<void>; } /** * Результат без dispatcher */ interface SynapseStoreBasic<TStore extends Record<string, any>, TStorage extends IStorage<TStore>, TSelectors> { storage: TStorage; selectors: TSelectors; destroy: () => Promise<void>; } /** * Union-тип для всех возможных результатов createSynapse */ type AnySynapseStore<TStore extends Record<string, any> = any, TStorage extends IStorage<TStore> = IStorage<any>, TSelectors = any, TActions = any> = SynapseStoreWithEffects<TStore, TStorage, TSelectors, TActions> | SynapseStoreWithDispatcher<TStore, TStorage, TSelectors, TActions> | SynapseStoreBasic<TStore, TStorage, TSelectors>; /** * Перегрузки функции createSynapse */ declare function createSynapse<TStore extends Record<string, any>, TSelectors = any, TDispatcher = any, TApi extends Record<string, any> = Record<string, never>, TConfig extends Record<string, any> = Record<string, never>, TExternalSelectors extends Record<string, any> = Record<string, any>, TStorage extends IStorage<TStore> = IStorage<TStore>>(config: CreateSynapseConfigWithEffects<TStore, TSelectors, TDispatcher, TApi, TConfig, TExternalSelectors>): Promise<SynapseStoreWithEffects<TStore, TStorage, TSelectors, ExtractDispatchType<TDispatcher>>>; declare function createSynapse<TStore extends Record<string, any>, TSelectors = any, TDispatcher = any, TExternalSelectors extends Record<string, any> = Record<string, any>, TStorage extends IStorage<TStore> = IStorage<TStore>>(config: CreateSynapseConfigWithDispatcher<TStore, TSelectors, TDispatcher, TExternalSelectors>): Promise<SynapseStoreWithDispatcher<TStore, TStorage, TSelectors, ExtractDispatchType<TDispatcher>>>; declare function createSynapse<TStore extends Record<string, any>, TSelectors = any, TExternalSelectors extends Record<string, any> = Record<string, any>, TStorage extends IStorage<TStore> = IStorage<TStore>>(config: CreateSynapseConfigBasic<TStore, TSelectors, TExternalSelectors>): Promise<SynapseStoreBasic<TStore, TStorage, TSelectors>>; export { type AnySynapseStore as A, type SynapseStoreBasic as S, type SynapseStoreWithDispatcher as a, type SynapseStoreWithEffects as b, createSynapse as c };