export type UnionToIntersection = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never; export type UtoI = UnionToIntersection; export type LastOf = UnionToIntersection T : never> extends () => (infer R) ? R : never; export type Primitive = string | number | boolean; export type Equal = (() => T extends X & T | T ? 1 : 2) extends (() => T extends Y & T | T ? 1 : 2) ? true : false; export type Flatten = O extends infer T ? { [K in keyof T]: T[K]; } : never; export type UnionKVStrToString, N = [T] extends [never] ? true : false> = true extends N ? "}" : `${Start}:${L extends Primitive ? L : ''}${UnionKVStrToString, ' '>}`; export type RecordToUnion = { [K in keyof M]: `${K extends symbol ? '' : ''}${K extends symbol ? '' : K}${K extends symbol ? '' : ' '}${M[K] extends Primitive ? M[K] : M[K] extends unknown[] | readonly unknown[] ? VectorString : M[K] extends Record ? UnionKVStrToString> : ''}`; }[keyof M]; export type RtoU = RecordToUnion; export type RecordToString = UnionKVStrToString>; export type RtoS = RecordToString; export type PutSpace = B extends true ? ' ' : ''; export type _Tuple = [] | [unknown] | [unknown, unknown] | [unknown, unknown, unknown] | [unknown, unknown, unknown, unknown] | [unknown, unknown, unknown, unknown, unknown] | [unknown, unknown, unknown, unknown, unknown, unknown] | [unknown, unknown, unknown, unknown, unknown, unknown, unknown] | [unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown]; export type Tuple = _Tuple | Readonly<_Tuple>; export type ForceStr = S extends `:${infer __}` ? S : S extends string ? `'${S}'` : `${S}`; export type VectorString = T extends [] ? `[${S}]` : T extends [infer Fst, ...infer Rest] | readonly [infer Fst, ...infer Rest] ? Fst extends Primitive ? VectorString}${ForceStr}`> : Fst extends Record ? VectorString}${RtoS}${Rest extends [] ? '' : ' '}`> : Fst extends unknown[] ? VectorString}${VectorString}${Rest extends [] ? '' : ' '}`> : Fst extends readonly [...infer R] ? VectorString}${VectorString}${Rest extends [] ? '' : ' '}`> : never : never; export type VectorToRecord = { [K in T[number] as K[0]]: K[1]; }; export type VtoR = VectorToRecord; export type VtoS = T extends readonly [...infer t] ? VectorString : VectorString; export type VtoOpenStr = VectorString; export type ForceTuple = S extends readonly [infer a, infer b, infer c, infer d, infer e, infer f, infer g, infer h] | [infer a, infer b, infer c, infer d, infer e, infer f, infer g, infer h] ? [a, b, c, d, e, f, g, h] extends S ? S : never : S extends readonly [infer a, infer b, infer c, infer d, infer e, infer f, infer g] | [infer a, infer b, infer c, infer d, infer e, infer f, infer g] ? [a, b, c, d, e, f, g] extends S ? S : never : S extends readonly [infer a, infer b, infer c, infer d, infer e, infer f] | [infer a, infer b, infer c, infer d, infer e, infer f] ? [a, b, c, d, e, f] extends S ? S : never : S extends readonly [infer a, infer b, infer c, infer d, infer e] | [infer a, infer b, infer c, infer d, infer e] ? [a, b, c, d, e] extends S ? S : never : S extends readonly [infer a, infer b, infer c, infer d] | [infer a, infer b, infer c, infer d] ? [a, b, c, d] extends S ? S : never : S extends readonly [infer a, infer b, infer c] | [infer a, infer b, infer c] ? [a, b, c] extends S ? S : never : S extends readonly [infer a, infer b] | [infer a, infer b] ? [a, b] extends S ? S : never : S extends readonly [infer a] | [infer a] ? [a] extends S ? S : never : never; export declare const ForceTuple: (s: (S extends (ForceTuple extends never ? never : S) ? S : never)) => S extends (ForceTuple extends never ? never : S) ? S : never; export type DeepReadonly = { readonly [K in keyof T]: DeepReadonly; }; export type ForceReadRecord> = Equal, R> extends true ? R : never; export type LispFalsy = 'nil' | 'false' | { error: string; }; export type N0 = 0; export type N1 = N0 | 1; export type N2 = N1 | 2; export type N3 = N2 | 3; export type N4 = N3 | 4; export type FlatRec = { [K in keyof T]: T[K]; } & {}; export type T4 = [ ] | readonly [] | [string] | readonly [string] | [ string, string ] | readonly [string, string] | [ string, string, string ] | readonly [string, string, string] | [ string, string, string, string ] | readonly [string, string, string, string]; export type * as typeUtil from './type-util.js';