import { SchemaFieldName, SchemaFieldNestedTemplate, SchemaFields, SchemaFieldsTemplate } from '../schema'; type Join = L extends SchemaFieldName ? R extends SchemaFieldName ? `${L}.${R}` : L : R extends SchemaFieldName ? R : undefined; type Union = L extends undefined ? R extends undefined ? undefined : R : R extends undefined ? L : L | R; export type NestedPaths = { [K in Extract]: SFT[K] extends SchemaFieldNestedTemplate ? NestedPaths, Join> : Union, Join>; }[Extract]; export type NamesWithNestedPaths = { [K in Extract]: Union, Join>; } & { [K in Extract as SFT[K] extends SchemaFieldNestedTemplate ? Extract : never]: SFT[K] extends SchemaFieldNestedTemplate ? NamesWithNestedPaths, Join>[Extract] : never; }; export type SchemaFieldFromPath, Path extends string> = { [K in Path]: K extends keyof SFT ? SF[K] : K extends `${infer P}.${infer S}` ? SFT[P] extends SchemaFieldNestedTemplate ? SchemaFieldFromPath, S> : never : never; }[Path]; export {};