UNPKG

clean-architecture

Version:

Utilities for implementing clean architecture using Redux

34 lines (33 loc) 1.13 kB
import "minimal-polyfills/Object.fromEntries"; import type { NonPostableEvt } from "evt"; import type { RootContextLike } from "./usecaseContext"; declare const wordId = "evt"; export type StoreLike = { evtAction: NonPostableEvt<any>; getState: () => any; }; export type GenericCreateEvt<Store extends StoreLike> = (params: { evtAction: Store["evtAction"]; getState: Store["getState"]; rootContext: RootContextLike; }) => NonPostableEvt<any>; export type UsecaseLike = { name: string; createEvt?: GenericCreateEvt<StoreLike>; }; export type CoreEvts<Usecase extends UsecaseLike> = { [Key in `${typeof wordId}${Capitalize<Extract<Usecase, { createEvt: any; }>["name"]>}`]: ReturnType<Extract<Usecase, { name: Key extends `${typeof wordId}${infer CapitalizedName}` ? Uncapitalize<CapitalizedName> : never; createEvt: any; }>["createEvt"]>; }; export declare function usecasesToEvts<Usecase extends UsecaseLike>(params: { usecasesArr: readonly Usecase[]; store: StoreLike; rootContext: RootContextLike; }): { evts: CoreEvts<Usecase>; }; export {};