UNPKG

synapse-storage

Version:

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

48 lines (43 loc) 2.18 kB
import { createSyncSynapseModule } from "./syncModule.js"; /** * Создаёт ленивый class-based synapse (C-форма): синхронная конструкция ядра * (`storage`/`dispatcher`/`selectors`) + `dependencies` (гейт старта эффектов) + фабрика `effects`. * Возвращает {@link SyncSynapseModule} — с синхронным доступом к main-ядру (`.selectors` и т.д.) * для cross-store DI. `TState` выводится из `storage: () => new MemoryStorage<State>()`. * * @example * ```ts * export const postsSynapse = createSynapse({ * storage: () => new MemoryStorage<PostsState>({ 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$), * }) * ``` */ function createSynapse(config, options) { // postConstruct приходит вторым аргументом (контекстно типизируется) — вливаем в конфиг. return createSyncSynapseModule({ ...config, postConstruct: options?.postConstruct }); } /** * Явно-типизированная C-форма — когда `TState` неудобно выводить из фабрики `storage`. Те же поля, * но генерики задаются вручную; `postConstruct` — вторым аргументом (контекстная типизация). * * @example * ```ts * const accounts = createSynapse.of<AccountsState, AccountsDispatcher, AccountsSelectors>( * { storage: () => new LocalStorage({ name: 'accounts', initialState }), dispatcher: (s) => new AccountsDispatcher(s) }, * { postConstruct: ({ actions }) => actions.resetTransient() }, * ) * ``` */ createSynapse.of = function of(config, options) { return createSyncSynapseModule({ ...config, postConstruct: options?.postConstruct }); }; export { createSynapse }; //# sourceMappingURL=createSynapse.js.map