clean-architecture
Version:
Utilities for implementing clean architecture using Redux
33 lines (32 loc) • 1.42 kB
TypeScript
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>;
};