UNPKG

clean-architecture

Version:

Utilities for implementing clean architecture using Redux

31 lines (30 loc) 1 kB
import "minimal-polyfills/Object.fromEntries"; import type { NonPostableEvt } from "evt"; 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"]; }) => 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; }): { evts: CoreEvts<Usecase>; }; export {};