@dulysse1/better-node
Version:
Improve Node types & add object properties
484 lines (446 loc) • 11.4 kB
TypeScript
/// <reference path="iterations.d.ts" />
/// <reference path="operators.d.ts" />
/// <reference path="_number.d.ts" />
declare type _StringLiteralType = string | number | bigint | boolean;
declare type _StringLiteralTypeParser<T extends unknown> =
T extends _StringLiteralType
? T
: {
0: "[object Object]";
1: _Join<_Satisfy<T, unknown[]>, ",">;
}[T extends unknown[] ? 1 : 0];
declare type _Join<
TArray extends unknown[],
S extends string,
Result = ""
> = TArray extends [infer Start, ...infer End]
? End extends unknown[]
? _Join<
End,
S,
`${_StringLiteralTypeParser<Result>}${_StringLiteralTypeParser<Start>}${_Length<End> extends 0
? ""
: S}`
>
: never
: Result;
declare type _Length<TArray extends unknown[]> = TArray extends unknown[]
? TArray["length"]
: never;
declare type _Pop<TArray extends unknown[]> = TArray extends [
...infer Start,
infer _
]
? [...Start]
: never;
declare type _Shift<TArray extends unknown[]> = TArray extends [
infer _,
...infer Next
]
? [...Next]
: never;
declare type _Replace<
TArray extends unknown[],
From extends unknown,
To extends unknown,
Result = [],
AsChange = false,
Counter = _Length<TArray>
> = Counter extends 0
? Result
: TArray extends [infer Start, ...infer End]
? End extends unknown[]
? Start extends From
? _Replace<
End,
From,
To,
_Push<
_Satisfy<Result, unknown[]>,
AsChange extends false ? To : From
>,
AsChange extends false ? true : AsChange,
_Decr<IterationOf<Counter extends number ? Counter : never>>
>
: _Replace<
End,
From,
To,
_Push<_Satisfy<Result, unknown[]>, Start>,
AsChange,
_Decr<IterationOf<Counter extends number ? Counter : never>>
>
: never
: TArray;
declare type _ReplaceAll<
TArray extends unknown[],
From extends unknown,
To extends unknown,
Next = _Replace<TArray, From, To>
> = TArray extends Next
? TArray
: Next extends unknown[]
? _ReplaceAll<Next, From, To>
: never;
declare type _Reverse<
TArray extends unknown[],
Counter = _Length<TArray>,
Result = []
> = Result extends unknown[]
? Counter extends 0
? Result
: TArray extends [infer Start, ...infer End]
? End extends unknown[]
? _Reverse<
End,
_Decr<IterationOf<Counter extends number ? Counter : never>>,
_Insert<Result, 0, Start>
>
: never
: never
: never;
declare type _First<TArray extends unknown[]> = TArray extends [
infer First,
...infer _
]
? First
: never;
declare type _Last<TArray extends unknown[]> = TArray extends [
...infer _,
infer Last
]
? Last
: never;
declare type _IndexOf<
TArray extends unknown[],
T extends unknown,
I = 0
> = I extends number
? _Equal<I, _Length<TArray>> extends true
? -1
: _Equal<TArray[I], T> extends true
? I
: _IndexOf<TArray, T, _Incr<IterationOf<I>>>
: never;
declare type _LastIndexOf<
TArray extends unknown[],
T extends unknown,
I = _Length<TArray>
> = I extends number
? _Equal<TArray[I], T> extends true
? I
: _Equal<I, 0> extends true
? -1
: _LastIndexOf<TArray, T, _Decr<IterationOf<I>>>
: never;
declare type _Includes<TArray extends unknown[], T extends unknown> = _NotEqual<
_IndexOf<TArray, T>,
-1
>;
declare type _Filter<
TArray extends unknown[],
F extends () => unknown,
Result = []
> = F extends () => infer R
? TArray extends [infer K, ...infer Next]
? _Filter<
Next,
F,
_Concat<
_Satisfy<Result, unknown[]>,
_Equal<R, K> extends true ? [K] : []
>
>
: Result
: never;
declare type _Find<
TArray extends unknown[],
F extends () => unknown,
Result = null
> = F extends () => infer R
? TArray extends [infer K, ...infer Next]
? _Find<Next, F, _Equal<R, K> extends true ? K : Result>
: Result
: never;
declare type _ToString<TArray extends unknown[]> = _Join<TArray, ",">;
declare type _Slice<
TArray extends unknown[],
Start = 0,
End = _Length<TArray>,
Counter = _IsNegative<IterationOf<_Satisfy<Start, number>>> extends true
? _IsNegative<
_Add<IterationOf<_Length<TArray>>, IterationOf<_Satisfy<Start, number>>>
> extends true
? 0
: Pos<
_Add<
IterationOf<_Length<TArray>>,
IterationOf<_Satisfy<Start, number>>
>
>
: Start,
Result = []
> = Counter extends End
? Result
: _Lower<
IterationOf<_Satisfy<Start, number>>,
IterationOf<_Satisfy<End, number>>
> extends true
? _Slice<
TArray,
Start,
_IsNegative<IterationOf<_Satisfy<End, number>>> extends true
? Pos<
_Add<
IterationOf<_Length<TArray>>,
IterationOf<_Satisfy<End, number>>
>
>
: End,
_Incr<IterationOf<_Satisfy<Counter, number>>>,
_Concat<
_Satisfy<Result, unknown[]>,
_Lower<
IterationOf<_Satisfy<Counter, number>>,
IterationOf<_Length<TArray>>
> extends true
? [TArray[_Satisfy<Counter, number>]]
: []
>
>
: [];
declare type _Splice<
TArray extends unknown[],
Start = 0,
DeleteCount = _Length<TArray>,
Index = _IsNegative<IterationOf<_Satisfy<Start, number>>> extends true
? _IsNegative<
_Add<IterationOf<_Length<TArray>>, IterationOf<_Satisfy<Start, number>>>
> extends true
? 0
: Pos<
_Add<
IterationOf<_Length<TArray>>,
IterationOf<_Satisfy<Start, number>>
>
>
: Start,
Target = _Greater<
IterationOf<
Pos<
_Add<
IterationOf<_Satisfy<Index, number>>,
IterationOf<_Satisfy<DeleteCount, number>>
>
>
>,
IterationOf<_Length<TArray>>
> extends true
? _Length<TArray>
: Pos<
_Add<
IterationOf<_Satisfy<Index, number>>,
IterationOf<_Satisfy<DeleteCount, number>>
>
>,
Result = []
> = _Or<
_IsNegative<IterationOf<_Satisfy<Target, number>>>,
_GreaterEq<
IterationOf<_Satisfy<Index, number>>,
IterationOf<_Satisfy<Target, number>>
>
> extends true
? Result
: _Splice<
TArray,
Start,
DeleteCount,
_Incr<IterationOf<_Satisfy<Index, number>>>,
Target,
_Push<_Satisfy<Result, unknown[]>, TArray[_Satisfy<Index, number>]>
>;
declare type _Concat<L1 extends unknown[], L2 extends unknown[]> = [
...L1,
...L2
];
declare type _Push<TArray extends unknown[], T extends unknown> = [
...TArray,
T
];
declare type _Insert<
TArray extends unknown[],
I extends number,
T extends unknown
> = _IsNegative<IterationOf<I>> extends true
? never
: _Concat<_Push<_Slice<TArray, 0, I>, T>, _Slice<TArray, I, _Length<TArray>>>;
declare type _Drop<
TArray extends unknown[],
T extends unknown,
Result = []
> = _Equal<_Length<TArray>, 0> extends true
? Result
: TArray extends [infer Start, ...infer Next]
? _Drop<
Next,
T,
_Concat<
_Satisfy<Result, unknown[]>,
_Equal<Start, T> extends true ? [] : [Start]
>
>
: never;
declare type _Sum<TArray extends number[], Total = 0> = _Equal<
_Length<TArray>,
0
> extends true
? _Satisfy<Total, number>
: TArray extends [infer Start, ...infer Next]
? _Sum<
_Satisfy<Next, number[]>,
Pos<
_Add<
IterationOf<_Satisfy<Total, number>>,
IterationOf<_Satisfy<Start, number>>
>
>
>
: never;
declare type _IsSorted<
TArray extends number[],
Type extends "ASC" | "DESC",
Result = true
> = _Equal<_Length<TArray>, 0> extends true
? _Satisfy<Result, boolean>
: TArray extends [infer Start, infer Second, ...infer Next]
? _IsSorted<
[_Satisfy<Second, number>, ..._Satisfy<Next, number[]>],
Type,
_Or<
_And<
_Equal<Type, "ASC">,
_Greater<
IterationOf<_Satisfy<Start, number>>,
IterationOf<_Satisfy<Second, number>>
>
>,
_And<
_Equal<Type, "DESC">,
_Lower<
IterationOf<_Satisfy<Start, number>>,
IterationOf<_Satisfy<Second, number>>
>
>
> extends true
? false
: Result
>
: _Equal<TArray, number[]> extends true
? number[]
: Result;
declare type _Asc<TArray extends number[], Result = []> = _Equal<
_Length<TArray>,
0
> extends true
? _IsSorted<_Satisfy<Result, number[]>, "ASC"> extends true
? _Satisfy<Result, number[]>
: _Asc<_Satisfy<Result, number[]>>
: TArray extends [infer First, ...infer Next]
? Result extends [...infer _, infer Last]
? _LowerEq<
IterationOf<_Satisfy<Last, number>>,
IterationOf<_Satisfy<First, number>>
> extends true
? _Asc<_Satisfy<Next, number[]>, _Push<Result, _Satisfy<First, number>>>
: _Asc<
_Satisfy<Next, number[]>,
_Insert<Result, 0, _Satisfy<First, number>>
>
: _Asc<_Satisfy<Next, number[]>, [First]>
: _Equal<TArray, number[]> extends true
? number[]
: never;
declare type _Desc<TArray extends number[], Result = []> = _Equal<
_Length<TArray>,
0
> extends true
? _IsSorted<_Satisfy<Result, number[]>, "DESC"> extends true
? _Satisfy<Result, number[]>
: _Desc<_Satisfy<Result, number[]>>
: TArray extends [infer First, ...infer Next]
? Result extends [...infer _, infer Last]
? _GreaterEq<
IterationOf<_Satisfy<Last, number>>,
IterationOf<_Satisfy<First, number>>
> extends true
? _Desc<_Satisfy<Next, number[]>, _Push<Result, _Satisfy<First, number>>>
: _Desc<
_Satisfy<Next, number[]>,
_Insert<Result, 0, _Satisfy<First, number>>
>
: _Desc<_Satisfy<Next, number[]>, [First]>
: _Equal<TArray, number[]> extends true
? number[]
: never;
declare type _Min<TArray extends number[]> = _First<_Asc<TArray>>;
declare type _Max<TArray extends number[]> = _First<_Desc<TArray>>;
declare type _Of<
TArray extends unknown[],
T extends unknown
> = TArray extends (infer R)[] ? (R extends T ? true : false) : never;
declare type _At<
TArray extends unknown[],
I extends number,
Index = _IsNegative<IterationOf<_Satisfy<I, number>>> extends true
? _IsNegative<
_Add<IterationOf<_Length<TArray>>, IterationOf<_Satisfy<I, number>>>
> extends true
? 0
: Pos<
_Add<IterationOf<_Length<TArray>>, IterationOf<_Satisfy<I, number>>>
>
: I
> = _Greater<
IterationOf<_Length<TArray>>,
IterationOf<_Satisfy<Index, number>>
> extends true
? TArray[_Satisfy<Index, number>]
: undefined;
declare type _Flat<TArray extends unknown[], Depth = 1> = _Or<
_Or<_Equal<Depth, 0>, _IsNegative<IterationOf<_Satisfy<Depth, number>>>>,
_And<_NotEqual<Depth, 0>, _Equal<_OneFlat<TArray>, TArray>>
> extends true
? TArray
: _Flat<_OneFlat<TArray>, _Decr<IterationOf<_Satisfy<Depth, number>>>>;
declare type _OneFlat<TArray extends unknown[], Result = []> = _Equal<
_Length<TArray>,
0
> extends true
? _Satisfy<Result, unknown[]>
: TArray extends [infer Start, ...infer Next]
? _OneFlat<
_Satisfy<Next, unknown[]>,
Start extends unknown[]
? _Concat<_Satisfy<Result, unknown[]>, _Satisfy<Start, unknown>>
: _Push<_Satisfy<Result, unknown[]>, _Satisfy<Start, unknown>>
>
: never;
declare type _ToUnion<TArray extends unknown[]> = TArray[number];
declare type _IsTuple<T> = T extends [unknown, ...unknown[]]
? Exclude<T[0], undefined> extends unknown
? true
: false
: false;
declare type _Fill<N extends number, T extends unknown, R = []> = _Equal<
N,
number
> extends true
? T[]
: _IsNegative<IterationOf<N>> extends true
? never
: _Equal<N, 0> extends true
? R
: _Fill<_Decr<IterationOf<N>>, T, [..._Satisfy<R, unknown[]>, T]>;
declare type _Readable<TArray extends readonly unknown[]> =
TArray extends readonly [...infer R] ? R : never;