UNPKG

firesage

Version:

🔥 Extremely High Precision Typescript Wrapper for Firestore Web, Providing Unparalleled Type Safe and Dev Experience

12 lines (11 loc) • 1.14 kB
import { FieldValues } from './fieldValue'; declare type DeepKeyHybridInner<T, K extends keyof T, Mode extends 'read' | 'write'> = K extends string ? T[K] extends FieldValues ? K : T[K] extends Record<string, unknown> ? Mode extends 'write' ? K | `${K}.${DeepKeyHybridInner<T[K], keyof T[K], Mode>}` : `${K}.${DeepKeyHybridInner<T[K], keyof T[K], Mode>}` : K : never; export declare type DeepKeyHybrid<T, Mode extends 'read' | 'write'> = DeepKeyHybridInner<T, keyof T, Mode>; declare type DeepValueHybrid<T, P extends DeepKeyHybrid<T, Mode>, Mode extends 'read' | 'write'> = P extends `${infer K}.${infer Rest}` ? K extends keyof T ? Rest extends DeepKeyHybrid<T[K], Mode> ? DeepValueHybrid<T[K], Rest, Mode> : never : never : P extends keyof T ? T[P] : never; export declare type ObjectFlattenHybrid<Data> = Data extends Record<string, unknown> ? { [K in DeepKeyHybrid<Data, 'write'>]-?: ObjectFlattenHybrid<DeepValueHybrid<Data, K, 'write'>>; } : Data; export declare type ObjectFlattenRead<Read extends Record<string, unknown>> = { [K in DeepKeyHybrid<Read, 'read'>]: DeepValueHybrid<Read, K, 'read'>; }; export {};