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 {};