import { If_PlainObject } from "../utils/utils"; export type ExtractObjectPaths = If_PlainObject extends true ? ({ [P in keyof T]: P extends string | number ? (If_PlainObject extends true ? (K extends "" ? ExtractObjectPaths : ExtractObjectPaths) : (T[P] extends (infer U)[] ? (K extends "" ? ExtractObjectPaths : ExtractObjectPaths) : (K extends "" ? `${P}` : `${K}.${P}`))) : (never); }[keyof T]) : (T extends (infer U)[] ? ExtractObjectPaths : never); export type ExtractObjectAllPaths = If_PlainObject extends true ? ({ [P in keyof T]: P extends string | number ? (If_PlainObject extends true ? (K extends "" ? ExtractObjectPaths : ExtractObjectPaths) : (T[P] extends (infer U)[] ? (K extends "" ? ExtractObjectPaths : ExtractObjectPaths) : (K extends "" ? `${P}` : `${K}.${P}` | `${K}`))) : (never); }[keyof T]) : (T extends (infer U)[] ? ExtractObjectPaths : never); export type RemoveReadOnlyDeep = T extends Function ? (T) : (T extends Array ? (Array>) : (T extends Map ? (Map, RemoveReadOnlyDeep>) : (T extends Set ? (Set>) : (T extends object ? { -readonly [K in keyof T]: RemoveReadOnlyDeep; } : T))));