UNPKG

clean-architecture

Version:

Utilities for implementing clean architecture using Redux

21 lines (20 loc) 660 B
import "minimal-polyfills/Object.fromEntries"; export type UsecaseLike = { name: string; selectors?: { [Name in string]: (state: any) => unknown; }; }; export type CoreStates<Usecase extends UsecaseLike> = { [U in Usecase as U["name"]]: U["selectors"] extends infer Selectors ? { [K in keyof Selectors as `get${Capitalize<string & K>}`]: () => Selectors[K] extends (state: any) => infer R ? R : never; } : never; }; export declare function usecasesToStates<Usecase extends UsecaseLike>(params: { usecasesArr: readonly Usecase[]; store: { getState: () => any; }; }): { states: CoreStates<Usecase>; };