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