@atomic-design/di
Version: 
Lightweight, type-safe dependency inversion utilities for Atomic Design architectures in React
22 lines (21 loc) • 927 B
TypeScript
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 {};