export declare const assertType: (..._TYPE: IsEqualType, second: Print]]>) => void; export declare const assertNotType: (..._TYPE: IsEqualType) => void; export declare type IsEqualType = (() => T extends A ? 1 : 2) extends (() => T extends B ? 1 : 2) ? ((() => T extends B ? 1 : 2) extends (() => T extends A ? 1 : 2) ? True : False) : False; export declare type Print = T extends λ ? λ : T extends infer I ? { [K in keyof I]: I[K]; } : T; export declare type λ = (...args: TA) => TR; export declare type Fn = (...args: TA) => TR; /** @deprecated use `Fn` or `λ` instead */ export declare type Fun = λ; export declare type Primitive = string | number | boolean | symbol | null | undefined; export declare type FilterKeys = Extract; export declare type RequiredKeys = Exclude<{ [K in keyof T]: T[K] extends Required[K] ? K : never; }[keyof T], undefined>; export declare type OptionalKeys = Exclude>; /** Any list of the `n`-first elements of `T`. */ export declare type PartialList = T extends [infer L, ...infer R] ? [] | [Widen] | [Widen, ...PartialList] : []; export declare type NarrowList = { [I in keyof TLoose]: I extends keyof TStrict ? TStrict[I] extends TLoose[I] ? TStrict[I] : TLoose[I] : TLoose[I]; }; export declare type Length = T extends { length: infer I; } ? I : never; export declare type IsLength = T extends { length: infer I; } ? I extends N ? true : false : false; /** * Return a tuple containing the `N` first elements from `T`. If `T` is a tuple * its labels will be preserved unless it contains variadic elements. */ export declare type Take = Countable extends never ? never : Take_; /** Same as `Take` but doesn't validate that `N` is a valid length. */ export declare type Take_ = IsTuple extends false ? TupleOfSize : TupleOfSize extends Required<[...T, ...any[]]> ? T : number extends T["length"] ? TakeFromVariadic : TakeFromTuple; declare type TakeFromTuple = T extends [] ? T : Length> extends N ? T : T extends [...infer H, any?] ? TakeFromTuple : never; declare type TakeFromVariadic = T extends [] ? F : Length extends N ? F : T extends [infer A, ...infer B] ? TakeFromVariadic : never; declare type Countable = IfElse, TrimFront<`${T}`, 0>, never>; export declare type TakeLast = Length extends I ? T : T extends [any, ...infer S] ? TakeLast : never; export declare type IsTuple = T[number][] extends Required ? false : true; export declare type IsUnion = T extends unknown ? [U] extends [T] ? false : true : false; export declare type SplitAt = Length extends I ? [Front, End] : Front extends [...infer F_, infer L] ? SplitAt : never; export declare type Slice = Length extends N ? T : T extends (D extends "front" ? [infer F, ...infer R] : [...infer R, infer F]) ? Slice : T; declare type Widen = T extends string ? string : T extends number ? number : T; /** Inverse of `Readonly` */ export declare type Mutable = { -readonly [K in keyof T]: T[K]; }; /** If `T` is promise then the type it resolves to, otherwise `T`. */ export declare type PromType = T extends PromiseLike ? I : T; export declare type MakeProm = Promise ? I : T>; export declare type Async = (...args: Parameters) => MakeProm>; export declare type StringCase = "camel" | "kebab" | "pascal" | "screaming-snake" | "snake"; export declare type Prefix = `${PRE}${CASE extends "snake" ? "_" : ""}${CASE extends "camel" ? Capitalize : STR}`; export declare type Suffix = Prefix; export declare type CamelCase = T extends `_${infer R}` ? `_${CamelCase}` : T extends `-${infer R}` ? `-${CamelCase}` : _Camel>; declare type _Camel = T extends `${infer A}${infer B}${infer C}` ? A extends "_" | "-" ? B extends "_" | "-" ? `${A}${_Camel<`${B}${C}`>}` : `${Uppercase}${_Camel}` : `${A}${_Camel<`${B}${C}`>}` : T; export declare type PascalCase = Capitalize>; export declare type SnakeCase = DelimitedCase; export declare type ScreamingSnakeCase = Uppercase>; export declare type KebabCase = DelimitedCase; declare type DelimitedCase = T extends `${infer A}${infer B}${infer C}${infer R}` ? Lowercase extends A ? A extends ("_" | "-") ? `${D}${Lowercase}${DelimitedCase<`${C}${R}`, D>}` : Lowercase extends B ? `${A}${DelimitedCase<`${B}${C}${R}`, D>}` : Lowercase extends C ? `${A}${D}${Lowercase}${C}${DelimitedCase}` : `${A}${D}${InvertDelimited<`${B}${C}${R}`, D>}` : `${Lowercase}${DelimitedCase<`${B}${C}${R}`, D>}` : T; declare type InvertDelimited = T extends `${infer A}${infer B}` ? Uppercase extends A ? `${A}${InvertDelimited}` : `${D}${DelimitedCase<`${A}${B}`, D>}` : T; export declare type IsEvenLength = T extends `${string}${string}${infer S}` ? (S extends "" ? true : IsEvenLength) : false; export declare type Surround = SplitEven extends [ infer A, infer B ] ? `${A extends string ? A : never}${T}${B extends string ? B : never}` : never; export declare type SplitString = T extends `${infer H}${infer T}` ? SplitString : A; export declare type SplitEven = EvenLength> extends [ infer A, infer B ] ? [ Join, Join ] : never; declare type EvenLength = A extends [] ? (B extends [] ? [B, A] : never) : (A extends { length: infer LA; } ? (B extends { length: infer LB; } ? (LA extends LB ? [B, A] : (A extends [infer H, ...infer T] ? EvenLength : never)) : never) : never); export declare type TupleOfSize = TupleOfSize_; declare type TupleOfSize_ = Length extends L ? R : TupleOfSize_; declare type Contains = T extends `${any}${C}${any}` ? true : false; declare type TrimFront = T extends `${C}${infer R}` ? TrimFront : T; declare type Chars = T extends `${infer A}${infer B}` ? Chars : C; declare type OnlyContains = OnlyContains_>; declare type OnlyContains_ = T extends `${C}${infer R}` ? OnlyContains_ : T extends "" ? true : false; export declare type IsNumberString = IsNumberString_; declare type IsNumberString_ = T extends `-${any}` ? false : T extends `${number}` ? true : false; export declare type IsIntegerString = IsNumberString extends false ? false : BitNot>; export declare type IsNegative = number extends T ? never : IfElse, never, Extends<`${T}`, `-${string}`>>; /** Create a union containing the integers 0..`T` */ export declare type IntRange = IsNegative extends true ? never : ConstructIntRange; declare type ConstructIntRange = L extends U ? U : ConstructIntRange; /** Parse `T` into number if `T` is a positive base 10 integer. */ export declare type ParseInt = T extends "" ? never : OnlyContains extends true ? ParseInt_, MAX, []> : never; declare type ParseInt_ = `${L["length"]}` extends T ? L["length"] : L["length"] extends M ? never : ParseInt_; export declare type NOT = boolean extends T ? T : BitNot; export declare type BitNot = T extends true ? false : true; export declare type AND = Switch<[ [ BitOr, LogicFalse>, false ], [ BitOr, LogicNull>, boolean ], true ]>; export declare type BitAnd = A extends false ? false : B; export declare type OR = Switch<[ [ BitOr, LogicTrue>, true ], [ BitOr, LogicNull>, boolean ], false ]>; export declare type BitOr = A extends true ? true : B; export declare type XOR = Switch<[ [ BitOr, LogicNull>, boolean ], BitXor ]>; export declare type BitXor = A extends B ? false : true; export declare type XNOR = Switch<[ [ BitOr, LogicNull>, boolean ], BitXnor ]>; export declare type BitXnor = A extends B ? true : false; export declare type NOR = Switch<[ [ BitAnd, LogicFalse>, true ], [ BitOr, LogicTrue>, false ], boolean ]>; export declare type BitNor = A extends true ? false : BitNot; export declare type NAND = Switch<[ [ BitOr, LogicFalse>, true ], [ BitOr, LogicNull>, boolean ], false ]>; export declare type BitNand = A extends false ? true : BitNot; export declare type LogicTrue = boolean extends T ? false : T; export declare type LogicFalse = boolean extends T ? false : BitNot; export declare type LogicNull = boolean extends T ? true : T extends boolean ? false : true; /** Equivalent to `A extends B ? true : false` */ export declare type Extends = IfElse, [ A ] extends [B] ? true : false, A extends B ? true : false>; /** Returns `A` if `T` is `true`, `B` if `false`, and `A` | `B` otherwise. */ export declare type IfElse = T extends true ? A : B; export declare type Switch = T extends [infer A, ...infer B] ? (A extends [boolean, any] ? (A[0] extends true ? A[1] : Switch) : A) : never; export declare type Join = Array extends [infer A, ...infer B] ? (B extends [] ? ToString : `${ToString}${Separator}${Join}`) : ""; declare type JoinInnerArray = Join; export declare type ToString = T extends undefined | null | [] ? "" : T extends PositiveInfinity ? "Infinity" : T extends NegativeInfinity ? "-Infinity" : T extends string | number | boolean ? `${T}` : T extends Map ? "[object Map]" : T extends Set ? "[object Set]" : T extends Set ? "[object Set]" : T extends unknown[] ? JoinInnerArray : T extends WeakMap ? "[object WeakMap]" : T extends WeakSet ? "[object WeakSet]" : T extends TypedArray | bigint | symbol | ((...args: unknown[]) => unknown) | RegExp | Error | Intl.NumberFormat | typeof globalThis ? string : T extends Promise ? "[object Promise]" : T extends DataView ? "[object DataView]" : T extends SharedArrayBuffer ? "[object SharedArrayBuffer]" : T extends ArrayBuffer ? "[object ArrayBuffer]" : T extends Atomics ? "[object Atomics]" : T extends Intl.Collator ? "[object Intl.Collator]" : T extends Intl.DateTimeFormat ? "[object Intl.DateTimeFormat]" : T extends Intl.ListFormat ? "[object Intl.ListFormat]" : T extends Intl.NumberFormat ? "[object Intl.NumberFormat]" : T extends Intl.PluralRules ? "[object Intl.PluralRules]" : T extends Intl.RelativeTimeFormat ? "[object Intl.RelativeTimeFormat]" : T extends { toString(): infer R; } ? (string extends R ? "[object Object]" : ReturnType) : T extends object ? "[object Object]" : never; export declare type TypedArray = Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array | BigInt64Array | BigUint64Array; export declare type PositiveInfinity = 1e999; export declare type NegativeInfinity = -1e999; export {};