UNPKG

clean-architecture

Version:

Utilities for implementing clean architecture using Redux

33 lines (32 loc) 1.42 kB
import "minimal-polyfills/Object.fromEntries"; import type { Param0 } from "tsafe"; import type { ThunkAction, AnyAction } from "@reduxjs/toolkit"; export type ThunkToFunction<Thunk extends (params: any) => ThunkAction<any, any, any, any>> = (params: Param0<Thunk>) => ReturnType<Thunk> extends ThunkAction<infer R, any, any, any> ? R : never; export declare function thunkToFunction<Thunk extends (params: any) => ThunkAction<any, any, any, AnyAction>>(params: { thunk: Thunk; dispatch: any; }): ThunkToFunction<Thunk>; export type ThunksToFunctions<Thunks extends Record<string, (params: any) => ThunkAction<any, any, any, AnyAction>>> = { [Key in keyof Thunks]: ThunkToFunction<Thunks[Key]>; }; export declare function thunksToFunctions<Thunks extends Record<string, (params: any) => ThunkAction<any, any, any, any>>>(params: { thunks: Thunks; dispatch: any; }): ThunksToFunctions<Thunks>; export type UsecaseLike = { name: string; thunks: Record<string, (params: any) => ThunkAction<any, any, any, any>>; }; export type CoreFunctions<Usecase extends UsecaseLike> = { [Key in Usecase["name"]]: ThunksToFunctions<Extract<Usecase, { name: Key; }>["thunks"]>; }; export declare function usecasesToFunctions<Usecase extends UsecaseLike>(params: { usecasesArr: readonly Usecase[]; store: { dispatch: any; }; }): { functions: CoreFunctions<Usecase>; };