@avstantso/ts 1.0.4 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/package.json +3 -3
- package/dist/_global/_register.d.ts +0 -80
- package/dist/_global/array/_register.d.ts +0 -28
- package/dist/_global/array/arr-n.d.ts +0 -21
- package/dist/_global/array/create.d.ts +0 -59
- package/dist/_global/array/derivative.d.ts +0 -197
- package/dist/_global/array/find.d.ts +0 -89
- package/dist/_global/array/index.d.ts +0 -8
- package/dist/_global/array/low-level.d.ts +0 -84
- package/dist/_global/array/map-key-value.d.ts +0 -121
- package/dist/_global/array/min-max-sort.d.ts +0 -244
- package/dist/_global/ascii.d.ts +0 -76
- package/dist/_global/boolean.d.ts +0 -74
- package/dist/_global/comparisons.d.ts +0 -85
- package/dist/_global/func.d.ts +0 -17
- package/dist/_global/index.d.ts +0 -14
- package/dist/_global/literal.d.ts +0 -180
- package/dist/_global/numeric/domain/describes.d.ts +0 -62
- package/dist/_global/numeric/domain/generated.d.ts +0 -11240
- package/dist/_global/numeric/domain/inc-dec.d.ts +0 -52
- package/dist/_global/numeric/domain/independent.d.ts +0 -203
- package/dist/_global/numeric/domain/index.d.ts +0 -4
- package/dist/_global/numeric/inc-dec.d.ts +0 -50
- package/dist/_global/numeric/index.d.ts +0 -3
- package/dist/_global/numeric/math.d.ts +0 -257
- package/dist/_global/resolve.d.ts +0 -45
- package/dist/_global/string.d.ts +0 -306
- package/dist/_global/structure/_register.d.ts +0 -93
- package/dist/_global/structure/index.d.ts +0 -2
- package/dist/_global/structure/structure.d.ts +0 -289
- package/dist/_global/type/_register.d.ts +0 -64
- package/dist/_global/type/def.d.ts +0 -47
- package/dist/_global/type/index.d.ts +0 -7
- package/dist/_global/type/key-arr-def.d.ts +0 -14
- package/dist/_global/type/key-def.d.ts +0 -76
- package/dist/_global/type/key-literal-default-arr.d.ts +0 -45
- package/dist/_global/type/not.d.ts +0 -44
- package/dist/_global/type/union.d.ts +0 -33
- package/dist/_global/union.d.ts +0 -79
- package/dist/_global/utility/alt.d.ts +0 -58
- package/dist/_global/utility/flat.d.ts +0 -60
- package/dist/_global/utility/if-def.d.ts +0 -22
- package/dist/_global/utility/index.d.ts +0 -9
- package/dist/_global/utility/merge.d.ts +0 -29
- package/dist/_global/utility/opaque.d.ts +0 -17
- package/dist/_global/utility/options.d.ts +0 -34
- package/dist/_global/utility/override.d.ts +0 -100
- package/dist/_global/utility/replace-key.d.ts +0 -33
- package/dist/_global/utility/required-optional.d.ts +0 -24
- package/dist/_std-ext/index.d.ts +0 -1
- package/dist/_std-ext/object.d.ts +0 -23
- package/dist/export.d.ts +0 -2
- package/dist/index.d.ts +0 -4
- package/dist/index.js +0 -480
- package/dist/index.js.map +0 -1
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
declare namespace AVStantso.TS.Numeric.Domain {
|
|
2
|
-
/**
|
|
3
|
-
* @summary Increment numeric literal inside `Numeric.Domain`\
|
|
4
|
-
*
|
|
5
|
-
* ⚠ Result defined on `Numeric.Domain`
|
|
6
|
-
* @template N Numeric literal
|
|
7
|
-
* @see Source: https://stackoverflow.com/questions/54243431/how-can-i-produce-an-incremented-version-of-a-numeric-literal-type-in-typescript
|
|
8
|
-
* @example
|
|
9
|
-
* type nv = CheckType<Increment<never>, number>;
|
|
10
|
-
* type ud = CheckType<Increment<undefined>, unknown>;
|
|
11
|
-
*
|
|
12
|
-
* type p10 = CheckType<Increment<10>, 11>;
|
|
13
|
-
* type p = CheckType<Increment<1>, 2>;
|
|
14
|
-
* type z = CheckType<Increment<0>, 1>;
|
|
15
|
-
* type n = CheckType<Increment<-1>, 0>;
|
|
16
|
-
* type n10 = CheckType<Increment<-10>, -9>;
|
|
17
|
-
*/
|
|
18
|
-
type Increment<N extends number> = Numeric.IsNegative<N> extends false ? [
|
|
19
|
-
...Numeric.Domain.Positive,
|
|
20
|
-
...number[]
|
|
21
|
-
][N] : [
|
|
22
|
-
1,
|
|
23
|
-
0,
|
|
24
|
-
...Numeric.Domain.Negative,
|
|
25
|
-
...number[]
|
|
26
|
-
][Numeric.Negative.ToPositive<N>];
|
|
27
|
-
/**
|
|
28
|
-
* @summary Decrement numeric literal inside `Numeric.Domain`\
|
|
29
|
-
*
|
|
30
|
-
* ⚠ Result defined on `Numeric.Domain`
|
|
31
|
-
* @template N Numeric literal
|
|
32
|
-
* @example
|
|
33
|
-
* type nv = CheckType<Decrement<never>, number>;
|
|
34
|
-
* type ud = CheckType<Decrement<undefined>, unknown>;
|
|
35
|
-
*
|
|
36
|
-
* type p10 = CheckType<Decrement<10>, 9>;
|
|
37
|
-
* type p = CheckType<Decrement<1>, 0>;
|
|
38
|
-
* type z = CheckType<Decrement<0>, -1>;
|
|
39
|
-
* type n = CheckType<Decrement<-1>, -2>;
|
|
40
|
-
* type n10 = CheckType<Decrement<-10>, -11>;
|
|
41
|
-
* @see Increment
|
|
42
|
-
*/
|
|
43
|
-
type Decrement<N extends number> = Numeric.IsNegative<N> extends false ? [
|
|
44
|
-
-1,
|
|
45
|
-
0,
|
|
46
|
-
...Numeric.Domain.Positive,
|
|
47
|
-
...number[]
|
|
48
|
-
][N] : [
|
|
49
|
-
...Numeric.Domain.Negative,
|
|
50
|
-
...number[]
|
|
51
|
-
][Numeric.Negative.ToPositive<N>];
|
|
52
|
-
}
|
|
@@ -1,203 +0,0 @@
|
|
|
1
|
-
declare namespace AVStantso.TS.Numeric {
|
|
2
|
-
/**
|
|
3
|
-
* @summary Test a number `N` is a positive number
|
|
4
|
-
* @template N Tested number
|
|
5
|
-
* @template IfTrue Result, if `N` is a positive number
|
|
6
|
-
* @template IfFalse Result, if `N` is a negative number or `0` or `undefined`
|
|
7
|
-
* @returns `IfFalse` or `IfTrue` param
|
|
8
|
-
* @example
|
|
9
|
-
* type nv = CheckType<IsPositive<never>, never>;
|
|
10
|
-
* type uf = CheckType<IsPositive<undefined>, false>;
|
|
11
|
-
*
|
|
12
|
-
* type p = CheckType<IsPositive<1>, true>;
|
|
13
|
-
* type z = CheckType<IsPositive<0>, false>;
|
|
14
|
-
* type n = CheckType<IsPositive<-1>, false>;
|
|
15
|
-
*/
|
|
16
|
-
export type IsPositive<N extends number, IfTrue = true, IfFalse = false> = N extends undefined | 0 ? IfFalse : `${N}` extends `-${string}` ? IfFalse : IfTrue;
|
|
17
|
-
/**
|
|
18
|
-
* @summary Test a number `N` is a negative number
|
|
19
|
-
* @template N Tested number
|
|
20
|
-
* @template IfTrue Result, if `N` is a negative number
|
|
21
|
-
* @template IfFalse Result, if `N` is a positive number or `0` or `undefined`
|
|
22
|
-
* @returns `IfFalse` or `IfTrue` param
|
|
23
|
-
* @example
|
|
24
|
-
* type nv = CheckType<IsNegative<never>, never>;
|
|
25
|
-
* type uf = CheckType<IsNegative<undefined>, false>;
|
|
26
|
-
*
|
|
27
|
-
* type p = CheckType<IsNegative<1>, false>;
|
|
28
|
-
* type z = CheckType<IsNegative<0>, false>;
|
|
29
|
-
* type n = CheckType<IsNegative<-1>, true>;
|
|
30
|
-
*/
|
|
31
|
-
export type IsNegative<N extends number, IfTrue = true, IfFalse = false> = N extends undefined | 0 ? IfFalse : `${N}` extends `-${string}` ? IfTrue : IfFalse;
|
|
32
|
-
/**
|
|
33
|
-
* @summary Positive numbers types.
|
|
34
|
-
*/
|
|
35
|
-
export namespace Positive {
|
|
36
|
-
/**
|
|
37
|
-
* @summary Get negative of absolute value of numeric literal.
|
|
38
|
-
*
|
|
39
|
-
* Negative numbers not change.
|
|
40
|
-
* @example
|
|
41
|
-
* type nv = CheckType<ToNegative<never>, never>;
|
|
42
|
-
* type ud = CheckType<ToNegative<undefined>, undefined>;
|
|
43
|
-
*
|
|
44
|
-
* type z = CheckType<ToNegative<0>, 0>;
|
|
45
|
-
*
|
|
46
|
-
* type p1 = CheckType<ToNegative<1>, -1>;
|
|
47
|
-
* type p255 = CheckType<ToNegative<255>, -255>;
|
|
48
|
-
* type p999 = CheckType<ToNegative<999>, -999>;
|
|
49
|
-
*
|
|
50
|
-
* type n1 = CheckType<ToNegative<-1>, -1>;
|
|
51
|
-
* type n255 = CheckType<ToNegative<-255>, -255>;
|
|
52
|
-
* type n999 = CheckType<ToNegative<-999>, -999>;
|
|
53
|
-
*/
|
|
54
|
-
type ToNegative<N extends number> = N extends undefined | 0 ? N : `-${N}` extends `${infer R extends number}` ? R : N;
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* @summary Negative numbers types.
|
|
58
|
-
*/
|
|
59
|
-
export namespace Negative {
|
|
60
|
-
/**
|
|
61
|
-
* @summary Get absolute value of negative numeric literal.
|
|
62
|
-
*
|
|
63
|
-
* Positive numbers not change.
|
|
64
|
-
*
|
|
65
|
-
* ⚠ Is low-level type! Use `Numeric.Abs` instead
|
|
66
|
-
* @example
|
|
67
|
-
* type nv = CheckType<ToPositive<never>, never>;
|
|
68
|
-
* type ud = CheckType<ToPositive<undefined>, undefined>;
|
|
69
|
-
*
|
|
70
|
-
* type z = CheckType<ToPositive<0>, 0>;
|
|
71
|
-
*
|
|
72
|
-
* type p1 = CheckType<ToPositive<1>, 1>;
|
|
73
|
-
* type p255 = CheckType<ToPositive<255>, 255>;
|
|
74
|
-
* type p999 = CheckType<ToPositive<999>, 999>;
|
|
75
|
-
*
|
|
76
|
-
* type n1 = CheckType<ToPositive<-1>, 1>;
|
|
77
|
-
* type n255 = CheckType<ToPositive<-255>, 255>;
|
|
78
|
-
* type n999 = CheckType<ToPositive<-999>, 999>;
|
|
79
|
-
*/
|
|
80
|
-
type ToPositive<N extends number> = N extends undefined | 0 ? N : `${N}` extends `-${infer R extends number}` ? R : N;
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* @summary With `N` param returns sign of `N`.
|
|
84
|
-
*
|
|
85
|
-
* Without `N` param returns sign union `-1 | 0 | 1`
|
|
86
|
-
* @template N Number
|
|
87
|
-
* @example
|
|
88
|
-
* type s = CheckType<Sign, -1 | 0 | 1>;
|
|
89
|
-
* type p = CheckType<Sign<10>, 1>;
|
|
90
|
-
* type z = CheckType<Sign<0>, 0>;
|
|
91
|
-
* type n = CheckType<Sign<-10>, -1>;
|
|
92
|
-
*/
|
|
93
|
-
export type Sign<N extends number = undefined> = N extends undefined ? -1 | 0 | 1 : N extends 0 ? 0 : IsNegative<N, -1, 1>;
|
|
94
|
-
/**
|
|
95
|
-
* @summary Digits
|
|
96
|
-
*/
|
|
97
|
-
export namespace Digits {
|
|
98
|
-
/**
|
|
99
|
-
* @summary Digits 10 map
|
|
100
|
-
*/
|
|
101
|
-
type Map = {
|
|
102
|
-
'0': 0;
|
|
103
|
-
'1': 1;
|
|
104
|
-
'2': 2;
|
|
105
|
-
'3': 3;
|
|
106
|
-
'4': 4;
|
|
107
|
-
'5': 5;
|
|
108
|
-
'6': 6;
|
|
109
|
-
'7': 7;
|
|
110
|
-
'8': 8;
|
|
111
|
-
'9': 9;
|
|
112
|
-
};
|
|
113
|
-
/**
|
|
114
|
-
* @summary Is odd digit map
|
|
115
|
-
*/
|
|
116
|
-
type IsOdd = {
|
|
117
|
-
'0': false;
|
|
118
|
-
'1': true;
|
|
119
|
-
'2': false;
|
|
120
|
-
'3': true;
|
|
121
|
-
'4': false;
|
|
122
|
-
'5': true;
|
|
123
|
-
'6': false;
|
|
124
|
-
'7': true;
|
|
125
|
-
'8': false;
|
|
126
|
-
'9': true;
|
|
127
|
-
};
|
|
128
|
-
/**
|
|
129
|
-
* @summary Digits 16
|
|
130
|
-
*/
|
|
131
|
-
namespace Hex {
|
|
132
|
-
/**
|
|
133
|
-
* @summary Digits 16 map
|
|
134
|
-
*/
|
|
135
|
-
type Map = Digits.Map & {
|
|
136
|
-
'A': 'A';
|
|
137
|
-
'B': 'B';
|
|
138
|
-
'C': 'C';
|
|
139
|
-
'D': 'D';
|
|
140
|
-
'E': 'E';
|
|
141
|
-
'F': 'F';
|
|
142
|
-
};
|
|
143
|
-
}
|
|
144
|
-
type Hex = keyof Hex.Map;
|
|
145
|
-
}
|
|
146
|
-
export type Digits = keyof Digits.Map;
|
|
147
|
-
type _IsOdd<S extends string> = S extends `${infer C}${infer E}` ? E extends '' ? Digits.IsOdd[Extract<C, keyof Digits.IsOdd>] : _IsOdd<E> : never;
|
|
148
|
-
/**
|
|
149
|
-
* @summary Test a number is a odd number
|
|
150
|
-
* @template N Tested number
|
|
151
|
-
* @template IfTrue Result, if `N` is a odd number
|
|
152
|
-
* @template IfFalse Result, if `N` is a even number or `0` or `undefined`
|
|
153
|
-
* @returns `IfFalse` or `IfTrue` param
|
|
154
|
-
* @example
|
|
155
|
-
* type o = CheckType<IsOdd<11>, true>;
|
|
156
|
-
* type e = CheckType<IsOdd<32>, false>;
|
|
157
|
-
*/
|
|
158
|
-
export type IsOdd<N extends number, IfTrue = true, IfFalse = false> = N extends undefined ? never : (`${N}` extends `-${infer S}` ? _IsOdd<S> : _IsOdd<`${N}`>) extends true ? IfTrue : IfFalse;
|
|
159
|
-
/**
|
|
160
|
-
* @summary Test a number is a even number
|
|
161
|
-
* @template N Tested number
|
|
162
|
-
* @template IfTrue Result, if `N` is a even number
|
|
163
|
-
* @template IfFalse Result, if `N` is a odd number or `0` or `undefined`
|
|
164
|
-
* @returns `IfFalse` or `IfTrue` param
|
|
165
|
-
* @example
|
|
166
|
-
* type o = CheckType<IsEven<11>, false>;
|
|
167
|
-
* type e = CheckType<IsEven<32>, true>;
|
|
168
|
-
*/
|
|
169
|
-
export type IsEven<N extends number, IfTrue = true, IfFalse = false> = N extends undefined ? IfFalse : (`${N}` extends `-${infer S}` ? _IsOdd<S> : _IsOdd<`${N}`>) extends true ? IfFalse : IfTrue;
|
|
170
|
-
type _IsNumber<S extends string> = S extends '' ? false : S extends `${infer C}${infer E}` ? C extends Digits ? E extends '' ? true : _IsNumber<E> : false : never;
|
|
171
|
-
/**
|
|
172
|
-
* @summary Test a string `S` is a number in string
|
|
173
|
-
* @template S Tested string
|
|
174
|
-
* @template IfTrue Result, if `S` is a number in string
|
|
175
|
-
* @template IfFalse Result, if `S` is NOT a number in string or `undefined`
|
|
176
|
-
* @returns `IfFalse` or `IfTrue` param
|
|
177
|
-
* @example
|
|
178
|
-
* type pn = CheckType<IsNumber<'1000'>, true>;
|
|
179
|
-
* type s = CheckType<IsNumber<'abc'>, false>;
|
|
180
|
-
* type nn = CheckType<IsNumber<'-1'>, true>;
|
|
181
|
-
* type nnn = CheckType<IsNumber<'--1'>, false>;
|
|
182
|
-
*/
|
|
183
|
-
export type IsNumber<S extends string, IfTrue = true, IfFalse = false> = S extends undefined ? IfFalse : (`${S}` extends `-${infer V}` ? _IsNumber<V> : _IsNumber<S>) extends true ? IfTrue : IfFalse;
|
|
184
|
-
/**
|
|
185
|
-
* @summary Parse string `S` for extract number from it
|
|
186
|
-
* @example
|
|
187
|
-
* type nv = CheckType<Parse<never>, never>;
|
|
188
|
-
* type ud = CheckType<Parse<undefined>, undefined>;
|
|
189
|
-
* type nan = CheckType<Parse<'abc'>, never>;
|
|
190
|
-
*
|
|
191
|
-
* type z = CheckType<Parse<'0'>, 0>;
|
|
192
|
-
*
|
|
193
|
-
* type p1 = CheckType<Parse<'1'>, 1>;
|
|
194
|
-
* type p255 = CheckType<Parse<'255'>, 255>;
|
|
195
|
-
* type p999 = CheckType<Parse<'999'>, 999>;
|
|
196
|
-
*
|
|
197
|
-
* type n1 = CheckType<Parse<'-1'>, -1>;
|
|
198
|
-
* type n255 = CheckType<Parse<'-255'>, -255>;
|
|
199
|
-
* type n999 = CheckType<Parse<'-999'>, -999>;
|
|
200
|
-
*/
|
|
201
|
-
export type Parse<S extends string> = S extends undefined ? S : `${S}` extends `${infer N extends number}` ? N : never;
|
|
202
|
-
export {};
|
|
203
|
-
}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
declare namespace AVStantso.TS {
|
|
2
|
-
/**
|
|
3
|
-
* @summary Increment numeric literal inside `Numeric.Domain.Positive`
|
|
4
|
-
*
|
|
5
|
-
* ⚠ Result defined on `Numeric.Domain.Positive`
|
|
6
|
-
* @template N Numeric literal
|
|
7
|
-
* @see Numeric.Domain.Increment
|
|
8
|
-
* @example
|
|
9
|
-
* type nv = CheckType<Increment<never>, number>;
|
|
10
|
-
*
|
|
11
|
-
* // Loading...
|
|
12
|
-
* // type ud = CheckType<Increment<undefined>, unknown>;
|
|
13
|
-
*
|
|
14
|
-
* type z = CheckType<Increment<0>, 1>;
|
|
15
|
-
* type p1 = CheckType<Increment<1>, 2>;
|
|
16
|
-
* type p255 = CheckType<Increment<255>, 256>;
|
|
17
|
-
*
|
|
18
|
-
* // Loading...
|
|
19
|
-
* //type n = CheckType<Increment<-1>, number>;
|
|
20
|
-
*/
|
|
21
|
-
type Increment<N extends number> = [
|
|
22
|
-
...Numeric.Domain.Positive,
|
|
23
|
-
...number[]
|
|
24
|
-
][N];
|
|
25
|
-
/**
|
|
26
|
-
* @summary Decrement numeric literal inside positive `Numeric.Domain.Positive`
|
|
27
|
-
*
|
|
28
|
-
* ⚠ Result defined on `Numeric.Domain.Positive`
|
|
29
|
-
* @template N Numeric literal
|
|
30
|
-
* @example
|
|
31
|
-
* type nv = CheckType<Decrement<never>, number>;
|
|
32
|
-
*
|
|
33
|
-
* // Loading...
|
|
34
|
-
* // type ud = CheckType<Decrement<undefined>, unknown>;
|
|
35
|
-
*
|
|
36
|
-
* type z = CheckType<Decrement<0>, -1>;
|
|
37
|
-
* type p1 = CheckType<Decrement<1>, 0>;
|
|
38
|
-
* type p255 = CheckType<Decrement<255>, 254>;
|
|
39
|
-
*
|
|
40
|
-
* // Loading...
|
|
41
|
-
* //type n = CheckType<Decrement<-1>, number>;
|
|
42
|
-
* @see Numeric.Domain.Decrement
|
|
43
|
-
*/
|
|
44
|
-
type Decrement<N extends number> = [
|
|
45
|
-
-1,
|
|
46
|
-
0,
|
|
47
|
-
...Numeric.Domain.Positive,
|
|
48
|
-
...number[]
|
|
49
|
-
][N];
|
|
50
|
-
}
|
|
@@ -1,257 +0,0 @@
|
|
|
1
|
-
declare namespace AVStantso.TS.Numeric {
|
|
2
|
-
/**
|
|
3
|
-
* @summary Absolute value of numeric literal.
|
|
4
|
-
* @example
|
|
5
|
-
* type nv = CheckType<Abs<never>, never>;
|
|
6
|
-
* type ud = CheckType<Abs<undefined>, undefined>;
|
|
7
|
-
*
|
|
8
|
-
* type z = CheckType<Abs<0>, 0>;
|
|
9
|
-
*
|
|
10
|
-
* type p1 = CheckType<Abs<1>, 1>;
|
|
11
|
-
* type p255 = CheckType<Abs<255>, 255>;
|
|
12
|
-
* type p999 = CheckType<Abs<999>, 999>;
|
|
13
|
-
*
|
|
14
|
-
* type n1 = CheckType<Abs<-1>, 1>;
|
|
15
|
-
* type n255 = CheckType<Abs<-255>, 255>;
|
|
16
|
-
* type n999 = CheckType<Abs<-999>, 999>;
|
|
17
|
-
*/
|
|
18
|
-
export type Abs<N extends number> = Negative.ToPositive<N>;
|
|
19
|
-
/**
|
|
20
|
-
* @summary Invert value of numeric literal. `Positive ⇔ Negative`
|
|
21
|
-
* @example
|
|
22
|
-
* type nv = CheckType<Invert<never>, never>;
|
|
23
|
-
* type ud = CheckType<Invert<undefined>, undefined>;
|
|
24
|
-
*
|
|
25
|
-
* type z = CheckType<Invert<0>, 0>;
|
|
26
|
-
*
|
|
27
|
-
* type p1 = CheckType<Invert<1>, -1>;
|
|
28
|
-
* type p255 = CheckType<Invert<255>, -255>;
|
|
29
|
-
* type p999 = CheckType<Invert<999>, -999>;
|
|
30
|
-
*
|
|
31
|
-
* type n1 = CheckType<Invert<-1>, 1>;
|
|
32
|
-
* type n255 = CheckType<Invert<-255>, 255>;
|
|
33
|
-
* type n999 = CheckType<Invert<-999>, 999>;
|
|
34
|
-
*/
|
|
35
|
-
export type Invert<N extends number> = N extends undefined | 0 ? N : `${N}` extends `-${infer V extends number}` ? V : `-${N}` extends `${infer V extends number}` ? V : never;
|
|
36
|
-
/**
|
|
37
|
-
* @summary Digits x 2: `[<Current digit>, <Next digit coef>]`
|
|
38
|
-
*/
|
|
39
|
-
type Dx2 = [number, number];
|
|
40
|
-
/**
|
|
41
|
-
* @summary `X, Y, Abs<X>, Abs<Y>, Sign<X>, Sign<Y>`
|
|
42
|
-
*/
|
|
43
|
-
type Args = [number, number, number, number, number, number];
|
|
44
|
-
namespace Args {
|
|
45
|
-
/**
|
|
46
|
-
* @returns `[Abs<N>, Sign<N>]`
|
|
47
|
-
*/
|
|
48
|
-
export type ABSG<N extends number> = N extends 0 ? [0, 0] : `${N}` extends `-${infer V extends number}` ? [V, -1] : [N, 1];
|
|
49
|
-
export type From<X extends number, Y extends number, absgX extends [number, number] = ABSG<X>, absgY extends [number, number] = ABSG<Y>> = [
|
|
50
|
-
X,
|
|
51
|
-
Y,
|
|
52
|
-
absgX[0],
|
|
53
|
-
absgY[0],
|
|
54
|
-
absgX[1],
|
|
55
|
-
absgY[1]
|
|
56
|
-
];
|
|
57
|
-
export type Exchange<A extends Args> = [A[1], A[0], A[3], A[2], A[5], A[4]];
|
|
58
|
-
type _SignsMultTable = [
|
|
59
|
-
[
|
|
60
|
-
1,
|
|
61
|
-
0,
|
|
62
|
-
-1
|
|
63
|
-
],
|
|
64
|
-
[
|
|
65
|
-
0,
|
|
66
|
-
0,
|
|
67
|
-
0
|
|
68
|
-
],
|
|
69
|
-
[
|
|
70
|
-
-1,
|
|
71
|
-
0,
|
|
72
|
-
1
|
|
73
|
-
]
|
|
74
|
-
];
|
|
75
|
-
export type SignsMult<A extends Args> = _SignsMultTable[Domain.Increment<A[4]>][Domain.Increment<A[5]>];
|
|
76
|
-
export {};
|
|
77
|
-
}
|
|
78
|
-
namespace _SummDiff {
|
|
79
|
-
namespace For {
|
|
80
|
-
type Up<X extends number, Y extends number> = 0 extends X | Y ? X extends 0 ? Y : Y extends 0 ? X : never : Up<Domain.Increment<X>, Domain.Decrement<Y>>;
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* @summary Empiric limit `999` in difference
|
|
84
|
-
* @deprecated Difficult to use due to limit
|
|
85
|
-
*/
|
|
86
|
-
export type For<X extends number, Y extends number> = IsNegative<Y> extends true ? For.Up<Y, X> : For.Up<X, Y>;
|
|
87
|
-
export type Digits<Xd extends string[], Yd extends string[], IsMinus extends boolean, R extends Dx2[] = []> = Xd extends [`${infer fX extends number}`, ...infer restX extends string[]] ? Yd extends [`${infer fY extends number}`, ...infer restY extends string[]] ? Digits<restX, restY, IsMinus, [
|
|
88
|
-
...R,
|
|
89
|
-
IsMinus extends true ? Domain.Diffs.Calc<fX, fY> : Domain.Summs.Calc<fX, fY>
|
|
90
|
-
]> : Digits<restX, [], IsMinus, [...R, [fX, 0]]> : Yd extends [`${infer fY extends number}`, ...infer restY extends string[]] ? Digits<[
|
|
91
|
-
], restY, IsMinus, [
|
|
92
|
-
...R,
|
|
93
|
-
IsMinus extends true ? Domain.Diffs.Calc<0, fY> : Domain.Summs.Calc<0, fY>
|
|
94
|
-
]> : R;
|
|
95
|
-
export type Unzero<S extends string> = S extends `${infer F}${infer Rest}` ? F extends '0' ? Unzero<Rest> : S : '0';
|
|
96
|
-
export {};
|
|
97
|
-
}
|
|
98
|
-
namespace Summ {
|
|
99
|
-
type CombineStep<D extends Dx2[], F extends Dx2, R extends string, N extends number, C extends Dx2 = Domain.Summs.Calc<F[0], Abs<N>>, NN extends number = Domain.Summs.Calc<C[1], F[1]>[0], V extends number | string = D extends [unknown, ...unknown[]] ? C[0] : NN extends 1 ? `1${C[0]}` : C[0]> = Combine<D, `${V}${R}`, NN>;
|
|
100
|
-
type Combine<D extends Dx2[], R extends string = '', N extends number = 0> = D extends [infer F extends Dx2, ...infer Rest extends Dx2[]] ? CombineStep<Rest, F, R, N> : N extends -1 ? `-${R}` : R;
|
|
101
|
-
type Calculate<A extends Args, Xd extends string[] = TS.Array._Reverse<TS.String._SplitToChars<`${A[2]}`>>, Yd extends string[] = TS.Array._Reverse<TS.String._SplitToChars<`${A[3]}`>>, D extends Dx2[] = _SummDiff.Digits<Xd, Yd, false>, C extends string = Combine<D>, U extends string = _SummDiff.Unzero<C>, R extends number = `${U}` extends `${infer R extends number}` ? R : never> = [R, U, C, D];
|
|
102
|
-
export type Represent<A extends Args, NeedInvert extends boolean, Debug extends boolean = false, R extends TS.Arr = [...Calculate<A>, NeedInvert]> = Debug extends true ? R : NeedInvert extends true ? Invert<R[0]> : R[0];
|
|
103
|
-
export type Switch<A extends Args, Debug extends boolean = false> = A[4] | A[5] extends -1 ? Represent<A, true, Debug> : -1 extends A[4] | A[5] ? Diff.Switch.Inner<A, Debug> : Represent<A, false, Debug>;
|
|
104
|
-
export {};
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* @summary Calculate `X + Y`.
|
|
108
|
-
* @example
|
|
109
|
-
* type nv = CheckType<Summ<never, never>, never>;
|
|
110
|
-
* type ud = CheckType<Summ<undefined, undefined>, undefined>;
|
|
111
|
-
*
|
|
112
|
-
* type p = CheckType<Summ<8, 3>, 11>;
|
|
113
|
-
* type z = CheckType<Summ<0, 3>, 3>;
|
|
114
|
-
* type n = CheckType<Summ<-8, 3>, -5>;
|
|
115
|
-
*
|
|
116
|
-
* type p20997 = CheckType<Summ<20000, 997>, 20997>;
|
|
117
|
-
* type p1010 = CheckType<Summ<1001, 9>, 1010>;
|
|
118
|
-
*/
|
|
119
|
-
export type Summ<X extends number, Y extends number> = X extends undefined | 0 ? Y : Y extends undefined | 0 ? X : Summ.Switch<Args.From<X, Y>>;
|
|
120
|
-
namespace Summ {
|
|
121
|
-
}
|
|
122
|
-
namespace Diff {
|
|
123
|
-
type CombineStep<D extends Dx2[], F extends Dx2, R extends string, N extends number, C extends Dx2 = Domain.Diffs.Calc<F[0], Invert<N>>, NN extends number = F[1] extends -1 ? Domain.Decrement<C[1]> : F[1] extends 1 ? Increment<C[1]> : C[1]> = Combine<D, `${C[0]}${R}`, NN>;
|
|
124
|
-
type Combine<D extends Dx2[], R extends string = '', N extends number = 0> = D extends [infer F extends Dx2, ...infer Rest extends Dx2[]] ? CombineStep<Rest, F, R, N> : N extends -1 ? `-${R}` : R;
|
|
125
|
-
type Calculate<A extends Args, Xd extends string[] = TS.Array._Reverse<TS.String._SplitToChars<`${A[2]}`>>, Yd extends string[] = TS.Array._Reverse<TS.String._SplitToChars<`${A[3]}`>>, D extends [number, number][] = _SummDiff.Digits<Xd, Yd, true>, C extends string = Combine<D>, U extends string = _SummDiff.Unzero<C>, R extends number = `${U}` extends `${infer R extends number}` ? R : never> = [R, U, C, D];
|
|
126
|
-
type Represent<A extends Args, Debug extends boolean = false, NeedInvert extends boolean = _LT<[A[2], A[3], true, false]>, R extends Arr = [...Calculate<NeedInvert extends true ? Args.Exchange<A> : A>, NeedInvert]> = Debug extends true ? R : NeedInvert extends true ? Invert<R[0]> : R[0];
|
|
127
|
-
export namespace Switch {
|
|
128
|
-
type Inner<A extends Args, Debug extends boolean = false> = Represent<A[4] extends -1 ? Args.Exchange<A> : A, Debug>;
|
|
129
|
-
}
|
|
130
|
-
export type Switch<A extends Args, Debug extends boolean = false> = A[4] extends A[5] ? Switch.Inner<A, Debug> : -1 extends A[4] | A[5] ? Summ.Represent<A, A[4] extends -1 ? true : false, Debug> : never;
|
|
131
|
-
export {};
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* @summary Calculate `X - Y`.
|
|
135
|
-
* @example
|
|
136
|
-
* type nv = CheckType<Diff<never, never>, never>;
|
|
137
|
-
* type ud = CheckType<Diff<undefined, undefined>, undefined>;
|
|
138
|
-
*
|
|
139
|
-
* type p = CheckType<Diff<8, 3>, 5>;
|
|
140
|
-
* type z = CheckType<Diff<0, 3>, -3>;
|
|
141
|
-
* type n = CheckType<Diff<-8, 3>, -11>;
|
|
142
|
-
*
|
|
143
|
-
* type p19003 = CheckType<Diff<20000, 997>, 19003>;
|
|
144
|
-
* type p992 = CheckType<Diff<1001, 9>, 992>;
|
|
145
|
-
*/
|
|
146
|
-
export type Diff<X extends number, Y extends number> = X extends undefined | 0 ? Invert<Y> : Y extends undefined | 0 ? X : Diff.Switch<Args.From<X, Y>>;
|
|
147
|
-
namespace Diff {
|
|
148
|
-
}
|
|
149
|
-
namespace Multiply {
|
|
150
|
-
type Calculate<A extends Args, R extends number = A[2], I extends number = A[3]> = I extends 1 ? R : Calculate<A, Summ.Represent<[R, A[2], R, A[2], 1, 1], false>, Decrement<I>>;
|
|
151
|
-
export type Represent<A extends Args, Debug extends boolean = false, NeedInvert extends boolean = A[4] extends A[5] ? false : true, R extends Arr = [Calculate<A>, NeedInvert]> = Debug extends true ? R : NeedInvert extends true ? Invert<R[0]> : R[0];
|
|
152
|
-
export type Switch<A extends Args, Debug extends boolean = false> = Represent<_LT<[A[2], A[3], true, false]> extends true ? Args.Exchange<A> : A, Debug>;
|
|
153
|
-
export {};
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* @summary Calculate `X * Y`.
|
|
157
|
-
*
|
|
158
|
-
* ⚠ One of `X` or `Y` must be defined on `[-1000, 1000]`.\
|
|
159
|
-
* ⚠ Out of this range: `Type instantiation is excessively deep and possibly infinite.ts(2589)`
|
|
160
|
-
* @example
|
|
161
|
-
* type nv = CheckType<Multiply<never, never>, never>;
|
|
162
|
-
* type ud = CheckType<Multiply<undefined, undefined>, undefined>;
|
|
163
|
-
*
|
|
164
|
-
* type p = CheckType<Multiply<8, 3>, 24>;
|
|
165
|
-
* type z = CheckType<Multiply<0, 3>, 0>;
|
|
166
|
-
* type n = CheckType<Multiply<-8, 3>, -24>;
|
|
167
|
-
*
|
|
168
|
-
* type p_900000000 = CheckType<Multiply<900000, -1000>, -900000000>;
|
|
169
|
-
* type p9009 = CheckType<Multiply<1001, 9>, 9009>;
|
|
170
|
-
*/
|
|
171
|
-
export type Multiply<X extends number, Y extends number> = X extends undefined | 0 ? X : Y extends undefined | 0 ? Y : Multiply.Switch<Args.From<X, Y>>;
|
|
172
|
-
namespace Multiply {
|
|
173
|
-
}
|
|
174
|
-
namespace Div {
|
|
175
|
-
type Calculate<A extends Args, Rest extends number = A[2], R extends number = 0> = _LT<[Rest, A[3], true, false]> extends true ? Rest extends 0 ? R : [R, Rest] : Calculate<A, Diff.Switch.Inner<[Rest, A[3], Rest, A[3], 1, 1], false>, Increment<R>>;
|
|
176
|
-
type Represent<A extends Args, Debug extends boolean = false, NeedInvert extends boolean = A[4] extends A[5] ? false : true, R extends Arr = [Calculate<A>, NeedInvert]> = Debug extends true ? R : NeedInvert extends true ? R[0] extends [infer Q extends number, infer M extends number] ? [Invert<Q>, Invert<M>] : Invert<R[0]> : R[0];
|
|
177
|
-
export type Switch<A extends Args, Debug extends boolean = false> = 0 extends A[2] | A[3] ? A[3] extends 0 ? never : 0 : A[3] extends 1 ? A[0] : A[2] extends A[3] ? Args.SignsMult<A> : _LT<[A[2], A[3], true, false]> extends true ? null : Represent<A, Debug>;
|
|
178
|
-
export {};
|
|
179
|
-
}
|
|
180
|
-
/**
|
|
181
|
-
* @summary Calculate `X / Y`.
|
|
182
|
-
*
|
|
183
|
-
* ⚠ Result must be defined on `[-1000, 1000]`.\
|
|
184
|
-
* ⚠ Out of this range: `Type instantiation is excessively deep and possibly infinite.ts(2589)`
|
|
185
|
-
* @returns `namber` if integer division, else `[namber, namber]`
|
|
186
|
-
* @example
|
|
187
|
-
* type nv = CheckType<Div<never, never>, never>;
|
|
188
|
-
* type ud = CheckType<Div<undefined, undefined>, undefined>;
|
|
189
|
-
*
|
|
190
|
-
* type x = CheckType<Div<8, 0>, never>;
|
|
191
|
-
* type z = CheckType<Div<0, 3>, 0>;
|
|
192
|
-
*
|
|
193
|
-
* type not_int = CheckType<Div<1, 3>, null>;
|
|
194
|
-
*
|
|
195
|
-
* type p_1_1 = CheckType<Div<1, 1>, 1>;
|
|
196
|
-
* type p_1_2 = CheckType<Div<2, 1>, 2>;
|
|
197
|
-
* type p_1_3 = CheckType<Div<3, 1>, 3>;
|
|
198
|
-
*
|
|
199
|
-
* type p_8_1 = CheckType<Div<8, 1>, 8>;
|
|
200
|
-
* type p_8_2 = CheckType<Div<8, 2>, 4>;
|
|
201
|
-
* type p_8_3 = CheckType<Div<8, 3>, [2, 2]>;
|
|
202
|
-
*
|
|
203
|
-
* type e1 = CheckType<Div<-68899, -68899>, 1>;
|
|
204
|
-
* type e2 = CheckType<Div<456734, -456734>, -1>;
|
|
205
|
-
*
|
|
206
|
-
* type n_m34_7 = CheckType<Div<-34, 7>, [-4, -6]>;
|
|
207
|
-
* type n_34_m7 = CheckType<Div<34, -7>, [-4, -6]>;
|
|
208
|
-
* type n_m34_m7 = CheckType<Div<-34, -7>, [4, 6]>;
|
|
209
|
-
*
|
|
210
|
-
* type l_max = CheckType<Div<999999, 1000>, [999, 999]>;
|
|
211
|
-
* // // @ts-ignore Type instantiation is excessively deep and possibly infinite.ts(2589)
|
|
212
|
-
* // type l_under = CheckType<Div<1000000, 1000>, 1000>;
|
|
213
|
-
*/
|
|
214
|
-
export type Div<X extends number, Y extends number> = X extends undefined | 0 ? X : Y extends undefined ? Y : Div.Switch<Args.From<X, Y>>;
|
|
215
|
-
namespace Div {
|
|
216
|
-
}
|
|
217
|
-
namespace Power {
|
|
218
|
-
type Switch<A extends Args, X extends number[] = Domain.Power[A[2]], R extends number = X extends undefined ? undefined : X[A[3]]> = R extends undefined ? null : A[4] extends -1 ? IsEven<A[3]> extends true ? R : Invert<R> : R;
|
|
219
|
-
}
|
|
220
|
-
/**
|
|
221
|
-
* @summary Calculate `X ^ E`. If `E` is negotive — `never`
|
|
222
|
-
*
|
|
223
|
-
* ⚠ Result defined on `Numeric.Domain.Power`.
|
|
224
|
-
* @example
|
|
225
|
-
* type nv = CheckType<Power<never, never>, never>;
|
|
226
|
-
* type ud = CheckType<Power<undefined, undefined>, undefined>;
|
|
227
|
-
*
|
|
228
|
-
* type zx = CheckType<Power<0, 10>, 0>;
|
|
229
|
-
* type ze = CheckType<Power<10, 0>, 1>;
|
|
230
|
-
*
|
|
231
|
-
* type p2_1 = CheckType<Power<2, 1>, 2>;
|
|
232
|
-
* type p2_2 = CheckType<Power<2, 2>, 4>;
|
|
233
|
-
* type p2_9 = CheckType<Power<2, 9>, 512>;
|
|
234
|
-
* type p2_12 = CheckType<Power<2, 12>, 4096>;
|
|
235
|
-
*
|
|
236
|
-
* type p3_1 = CheckType<Power<3, 1>, 3>;
|
|
237
|
-
* type p3_2 = CheckType<Power<3, 2>, 9>;
|
|
238
|
-
* type p3_6 = CheckType<Power<3, 6>, 729>;
|
|
239
|
-
* type p3_7 = CheckType<Power<3, 7>, 2187>;
|
|
240
|
-
*
|
|
241
|
-
* type n2_1 = CheckType<Power<-2, 1>, -2>;
|
|
242
|
-
* type n2_2 = CheckType<Power<-2, 2>, 4>;
|
|
243
|
-
* type n2_9 = CheckType<Power<-2, 9>, -512>;
|
|
244
|
-
* type n2_12 = CheckType<Power<-2, 12>, 4096>;
|
|
245
|
-
*
|
|
246
|
-
* type n3_1 = CheckType<Power<-3, 1>, -3>;
|
|
247
|
-
* type n3_2 = CheckType<Power<-3, 2>, 9>;
|
|
248
|
-
* type n3_6 = CheckType<Power<-3, 6>, 729>;
|
|
249
|
-
* type n3_7 = CheckType<Power<-3, 7>, -2187>;
|
|
250
|
-
*
|
|
251
|
-
* type n10_15 = CheckType<Power<10, 15>, 1000000000000000>;
|
|
252
|
-
*/
|
|
253
|
-
export type Power<X extends number, E extends number> = X extends undefined ? X : E extends undefined ? E : IsNegative<E> extends true ? null : Power.Switch<Args.From<X, E>>;
|
|
254
|
-
namespace Power {
|
|
255
|
-
}
|
|
256
|
-
export {};
|
|
257
|
-
}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
declare namespace AVStantso.TS {
|
|
2
|
-
type _Resolve<T, Debug extends boolean, L = {} extends T ? never : Extract<Literal, T>, O = Exclude<T, Literal>, R = ([L] extends [never] ? L : Literal.Map[Extract<L, Literal>]) | O> = Debug extends true ? {
|
|
3
|
-
T: T;
|
|
4
|
-
L: L;
|
|
5
|
-
O: O;
|
|
6
|
-
R: R;
|
|
7
|
-
} : R;
|
|
8
|
-
namespace _Resolve {
|
|
9
|
-
type Switch<T, Debug extends boolean> = T extends Type.Def ? (T extends {
|
|
10
|
-
T: unknown;
|
|
11
|
-
} ? HasString<T['T']> extends true ? Exclude<T['T'], Literal> : _Resolve<T['T'], Debug> : never) | (T extends {
|
|
12
|
-
L: Literal;
|
|
13
|
-
} ? _Resolve<T['L'], Debug> : never) : HasString<T> extends true ? Exclude<T, Literal> : _Resolve<T, Debug>;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* @summary Resolve `Literal` in type union `T` as its satisfied types.
|
|
17
|
-
* With type `string` literals NOT supported
|
|
18
|
-
* @example
|
|
19
|
-
* type nv = CheckType<Resolve<never>, never>;
|
|
20
|
-
* type ud = CheckType<Resolve<undefined>, unknown>;
|
|
21
|
-
*
|
|
22
|
-
* // ⛔ literals NOT supported:
|
|
23
|
-
* type ts = CheckType<Resolve<string | 'function'>, string>;
|
|
24
|
-
*
|
|
25
|
-
* type r0 = CheckType<Resolve<'bigint' | 'string'>, string | bigint>;
|
|
26
|
-
*
|
|
27
|
-
* type r1 = CheckType<Resolve<bigint>, bigint>;
|
|
28
|
-
*
|
|
29
|
-
* type r2 = CheckType<Resolve<'bigint' | 'string' | boolean>, string | bigint | boolean>;
|
|
30
|
-
*
|
|
31
|
-
* type r3 = CheckType<Resolve<{ T: Function; L: 'boolean' }>, boolean | Function>;
|
|
32
|
-
*
|
|
33
|
-
* type r4 = CheckType<Resolve<{}>, {}>;
|
|
34
|
-
*
|
|
35
|
-
* type r5 = CheckType<Resolve<{ T: string; L: 'string' | 'boolean' }>, string | boolean>;
|
|
36
|
-
*
|
|
37
|
-
* type r6 = CheckType<Resolve<{ T: string; L: 'function' }>, string | Function>;
|
|
38
|
-
*
|
|
39
|
-
* type r7 = CheckType<Resolve<{ L: 'function' }>, Function>;
|
|
40
|
-
*
|
|
41
|
-
* type r8 = CheckType<Resolve<{ T: Function }>, Function>;
|
|
42
|
-
*/
|
|
43
|
-
export type Resolve<T> = _Resolve.Switch<T, false>;
|
|
44
|
-
export {};
|
|
45
|
-
}
|