UNPKG

@atomic-design/di

Version:

Lightweight, type-safe dependency inversion utilities for Atomic Design architectures in React

22 lines (21 loc) 927 B
import { ComponentType } from 'react'; type ExtractProps<F> = F extends ComponentType<infer P> ? P : never; type UnionToIntersection<U> = (U extends any ? (x: U) => void : never) extends (x: infer I) => void ? I : never; type DepsFromComponents<Comps extends Record<string, ComponentType<any>>> = UnionToIntersection<{ [K in keyof Comps]: ExtractProps<Comps[K]> extends { deps: infer C; } ? C : never; }[keyof Comps]>; export declare function extractComponentDeps<Comps extends Record<string, ComponentType<any>>>(components: { [K in keyof Comps]: ExtractProps<Comps[K]> extends { deps: unknown; } ? Comps[K] : never; }): { output: { [K in keyof Comps]: ComponentType<Omit<ExtractProps<Comps[K]>, "deps">>; }; setDepsHook: (getter: () => DepsFromComponents<Comps>) => void; }; export declare const blankDeps: <T>(output: T) => { output: T; setDepsHook: () => void; }; export {};