import { Intersect } from 'cosmokit'; import { Eval } from './eval.ts'; export type Values = S[keyof S]; export type Keys = Values<{ [P in keyof O]: O[P] extends T | undefined ? P : never; }> & string; export type FlatKeys = Keys, T>; export type FlatPick> = { [P in string & keyof O as K extends P | `${P}.${any}` ? P : never]: P extends K ? O[P] : FlatPick>>; }; export type DeepPartial = T extends Values ? T : T extends (infer U)[] ? DeepPartial[] : T extends object ? { [K in keyof T]?: DeepPartial; } : T; export interface AtomicTypes { Number: number; String: string; Boolean: boolean; BigInt: bigint; Symbol: symbol; Date: Date; RegExp: RegExp; Function: Function; ArrayBuffer: ArrayBuffer; SharedArrayBuffer: SharedArrayBuffer; } export type Indexable = string | number | bigint; export type Comparable = string | number | boolean | bigint | Date; type FlatWrap = { [K in P]: S; } | (S extends Values ? never : S extends any[] ? never : string extends keyof S ? never : A extends [0, ...infer R extends 0[]] ? FlatMap : never); type FlatMap = Values<{ [K in keyof S & string as `${P}${K}`]: FlatWrap; }>; type Sequence = A['length'] extends N ? A : Sequence; export type Flatten = Intersect>>; type DotPrefix = K extends `${infer F}.${string}` ? F : never; export type Row = string extends keyof S ? { [K in keyof S]-?: Row.Cell>; } : { [K in keyof S as K extends `${string}.${string}` ? never : K]-?: Row.Cell>; } & { [P in DotPrefix]: Row<{ [K in keyof S & string as K extends `${P}.${infer R}` ? R : never]: S[K]; }>; }; export declare namespace Row { type Cell = Eval.Expr & (T extends Comparable ? {} : Row); type Computed = T | ((row: Row) => T); } export declare function isComparable(value: any): value is Comparable; export declare function isFlat(value: any): value is Values; export declare function randomId(): string; export interface RegExpLike { source: string; flags?: string; } export declare function makeRegExp(source: string | RegExpLike, flags?: string): RegExp; export declare function unravel(source: object, init?: (value: any) => any): {}; export declare function flatten(source: object, prefix?: string, ignore?: (value: any) => boolean): {}; export declare function getCell(row: any, path: any): any; export declare function isEmpty(value: any): boolean; export {};