UNPKG

clean-architecture

Version:

Utilities for implementing clean architecture using Redux

20 lines (19 loc) 1.25 kB
import type { ConfigureStoreOptions, EnhancedStore, MiddlewareArray, ThunkMiddleware, AnyAction, ReducersMapObject } from "@reduxjs/toolkit"; import { type UsecasesToReducer, type UsecaseLike as UsecaseLike_reducer } from "./usecasesToReducer"; import { type UsecaseToEvent, type UsecaseLike as UsecaseLike_evtMiddleware } from "./middlewareEvtAction"; import type { NonPostableEvt } from "evt"; export type UsecaseLike = UsecaseLike_reducer & UsecaseLike_evtMiddleware; export type GenericStore<Context extends Record<string, unknown>, Usecase extends UsecaseLike> = { reducer: UsecasesToReducer<Usecase>; middleware: MiddlewareArray<[ ThunkMiddleware<UsecasesToReducer<Usecase> extends ReducersMapObject<infer S, any> ? S : never, AnyAction, Context & { evtAction: NonPostableEvt<UsecaseToEvent<Usecase>>; }> ]>; } extends ConfigureStoreOptions<infer S, infer A, infer M> ? Pick<EnhancedStore<S, A, M>, "getState" | "dispatch"> & { evtAction: NonPostableEvt<UsecaseToEvent<Usecase>>; } : never; export declare function createStore<Context extends Record<string, unknown>, Usecase extends UsecaseLike>(params: { context: Context; usecasesArr: readonly Usecase[]; }): GenericStore<Context, Usecase>;