UNPKG

clean-architecture

Version:

Utilities for implementing clean architecture using Redux

26 lines (25 loc) 1.18 kB
import { type ReactNode } from "react"; 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>>; subscribe: (callback: () => void) => { unsubscribe: () => void; }; }; type ReactApi<Core extends CoreLike, ParamsOfBootstrapCore> = { useCore: () => Core; useCoreState: StatesToHook<Core["states"]>; createCoreProvider: (params: ParamsOfBootstrapCore) => { CoreProvider: (props: { fallback?: ReactNode; children: ReactNode; }) => JSX.Element; prCore: Promise<Core>; }; }; export declare function createReactApi<Core extends CoreLike, ParamsOfBootstrapCore>(params: { bootstrapCore: (params: ParamsOfBootstrapCore) => Promise<{ core: Core; }>; }): ReactApi<Core, ParamsOfBootstrapCore>; export {};