export type RemoveLastDot = T extends `${infer R}.` ? R : T; export type DeepKey = keyof T extends infer K ? string extends K & DontFlatMap ? never : K extends string ? T[K & keyof T] extends infer R ? R extends Record ? `${K}.` | `${K}.${DeepKey}` : `${K}.` : never : never : never; export type DeepValue = T extends T ? P extends `${infer K}.${infer Rest}` ? T[K & keyof T] extends infer S ? S extends S ? DeepValue : never : never : T[P & keyof T] : never; export type ObjectFlatten = Data extends Record ? string extends keyof Data ? Data extends Record ? Record> : Data[string] : { [K in DeepKey as RemoveLastDot]-?: ObjectFlatten>, DontFlatMap>; } : Data;