UNPKG

clean-architecture

Version:

Utilities for implementing clean architecture using Redux

20 lines (19 loc) 1.05 kB
import type { NonPostableEvt } from "evt"; type StatesToHook<States extends Record<string, Record<string, any>>> = <UsecaseName extends keyof States, SelectorName extends keyof States[UsecaseName] extends `get${infer N}` ? Uncapitalize<N> : never>(usecaseName: UsecaseName, selectorName: SelectorName) => States[UsecaseName][`get${Capitalize<SelectorName>}`] extends (...args: any[]) => infer ReturnType ? ReturnType : never; type CoreLike = { states: Record<string, Record<string, any>>; evtStateUpdated: NonPostableEvt<void>; }; type ReactApi<Core extends CoreLike, ParamsOfBootstrapCore> = { ofTypeCore: Core; getCoreSync: () => Core; getCore: () => Promise<Core>; useCoreState: StatesToHook<Core["states"]>; triggerCoreBootstrap: (params: ParamsOfBootstrapCore) => void; }; export declare function createReactApi<Core extends CoreLike, ParamsOfBootstrapCore>(params: { bootstrapCore: (params: ParamsOfBootstrapCore) => Promise<{ core: Core; }>; }): ReactApi<Core, ParamsOfBootstrapCore>; export {};