@avstantso/ts 1.1.0 → 1.2.1

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.
Files changed (56) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/_global/_register.d.ts +80 -0
  3. package/dist/_global/array/_register.d.ts +28 -0
  4. package/dist/_global/array/arr-n.d.ts +21 -0
  5. package/dist/_global/array/create.d.ts +59 -0
  6. package/dist/_global/array/derivative.d.ts +197 -0
  7. package/dist/_global/array/find.d.ts +89 -0
  8. package/dist/_global/array/index.d.ts +8 -0
  9. package/dist/_global/array/low-level.d.ts +84 -0
  10. package/dist/_global/array/map-key-value.d.ts +121 -0
  11. package/dist/_global/array/min-max-sort.d.ts +244 -0
  12. package/dist/_global/ascii.d.ts +76 -0
  13. package/dist/_global/boolean.d.ts +74 -0
  14. package/dist/_global/comparisons.d.ts +85 -0
  15. package/dist/_global/func.d.ts +17 -0
  16. package/dist/_global/index.d.ts +14 -0
  17. package/dist/_global/literal.d.ts +180 -0
  18. package/dist/_global/numeric/domain/describes.d.ts +62 -0
  19. package/dist/_global/numeric/domain/generated.d.ts +11240 -0
  20. package/dist/_global/numeric/domain/inc-dec.d.ts +52 -0
  21. package/dist/_global/numeric/domain/independent.d.ts +203 -0
  22. package/dist/_global/numeric/domain/index.d.ts +4 -0
  23. package/dist/_global/numeric/inc-dec.d.ts +50 -0
  24. package/dist/_global/numeric/index.d.ts +3 -0
  25. package/dist/_global/numeric/math.d.ts +257 -0
  26. package/dist/_global/resolve.d.ts +45 -0
  27. package/dist/_global/string.d.ts +306 -0
  28. package/dist/_global/structure/_register.d.ts +93 -0
  29. package/dist/_global/structure/index.d.ts +2 -0
  30. package/dist/_global/structure/structure.d.ts +289 -0
  31. package/dist/_global/type/_register.d.ts +64 -0
  32. package/dist/_global/type/def.d.ts +47 -0
  33. package/dist/_global/type/index.d.ts +7 -0
  34. package/dist/_global/type/key-arr-def.d.ts +14 -0
  35. package/dist/_global/type/key-def.d.ts +76 -0
  36. package/dist/_global/type/key-literal-default-arr.d.ts +45 -0
  37. package/dist/_global/type/not.d.ts +44 -0
  38. package/dist/_global/type/union.d.ts +33 -0
  39. package/dist/_global/union.d.ts +79 -0
  40. package/dist/_global/utility/alt.d.ts +58 -0
  41. package/dist/_global/utility/flat.d.ts +60 -0
  42. package/dist/_global/utility/if-def.d.ts +22 -0
  43. package/dist/_global/utility/index.d.ts +9 -0
  44. package/dist/_global/utility/merge.d.ts +29 -0
  45. package/dist/_global/utility/opaque.d.ts +17 -0
  46. package/dist/_global/utility/options.d.ts +34 -0
  47. package/dist/_global/utility/override.d.ts +100 -0
  48. package/dist/_global/utility/replace-key.d.ts +33 -0
  49. package/dist/_global/utility/required-optional.d.ts +24 -0
  50. package/dist/_std-ext/index.d.ts +1 -0
  51. package/dist/_std-ext/object.d.ts +23 -0
  52. package/dist/export.d.ts +2 -0
  53. package/dist/index.d.ts +4 -0
  54. package/dist/index.js +480 -0
  55. package/dist/index.js.map +1 -0
  56. package/package.json +3 -3
@@ -0,0 +1,52 @@
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
+ }
@@ -0,0 +1,203 @@
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
+ }
@@ -0,0 +1,4 @@
1
+ import './independent';
2
+ import './generated';
3
+ import './describes';
4
+ import './inc-dec';
@@ -0,0 +1,50 @@
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
+ }
@@ -0,0 +1,3 @@
1
+ import './domain';
2
+ import './inc-dec';
3
+ import './math';
@@ -0,0 +1,257 @@
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
+ }
@@ -0,0 +1,45 @@
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
+ }