type Append = `${Text}${Segment}`; interface TAppend extends Fn<{ 0: string; 1: string; }> { slot: [Segment, Text]; data: Append; } type Contains = Text extends `${string}${Segment}${string}` ? 1 : 0; interface TContains extends Fn<{ 0: Serializable; 1: string; }> { slot: [Segment, Text]; data: Contains; } type EndsWith = Text extends `${string}${Segment}` ? 1 : 0; interface TEndsWith extends Fn<{ 0: Serializable; 1: string; }> { slot: [Segment, Text]; data: EndsWith; } type Length = Split>["length"]; interface TLength extends Fn<{ 0: Serializable; }> { slot: [Text]; data: Length; } type OccurrenceHelper = Input extends `${string}${Substring}${infer Slice}` ? OccurrenceHelper : Size; type Occurrence = OccurrenceHelper; interface TOccurrence extends Fn<{ 0: Substring; 1: Input; }> { slot: [Substring, Input]; data: Occurrence; } type PadEnd$1 = Length extends Size ? Text : PadEnd$1, Size, Suffix>; interface TPadEnd extends Fn<{ 0: number; 1: string; 2: string; }> { slot: [Size, Suffix, Text]; data: PadEnd$1; } type PadStart$1 = Length extends Size ? Text : PadStart$1, Size, Prefix>; interface TPadStart extends Fn<{ 0: number; 1: string; 2: string; }> { slot: [Size, Prefix, Text]; data: PadStart$1; } type Pattern = `${StartsWith}${Text}${EndsWith}`; interface TPattern extends Fn<{ 0: Serializable; 1: Serializable; 2: Serializable; }> { slot: [StartsWith, EndsWith, Text]; data: Pattern; } type PlaceHelper = `${Substring}${Segment}${Substring>}`; type Place = LastOfUnion extends infer L ? IsNever extends 1 ? Text : L extends number ? Place, L>>, Segment, Exclude> : Text : never; interface TPlace extends Fn<{ 0: string; 1: number; 2: string; }> { slot: [Segment, Index, Text]; data: Place; } type Prepend = `${Segment}${Text}`; interface TPrepend extends Fn<{ 0: string; 1: string; }> { slot: [Segment, Text]; data: Prepend; } type ReplaceHelper = Text extends `${infer X}${Search}${infer U}` ? `${X}${Replacement}${ReplaceHelper}` : Text; type Replace = LastOfUnion extends infer L ? IsNever extends 1 ? Text : L extends string ? Replace, Exclude, Replacement> : Text : never; interface TReplace extends Fn<{ 0: string; 1: string; 2: string; }> { slot: [Search, Replacement, Text]; data: Replace; } type SplitHelper = Text extends `${infer T}${Delimiter}${infer U}` ? [T, ...SplitHelper] : Text extends Delimiter ? [] : [Text]; type DefaultOptions = { removeEmptyEntries: false; }; type RemoveEmptyEntries = Text extends [ infer Head, ...infer Tail ] ? Tail extends string[] ? Head extends "" ? RemoveEmptyEntries : [Head, ...RemoveEmptyEntries] : never : Text; type Split = Options["removeEmptyEntries"] extends true ? RemoveEmptyEntries> : SplitHelper; interface TSplit extends Fn<{ 0: string; 1: { removeEmptyEntries: boolean; }; 2: string; }> { slot: [Delimiter, Options, Text]; data: Split; } type StartsWith = Text extends `${Segment}${string}` ? 1 : 0; interface TStartsWith extends Fn<{ 0: Serializable; 1: string; }> { slot: [Segment, Text]; data: StartsWith; } type Serializable$1 = string | number | boolean | null; type ArrayToString = `[${Join$1}]`; type ObjectToString> = Join$1}: ${Stringify}`; }[keyof Input]>, ", ">; type Stringify = Input extends string ? Input : Input extends Serializable$1 ? `${Input}` : Input extends any[] ? ArrayToString : Input extends Record ? ObjectToString : never; interface TStringify extends Fn<{ 0: unknown; }> { slot: [Input]; data: Stringify; } type Substring = Join$1, Start, End>>; interface TSubstring extends Fn<{ 0: number; 1: number; 2: string; }> { slot: [Start, End, Text]; data: Substring; } type Template = Stream extends Serializable ? `${Stream}` : Stream extends Serializable[] ? Join$1 : never; interface TTemplate extends Fn<{ 0: Template; }> { slot: [Stream]; data: Template; } type Trim = TrimStart, Letter, Count>; interface TTrim extends Fn<{ 0: string; 1: number; 2: string; }> { slot: [Letter, Count, Text]; data: Trim; } type TrimEndHelper = Text extends `${infer U}${Letter}` ? TrimEnd> : Text; type TrimEnd = Count extends -1 ? Text extends `${infer U}${Letter}` ? TrimEndHelper : Text : Count extends 0 ? Text : TrimEndHelper; interface TTrimEnd extends Fn { slot: [Letter, Count, Text]; data: TrimEnd; } type TrimStartHelper = Text extends `${Letter}${infer U}` ? TrimStart> : Text; type TrimStart = Count extends -1 ? Text extends `${Letter}${infer U}` ? TrimStartHelper : Text : Count extends 0 ? Text : TrimStartHelper; interface TTrimStart extends Fn<{ 0: string; 1: number; 2: string; }> { slot: [Letter, Count, Text]; data: TrimStart; } type AssignHelper = PathType extends `${Key}.${infer Rest}` ? ObjectType[Key] extends infer ObjectType ? ObjectType extends Dictionary ? Assign : Assign> : never : PathType extends Key ? ValueType : ObjectType[Key] extends Dictionary ? Assign : ObjectType[Key]; type Setter = Intersect<{ [Key in RequiredKeys as [ValueType] extends [never] ? Exclude : Key]: AssignHelper; } & { [Key in OptionalKeys as [ValueType] extends [never] ? Exclude : Key]?: AssignHelper; }>; type Assign | ArbitraryKey = "", ValueType extends any = never> = PathType extends keyof ObjectType | `${infer Head}.${string}` | "" ? Head extends keyof ObjectType ? Setter, ValueType> : Intersect, ValueType> & ObjectFromPath, ValueType>> : [ValueType] extends [never] ? Setter> : ObjectType extends Dictionary ? { [Key in keyof ObjectType | PathType]: Key extends keyof ObjectType ? ObjectType[Key] : ValueType; } : ObjectType; interface TAssign> | ArbitraryKey | void = void, ValueType extends unknown = never, ObjectType extends Dictionary | void = void> extends Fn<{ 0: Paths> | ArbitraryKey; 1: unknown; 2: Dictionary; }> { slot: [PathType, ValueType, ObjectType]; data: Assign; } type ObjectHelper>> = { [Key in keyof PickType]: Get; }; type ArrayHelper[]> = { [Key in PickType[number]]: Get; }; type StringHelper = { [Key in PickType]: Get; }; type Collect$1> | Paths[] | Paths> = Unionize[] ? ArrayHelper : PickType extends Dictionary> ? ObjectHelper : PickType extends Paths ? StringHelper : never>; interface TCollect>> | Paths>[] | Paths> | void = void, ObjectType extends Dictionary | void = void> extends Fn<{ 0: Dictionary>> | Paths>[] | Paths>; 1: Dictionary; }> { slot: [PickType, ObjectType]; data: Collect$1; } type CombineHelper = Source extends [ infer Head extends Dictionary, ...infer Rest extends Dictionary[] ] ? CombineHelper> : Source extends Dictionary ? Merge : Result; type Combine = CombineHelper; interface TCombine extends Fn<{ 0: Dictionary[]; }> { slot: [Source]; data: Combine; } type DeepPartialHelper = ObjectType[Key] extends Dictionary ? [PathType] extends [never] ? DeepPartial : PathType extends `${Key}.${infer Rest}` ? DeepPartial : DeepPartial : ObjectType[Key]; type DeepPartial = never> = [PathType] extends [never] ? { [Key in Keys]?: DeepPartialHelper; } : ObjectType extends Dictionary ? Intersect<{ [Key in Exclude, PathType>]: DeepPartialHelper; } & { [Key in Exclude, PathType>]?: DeepPartialHelper; } & { [Key in IncludeKeys]?: DeepPartialHelper; }> : ObjectType; interface TDeepPartial> | void = void, ObjectType extends Dictionary | void = void> extends Fn<{ 0: ArbitraryKey | Paths>; 1: Dictionary; }> { slot: [PathType, ObjectType]; data: DeepPartial; } type DeepRequiredHelper = ObjectType[Key] extends Dictionary ? [PathType] extends [never] ? DeepRequired : PathType extends `${Key}.${infer Rest}` ? DeepRequired : DeepRequired : ObjectType[Key]; type DeepRequired = never> = [PathType] extends [never] ? { [Key in Keys]: RequireValue>; } : ObjectType extends Dictionary ? Intersect<{ [Key in Exclude, PathType>]: DeepRequiredHelper; } & { [Key in Exclude, PathType>]?: DeepRequiredHelper; } & { [Key in IncludeKeys]: RequireValue>; }> : ObjectType; interface TDeepRequired> | void = void, ObjectType extends Dictionary | void = void> extends Fn<{ 0: ArbitraryKey | Paths>; 1: Dictionary; }> { slot: [PathType, ObjectType]; data: DeepRequired; } type Diff = Merge>, Pick>>; interface TDiff extends Fn<{ 0: Dictionary; 1: Dictionary; }> { slot: [Right, Left]; data: Diff; } type ExcludeKeys = never> = Exclude, PathType>; interface TExcludeKeys> | void = void, ObjectType extends Dictionary | void = void> extends Fn<{ 0: ArbitraryKey | Paths>; 1: Dictionary; }> { slot: [PathType, ObjectType]; data: ExcludeKeys; } type ExtractNestedKeys = Text extends `${string}${Delimiter}${infer Segment}` ? Segment : Text; interface TExtractNestedKeys extends Fn<{ 0: string; 1: string; }> { slot: [Delimiter, Text]; data: ExtractNestedKeys; } type ExtractRootKey = Text extends `${infer Segment}${Delimiter}${string}` ? Segment : Text; interface TExtractRootKey extends Fn<{ 0: string; 1: string; }> { slot: [Delimiter, Text]; data: ExtractRootKey; } type FromEntries = { [Key in EntryList[number][0]]: Extract[1]; }; interface TFromEntries extends Fn<{ 0: unknown[][]; }> { slot: [EntryList]; data: FromEntries; } /** * Represents the value at a path in an object. * * @template ObjectType The type of the object. * @template Path The type of the path. * @template Delimiter The type of the delimiter. */ type Get | ArbitraryKey, Fallback extends unknown = never, Delimiter extends string = "."> = Stringify extends Keys ? ObjectType[Stringify] : Path extends `${infer Key}${Delimiter}${infer Rest}` ? ObjectType[Key] extends Dictionary ? Get : Fallback : Fallback; interface TGet, Exclude> | ArbitraryKey | void = void, Fallback extends unknown = never, Delimiter extends string | void = ".", ObjectType extends Dictionary | void = void> extends Fn<{ 0: Paths, Exclude> | ArbitraryKey; 1: unknown; 2: string; 3: Dictionary; }> { slot: [Path, Fallback, Delimiter, ObjectType]; data: Get; } type Has = Key extends Paths ? 1 : 0; interface THas extends Fn<{ 0: string | number | symbol; 1: string; 2: Dictionary; }> { slot: [Key, Delimiter, ObjectType]; data: Has; } type ImmutableShallow = { readonly [K in keyof T & {}]: T[K]; }; type ImmutableObject = { readonly [K in keyof T]: Immutable; }; type ImmutableArray = ImmutableShallow>>; type ImmutableMap = Readonly, Immutable>>; type ImmutableSet = Readonly>>; type Immutable = T extends Array ? ImmutableArray : T extends Map ? ImmutableMap : T extends Set ? ImmutableSet : T extends Dictionary ? ImmutableObject : Readonly; interface TImmutable extends Fn<{ 0: unknown; }> { slot: [T]; data: Immutable; } type IncludeKeys = never> = Extract, PathType>; interface TIncludeKeys> | void = void, ObjectType extends Dictionary | void = void> extends Fn<{ 0: ArbitraryKey | Paths>; 1: Dictionary; }> { slot: [PathType, ObjectType]; data: IncludeKeys; } type JoinKeys = RootKey extends "" ? Key : `${RootKey}${Delimiter}${Key}`; interface TJoinKeys extends Fn<{ 0: string; 1: string; 2: string; }> { slot: [Key, Delimiter, RootKey]; data: JoinKeys; } type Keys = keyof ObjectType extends undefined ? never : keyof ObjectType extends infer Keys extends string | number ? `${Keys}` : never; interface TKeys extends Fn { slot: [ObjectType]; data: Keys; } type KeysAsTupleHelper = LastOfUnion extends infer Key ? [Key] extends [never] ? Keys : Key extends keyof ObjectType ? KeysAsTupleHelper, [Key, ...Keys]> : never : Keys; type KeysAsTuple = KeysAsTupleHelper; interface TKeysAsTuple extends Fn<{ 0: Dictionary; }> { slot: [ObjectType]; data: KeysAsTuple; } type Merge = Intersect<{ [Key in keyof Source as Key extends keyof Target ? never : Key]: Source[Key]; } & { [Key in keyof Target as Key extends keyof Source ? never : Key]: Target[Key]; } & { [Key in keyof Source & keyof Target]: Source[Key] extends Dictionary ? Target[Key] extends Dictionary ? Merge : Target[Key] : Target[Key]; }>; interface TMerge extends Fn<{ 0: Dictionary; 1: Dictionary; }> { slot: [Target, Source]; data: Merge; } type Mutable = ObjectType extends Primitives | Indexable | Structures | Derivatives ? ObjectType : Intersect<{ -readonly [K in keyof ObjectType]: ObjectType[K] extends Record ? Mutable : ObjectType[K]; }>; interface TMutable extends Fn<{ 0: Dictionary; }> { slot: [ObjectType]; data: Mutable; } type ObjectFromPath = Path extends `${infer Head}${Delimiter}${infer Rest}` ? { [K in Head]: ObjectFromPath; } : { [K in Path]: Value; }; interface TObjectFromPath extends Fn<{ 0: string; 1: unknown; 2: string; }> { slot: [Value, Delimiter, Path]; data: ObjectFromPath; } type OmitOptionalValues = ObjectType extends Dictionary ? Intersect<{ [K in RequiredKeys]: ObjectType[K] extends infer T ? T extends Dictionary ? OmitOptionalValues : T : never; }> : ObjectType; interface TOmitOptionalValues extends Fn<{ 0: Dictionary; }> { slot: [ObjectType]; data: OmitOptionalValues; } type OmitPathHelper = ObjectType[Key] extends Dictionary ? PathType extends `${Key}.${infer Rest}` ? OmitPath : OmitPath : ObjectType[Key]; type OmitPath | ArbitraryKey = ""> = ObjectType extends Dictionary ? Intersect<{ [Key in Exclude, PathType>]: OmitPathHelper; } & { [Key in Exclude, PathType>]?: OmitPathHelper; }> : ObjectType; interface TOmitPath> | void = void, ObjectType extends Dictionary | void = void> extends Fn<{ 0: Paths>; 1: Dictionary; }> { slot: [PathType, ObjectType]; data: OmitPath; } type OmitRequiredValues = ObjectType extends Dictionary ? Intersect<{ [K in OptionalKeys]: ObjectType[K] extends infer T ? T extends Dictionary ? OmitRequiredValues : T : never; }> : ObjectType; interface TOmitRequiredValues extends Fn<{ 0: Dictionary; }> { slot: [ObjectType]; data: OmitRequiredValues; } /** * Used in filtering out the optional keys in a dictionary. * * @params ObjectType The type of the store. * @params Key The type of the key. * * @return The keys that are optional in the dictionary. * * @example * { [Key in keyof ObjectType as OptionalKeyMap]: ObjectType[Key] } */ type OptionalKeyMap = ObjectType[Key] extends Required[Key] ? never : Key; type OptionalKeys = { [Key in Keys]: IsPartial extends 1 ? Key : never; }[Keys]; interface TOptionalKeys extends Fn<{ 0: Dictionary; }> { slot: [ObjectType]; data: OptionalKeys; } type OptionalKeysDeepHelper = Elements]: IsPartial extends 1 ? ObjectType[Key] extends Dictionary ? Key | OptionalKeysDeepHelper : JoinKeys : never; }[Keys]>>; type OptionalKeysDeep = OptionalKeysDeepHelper; interface TOptionalKeysDeep extends Fn<{ 0: Dictionary; }> { slot: [ObjectType]; data: OptionalKeysDeep; } type PathsHelper = Level extends 0 ? `${Key}` : Level extends -1 ? `${Key}` | `${Key}${Delimiter}${Paths}` : `${Key}` | `${Key}${Delimiter}${Paths>}`; /** * Get all the possible paths of an object * * @param ObjectType - The object to get the paths from * @param [Delimiter = "."] - The delimiter to use to separate the keys * @param [Level = -1] - The level to stop the recursion */ type Paths = ObjectType extends Dictionary ? { [Key in Keys]: Key extends string | number ? ObjectType[Key] extends infer ObjectType ? ObjectType extends Dictionary ? PathsHelper : `${Key}` : never : never; }[Keys] : never; interface TPaths extends Fn<{ 0: string; 1: number; 2: Dictionary; }> { slot: [Delimiter, Level, ObjectType]; data: Paths; } type RequireValue = Exclude extends infer Required ? IsNever extends 1 ? undefined : Required : never; interface TRequireValue extends Fn<{ 0: unknown; }> { slot: [Value]; data: RequireValue; } /** * Used in filtering out the required keys in a dictionary. * * @params ObjectType The type of the store. * @params Key The type of the key. * * @return The keys that are required in the dictionary. * * @example * { [Key in keyof ObjectType as RequiredKeyMap]: ObjectType[Key] } */ type RequiredKeyMap = ObjectType[Key] extends Required[Key] ? Key : never; type RequiredKeys = { [Key in Keys]: IsPartial extends 1 ? never : Key; }[Keys]; interface TRequiredKeys extends Fn<{ 0: Dictionary; }> { slot: [ObjectType]; data: RequiredKeys; } type RequiredKeysDeepHelper = Elements]: IsPartial extends 0 ? ObjectType[Key] extends Dictionary ? Key | RequiredKeysDeepHelper : JoinKeys : never; }[Keys]>>; type RequiredKeysDeep = RequiredKeysDeepHelper; interface TRequiredKeysDeep extends Fn<{ 0: Dictionary; }> { slot: [ObjectType]; data: RequiredKeysDeep; } type ToEntries = UnionToTuple<{ [Key in keyof ObjectType]: [Key, ObjectType[Key]]; }[keyof ObjectType]>; interface TToEntries extends Fn<{ 0: Dictionary; }> { slot: [ObjectType]; data: ToEntries; } type ValuesHelper = LastOfUnion extends infer Key ? [Key] extends [never] ? Values : Key extends keyof ObjectType ? ValuesHelper, [ObjectType[Key], ...Values]> : never : Values; type Values = ValuesHelper; interface TValues extends Fn<{ 0: Dictionary; }> { slot: [ObjectType]; data: Values; } type AnchorStructure = [first: List, ...rest: Rest]; type AnchorHelper = List extends AnchorStructure ? AnchorHelper]> : Result; type Anchor = List extends [ infer Shank extends unknown, ...infer Rest extends unknown[] ] ? AnchorHelper, Shank> : List; interface TAnchor extends Fn<{ 0: unknown[]; }> { slot: [List]; data: Anchor; } type ArrayOfHelper = Result["length"] extends Length ? Result : ArrayOfHelper; type ArrayOf = ArrayOfHelper; interface TArrayOf extends Fn<{ 0: number; 1: unknown; }> { slot: [Length, Element]; data: ArrayOf; } type CircleStructure = [...circle: List]; type Circle = Size extends Size ? Result : Circle, [...Result, List]>; interface TCircle extends Fn<{ 0: unknown; }> { slot: [List]; data: Circle; } type Concat = [ ...Left, ...Right ]; interface TConcat extends Fn<{ 0: unknown[]; 1: unknown[]; }> { slot: [Right, Left]; data: Concat; } type Count = List extends [] ? 0 : List extends [infer Head, ...infer Rest] ? IsExact extends 1 ? Add$1<1, Count> : Count : 0; interface TCount extends Fn<{ 0: unknown; 1: unknown[]; }> { slot: [Value, List]; data: Count; } type Drop = [ ...SliceTo, ...SliceFrom> ]; interface TDrop extends Fn<{ 0: unknown; 1: unknown[]; }> { slot: [Index, List]; data: Drop; } type Elements = List[number]; interface TElements extends Fn<{ 0: unknown[]; }> { slot: [List]; data: Elements; } type Entries = UnionToTuple<{ [Key in Exclude]: [ParseInt, List[Key]]; }[Exclude]> extends infer Result extends unknown[][] ? Result : never; interface TEntries extends Fn<{ 0: unknown[]; }> { slot: [List]; data: Entries; } type Every[]> = List extends [] ? 1 : List extends [ infer Element extends Fn.Arguments, ...infer Rest extends Fn.Arguments[] ] ? Apply extends 1 ? Every : 0 : 0; interface TEvery[] | void = void> extends Fn<{ 0: Fn; 1: Fn.Arguments[]; }> { slot: [Callback, List]; data: Every; } type Expand = List extends [ infer Head, ...infer Tail ] ? Head extends unknown[] ? [Expand, ...Expand] : [Head, ...Expand] : []; interface TExpand extends Fn<{ 0: unknown[]; }> { slot: [List]; data: Expand; } type Filter[]> = List extends [ infer Element extends Fn.Arguments, ...infer Rest extends Fn.Arguments[] ] ? Apply extends 1 ? [Element, ...Filter] : Filter : []; interface TFilter | void = void> extends Fn<{ 0: Fn; 1: Fn.Arguments; }> { slot: [Callback, List]; data: Filter; } type InfiniteFlat = List extends [infer Head extends unknown[], ...infer Rest] ? InfiniteFlat> : List extends [infer Head, ...infer Rest] ? InfiniteFlat> : Result; type FiniteFlat = Depth extends 0 ? List : List extends [infer Head, ...infer Rest] ? Head extends unknown[] ? Concat>, FiniteFlat> : Unshift, Head> : List; type Flat = Depth extends -1 ? InfiniteFlat : FiniteFlat; interface TFlat extends Fn<{ 0: number; 1: unknown[]; }> { slot: [Depth, List]; data: Flat; } type Flip = [Pair[1], Pair[0]]; interface TFlip extends Fn<{ 0: unknown; 1: unknown; }> { slot: [Pair]; data: Flip; } type Head$1 = List extends [ ...infer Head extends List[number][], unknown ] ? Head : never; interface THead extends Fn<{ 0: unknown[]; }> { slot: [List]; data: Head$1; } type Includes = List extends [] ? 0 : List extends [infer Head, ...infer Rest] ? IsExact extends 1 ? 1 : Includes : 0; interface TIncludes extends Fn<{ 0: unknown; 1: unknown[]; }> { slot: [Element, List]; data: Includes; } type Indices = Exclude extends `${infer Index extends number}` ? Result extends "Tuple" ? UnionToTuple : Index : never; interface TIndices extends Fn<{ 0: "Tuple" | "Union"; 1: unknown[]; }> { slot: [Result, List]; data: Indices; } type Insert = [...SliceTo, Value, ...SliceFrom]; interface TInsert extends Fn<{ 0: number; 1: unknown; 2: unknown[]; }> { slot: [Index, Value, List]; data: Insert; } type Join$1 = List extends [infer Head, ...infer Rest] ? Rest extends [] ? Head : `${Stringify}${Separator}${Join$1}` : ""; interface TJoin extends Fn<{ 0: string; 1: unknown[]; }> { slot: [Separator, List]; data: Join$1; } type LocateHelper = `${Index}` extends `-${infer Index extends number}` ? Subtract$1, Index> extends infer Index ? Index extends number ? GreaterThanOrEqual extends 1 ? Index : never : never : never : Indices extends infer Keys ? Index extends Keys ? Index : never : never; type Locate = List extends unknown[] ? LocateHelper : List extends number ? LocateHelper, Index> : never; interface TLocate extends Fn<{ 0: number; 1: unknown[] | number; }> { slot: [Index, List]; data: Locate; } type Map$1[]> = List extends [ infer Element extends Fn.Arguments, ...infer Rest extends Fn.Arguments[] ] ? [Apply, ...Map$1] : []; interface TMap[] | void = void> extends Fn<{ 0: Fn; 1: Fn.Arguments[]; }> { slot: [Callback, List]; data: Map$1; } type PermutationHelper = Size extends Size ? Reduce : PermutationHelper, [...Result, Anchor]>; type Permutation = Size extends 1 ? Reduce<[[List]]> : PermutationHelper; interface TPermutation extends Fn<{ 0: unknown[]; }> { slot: [List]; data: Permutation; } type PivotHelper = Size extends Size ? [...Result, Insert, Value>] : PivotHelper, Value>]>; type Pivot = Locate extends infer Index ? Index extends number ? PivotHelper, Retrieve> : never : never; interface TPivot extends Fn<{ 0: unknown; 1: unknown[]; }> { slot: [Head, List]; data: Pivot; } type Pop = List extends [ ...unknown[], infer Element extends List[number] ] ? Element : never; interface TPop extends Fn<{ 0: unknown[]; }> { slot: [List]; data: Pop; } type Push = [...List, Element]; interface TPush extends Fn<{ 0: unknown; 1: unknown[]; }> { slot: [Element, List]; data: Push; } type ChunkComponent, End>, Tail extends number = Min, End>> = [head: Head, tail: Tail]; type InferChunkParts = [ head: Head, tail: Tail ]; type TailNumberArray = [ Head, ...Rest ]; type EnumerateHelper> = Start extends End ? Result : EnumerateHelper>; type Enumerate, Increment extends number = Min, Next extends number = Add$1, LastRow extends number[] = EnumerateHelper> = Start extends End ? Result : Enumerate>; type GenerateChunks, Width extends number = Length, ChunkSize extends number = Ceil>, List extends unknown[] = EnumerateHelper<0, Width>> = { [Index in keyof List]: List[Index] extends number ? Multiply$1 extends InferNumber ? ChunkComponent extends InferChunkParts ? Enumerate : never : never : never; }; type FlatChunk = List extends TailNumberArray ? FlatChunk> : Result; type Range = GenerateChunks extends InferArray ? FlatChunk : never; interface TRange extends Fn<{ 0: number; 1: number; }> { slot: [From, To]; data: Range; } type Reduce = { [K in Indices]: List[K]; }; interface TReduce extends Fn<{ 0: unknown[]; }> { slot: [List]; data: Reduce; } type Reject = List extends [ infer Head, ...infer Rest ] ? [Head] extends [Element] ? Reject : [Head, ...Reject] : []; interface TReject extends Fn<{ 0: unknown; 1: unknown[]; }> { slot: [Element, List]; data: Reject; } type RetrieveHelper = List extends { [K in Index]: infer Head; } ? Head : never; type Retrieve = Locate extends infer Position ? Position extends number ? RetrieveHelper : never : never; interface TRetrieve extends Fn<{ 0: number; 1: unknown; }> { slot: [Index, List]; data: Retrieve; } type Reverse = List extends [ infer Head, ...infer Rest ] ? [...Reverse, Head] : []; interface TReverse extends Fn<{ 0: unknown[]; }> { slot: [List]; data: Reverse; } type RotateLeftHelper = IsNever extends 0 ? Retrieve extends infer Element ? IsNever extends 1 ? List : Push, SliceFrom>>, Retrieve> : never : List; type RotateLeft = RotateLeftHelper>; interface TRotateLeft extends Fn<{ 0: unknown; 1: unknown[]; }> { slot: [Pivot, List]; data: RotateLeft; } type RotateRight = List extends [...infer Rest extends unknown[], infer Tail extends unknown] ? [[Addendum] extends [never] ? Tail : Addendum, ...Rest] : never; interface TRotateRight extends Fn<{ 0: unknown; 1: unknown[]; }> { slot: [Addendum, List]; data: RotateRight; } type Shift = List extends [ infer Element extends List[number], ...unknown[] ] ? Element : never; interface TShift extends Fn<{ 0: unknown[]; }> { slot: [List]; data: Shift; } type ShuffleStructure = [ head: Head, ...rest: Rest ]; type ShuffleHelper = Size extends Size ? Result : List extends AnchorStructure ? ShuffleHelper>]> : Result; type Shuffle = List extends ShuffleStructure ? Circle extends CircleStructure ? Size extends 0 ? [List] : ShuffleHelper : never : []; interface TShuffle extends Fn<{ 0: unknown[]; }> { slot: [List]; data: Shuffle; } type Size = List["length"]; interface TSize extends Fn<{ 0: unknown[]; }> { slot: [List]; data: Size; } type Slice> = List extends [infer First, ...infer Rest] ? Start extends 0 ? End extends 0 ? [] : [First, ...Slice>] : Slice, Subtract$1> : []; interface TSlice extends Fn<{ 0: number; 1: number; 2: unknown[]; }> { slot: [Start, End, List]; data: Slice; } type SliceFromHelper = List extends [...ArrayOf, ...infer Rest] ? Rest : never; type SliceFrom = GreaterThan> extends 1 ? SliceFromHelper> : LessThan extends 1 ? SliceFromHelper : SliceFromHelper; interface TSliceFrom extends Fn<{ 0: number; 1: unknown[]; }> { slot: [Start, List]; data: SliceFrom; } type SliceToHelper = List extends [ ...infer Rest, ...ArrayOf, End>> ] ? Rest : never; type SliceTo> = GreaterThan> extends 1 ? SliceToHelper> : LessThan extends 1 ? [] : SliceToHelper; interface TSliceTo extends Fn<{ 0: number; 1: unknown[]; }> { slot: [To, List]; data: SliceTo; } type Some[]> = List extends [] ? 0 : List extends [ infer Element extends Fn.Arguments, ...infer Rest extends Fn.Arguments[] ] ? Apply extends 1 ? 1 : Some : 0; interface TSome | void = void> extends Fn<{ 0: Fn; 1: Fn.Arguments; }> { slot: [Callback, List]; data: Some; } type SortOperation, Rest extends Fn.Signature[]> = [first: Head, ...rest: Rest]; type SortHelper, List extends Fn.Signature[]> = List extends SortOperation ? Apply extends 1 ? Unshift, Head> : Unshift : [Check]; type Sort[]> = List extends SortOperation ? SortHelper> : List; interface TSort[] | void = void> extends Fn<{ 0: Fn; 1: Fn.Signature[]; }> { slot: [Callback, List]; data: Sort; } type Tail = List extends [ unknown, ...infer Tail extends List[number][] ] ? Tail : never; interface TTail extends Fn<{ 0: unknown[]; }> { slot: [List]; data: Tail; } type TrimHead = List extends [ infer Head, ...infer Rest ] ? [Head] extends [Element] ? TrimHead : List : List; interface TTrimHead extends Fn<{ 0: unknown; 1: unknown[]; }> { slot: [Element, List]; data: TrimHead; } type TrimTail = List extends [ ...infer Rest, infer Tail ] ? [Tail] extends [Element] ? TrimTail : List : List; interface TTrimTail extends Fn<{ 0: unknown; 1: unknown[]; }> { slot: [Element, List]; data: TrimTail; } type Unshift = [Element, ...List]; interface TUnshift extends Fn<{ 0: unknown; 1: unknown[]; }> { slot: [Element, List]; data: Unshift; } type ValueAt = Locate extends infer Position ? Position extends number ? List[Position] : never : never; interface TValueAt extends Fn<{ 0: number; 1: unknown[]; }> { slot: [Index, List]; data: ValueAt; } type WithHelper = [ ...SliceTo, Element extends Fn ? Apply : Element, ...SliceFrom> ]; type With = Locate extends infer Position ? IsNever extends 1 ? List : Position extends number ? WithHelper : never : never; interface TWith extends Fn<{ 0: number; 1: unknown | Fn; 2: unknown[]; }> { slot: [Index, Element, List]; data: With; } type Zip = Left extends [infer HeadA, ...infer RestA] ? Right extends [infer HeadB, ...infer RestB] ? [[HeadA, HeadB], ...Zip] : [] : []; interface TZip extends Fn<{ 0: unknown[]; 1: unknown[]; }> { slot: [Left, Right]; data: Zip; } type Digit$1 = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"; type Float = Pow<10, Decimal> extends infer Divisor extends number ? Divide$1 : never; type Int = `${Input}` extends `${infer R extends number}.${string}` ? R : Input; type ParseIntHelper = Input extends `${infer Significand extends number}e-${infer Exponential extends number}` ? Float : Input extends `${infer Head}${infer Input}` ? Head extends Digit$1 ? ParseIntHelper : Every, [ IsSubtype, IsSubtype, IsSubtype ]> extends 1 ? ParseIntHelper : Head extends "." ? ParseIntHelper, Sign> : ParseIntHelper : `${Sign}${TrimStart}` extends `${infer Input extends number}` ? Decimal extends 0 ? Input : Float, Decimal>> : Input; type ParseInt = Input extends number ? Output extends "Float" ? Input : Int : Input extends string ? ParseIntHelper extends infer Value extends number ? Output extends "Float" ? Value : Int : 0 : Input extends true | symbol ? 1 : Input extends false | null | undefined ? 0 : Input; interface TParseInt extends Fn<{ 0: "Signed" | "Unsigned"; 1: "Integer" | "Float"; 2: string | number | boolean; }> { slot: [Outlook, Output, Input]; data: ParseInt; } /** * Returns the absolute value of a number. * * @param Number - The number to get the absolute value of. * @returns The absolute value of the number. * * @example * ```ts * import type { Absolute } from "@ibnlanre/types"; * * type Test = Absolute<-5>; * // ^? 5 * ``` */ type Absolute$1 = Math.Absolute; /** * Returns the absolute value of a number. * * @param Number - The number to get the absolute value of. * @returns The absolute value of the number. * * @examples * ```ts * import type { Apply, TAbsolute } from "@ibnlanre/types"; * * type Test = Apply; * // ^? 5 * ``` */ interface TAbsolute extends Fn<{ 0: number; }> { slot: [Number]; data: Absolute$1; } /** * Adds two numbers. * * @param Augend - The number to add to. * @param Addend - The number to add. * * @returns The sum of the two numbers. */ type Add$1 = Math.Add; /** * Adds two numbers. * * @param Addend - The number to add. * @param Augend - The number to add to. * * @returns The sum of the two numbers. * * @example * type Test = Call>; // 10 * type Test = Apply, [4]>; // 10 */ interface TAdd extends Fn<{ 0: number; 1: number; }> { slot: [Addend, Augend]; data: Add$1; } type Addition$1 = Math.Addition; interface TAddition extends Fn<{ 0: number[]; }> { slot: [Numbers]; data: Addition$1; } type CeilHelper, IntegerPart extends number = Math.Subtract> = DecimalPart extends 0 ? Value : `${Value}` extends `-${number}` ? IntegerPart : Math.Add; type Ceil = CeilHelper; interface TCeil extends Fn<{ 0: number; }> { slot: [Value]; data: Ceil; } type Decrement = Math.Subtract; interface TDecrement extends Fn<{ 0: number; }> { slot: [Number]; data: Decrement; } type EuclideanDivision = Math.Multiply, Floor$1>>>; type FlooredDivision = Floor$1>; type TruncatingDivision = Trunc>; type TypeOptions = "Euclidean" | "Truncating" | "Floored" | "Integer"; type Divide$1 = Type extends "Integer" ? Math.Divide : Type extends "Euclidean" ? EuclideanDivision : Type extends "Truncating" ? TruncatingDivision : Type extends "Floored" ? FlooredDivision : never; interface TDivide extends Fn<{ 0: number; 1: TypeOptions; 2: number; }> { slot: [Divisor, Type, Dividend]; data: Divide$1; } type Division$1 = Math.Division; interface TDivision extends Fn<{ 0: number[]; }> { slot: [Numbers]; data: Division$1; } type Floor$1 = Math.Floor; interface TFloor extends Fn<{ 0: number; }> { slot: [Value]; data: Floor$1; } type Increment = Math.Add; interface TIncrement extends Fn<{ 0: number; }> { slot: [Number]; data: Increment; } type EuclideanMod = Math.Absolute extends infer R extends number ? Math.Mod, R>, R> : never; type FlooredMod = Math.Mod, Divisor>, Divisor>; /** * @description * - It is no different from the Floored Modulo operator, except that it uses a different approach. */ type KnuthianMod = Math.Subtract>, Divisor>>; type TruncatingMod = Math.Mod; /** * Returns the remainder of the division of `Dividend` by `Divisor`. * * @description * - If both dividend and divisor are positive, then all three definitions agree. * - If the dividend is positive and the divisor is negative, then the truncating and Euclidean definitions agree. * - If the dividend is negative and the divisor is positive, then the flooring and Euclidean definitions agree. * - If both dividend and divisor are negative, then the truncating and flooring definitions agree. */ type Modulo = Type extends "Euclidean" ? EuclideanMod : Type extends "Knuthian" ? KnuthianMod : Type extends "Truncating" ? TruncatingMod : Type extends "Floored" ? FlooredMod : never; interface TModulo extends Fn<{ 0: number; 1: "Euclidean" | "Knuthian" | "Truncating" | "Floored"; 2: number; }> { slot: [Divisor, Type, Dividend]; data: Modulo; } type Multiplication$1 = Math.Multiplication; interface TMultiplication extends Fn<{ 0: number[]; }> { slot: [Numbers]; data: Multiplication$1; } type Multiply$1 = Math.Multiply; interface TMultiply extends Fn<{ 0: number; 1: number; }> { slot: [Multiplier, Multiplicand]; data: Multiply$1; } type Negate$1 = Math.Negate; interface TNegate extends Fn<{ 0: number; }> { slot: [Predicate]; data: Negate$1; } type NoNumberHelper = Value extends `${infer Slice}${infer Substring}` ? `${Slice}` extends `${number}` ? NoNumberHelper : NoNumberHelper : Result; type NoNumber = NoNumberHelper; interface TNoNumber extends Fn<{ 0: string; }> { slot: [Value]; data: NoNumber; } type Suffixes = ["th", "st", "nd", "rd"]; type Coordinate>, NotNegative extends Bit = IsPositive$1> = And extends 1 ? Retrieve : Retrieve; type OrdinalHelper, 100>, UnitsDigit extends number = GreaterThan extends 1 ? Math.Mod, 10> : TensDigit> = Stringify extends infer Value ? Value extends string ? Includes> extends 1 ? Append> : Includes> extends 1 ? Append> : Append> : never : never; type Ordinal = OrdinalHelper; interface TOrdinal extends Fn<{ 0: number; }> { slot: [Value]; data: Ordinal; } type Pow = Math.Power; interface TPow extends Fn<{ 0: number; 1: number; }> { slot: [Exponent, Base]; data: Pow; } type Round$1 = Math.Round; interface TRound extends Fn<{ 0: "AwayFromZero" | "ToEven"; 1: number; }> { slot: [MidPointRounding, Value]; data: Round$1; } /** * Signum representation of a number. * * @description * The signum function of a number is a mathematical function that extracts the sign of a real number. * * @summary * - If the number is negative, the signum is -1. * - If the number is positive, the signum is 1. * - If the number is zero, the signum is 0. * * @param Number The number to get the signum of. * @returns The signum of the number. */ type Sign$1 = Math.Signum; interface TSign extends Fn<{ 0: number; }> { slot: [Value]; data: Sign$1; } type SquareRoot$1 = Math.SquareRoot; interface TSquareRoot extends Fn<{ 0: number; }> { slot: [Number]; data: SquareRoot$1; } type Subtract$1 = Math.Subtract; interface TSubtract extends Fn<{ 0: number; 1: number; }> { slot: [Right, Left]; data: Subtract$1; } type Subtraction$1 = Math.Subtraction; interface TSubtraction extends Fn<{ 0: number[]; }> { slot: [Numbers]; data: Subtraction$1; } type ToFixed$1 = Math.ToFixed; interface TToFixed extends Fn<{ 0: number; 1: number; }> { slot: [Digits, Value]; data: ToFixed$1; } type Trunc = Math.Subtract>; interface TTrunc extends Fn<{ 0: number; }> { slot: [Value]; data: Trunc; } type BitMap = { 0: False; 1: True; }; type FourBitRowVector = [Bit, Bit, Bit, Bit]; type FourBitSquareMatrix = BitMap, BitMap>; type Bit = 0 | 1; declare namespace Bit { export type { BitMap, FourBitRowVector, FourBitSquareMatrix }; } /** * Negative digit. */ type Negative = Negate$1; /** * @category Digit * @namespace Negative * @public */ declare namespace Negative { type String = `${Negative}`; } /** * Serialized digits of numbers. */ type Serialized = `${number}`; /** * Signed digit. */ type Signed = Digit | Negative; /** * @category Digit * @namespace Signed * @public */ declare namespace Signed { type String = `${Signed}`; } /** * Stringified digit. */ type String = `${Digit}`; /** * Tuple of digits. */ type Tuple = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; /** * @category Digit * @namespace Tuple * @public */ declare namespace Tuple { type Negative = UnionToTuple; namespace Negative { type String = UnionToTuple; } type Signed = UnionToTuple; namespace Signed { type String = UnionToTuple; } } type Digit = Tuple[number]; declare namespace Digit { export type { String, Serialized, Negative, Signed, Tuple }; } /** * Checks if a number is even. * * @param Value The number to check if it is even. * * @returns * `1` if the number is even, `0` otherwise. */ type IsEven$1 = Math.IsEven; /** * Checks if a number is even. * * @param Value The number to check if it is even. * * @returns * `1` if the number is even, `0` otherwise. */ interface TIsEven extends Fn<{ 0: number; }> { slot: [Value]; data: IsEven$1; } type IsInteger$1 = Value extends number ? Math.IsInteger : 0; interface TIsInteger extends Fn<{ 0: unknown; }> { slot: [Value]; data: IsInteger$1; } type IsNegative$1 = Math.IsNegative; interface TIsNegative extends Fn<{ 0: number; }> { slot: [Value]; data: IsNegative$1; } type IsNonInteger$1 = Value extends number ? Math.IsNonInteger : 0; interface TIsNonInteger extends Fn<{ 0: unknown; }> { slot: [Value]; data: IsNonInteger$1; } type IsOdd$1 = Math.IsOdd; interface TIsOdd extends Fn<{ 0: number; }> { slot: [Value]; data: IsOdd$1; } type IsPositive$1 = Math.IsPositive; interface TIsPositive extends Fn<{ 0: number; }> { slot: [Value]; data: IsPositive$1; } type Clamp$1 = Math.Clamp; type Max = Math.Bigger; type Maximum$1 = Math.Maximum; type Min = Math.Smaller; type Minimum$1 = Math.Minimum; type Absolute = Number extends Number ? `${Number}` extends `-${infer Unsigned extends number}` ? Unsigned : Number : never; type RowShift$1 = TableRow extends [infer Head extends Digit, ...infer Rest extends Digit[]] ? [...Rest, [Addendum] extends [never] ? Head : Addendum] : never; type TableShift = Table extends [infer Head extends Digit[], ...infer Tail extends Digit[][]] ? [RowShift$1, ...TableShift] : []; type MakeBinaryTable
= [Table, TableShift]; type LastRow$1
= Table extends [ ...Digit[][], infer LastRow ] ? LastRow : never; type MakeTableHelper$1
> = Size
extends Size ? Table : MakeTableHelper$1<[...Table, RowShift$1], Addendum>; type MakeTable$1 = MakeTableHelper$1<[Row], Addendum>; type FirstRow$4 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; type AddCarryDigitTable = MakeBinaryTable, 1>; type AddCarryDigit = AddCarryDigitTable[Carry][Left][Right]; type FirstRow$3 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; type AddDigitTable = MakeBinaryTable>; type AddDigit = AddDigitTable[Carry][Left][Right]; type HeadDigitArray = [ ...Rest, Tail ]; type AddDigitsHelper = NormalisedLeft extends HeadDigitArray ? NormalisedRight extends HeadDigitArray ? AddDigitsHelper, [ AddDigit, ...Result ]> : AddDigitsHelper, [ AddDigit, ...Result ]> : NormalisedRight extends HeadDigitArray ? AddDigitsHelper<[ ], NormalisedRightChunk, AddCarryDigit<0, LastRightDigit, Carry>, [ AddDigit<0, LastRightDigit, Carry>, ...Result ]> : Carry extends 1 ? [1, ...Result] : Result; type AddDigits = AddDigitsHelper; type NormaliseFractionalZeros = TrimTail; type NormaliseIntegerZeros = TrimHead extends infer Trimmed extends Digit[] ? Trimmed extends [] ? [0] : Trimmed : never; type UnsignedFloat = [integers: IntegerDigits, fraction: FractionalDigits]; type MakeUnsignedFloat = UnsignedFloat, NormaliseFractionalZeros>; type DigitsToUnsignedFloat = Size extends DecimalPlaces ? MakeUnsignedFloat : Normalised extends HeadDigitArray ? DigitsToUnsignedFloat> : never; type CompareLengths = Size extends Size ? 0 : Size extends 0 ? -1 : Size extends 0 ? 1 : CompareLengths, Head$1>; type NumberPair = [ left: Left, right: Right ]; type PadDirection = "L" | "R"; type PadEnd, Value extends Digit = 0> = Size extends Length ? List : PadEnd<[...List, Value], Length, Value>; type PadStart, Value extends Digit = 0> = Size extends Length ? List : PadStart<[Value, ...List], Length, Value>; type Pad = { L: PadStart; R: PadEnd; }[Direction]; type NormaliseLengths = CompareLengths extends 0 | -1 ? NumberPair, Direction, Value>, Right> : NumberPair, Direction, Value>>; type NormaliseFractionalParts = NormaliseLengths; type NormaliseIntegerParts = NormaliseLengths; type Normalise = NormaliseIntegerParts, Shift> extends NumberPair ? NormaliseFractionalParts, Pop> extends NumberPair ? [ normalised_left: Concat, normalised_right: Concat, decimal_places: Size ] : never : never; type AddUnsignedFloats = Normalise extends [ ...NumberPair, infer DecimalPlaces extends number ] ? DigitsToUnsignedFloat, DecimalPlaces> : never; type Sign = "+" | "-"; type SignMap = { "-": Negative; "+": Positive; }; type FlipSign = SignMap<"+", "-">[S]; type SignedFloat = [sign: TSign, float: TNumber]; type NegateSignedFloat = SignedDigits extends SignedFloat ? SignedFloat, UnsignedFloat> : never; type ComparisonResult = -1 | 0 | 1; type FirstRow$2 = [1, 1, 1, 1, 1, 1, 1, 1, 1, 0]; type LastRow
= Table extends [ ...ComparisonResult[][], infer LastRow ] ? LastRow : never; type FlipTable$1 = T extends [ ...infer Head extends ComparisonResult[][], infer Tail extends ComparisonResult[] ] ? [Tail, ...FlipTable$1] : []; type MakeTableHelper
> = Size
extends Size ? Table : MakeTableHelper<[...Table, RowShift], Addendum>; type RowShift = TableRow extends [ infer Head extends ComparisonResult, ...infer Rest extends ComparisonResult[] ] ? [...Rest, [Addendum] extends [never] ? Head : Addendum] : never; type MakeTable = MakeTableHelper<[Row], Addendum>; type CompareDigitTable = FlipTable$1; type CompareDigits = CompareDigitTable[Left][Right]; type TailDigitArray = [Head, ...Rest]; type CompareMagnitudes = NormalisedLeft extends NormalisedRight ? 0 : [NormalisedLeft, NormalisedRight] extends [ TailDigitArray, TailDigitArray ] ? CompareDigits extends 0 ? CompareMagnitudes : CompareDigits : never; type CompareFloatMagnitudes = Normalise extends [ ...NumberPair, number ] ? CompareMagnitudes : never; type UnsignedFloatZero = MakeUnsignedFloat<[0]>; type SignedFloatZero = SignedFloat<"+", UnsignedFloatZero>; type FlipTable = T extends [ ...infer Head extends Digit[][], infer Tail extends Digit[] ] ? [Tail, ...FlipTable] : []; type FirstRow$1 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; type SubtractCarryDigitTable = MakeBinaryTable>, 1>; type SubtractCarryDigit = SubtractCarryDigitTable[Carry][Left][Right]; type FirstRow = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]; type SubtractDigitTable = MakeBinaryTable>>; type SubtractDigit = SubtractDigitTable[Carry][Left][Right]; type SubtractDigits = NormalisedLeft extends HeadDigitArray ? NormalisedRight extends HeadDigitArray ? SubtractDigits, [ SubtractDigit, ...Result ]> : SubtractDigits, [ SubtractDigit, ...Result ]> : NormalisedRight extends HeadDigitArray ? SubtractDigits<[ ], NormalisedRightChunk, SubtractCarryDigit<0, LastRightDigit, Carry>, [ SubtractDigit<0, LastRightDigit, Carry>, ...Result ]> : Carry extends 1 ? [...Result, 9] : Result; type SubtractUnsignedFloatsHelper = Normalise extends [ ...NumberPair, infer TDecimalPlaces extends number ] ? DigitsToUnsignedFloat, TDecimalPlaces> : never; type SubtractUnsignedFloats = CompareFloatMagnitudes extends 1 ? SignedFloat<"+", SubtractUnsignedFloatsHelper> : CompareFloatMagnitudes extends 0 ? SignedFloatZero : SignedFloat<"-", SubtractUnsignedFloatsHelper>; type AddSignedFloats = LeftSignedDigits extends SignedFloat ? RightSignedDigits extends SignedFloat ? LeftSign extends "-" ? RightSign extends "-" ? SignedFloat<"-", AddUnsignedFloats> : NegateSignedFloat> : RightSign extends "-" ? SubtractUnsignedFloats : SignedFloat<"+", AddUnsignedFloats> : never : never; type EmptyStringAsZero = Input extends "" ? "0" : Input; /** * Tuple of digits representing the components of a number. */ type NumberComponents = [ sign: Integers | Fraction extends "" ? "+" : TSign, integers: Integers, fraction: Fraction ]; type SplitComponentParts = Template extends `${infer Integer}.${infer Fraction}` ? NumberComponents : NumberComponents, "">; type ScientificNotationAsDecimal = Template extends `${infer Significand extends number}e-${infer Exponent extends number}` ? SplitComponentParts extends NumberComponents ? ArrayOf extends [ infer TIntZero extends 0, ...infer TFractionZeros extends 0[] ] ? Join$1<[TIntZero, ".", ...TFractionZeros, Integer, Fraction]> : never : never : Template; type SeparateSign = Input extends `${infer TSign extends Sign}${infer Number}` ? [sign: TSign, float: Number] : [sign: "+", float: Input]; type TrimLeadingZeros = Input extends `0${infer Rest}` ? TrimLeadingZeros : Input; type TrimTrailingZeros = Input extends `${infer Rest}0` ? TrimTrailingZeros : Input; type DecomposeNumber = SeparateSign<`${Number}`> extends [ infer TSign extends Sign, infer TValue extends string ] ? SplitComponentParts> extends NumberComponents ? NumberComponents>, TrimTrailingZeros> : never : never; type SplitIntoDigits = Number extends "" ? [] : Number extends `${infer Head extends Digit}${infer Rest}` ? [Head, ...SplitIntoDigits] : never; type ToSignedFloat = DecomposeNumber extends NumberComponents ? SignedFloat, SplitIntoDigits>> : never; type SplitAndNormalise = Normalise>, Pop>>; type CompareNumberMagnitudes = SplitAndNormalise extends [ ...NumberPair, number ] ? CompareMagnitudes : never; type IsPositive = number extends Number ? Bit : Number extends Number ? Sign$1 extends 1 ? 1 : 0 : never; type CompareNumbers = IsPositive extends 1 ? IsPositive extends 1 ? CompareNumberMagnitudes : 1 : IsPositive extends 1 ? -1 : CompareNumberMagnitudes; type FloatDigitCount = Flat extends infer Digits extends Digit[] ? Size : never; type FloatMaxDigits = 15; type ToUnsignedFloat = DecomposeNumber extends [ Sign, infer Integer extends string, infer Float extends string ] ? UnsignedFloat, SplitIntoDigits> : never; type FloatMaxDigitsAsUnsignedFloat = ToUnsignedFloat; type MakeSignedFloat = MakeUnsignedFloat, Pop> extends infer ActualUnsignedFloat extends UnsignedFloat ? ActualUnsignedFloat extends UnsignedFloatZero ? SignedFloatZero : SignedFloat : never; type AddUnsignedIntegers = NormaliseIntegerParts extends NumberPair ? AddDigits : never; type RoundFractionalDigits = Floats extends HeadDigitArray ? Size extends TargetFractionLength ? TargetFractionLength extends 0 ? [RoundingMap[Head]] : AddUnsignedIntegers : RoundFractionalDigits : never; type RoundingCarryMap = SignMap<[ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 ], [ 0, 0, 0, 0, 0, 1, 1, 1, 1, 1 ]>; type SmallEnoughForScientificNotation = TFractionalDigits extends [0, 0, 0, 0, 0, 0, ...Digit[]] ? 1 : 0; type SignToNumber = TSign extends "+" ? "" : TSign; type MakeSignedNumber = S extends "0" ? 0 : Template<[SignToNumber, S]> extends `${infer Number extends number}` ? Number : never; type Join = List extends [ infer Head extends Serializable, ...infer Rest extends Serializable[] ] ? Join : Delimiter; type ToDecimalString = FractionalDigits extends [] ? Join : `${Join}.${Join}`; type SplitLeadingElements = List extends [infer Head extends Digit, ...infer Rest extends Digit[]] ? [Head] extends [Element] ? SplitLeadingElements : [Last, List] : [Last, []]; type ToSmallFractionString = SmallEnoughForScientificNotation extends 1 ? SplitLeadingElements extends [ infer FractionalZeros extends 0[], infer Significand extends Digit[] ] ? Significand extends TailDigitArray ? Size<[0, ...FractionalZeros]> extends infer Exponent extends number ? `${SignedFloatToNumber>>}e-${Exponent}` : never : never : never : ToDecimalString<[0], FractionalDigits>; type UnsignedFloatToNumber = UnsignedNormalisedDigits extends UnsignedFloat ? IntegerDigits extends [0] ? MakeSignedNumber, TSign> : MakeSignedNumber, TSign> : never; type UnsignedNumbers = Unsigned; type RoundFloat = SmallEnoughForScientificNotation extends 1 ? SignedNormalisedDigits : SignedNormalisedDigits extends SignedFloat ? CompareNumbers, FloatMaxDigits> extends -1 | 0 ? SignedNormalisedDigits : SubtractUnsignedFloats>>> extends SignedFloat ? TargetFractionLengthSign extends "-" ? SignedNormalisedDigits : RoundFractionalDigits, RoundingCarryMap[TSign], UnsignedFloatToNumber> extends UnsignedNumbers ? MakeSignedFloat, RoundedFraction>> : never : never : never; type SignedFloatToNumber = RoundFloat extends SignedFloat ? UnsignedFloatToNumber : never; type AddNumbers = SignedFloatToNumber, ToSignedFloat>>; type Add = AnyExtend<[ Left, Right ], never> extends 1 ? never : Left extends 0 ? Right : Right extends 0 ? Left : number extends Left | Right ? number : AddNumbers; type OperationResult = [carry: Carry, result: Result]; type AddDigitsOperation = OperationResult, AddDigit>; type AddThrough = { [Index in keyof List]: List[Index] extends number ? Add : never; }; type Addition = Numbers extends [ infer Head extends number, ...infer Rest extends number[] ] ? Add> : 0; type Compare$1 = AnyExtend<[ Left, Right ], never> extends 1 ? never : number extends Left | Right ? ComparisonResult : Left extends Left ? Right extends Right ? CompareNumbers : never : never; type GreaterThan$1 = Compare$1 extends -1 ? 0 : Compare$1 extends 0 ? 0 : 1; type Bigger = number extends Left | Right ? number : Left extends Right ? Left : Right extends Left ? Right : GreaterThan$1 extends 1 ? Left : Right; type Branch$1 = Comparison extends 1 ? Positive : Comparison extends 0 ? Zero : Negative; type Clamp = Branch$1, LowerBound, Branch$1, UpperBound, Value>>; type CompareIntegerMagnitudes = NormaliseIntegerParts extends NumberPair ? CompareMagnitudes : never; type MultiplyCarryDigitTable = [ [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 1, 1, 1, 1, 1 ], [ 0, 0, 0, 0, 1, 1, 1, 2, 2, 2 ], [ 0, 0, 0, 1, 1, 2, 2, 2, 3, 3 ], [ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4 ], [ 0, 0, 1, 1, 2, 3, 3, 4, 4, 5 ], [ 0, 0, 1, 2, 2, 3, 4, 4, 5, 6 ], [ 0, 0, 1, 2, 3, 4, 4, 5, 6, 7 ], [ 0, 0, 1, 2, 3, 4, 5, 6, 7, 8 ] ]; type MultiplyCarryDigit = MultiplyCarryDigitTable[Left][Right]; type MultiplyDigitTable = [ [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ], [ 0, 2, 4, 6, 8, 0, 2, 4, 6, 8 ], [ 0, 3, 6, 9, 2, 5, 8, 1, 4, 7 ], [ 0, 4, 8, 2, 6, 0, 4, 8, 2, 6 ], [ 0, 5, 0, 5, 0, 5, 0, 5, 0, 5 ], [ 0, 6, 2, 8, 4, 0, 6, 2, 8, 4 ], [ 0, 7, 4, 1, 8, 5, 2, 9, 6, 3 ], [ 0, 8, 6, 4, 2, 0, 8, 6, 4, 2 ], [ 0, 9, 8, 7, 6, 5, 4, 3, 2, 1 ] ]; type MultiplyDigit = MultiplyDigitTable[Left][Right]; type MultiplyDigitsOperation = OperationResult, MultiplyDigit>; type MultiplyRow = TableRow extends HeadDigitArray ? MultiplyDigitsOperation extends OperationResult ? AddDigitsOperation extends OperationResult ? AddDigitsOperation extends OperationResult<0, infer FinalCarryOut> ? MultiplyRow : never : never : never : CarryIn extends 0 ? FinalResult : [CarryIn, ...FinalResult]; type CrossMultiply = Right extends HeadDigitArray ? CrossMultiply, ...Shift ]>>> : NormaliseIntegerZeros; type ModResult = [ remainder: Remainder, quotient: Quotient ]; type MakeModResult = ModResult, NormaliseIntegerZeros>; type SubtractUnsignedIntegers = NormaliseIntegerParts extends NumberPair ? SubtractDigits : never; type EuclideanDivideHelper = CompareIntegerMagnitudes extends Bit ? EuclideanDivideHelper, AddUnsignedIntegers> : MakeModResult; type EuclideanDivide = EuclideanDivideHelper; type EuclideanDivideResult = ModResult; type DivideMaxDigits = 13; type LongDivideFraction = CompareNumbers, DivideMaxDigits> extends 1 ? Quotient : EuclideanDivide extends EuclideanDivideResult ? Remainder extends [0] ? Push : LongDivideFraction, Push> : never; type LongDivide = EuclideanDivide extends EuclideanDivideResult ? [...Quotient, NextQuotientDigit] extends infer NextQuotient extends Digit[] ? NumeratorTail extends TailDigitArray ? LongDivide : WithRemainder extends false ? MakeUnsignedFloat> : MakeModResult : never : never; type DivideUnsignedFloats = Normalise extends [ ...NumberPair, infer DecimalPlaces ] ? NumeratorDigits extends TailDigitArray ? [ LongDivide, DecimalPlaces ] : never : never; type MultiplySignsHelper = SignMap, SignMap<"-", "+">>; type MultiplySigns = MultiplySignsHelper[Left][Right]; type DivideSignedFloats = Numerator extends SignedFloat ? Divisor extends SignedFloat ? SignedFloat, Shift>> : never : never; type DivideNumbers = SignedFloatToNumber, ToSignedFloat>>; type Negate = Number extends 0 ? 0 : number extends Number ? number : `${Number}` extends `-${infer Number extends number}` ? Number : `-${Number}` extends `${infer Number extends number}` ? Number : never; type Divide = AnyExtend<[Numerator, Divisor], never> extends 1 ? never : Divisor extends 0 ? never : Numerator extends 0 ? 0 : Divisor extends 1 ? Numerator : number extends Numerator | Divisor ? number : Divisor extends -1 ? Negate : DivideNumbers; type LessThan$1 = GreaterThan$1; type Smaller = number extends Left | Right ? number : Left extends Right ? Left : Right extends Left ? Right : LessThan$1 extends 1 ? Left : Right; type Minimum = Numbers extends [ ...infer Rest extends number[], infer Tail extends number ] ? Rest extends [] ? Tail : Smaller, Tail> : 0; type NormaliseForCrossMultiply = Left extends UnsignedFloat ? Right extends UnsignedFloat ? [ xDigits: NormaliseIntegerZeros>, yDigits: NormaliseIntegerZeros>, decimalPlaces: AddNumbers, Size> ] : never : never; type SafeDigitsToUnsignedFloat = CompareNumbers, DecimalPlaces> extends -1 ? DigitsToUnsignedFloat, DecimalPlaces> : DigitsToUnsignedFloat; type MultiplyUnsignedFloats = NormaliseForCrossMultiply extends [ ...NumberPair, infer DecimalPlaces extends number ] ? SafeDigitsToUnsignedFloat, DecimalPlaces> : never; type MultiplySignedFloats = Left extends SignedFloat ? Right extends SignedFloat ? SignedFloat, MultiplyUnsignedFloats> : never : never; type MultiplyNumbers = SignedFloatToNumber, ToSignedFloat>>; type Multiply = AnyExtend<[ Left, Right ], never> extends 1 ? never : Left extends 0 ? 0 : Right extends 0 ? 0 : Left extends 1 ? Right : Right extends 1 ? Left : number extends Left | Right ? number : Left extends -1 ? Negate : Right extends -1 ? Negate : MultiplyNumbers; type IsEvenDigit = DigitArray extends HeadDigitArray ? LastDigit extends 0 | 2 | 4 | 6 | 8 ? 1 : 0 : never; type IsUnsignedFloatEven = Pop extends [] ? IsEvenDigit> : never; type IsEven = number extends Number ? Bit : Number extends Number ? IsUnsignedFloatEven> : never; type IsNegative = number extends Number ? Bit : Number extends Number ? Sign$1 extends -1 ? 1 : 0 : never; type SubtractSignedFloats = Left extends SignedFloat ? Right extends SignedFloat ? LeftSign extends "-" ? RightSign extends "-" ? NegateSignedFloat> : SignedFloat<"-", AddUnsignedFloats> : RightSign extends "-" ? SignedFloat<"+", AddUnsignedFloats> : SubtractUnsignedFloats : never : never; type SubtractNumbers = SignedFloatToNumber, ToSignedFloat>>; type Subtract = AnyExtend<[ Left, Right ], never> extends 1 ? never : number extends Left | Right ? number : Left extends 0 ? Negate$1 : Right extends 0 ? Left : SubtractNumbers; type NegativeExponentHelper> = Exponentiate extends InferNumber ? Divide<1, Result> : never; type ExponentiateHelper, Even extends number = Divide, Odd extends number = Divide, 2>> = Exponent extends 0 ? 1 : IsNegative extends 1 ? NegativeExponentHelper : IsEven extends 1 ? Exponentiate : Exponentiate extends InferNumber ? Multiply : never; type Exponentiate = ExponentiateHelper; type DecimalComponents = [ left: Left, right: Right ]; type HighestCommonFactor = A extends B ? A : A extends 0 ? B : B extends 0 ? A : GreaterThan$1 extends 1 ? HighestCommonFactor, B> : HighestCommonFactor>; type SimplifyHelper = `${Decimal}` extends `${infer IntegerPart}.${infer FractionalPart}` ? [ ParseInt<`${IntegerPart}${FractionalPart}`>, Power<10, Length> ] : never; type Simplify = SimplifyHelper extends DecimalComponents ? HighestCommonFactor extends InferNumber ? [Divide, Divide] : never : never; type FractionalExponent = Simplify extends DecimalComponents ? Root, Denominator> : never; type IsInteger = number extends N ? Bit : N extends N ? Template extends `${string}.${string}` ? 0 : 1 : never; type Not$1 = Number extends 0 ? 1 : 0; type IsNonInteger = Not$1>; type Power = AnyExtend<[ Base, Exponent ], never> extends 1 ? never : Exponent extends 0 ? 1 : Exponent extends 1 ? Base : Base extends 1 ? 1 : Base extends 0 ? 0 : number extends Exponent ? -1 | 1 : number extends Base | Exponent ? number : IsNonInteger extends 1 ? FractionalExponent extends InferNumber ? Result : never : Exponentiate; type BestGuess = Minimum<[ Exponentiate, 2>, Multiply ]>; type RootEstimate = Divide>, Divide>>>, Raise>; type RootDifference = Absolute>; type MaxRootIteration = 25; type RootHelper, Quotient extends number = RootEstimate, Delta extends number = RootDifference> = ToUnsignedFloat extends UnsignedFloat ? SmallEnoughForScientificNotation extends 1 ? RootHelper, "+">> : And, LessThan$1> extends 1 ? RootHelper, Quotient> : Quotient : never; type Root = RootHelper; type CubeRoot = Root; type Division = Numbers extends [ ...infer Rest extends number[], infer Tail extends number ] ? Rest extends [] ? Tail : Divide, Tail> : 1; type Equal$1 = AnyExtend<[ Left, Right ], never> extends 1 ? never : number extends Left | Right ? Bit : Left extends Right ? Right extends Left ? 1 : 0 : 0; type ModUnsignedFloats = DivideUnsignedFloats extends [ ModResult, infer DecimalPlaces extends number ] ? SafeDigitsToUnsignedFloat : never; type ModSignedFloats = Numerator extends SignedFloat ? Divisor extends SignedFloat ? SignedFloat> : never : never; type ModNumbers = SignedFloatToNumber, ToSignedFloat>>; type Mod = AnyExtend<[ Numerator, Divisor ], never> extends 1 ? never : Divisor extends 0 ? never : Numerator extends 0 ? 0 : number extends Numerator | Divisor ? number : ModNumbers; type Subtraction = Numbers extends [ ...infer Rest extends number[], infer Tail extends number ] ? Rest extends [] ? Tail : Subtract, Tail> : 1; type Floor = Value extends 0 ? 0 : Value extends number ? LessThan$1 extends 1 ? Subtraction<[Value, Mod, 1]> : Mod extends 0 ? Value : Subtract> : never; type GreaterThanOrEqual$1 = Compare$1 extends -1 ? 0 : 1; type IsOdd = Not$1>; type LeastCommonMultiple = Divide, HighestCommonFactor>; type LessThanOrEqual$1 = GreaterThanOrEqual$1; type MakeMultiplicationRow = TableRow["length"] extends 10 ? TableRow : LastOfUnion extends infer Previous extends number ? MakeMultiplicationRow]> : never; type OperationResultFromNumber = `${Number}` extends `${infer Carry extends Digit}${infer Result extends Digit}` ? OperationResult : `${Number}` extends `${infer Result extends Digit}` ? OperationResult<0, Result> : never; type MapToOperationResult = { [K in keyof TRow]: OperationResultFromNumber; }; type MakeMultiplicationTable
= Table["length"] extends 10 ? Table : X extends TailDigitArray ? MakeMultiplicationTable<[ ...Table, MapToOperationResult> ], XTail> : never; type Maximum = Numbers extends [ infer Head extends number, ...infer Rest extends number[] ] ? Bigger> : 0; type Multiplication = Numbers extends [ infer Head extends number, ...infer Rest extends number[] ] ? Multiply> : 1; type MultiplyThrough = { [Index in keyof List]: List[Index] extends number ? Multiply : never; }; type PI = 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148; type Signum = Number extends Number ? `${Number}` extends `-${number}` ? -1 : Number extends 0 ? 0 : 1 : never; type Round = MidPointRounding extends "AwayFromZero" ? Multiply, Floor, 0.5>>> : Floor, Mod>, 1>>>; type SquareRoot = Root; type MultiplyByTenPower = Power extends 0 ? Value : MultiplyByTenPower, Subtract>; type DivideByTenPower = Power extends 0 ? Value : DivideByTenPower, Subtract>; type ToFixed = MultiplyByTenPower extends infer Multiplied ? Multiplied extends number ? DivideByTenPower, Digits> : never : never; declare namespace Math { export type { Absolute, Add, AddCarryDigit, AddCarryDigitTable, AddDigit, AddDigitTable, AddDigits, AddDigitsOperation, AddNumbers, AddSignedFloats, AddThrough, AddUnsignedFloats, AddUnsignedIntegers, Addition, Bigger, Branch$1 as Branch, Clamp, Compare$1 as Compare, CompareDigitTable, CompareDigits, CompareFloatMagnitudes, CompareIntegerMagnitudes, CompareLengths, CompareMagnitudes, CompareNumberMagnitudes, CompareNumbers, ComparisonResult, CrossMultiply, CubeRoot, DecimalComponents, DecomposeNumber, DigitsToUnsignedFloat, Divide, DivideMaxDigits, DivideNumbers, DivideSignedFloats, DivideUnsignedFloats, Division, EmptyStringAsZero, Equal$1 as Equal, EuclideanDivide, EuclideanDivideResult, Exponentiate, FlipSign, FlipTable, FloatDigitCount, FloatMaxDigits, FloatMaxDigitsAsUnsignedFloat, Floor, FractionalExponent, GreaterThan$1 as GreaterThan, GreaterThanOrEqual$1 as GreaterThanOrEqual, HeadDigitArray, HighestCommonFactor, IsEven, IsEvenDigit, IsInteger, IsNegative, IsNonInteger, IsOdd, IsPositive, IsUnsignedFloatEven, Join, LastRow$1 as LastRow, LeastCommonMultiple, LessThan$1 as LessThan, LessThanOrEqual$1 as LessThanOrEqual, LongDivide, LongDivideFraction, MakeBinaryTable, MakeModResult, MakeMultiplicationRow, MakeMultiplicationTable, MakeSignedFloat, MakeSignedNumber, MakeTable$1 as MakeTable, MakeUnsignedFloat, MapToOperationResult, Maximum, Minimum, Mod, ModNumbers, ModResult, ModSignedFloats, ModUnsignedFloats, Multiplication, Multiply, MultiplyCarryDigit, MultiplyCarryDigitTable, MultiplyDigit, MultiplyDigitTable, MultiplyDigitsOperation, MultiplyNumbers, MultiplyRow, MultiplySignedFloats, MultiplySigns, MultiplyThrough, MultiplyUnsignedFloats, Negate, NegateSignedFloat, Normalise, NormaliseForCrossMultiply, NormaliseFractionalParts, NormaliseFractionalZeros, NormaliseIntegerParts, NormaliseIntegerZeros, NormaliseLengths, Not$1 as Not, NumberComponents, NumberPair, Pad, PadDirection, PadEnd, PadStart, PI, Power, Round, RoundFloat, RoundFractionalDigits, RoundingCarryMap, RowShift$1 as RowShift, SafeDigitsToUnsignedFloat, ScientificNotationAsDecimal, SeparateSign, Sign, SignMap, SignToNumber, SignedFloat, SignedFloatToNumber, SignedFloatZero, Signum, Simplify, SmallEnoughForScientificNotation, Smaller, SplitAndNormalise, SplitComponentParts, SplitIntoDigits, SplitLeadingElements, SquareRoot, Subtract, SubtractCarryDigit, SubtractCarryDigitTable, SubtractDigit, SubtractDigitTable, SubtractDigits, SubtractNumbers, SubtractSignedFloats, SubtractUnsignedFloats, SubtractUnsignedIntegers, Subtraction, TableShift, TailDigitArray, ToDecimalString, ToFixed, ToSignedFloat, ToSmallFractionString, ToUnsignedFloat, TrimLeadingZeros, TrimTrailingZeros, UnsignedFloat, UnsignedFloatToNumber, UnsignedFloatZero, UnsignedNumbers, }; } type AndHelper = Bit.FourBitSquareMatrix<[0, 0, 0, 1]>; /** * A type representing the result of a bitwise AND operation. * * @param Left - The first bit to AND. * @param Right - The second bit to AND. * * @returns The result of the AND operation. * * @example * ```ts * import type { And } from "@ibnlanre/types"; * * type Test = And<0, 1>; * // ^? 0 * ``` */ type And = AndHelper[Left][Right]; /** * Performs a bitwise AND operation on two numbers. * * @param Left - The first number to AND. * @param Right - The second number to AND. * * @returns The result of the AND operation. * * @example * ```ts * import type { Apply, TAnd } from "@ibnlanre/types"; * * type Test = Apply; * // ^? 0 * ``` */ interface TAnd extends Fn<{ 0: Bit; 1: Bit; }> { slot: [Left, Right]; data: And; } type Nand = Not>; interface TNand extends Fn<{ 0: Bit; }> { slot: [Right, Left]; data: Nand; } /** * A type representing the result of a logical NOT operation. * * @param Proposition - The proposition to NOT. * @returns The result of the NOT operation. * * @example * ```ts * import type { Not } from "@ibnlanre/types"; * * type Test = Not<0>; * // ^? 1 * ``` */ type Not = Proposition extends 0 ? 1 : 0; /** * Performs a logical NOT operation on a proposition. * * @param Proposition - The proposition to NOT. * @returns The result of the NOT operation. * * @example * ```ts * import type { Apply, TNot } from "@ibnlanre/types"; * * type Test = Apply; * // ^? 1 * ``` */ interface TNot extends Fn<{ 0: Bit; }> { slot: [Proposition]; data: Not; } type OrHelper = Bit.FourBitSquareMatrix<[0, 1, 1, 1]>; /** * A type representing the result of a bitwise OR operation. * * @param Left - The first bit to OR. * @param Right - The second bit to OR. * * @returns The result of the OR operation. * * @example * ```ts * import type { Or } from "@ibnlanre/types"; * * type Test = Or<0, 1>; * // ^? 1 * ``` */ type Or = OrHelper[Left][Right]; /** * Performs a bitwise OR operation on two numbers. * * @param Left - The first number to OR. * @param Right - The second number to OR. * * @returns The result of the OR operation. * * @example * ```ts * import type { Apply, TOr } from "@ibnlanre/types"; * * type Test = Apply; * // ^? 1 * ``` */ interface TOr extends Fn<{ Right: Bit; Left: Bit; }> { slot: [Right, Left]; data: Or; } type XorHelper = Bit.FourBitSquareMatrix<[0, 1, 1, 0]>; /** * A type representing the result of a bitwise XOR operation. * * @param Left - The first bit to XOR. * @param Right - The second bit to XOR. * * @returns The result of the XOR operation. * * @example * ```ts * import type { Xor } from "@ibnlanre/types"; * * type Test = Xor<0, 1>; * // ^? 1 * ``` */ type Xor = XorHelper[Left][Right]; /** * Performs a bitwise XOR operation on two numbers. * * @param Left - The first number to XOR. * @param Right - The second number to XOR. * * @returns The result of the XOR operation. * * @example * ```ts * import type { Apply, TXor } from "@ibnlanre/types"; * * type Test = Apply; * // ^? 1 * ``` */ interface TXor extends Fn<{ 0: Bit; 1: Bit; }> { slot: [Right, Left]; data: Xor; } type Branch = Math.Branch; interface TBranch extends Fn<{ 0: number; 1: number; 2: number; 3: Math.ComparisonResult; }> { slot: [Positive, Zero, Negative, Comparison]; data: Branch; } /** * Compares two numbers. * * @description * The result of the comparison is: * - 0 if the two numbers are equal. * - 1 if the first number is greater than the second number. * - -1 if the first number is less than the second number. * * @param Left - The left side of the comparison. * @param Right - The right side of the comparison. * * @returns The result of the comparison. */ type Compare = Math.Compare; /** * Compares two numbers. * * @description * The result of the comparison is: * - 0 if the two numbers are equal. * - 1 if the first number is greater than the second number. * - -1 if the first number is less than the second number. * * @param Right - The right side of the comparison. * @param Left - The left side of the comparison. * * @returns The result of the comparison. */ interface TCompare extends Fn<{ 0: number; 1: number; }> { slot: [Right, Left]; data: Compare; } type Equal = Math.Equal; interface TEqual extends Fn<{ 0: number; 1: number; }> { slot: [Right, Left]; data: Equal; } type GreaterThan = Math.GreaterThan; interface TGreaterThan extends Fn<{ 0: number; 1: number; }> { slot: [Right, Left]; data: GreaterThan; } type GreaterThanOrEqual = Math.GreaterThanOrEqual; interface TGreaterThanOrEqual extends Fn<{ 0: number; 1: number; }> { slot: [Right, Left]; data: GreaterThanOrEqual; } type LessThan = Math.LessThan; interface TLessThan extends Fn<{ 0: number; 1: number; }> { slot: [Right, Left]; data: LessThan; } type LessThanOrEqual = Math.LessThanOrEqual; interface TLessThanOrEqual extends Fn<{ 0: number; 1: number; }> { slot: [Right, Left]; data: LessThanOrEqual; } type FirstOfUnionHelper = UnionToIntersection Union : never> extends () => infer First ? FirstOfUnionHelper, First> : Result; type FirstOfUnion = FirstOfUnionHelper; interface TFirstOfUnion extends Fn<{ 0: unknown; }> { slot: [Union]; data: FirstOfUnion; } type Intersect = { [Key in keyof ObjectType]: ObjectType[Key] extends Dictionary ? Intersect : ObjectType[Key]; } & unknown; interface TIntersect extends Fn<{ 0: unknown; }> { slot: [ObjectType]; data: Intersect; } type LastOfUnion = UnionToIntersection Union : never> extends () => infer Last ? Last : never; interface TLastOfUnion extends Fn<{ 0: unknown; }> { slot: [Union]; data: LastOfUnion; } type UnionToIntersection = (Union extends any ? (k: Union) => void : never) extends (k: infer Intersection) => void ? Intersection : never; interface TUnionToIntersection extends Fn<{ 0: unknown; }> { slot: [Union]; data: UnionToIntersection; } type UnionToTupleHelper, Rest = Exclude> = [Tail] extends [never] ? [] : [...UnionToTupleHelper, Tail]; type UnionToTuple = UnionToTupleHelper; interface TUnionToTuple extends Fn<{ 0: unknown; }> { slot: [Union]; data: UnionToTuple; } type Unionize = Intersect>; interface TUnionize extends Fn<{ 0: unknown; }> { slot: [Intersection]; data: Unionize; } type DefaultWidenOptions = { flattenArrays: true; widenReturnType: true; }; type Flatten = Value extends (infer X)[] ? Widen[] : Value; type Widen = Value extends string ? string : Value extends number ? number : Value extends bigint ? bigint : Value extends boolean ? boolean : Value extends any[] ? [Options["flattenArrays"]] extends [true] ? Flatten : Value extends [infer Head, ...infer Rest] ? [Widen, ...Widen] : Value : Value extends Dictionary ? { [K in keyof Value]: Widen; } : Value extends (...args: any[]) => any ? [Options["widenReturnType"]] extends [true] ? (...args: Parameters) => Widen, Options> : Value : Value; interface TWiden extends Fn<{ 0: { flattenArrays?: boolean; widenReturnType?: boolean; }; 1: unknown; }> { slot: [Options, Value]; data: Widen; } type AnyExtend = List extends [infer Head, ...infer Rest] ? [Head] extends [Element] ? 1 : AnyExtend : 0; interface TAnyExtend extends Fn<{ 0: unknown; 1: unknown[]; }> { slot: [Element, List]; data: AnyExtend; } type ElseIf = If; interface TElseIf extends Fn<{ 0: unknown; 1: unknown; 2: Bit; }> { slot: [Positive, Zero, Comparison]; data: ElseIf; } type FallbackTo = [PreventableValue] extends [ActualValue] ? FallbackValue : RequireValue; interface TFallbackTo extends Fn<{ 0: unknown; 1: unknown | undefined; 2: unknown; }> { slot: [FallbackValue, PreventableValue, ActualValue]; data: FallbackTo; } type If = Condition extends 1 ? Positive : Zero; interface TIf extends Fn<{ 0: unknown; 1: unknown; 2: Bit; }> { slot: [Positive, Zero, Condition]; data: If; } type IfNot = Condition extends 0 ? Positive : Zero; interface TIfNot extends Fn<{ 0: unknown; 1: unknown; 2: unknown; }> { slot: [Positive, Zero, Condition]; data: IfNot; } type IsAny = 0 extends 1 & Value ? 1 : 0; interface TIsAny extends Fn<{ 0: unknown; }> { slot: [Value]; data: IsAny; } type IsArray = Value extends Value ? Value extends unknown[] ? 1 : 0 : never; interface TIsArray extends Fn<{ 0: unknown; }> { slot: [Value]; data: IsArray; } type IsBetween = And, LessThanOrEqual>; interface TIsBetween extends Fn<{ 0: number; 1: number; 2: number; }> { slot: [LowerBound, UpperBound, Input]; data: IsBetween; } type IsDictionary = Value extends Value ? Value extends Dictionary ? 1 : 0 : never; interface TIsDictionary extends Fn<{ 0: unknown; }> { slot: [Value]; data: IsDictionary; } type IsExact = (() => T extends Left ? 1 : 0) extends () => T extends Right ? 1 : 0 ? 1 : 0; interface TIsExact extends Fn<{ 0: unknown; 1: unknown; }> { slot: [Left, Right]; data: IsExact; } type IsIntersectionHelper = (() => T extends Left & T ? 1 : 0) extends () => T extends Right & T ? 1 : 0 ? 0 : 1; type IsIntersection = IsIntersectionHelper>; interface TIsIntersection extends Fn<{ 0: unknown; }> { slot: [Value]; data: IsIntersection; } type IsNever = [Value] extends [never] ? 1 : 0; interface TIsNever extends Fn<{ 0: unknown; }> { slot: [Value]; data: IsNever; } type IsObject = Value extends Value ? Value extends Record ? 1 : 0 : never; interface TIsObject extends Fn<{ 0: unknown; }> { slot: [Value]; data: IsObject; } type IsPartial = undefined extends Value ? [Value] extends [undefined] ? 0 : 1 : 0; interface TIsPartial extends Fn<{ 0: unknown; }> { slot: [Value]; data: IsPartial; } type IsReadonly = Readonly extends Value ? true : false; interface TIsReadonly extends Fn<{ 0: unknown; }> { slot: [Value]; data: IsReadonly; } type IsString = Value extends Value ? string extends Value ? 1 : Value extends string ? 1 : 0 : never; interface TIsString extends Fn<{ 0: unknown; }> { slot: [Value]; data: IsString; } type IsSubtype = Left extends Right ? 1 : 0; interface TIsSubtype extends Fn<{ 0: unknown; 1: unknown; }> { slot: [Right, Left]; data: IsSubtype; } type IsSupertype = Right extends Left ? 1 : 0; interface TIsSupertype extends Fn<{ 0: unknown; 1: unknown; }> { slot: [Right, Left]; data: IsSupertype; } type IsUnary = Value extends 1 ? 1 : 0; interface TIsUnary extends Fn<{ 0: number; }> { slot: [Value]; data: IsUnary; } type IsUnion = [Value] extends UnionToTuple ? 0 : 1; interface TIsUnion extends Fn<{ 0: unknown; }> { slot: [Value]; data: IsUnion; } type UnknownHelper = [T] extends [void] ? 1 : 0; type NeverHelper = [void] extends [T] ? 1 : 0; type IsVoid = And, NeverHelper>; interface TIsVoid extends Fn<{ 0: unknown; }> { slot: [T]; data: IsVoid; } type IsZero = Value extends 0 ? 1 : 0; interface TIsZero extends Fn<{ 0: number; }> { slot: [Value]; data: IsZero; } type SingleOut = List extends [infer Value] ? Value : List; /** * Mark out the void values in a list * * @param List The list to mark out void values * @param Params The parameters to compare with the list * * @returns The list with void values marked out * * @description * - never extends void, but void does not extend never * - If void extends the value, we return the value */ type MarkOut = List extends [ ...infer Ls, infer Lv ] ? Params extends [...infer Ts, infer Tv] ? IsVoid extends 1 ? [...MarkOut, Tv] : MarkOut : [] : []; /** * Get the arguments of a function * * @param Callback The function to get its arguments * @returns The arguments of the function * * @example * ```ts * import type { Fn } from "@ibnlanre/types"; * * type Test = Fn.Arguments; * // ^? string * ``` */ type Arguments = Callback["slot"] extends unknown[] ? SingleOut>> : never; type ComposeLeftHelper = Callbacks extends [infer Callback extends Fn, ...infer Rest extends Fn[]] ? Argument extends Fn.Arguments ? ComposeLeftHelper, Rest, Add$1> : { position: Position; scenario: Error; callback: Callback; expected: Fn.Arguments; received: Argument; } : never; /** * Returns an `Error` object if the result from a function cannot be applied to the next function. * * @summary * Returns never if the argument can be applied to all the functions passed. * * @param Argument - The argument to be passed to the functions. * @param Callbacks - The list of functions to be applied to the argument. * * @returns An `Error` object if the argument cannot be applied to any of the functions passed. */ type ComposeLeft = ComposeLeftHelper; /** * Returns a list of functions that can accept the result of the previous function * * @summary * - Omits functions that cannot be applied to the argument. * - Starts calculating from the argument passed * * @param Argument - The argument to be passed to the functions. * @param Callbacks - The list of functions to be applied to the argument. * * @returns A list of functions that can be applied to the argument in reverse order. */ type ComposeRight = Callbacks extends [infer Callback extends Fn, ...infer Rest extends Fn[]] ? Argument extends Fn.Arguments ? [Callback, ...ComposeRight, Rest>] : [] : Callbacks; interface Lambda extends Fn { input_size: Size>>; } type Parameters$1 = SliceTo>; type Signature = Elements>; type Collect = List extends unknown[] ? List : [List]; type DevoidHelper = List extends [] ? Result : List extends [infer Head, ...infer Rest] ? IsVoid extends 1 ? DevoidHelper : DevoidHelper : Result; type Devoid = DevoidHelper; /** * Returns a tuple of widened types or void. * * @param Argument - The tuple to widen. * @returns A tuple of widened types or void. * * @example * ```ts * import type { Preset } from "@ibnlanre/function"; * * type Test = Preset<[1, "b"]>; * // ^? [number | void, string | void] * * type Test2 = Preset<"a">; * // ^? [string | void] * ``` */ type Preset = Argument extends unknown[] ? Argument extends [infer Head, ...infer Rest] ? [Widen | void, ...Preset] : [] : [Widen | void]; type Reflect = Input extends unknown[] ? [Input] : Input; type Last = [...Rest, Tail]; type First = [Head, ...Rest]; type SelectHelper = Left extends [] ? Result : Left extends Last ? Right extends Last ? IsVoid extends 1 ? SelectHelper> : SelectHelper> : Devoid> : Result; type Elect = Right extends (infer Elements extends unknown[])[] ? Or, IsUnary>> extends 1 ? Right : Elements : Right; type Select = SelectHelper, Devoid, Collect>>>; /** * Placeholder for unset values * * @description * This symbol is used to represent void values. */ declare const unset: unique symbol; type unset = typeof unset; interface FnImpl { /** * Field for arguments within higher-order functions * * @description * This field is used to represent arguments in a higher-order function. */ args: unknown; /** * A field that represents a slot. * * @description * This field is used to represent arguments in a function. */ slot: unknown[]; /** * Field for the return value of functions * * @description * This field is used to represent the return value of a function. */ data: unknown; } interface FnArgs extends FnImpl { 0: Retrieve; 1: Retrieve; 2: Retrieve; 3: Retrieve; 4: Retrieve; 5: Retrieve; 6: Retrieve; 7: Retrieve; 8: Retrieve; 9: Retrieve; } /** * Parameterized function type * @see https://github.com/microsoft/TypeScript/issues/1213#issuecomment-1215039765 * @see https://stackoverflow.com/a/73533674 */ interface Fn = {}> extends FnArgs { input_size: Size>; /** * Field for parameters within higher-order functions * * @description * This field is used to represent parameters in a higher-order function. */ params: [ Params[0], Params[1], Params[2], Params[3], Params[4], Params[5], Params[6], Params[7], Params[8], Params[9] ]; } declare namespace Fn { export type { Arguments, Collect, ComposeLeft, ComposeRight, Devoid, Lambda, Parameters$1 as Parameters, Preset, Reflect, Select, Signature, }; } type Apply>> = (Callback & { args: Fn.Select; })["data"]; interface TApply> | void = void> extends Fn<{ 0: Fn; 1: NonEmptyArray>; }> { slot: [Callback, List]; data: Apply; } type Call = (Callback & { args: Callback["slot"]; })["data"]; interface TCall extends Fn<{ 0: Fn; }> { slot: [Callback]; data: Call; } type Invoke>, Result extends unknown[] = []> = Callbacks extends [ infer Callback extends Fn, ...infer Rest extends Array> ] ? Input extends Fn.Arguments ? Invoke]> : Invoke : Result; interface TInvoke> | void = void, Input extends unknown | void = void> extends Fn<{ 0: Array>; 1: unknown; }> { slot: [Callbacks, Input]; data: Invoke; } type PipeHelper = Callbacks extends [infer Callback extends Fn, ...infer Rest extends Fn[]] ? Item extends Fn.Arguments ? PipeHelper, Rest> : never : Item; type Pipe = ComposeLeft extends infer Composed ? IsNever extends 1 ? PipeHelper : Composed : never; interface TPipe extends Fn<{ 0: Fn[]; 1: unknown; }> { slot: [Callbacks, Item]; data: Pipe; } type Take = IsNever extends 1 ? Collection : Value extends Collection ? Extract : Value; interface TTake extends Fn<{ 0: unknown; 1: unknown; }> { slot: [Value, Collection]; data: Take; } type TakeFromArray = IsNever extends 1 ? List : List extends [infer Head, ...infer Rest] ? [Value] extends [Head] ? TakeFromArray extends infer Rest ? Rest extends unknown[] ? [Head, ...Rest] : [Head, Rest] : never : TakeFromArray : List; interface TTakeFromArray extends Fn<{ 0: unknown; 1: unknown[]; }> { slot: [Value, List]; data: TakeFromArray; } type TakeFromDictionary = IsNever extends 1 ? ObjectType : Path extends PropertyKey ? Has extends 1 ? Get> : never : ObjectType; interface TTakeFromDictionary extends Fn<{ 0: PropertyKey; 1: Dictionary; }> { slot: [Path, ObjectType]; data: TakeFromDictionary; } type ArbitraryKey = T | (string & {}); type Buffers = SharedArrayBuffer | SharedArrayBufferConstructor | Atomics; type Derivatives = RegExp | Date | JSON; type Errors = Error | ErrorConstructor | EvalError | RangeError | ReferenceError | SyntaxError | TypeError | URIError; type Events = Event | ErrorEvent | DOMException | CustomEvent | EventTarget | EventListener | EventListenerObject | EventListenerOrEventListenerObject | EventListenerOptions; type Functions = Function | FunctionConstructor | Generator | GeneratorFunction | GeneratorFunctionConstructor | AsyncGenerator | AsyncGeneratorFunction | AsyncGeneratorFunctionConstructor | Promise | PromiseConstructor; type Arrays = Array | ReadonlyArray; type TypedArrays = ArrayBuffer | DataView | Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array | BigInt64Array | BigUint64Array; type Indexable = Arrays | TypedArrays; type Maps = Map | WeakMap | ReadonlyMap; type Sets = Set | WeakSet | ReadonlySet; type Structures = Maps | Sets; type Iterables = string | Iterable | AsyncIterable | IterableIterator | AsyncIterableIterator | Sets | Maps; type Primitive = string | number | boolean | null; type Member = Primitive | Record | Array; type Json = Member | Record; type NonEmptyArray = [T, ...T[]]; type Dictionary = Record; type EmptyObject = Record; type Nullable = Exclude | null; type Nullish = Exclude | null | undefined; type Serializable = string | number | bigint | boolean | null | undefined; type Primitives = Serializable | symbol; type Symbols = "~" | "!" | "@" | "#" | "$" | "%" | "^" | "&" | "*" | "(" | ")" | "-" | "_" | "=" | "+" | "[" | "{" | "]" | "}" | "\\" | "/" | "|" | ";" | ":" | "'" | '"' | "," | "<" | "." | ">" | "?" | "`"; type InferBoolean = boolean extends Value ? boolean : Value extends boolean ? Value : never; interface TInferBoolean extends Fn<{ 0: boolean; }> { slot: [Value]; data: InferBoolean; } type InferNumber = number extends Value ? number : Value extends number ? Value : never; interface TInferNumber extends Fn<{ 0: number; }> { slot: [Value]; data: InferNumber; } type InferString = string extends Value ? string : Value extends string ? Value : never; interface TInferString extends Fn<{ 0: string; }> { slot: [Value]; data: InferString; } type InferSymbol = symbol extends Value ? symbol : Value extends symbol ? Value : never; interface TInferSymbol extends Fn<{ 0: symbol; }> { slot: [Value]; data: InferSymbol; } type InferUndefined = undefined extends Value ? undefined : Value extends undefined ? Value : never; interface TInferUndefined extends Fn<{ 0: undefined; }> { slot: [Value]; data: InferUndefined; } type InferNull = null extends Value ? null : Value extends null ? Value : never; interface TInferNull extends Fn<{ 0: null; }> { slot: [Value]; data: InferNull; } type InferObject> = Value extends Record ? Value : never; interface TInferObject | void = void> extends Fn<{ 0: Record; }> { slot: [Value]; data: InferObject; } type InferArray = Value; interface TInferArray extends Fn<{ 0: Type; 1: Type[]; }> { slot: [Type, Value]; data: InferArray; } export { type Absolute$1 as Absolute, type Add$1 as Add, type Addition$1 as Addition, type Anchor, type And, type AnyExtend, type Append, type Apply, type ArbitraryKey, type ArrayOf, type Arrays, type Assign, Bit, type Branch, type Buffers, type Call, type Ceil, type Circle, type Clamp$1 as Clamp, type Collect$1 as Collect, type Combine, type Compare, type Concat, type Contains, type Count, type Decrement, type DeepPartial, type DeepRequired, type Derivatives, type Dictionary, type Diff, Digit, type Divide$1 as Divide, type Division$1 as Division, type Drop, type Elements, type ElseIf, type EmptyObject, type EndsWith, type Entries, type Equal, type Errors, type Events, type Every, type ExcludeKeys, type Expand, type ExtractNestedKeys, type ExtractRootKey, type FallbackTo, type Filter, type FirstOfUnion, type Flat, type Flip, type Floor$1 as Floor, Fn, type FromEntries, type Functions, type Get, type GreaterThan, type GreaterThanOrEqual, type Has, type Head$1 as Head, type If, type IfNot, type Immutable, type IncludeKeys, type Includes, type Increment, type Indexable, type Indices, type InferArray, type InferBoolean, type InferNull, type InferNumber, type InferObject, type InferString, type InferSymbol, type InferUndefined, type Insert, type Intersect, type Invoke, type IsAny, type IsArray, type IsBetween, type IsDictionary, type IsEven$1 as IsEven, type IsExact, type IsInteger$1 as IsInteger, type IsIntersection, type IsNegative$1 as IsNegative, type IsNever, type IsNonInteger$1 as IsNonInteger, type IsObject, type IsOdd$1 as IsOdd, type IsPartial, type IsPositive$1 as IsPositive, type IsReadonly, type IsString, type IsSubtype, type IsSupertype, type IsUnary, type IsUnion, type IsVoid, type IsZero, type Iterables, type Join$1 as Join, type JoinKeys, type Json, type Keys, type LastOfUnion, type Length, type LessThan, type LessThanOrEqual, type Locate, type Map$1 as Map, type Maps, Math, type Max, type Maximum$1 as Maximum, type Merge, type Min, type Minimum$1 as Minimum, type Modulo, type Multiplication$1 as Multiplication, type Multiply$1 as Multiply, type Mutable, type Nand, type Negate$1 as Negate, type NoNumber, type NonEmptyArray, type Not, type Nullable, type Nullish, type ObjectFromPath, type Occurrence, type OmitOptionalValues, type OmitPath, type OmitRequiredValues, type OptionalKeyMap, type OptionalKeys, type OptionalKeysDeep, type Or, type Ordinal, type PadEnd$1 as PadEnd, type PadStart$1 as PadStart, type ParseInt, type Paths, type Pattern, type Permutation, type Pipe, type Pivot, type Place, type Pop, type Pow, type Prepend, type Primitives, type Push, type Range, type Reduce, type Reject, type Replace, type RequireValue, type RequiredKeyMap, type RequiredKeys, type RequiredKeysDeep, type Retrieve, type Reverse, type RotateLeft, type RotateRight, type Round$1 as Round, type Serializable, type Sets, type Shift, type Shuffle, type Sign$1 as Sign, type Size, type Slice, type SliceFrom, type SliceTo, type Some, type Sort, type Split, type SquareRoot$1 as SquareRoot, type StartsWith, type Stringify, type Structures, type Substring, type Subtract$1 as Subtract, type Subtraction$1 as Subtraction, type Symbols, type TAbsolute, type TAdd, type TAddition, type TAnchor, type TAnd, type TAnyExtend, type TAppend, type TApply, type TArrayOf, type TAssign, type TBranch, type TCall, type TCeil, type TCircle, type TCollect, type TCombine, type TCompare, type TConcat, type TContains, type TCount, type TDecrement, type TDeepPartial, type TDeepRequired, type TDiff, type TDivide, type TDivision, type TDrop, type TElements, type TElseIf, type TEndsWith, type TEntries, type TEqual, type TEvery, type TExcludeKeys, type TExpand, type TExtractNestedKeys, type TExtractRootKey, type TFallbackTo, type TFilter, type TFirstOfUnion, type TFlat, type TFlip, type TFloor, type TFromEntries, type TGet, type TGreaterThan, type TGreaterThanOrEqual, type THas, type THead, type TIf, type TIfNot, type TImmutable, type TIncludeKeys, type TIncludes, type TIncrement, type TIndices, type TInferArray, type TInferBoolean, type TInferNull, type TInferNumber, type TInferObject, type TInferString, type TInferSymbol, type TInferUndefined, type TInsert, type TIntersect, type TInvoke, type TIsAny, type TIsArray, type TIsBetween, type TIsDictionary, type TIsEven, type TIsExact, type TIsInteger, type TIsIntersection, type TIsNegative, type TIsNever, type TIsNonInteger, type TIsObject, type TIsOdd, type TIsPartial, type TIsPositive, type TIsReadonly, type TIsString, type TIsSubtype, type TIsSupertype, type TIsUnary, type TIsUnion, type TIsVoid, type TIsZero, type TJoin, type TJoinKeys, type TKeys, type TKeysAsTuple, type TLastOfUnion, type TLength, type TLessThan, type TLessThanOrEqual, type TLocate, type TMap, type TMerge, type TModulo, type TMultiplication, type TMultiply, type TMutable, type TNand, type TNegate, type TNoNumber, type TNot, type TObjectFromPath, type TOccurrence, type TOmitOptionalValues, type TOmitPath, type TOmitRequiredValues, type TOptionalKeys, type TOptionalKeysDeep, type TOr, type TOrdinal, type TPadEnd, type TPadStart, type TParseInt, type TPaths, type TPattern, type TPermutation, type TPipe, type TPivot, type TPlace, type TPop, type TPow, type TPrepend, type TPush, type TRange, type TReduce, type TReject, type TReplace, type TRequireValue, type TRequiredKeys, type TRequiredKeysDeep, type TRetrieve, type TReverse, type TRotateLeft, type TRotateRight, type TRound, type TShift, type TShuffle, type TSign, type TSize, type TSlice, type TSliceFrom, type TSliceTo, type TSome, type TSort, type TSplit, type TSquareRoot, type TStartsWith, type TStringify, type TSubstring, type TSubtract, type TSubtraction, type TTail, type TTake, type TTakeFromArray, type TTakeFromDictionary, type TTemplate, type TToEntries, type TToFixed, type TTrim, type TTrimEnd, type TTrimHead, type TTrimStart, type TTrimTail, type TTrunc, type TUnionToIntersection, type TUnionToTuple, type TUnionize, type TUnshift, type TValueAt, type TValues, type TWiden, type TWith, type TXor, type TZip, type Tail, type Take, type TakeFromArray, type TakeFromDictionary, type Template, type ToEntries, type ToFixed$1 as ToFixed, type Trim, type TrimEnd, type TrimHead, type TrimStart, type TrimTail, type Trunc, type TypedArrays, type UnionToIntersection, type UnionToTuple, type Unionize, type Unshift, type ValueAt, type Values, type Widen, type With, type Xor, type Zip, unset };