synapse-storage
Version:
Набор инструментов для управления состоянием и апи-запросами
48 lines (43 loc) • 2.18 kB
JavaScript
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