UNPKG

clean-architecture

Version:

Utilities for implementing clean architecture using Redux

32 lines (31 loc) 1.88 kB
import type { NonPostableEvt } from "evt"; import type { ReturnType } from "tsafe"; import { type GenericStore, type UsecaseLike as UsecaseLike_store } from "./createStore"; import { type CoreEvts, type GenericCreateEvt, type UsecaseLike as UsecaseLike_evts } from "./usecasesToEvts"; import { type CoreStates, type UsecaseLike as UsecaseLike_selectors } from "./usecasesToStates"; import { CoreFunctions, type UsecaseLike as UsecaseLike_functions } from "./usecasesToFunctions"; import type { ThunkAction, Action } from "@reduxjs/toolkit"; type UsecaseLike = UsecaseLike_store & UsecaseLike_evts & UsecaseLike_selectors & UsecaseLike_functions; export type GenericCore<Usecases extends Record<string, UsecaseLike>, Context extends Record<string, unknown>> = { states: CoreStates<Usecases[keyof Usecases]>; evtStateUpdated: NonPostableEvt<void>; evts: CoreEvts<Usecases[keyof Usecases]>; functions: CoreFunctions<Usecases[keyof Usecases]>; types: { State: ReturnType<GenericStore<Context, Usecases[keyof Usecases]>["getState"]>; CreateEvt: GenericCreateEvt<GenericStore<Context, Usecases[keyof Usecases]>>; Thunks: Record<string, (params: any) => ThunkAction<any, ReturnType<GenericStore<Context, Usecases[keyof Usecases]>["getState"]>, Context & { evtAction: GenericStore<Context, Usecases[keyof Usecases]>["evtAction"]; }, Action<string>>>; }; }; export declare function createCore<Usecases extends Record<string, UsecaseLike>, Context extends Record<string, unknown>>(params: { context: Context; usecases: Usecases; }): { core: GenericCore<Usecases, Context>; dispatch: GenericStore<Context, Usecases[keyof Usecases]>["dispatch"]; getState: GenericStore<Context, Usecases[keyof Usecases]>["getState"]; evtAction: GenericStore<Context, Usecases[keyof Usecases]>["evtAction"]; }; export {};