type DotToNested = T extends Record ? { [K in keyof T as K extends `${infer P}.${infer R}` ? P : K]: K extends `${infer P}.${infer R}` ? DotToNested<{ [key in R]: T[K]; }> : T[K]; } : never; type Merge = (T extends any ? (x: T) => void : never) extends (x: infer R) => void ? { [K in keyof R]: R[K]; } : never; type MergeUnion = Merge; type Atomic = Date | RegExp | File | Blob; type DeepMerge = { [K in keyof T]: T[K] extends Atomic ? T[K] : T[K] extends object ? Merge> : T[K]; }; type NumericKeys = Extract; type IsNumericObject = keyof T extends NumericKeys ? true : false; type ObjectToArray = T extends Atomic ? T : IsNumericObject extends true ? T extends Record ? U[] : never : { [K in keyof T]: T[K] extends object ? ObjectToArray : T[K]; }; type UnflattenObject = ObjectToArray>>>; /** * Converts a flat object with dot notation keys into a nested object. * * @example * const input = { 'a.b': 1, 'a.c.0': 'x' }; * unflattenObject(input) // { a: { b: 1, c: ['x'] } } * * @template T The type of the input object. * @param obj The object with dot notation keys to be unflattened. * @returns A nested object reconstructed from the dot notation keys. */ export declare function unflattenObject>(obj: T | null | undefined): UnflattenObject; export {};