export type ConfigPathKeys = T extends object ? { [K in keyof T]: K extends string ? T[K] extends any[] ? `${K}` | `${K}.${number}` | `${K}[${number}]` | `${K}.${number}.${ConfigPathKeys}` | `${K}[${number}].${ConfigPathKeys}` : T[K] extends object ? `${K}` | `${K}.${ConfigPathKeys}` : `${K}` : never; }[keyof T] : never; export type ConfigPathType = P extends `${infer K}.${infer Rest}` ? K extends keyof T ? Rest extends `${infer N}.${infer SubRest}` ? N extends `${number}` ? T[K] extends any[] ? ConfigPathType : never : ConfigPathType : Rest extends `${number}` ? T[K] extends any[] ? T[K][number] : never : ConfigPathType : never : P extends keyof T ? T[P] : never; export interface UpdatedProperty { path: string; old: string; new: string; type: string; }