/* eslint-disable */ // ---------- Base Utilities ---------- type Falsy = undefined | null | false | ""; type RegisteredStyle = number & { __registeredStyleBrand: T }; type Primitive = | string | number | boolean | bigint | symbol | null | undefined | Date | RegExp | false | true; interface RecursiveArray extends Array | RecursiveArray> {} export type StyleProp = | T | RegisteredStyle | RecursiveArray | Falsy> | Falsy; // ---------- Type Helpers ---------- // Unwrap nested arrays (from RecursiveArray) type UnwrapRecursiveArray< T, Depth extends unknown[] = [], MaxDepth extends number = 10 > = Depth["length"] extends MaxDepth ? T : T extends (infer I)[] ? UnwrapRecursiveArray : T; // Remove null, false, undefined, etc. type RemoveFalsy = Exclude; // Remove RegisteredStyle (branded numbers) type RemoveRegisteredStyle = T extends RegisteredStyle ? never : T; // Final cleaned style object from StyleProp type ExtractStyleObject = RemoveRegisteredStyle< RemoveFalsy ? U : T>> >; // Check if something is a non-array plain object type IsPlainObject = T extends object ? T extends Function ? false : T extends readonly any[] ? false : true : false; // ---------- Resolve Path Type Helpers ---------- type Split< T extends string, Delimiter extends string, > = T extends `${infer Head}${Delimiter}${infer Tail}` ? [Head, ...Split] : [T]; // Special parser to break down dot + bracket notation (e.g., "users[0].name") type ParsePath = T extends `${infer Head}[${number}]${infer Rest}` ? [Head, number, ...ParsePath] : Split; type ResolvePath = Parts extends [ infer Head, ...infer Rest, ] ? Head extends keyof T ? ResolvePath : Head extends number ? T extends (infer U)[] ? ResolvePath : never : never : T; // ---------- Dot Notation Utility ---------- export type DotNotation< T, Depth extends unknown[] = [], MaxDepth extends number = 10, Key extends keyof T = keyof T, > = Depth["length"] extends MaxDepth ? never : Key extends string ? unknown extends T[Key] ? Key | `${Key}.${string}` : // Handle StyleProp and clean unions ExtractStyleObject> extends infer Cleaned ? Cleaned extends Primitive ? Key : Cleaned extends readonly (infer E)[] ? E extends Primitive ? Key | `${Key}[number]` : | Key | `${Key}[number]` | `${Key}[number].${DotNotation}` : IsPlainObject extends true ? Key | `${Key}.${DotNotation}` : Key : never : never; // ---------- Resolve Dot Path ---------- export type ResolveDotPath = ResolvePath< T, ParsePath >;