import type { IStorage, Selectors } from '../../core'; import type { Dispatcher, Effect, Effects } from '../../reactive'; import type { SyncSynapseModule, SyncSynapseOptions } from './synapse.types'; import { type SyncEffectsContext } from './syncModule'; import type { DependencyInput } from './types'; /** Выводит форму состояния из типа хранилища: `IStorage` → `T`. Даёт вывести `TState` из `storage: () => new MemoryStorage()`. */ type StateOf = TStorage extends IStorage ? TState : never; /** Что может вернуть фабрика `effects`: инстанс(ы) `Effects`/функции-эффекты, возможно асинхронно (ленивый резолв endpoints). */ type SyncEffectsResult> = Effects | Array | Effect> | undefined | Promise | Array | Effect> | undefined>; /** * Создаёт ленивый class-based synapse (C-форма): синхронная конструкция ядра * (`storage`/`dispatcher`/`selectors`) + `dependencies` (гейт старта эффектов) + фабрика `effects`. * Возвращает {@link SyncSynapseModule} — с синхронным доступом к main-ядру (`.selectors` и т.д.) * для cross-store DI. `TState` выводится из `storage: () => new MemoryStorage()`. * * @example * ```ts * export const postsSynapse = createSynapse({ * storage: () => new MemoryStorage({ name: 'posts', initialState }), * dispatcher: (s) => new PostsDispatcher(s), * selectors: (s) => new PostsSelectors(s, coreSynapse.selectors), // cross-store DI * dependencies: [coreSynapse], * effects: async () => new PostsEffects(await getPostsEndpoints(), coreSynapse.state$), * }) * ``` */ export declare function createSynapse, TDispatcher extends Dispatcher> | undefined = undefined, TSelectors extends Selectors> | undefined = undefined>(config: { storage: () => TStorage; dispatcher?: (storage: TStorage) => TDispatcher; selectors?: (storage: TStorage) => TSelectors; dependencies?: DependencyInput[]; dependencyTimeout?: number; externalDispatchers?: Record> | ((ctx: SyncEffectsContext, TDispatcher, TSelectors>) => Record>); effects?: (ctx: SyncEffectsContext, TDispatcher, TSelectors>) => SyncEffectsResult>; }, options?: SyncSynapseOptions, TDispatcher, TSelectors>): SyncSynapseModule, TDispatcher, TSelectors>; export declare namespace createSynapse { var of: , TDispatcher extends Dispatcher | undefined = undefined, TSelectors extends Selectors | undefined = undefined>(config: { storage: () => IStorage; dispatcher?: (storage: IStorage) => TDispatcher; selectors?: (storage: IStorage) => TSelectors; dependencies?: DependencyInput[]; dependencyTimeout?: number; externalDispatchers?: Record> | ((ctx: SyncEffectsContext) => Record>); effects?: (ctx: SyncEffectsContext) => SyncEffectsResult; }, options?: SyncSynapseOptions) => SyncSynapseModule; } export {};