import type { FieldPath } from './index.js'; export declare function splitPath(path: StringPath | StringPathLeaves): FieldPath; export declare function mergePath(path: (string | number | symbol)[]): string; /** * Lists all paths in an object as string accessors. */ export type FormPath = (string & StringPath) | FormPathLeaves; /** * Like FormPath, but only with non-objects as accessible properties. * Similar to the leaves in a node tree, if you look at the object as a tree structure. */ export type FormPathLeaves = string & StringPathLeaves; export type StringPath = NonNullable extends (infer U)[] ? NonNullable extends object ? `[${number}]` | `[${number}]${U extends unknown[] ? '' : '.'}${NonNullable extends Date ? never : StringPath> & string}` : `[${number}]` | `[${number}].${U & string}` : NonNullable extends object ? keyof T | { [K in keyof T]-?: K extends string ? NonNullable extends object ? `${K}${NonNullable extends unknown[] ? '' : '.'}${NonNullable extends Date ? never : StringPath> & string}` : never : never; }[keyof T] : never; export type StringPathLeaves = NonNullable extends (infer U)[] ? NonNullable extends object ? `[${number}]${NonNullable extends unknown[] ? '' : '.'}${StringPathLeaves> & string}` : `[${number}]` : NonNullable extends object ? { [K in keyof T]: NonNullable extends object ? NonNullable extends Date ? K : never : K; }[keyof T] | { [K in keyof T]-?: K extends string ? NonNullable extends object ? `${K}${NonNullable extends unknown[] ? '' : '.'}${StringPathLeaves> & string}` : never : never; }[keyof T] : never; export type FormPathType = P extends keyof T ? T[P] : P extends number ? T : P extends `.${infer Rest}` ? FormPathType, Rest> : P extends `${number}]${infer Rest}` ? NonNullable extends (infer U)[] ? FormPathType : { invalid_path: P; Type: T; } : P extends `${infer K}[${infer Rest}` ? K extends keyof NonNullable ? FormPathType[K], Rest> : FormPathType : P extends `${infer K}.${infer Rest}` ? K extends keyof NonNullable ? FormPathType[K], Rest> : NonNullable extends (infer U)[] ? FormPathType : { invalid_path: P; Type: T; } : P extends `[${infer K}].${infer Rest}` ? K extends number ? T extends (infer U)[] ? FormPathType : { invalid_path: P; Type: T; } : P extends `${number}` ? NonNullable extends (infer U)[] ? U : { invalid_path: P; Type: T; } : P extends keyof NonNullable ? NonNullable[P] : P extends `${number}` ? NonNullable extends (infer U)[] ? U : { invalid_path: P; Type: T; } : { invalid_path: P; Type: T; } : P extends '' ? T : { invalid_path: P; Type: T; };