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