export { a as Absolute, A as Add, D as Divide, h as IsDivisibleBy, g as IsEqualOrGreater, f as IsEqualOrLower, e as IsGreater, I as IsLower, d as Maximum, c as Minimum, b as Modulo, M as Multiply, N as Negative, S as Substract } from './chunks/CM89_aaq.js'; export { B as BooleanEvery, a as BooleanSome, F as ExcludeEmptyArray, E as ExcludeEmptyObject, x as IsAllNegative, w as IsAllPositive, v as IsAllZero, D as IsAnyDecimal, C as IsAnyNegative, z as IsAnyNumber, A as IsAnyPositive, y as IsAnyZero, h as IsArray, j as IsArrayOrTuple, u as IsDecimal, g as IsEmptyString, l as IsEqual, t as IsInteger, s as IsNegative, b as IsNever, e as IsNil, m as IsNotEqual, q as IsNumber, r as IsPositive, n as IsStrictEqual, o as IsStrictNotEqual, f as IsString, k as IsTuple, i as IsTupleEmpty, d as IsUndefined, I as IsUnknown, c as IsVoid, p as IsZero } from './chunks/DZEfmVOc.js'; import './BooleanNor.js'; import './BooleanNot.js'; import './BooleanOr.js'; import './Tuple.js'; import './BooleanAnd.js'; import './MaybeReadonly.js'; import './TupleLength.js'; /** * Weird hack to collect keys of an object while preserving the original object structure. * Each object will have a `$key` property that contains the keys of the object. * If the parent object already has a `$key` property, the keys will be appended to it. * * @template T The object to collect keys from. * @example * * // Collect keys of the values of an object. * type Object = { a: { b: { c: string } } } * type Collected = CollectKey // { a: { $key: ['a'], b: { c: string } } } * * // Collect keys of the values of an object with an existing $key property. * type Object = { $key: ['root'], a: { b: { c: string } } } * type Collected = CollectKey // { $key: ['root'], a: { $key: ['root', 'a'], b: { c: string } } } */ type CollectKey = T extends object ? { [K in Exclude]: T[K] extends object ? T extends { $key: infer P extends string[]; } ? T[K] & { $key: [...P, K]; } : T[K] & { $key: [K]; } : T[K]; } : T; export type { CollectKey };