UNPKG

staticql

Version:

Type-safe query engine for static content including Markdown, YAML, JSON, and more.

28 lines (27 loc) 1.33 kB
import { SourceRecord } from "../SourceConfigResolver.js"; export type JoinableKeys<T> = { [K in keyof T]: NonNullable<T[K]> extends SourceRecord | SourceRecord[] ? `${Extract<K, string>}` : never; }[keyof T]; type Prev = [never, 0, 1, 2, 3, 4, 5]; type IsAny<T> = 0 extends 1 & T ? true : false; type NestedIndexKeys<T, Prefix extends string = "", Depth extends number = 3> = [Depth] extends [never] ? never : T extends (infer U)[] ? NestedIndexKeys<U, Prefix, Depth> : T extends object ? { [K in keyof T]: NonNullable<T[K]> extends { __brand: "index"; } ? IsAny<T[K]> extends true ? never : `${Prefix}${Prefix extends "" ? "" : "."}${Extract<K, string>}` : NonNullable<T[K]> extends object ? NestedIndexKeys<NonNullable<T[K]>, `${Prefix}${Prefix extends "" ? "" : "."}${Extract<K, string>}`, Prev[Depth]> : never; }[keyof T] : never; export type Fields<T> = NestedIndexKeys<T>; export type PrefixIndexDepth = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10; export type PrefixIndexDefinition = Record<string, { dir: string; depth: PrefixIndexDepth; }>; export type PrefixIndexLine = { v: string; vs: string; ref: Record<string, Record<"slug" | string, string[]>>; }; export type RawPrefixIndexLine = { slug: string; values: Record<string, Record<string, string | string[]>>; }; export {};