@avstantso/ts 1.1.0 → 1.3.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.
Files changed (57) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +77 -4
  3. package/dist/_global/_register.d.ts +80 -0
  4. package/dist/_global/array/_register.d.ts +28 -0
  5. package/dist/_global/array/arr-n.d.ts +21 -0
  6. package/dist/_global/array/create.d.ts +59 -0
  7. package/dist/_global/array/derivative.d.ts +229 -0
  8. package/dist/_global/array/find.d.ts +89 -0
  9. package/dist/_global/array/index.d.ts +8 -0
  10. package/dist/_global/array/low-level.d.ts +84 -0
  11. package/dist/_global/array/map-key-value.d.ts +121 -0
  12. package/dist/_global/array/min-max-sort.d.ts +244 -0
  13. package/dist/_global/ascii.d.ts +84 -0
  14. package/dist/_global/boolean.d.ts +74 -0
  15. package/dist/_global/comparisons.d.ts +85 -0
  16. package/dist/_global/func.d.ts +17 -0
  17. package/dist/_global/index.d.ts +14 -0
  18. package/dist/_global/literal.d.ts +184 -0
  19. package/dist/_global/numeric/domain/describes.d.ts +62 -0
  20. package/dist/_global/numeric/domain/generated.d.ts +11240 -0
  21. package/dist/_global/numeric/domain/inc-dec.d.ts +52 -0
  22. package/dist/_global/numeric/domain/independent.d.ts +203 -0
  23. package/dist/_global/numeric/domain/index.d.ts +4 -0
  24. package/dist/_global/numeric/inc-dec.d.ts +50 -0
  25. package/dist/_global/numeric/index.d.ts +3 -0
  26. package/dist/_global/numeric/math.d.ts +257 -0
  27. package/dist/_global/resolve.d.ts +45 -0
  28. package/dist/_global/string.d.ts +335 -0
  29. package/dist/_global/structure/_register.d.ts +93 -0
  30. package/dist/_global/structure/index.d.ts +2 -0
  31. package/dist/_global/structure/structure.d.ts +289 -0
  32. package/dist/_global/type/_register.d.ts +70 -0
  33. package/dist/_global/type/def.d.ts +47 -0
  34. package/dist/_global/type/index.d.ts +7 -0
  35. package/dist/_global/type/key-arr-def.d.ts +14 -0
  36. package/dist/_global/type/key-def.d.ts +76 -0
  37. package/dist/_global/type/key-literal-default-arr.d.ts +45 -0
  38. package/dist/_global/type/not.d.ts +44 -0
  39. package/dist/_global/type/union.d.ts +33 -0
  40. package/dist/_global/union.d.ts +79 -0
  41. package/dist/_global/utility/alt.d.ts +58 -0
  42. package/dist/_global/utility/flat.d.ts +60 -0
  43. package/dist/_global/utility/if-def.d.ts +22 -0
  44. package/dist/_global/utility/index.d.ts +9 -0
  45. package/dist/_global/utility/merge.d.ts +29 -0
  46. package/dist/_global/utility/opaque.d.ts +17 -0
  47. package/dist/_global/utility/options.d.ts +34 -0
  48. package/dist/_global/utility/override.d.ts +100 -0
  49. package/dist/_global/utility/replace-key.d.ts +33 -0
  50. package/dist/_global/utility/required-optional.d.ts +24 -0
  51. package/dist/_std-ext/index.d.ts +1 -0
  52. package/dist/_std-ext/object.d.ts +23 -0
  53. package/dist/export.d.ts +2 -0
  54. package/dist/index.d.ts +4 -0
  55. package/dist/index.js +480 -0
  56. package/dist/index.js.map +1 -0
  57. package/package.json +3 -3
@@ -0,0 +1,84 @@
1
+ declare namespace AVStantso.TS.Array {
2
+ /**
3
+ * @summary Test array `I`-item out of bounds.
4
+ *
5
+ * ⛔ First `undefined` item (if exists) will be recognized as end of array ⛔
6
+ * @template TArr Tested array type
7
+ * @template I Index
8
+ * @template IfTrue Result, if `TArr` NOT has `I` item
9
+ * @template IfFalse Result, if `TArr` has `I` item
10
+ * @returns `IfFalse` or `IfTrue` param
11
+ * @deprecated Use `TArr extends [infer F, ...infer Rest]` instead
12
+ * @example
13
+ * type n0 = CheckType<IfEnd<never, any>, never>;
14
+ * type n1 = CheckType<IfEnd<any, never>, never>;
15
+ *
16
+ * type u0 = CheckType<IfEnd<undefined, any>, never>;
17
+ * type u1 = CheckType<IfEnd<any, undefined>, never>;
18
+ *
19
+ * type t = CheckType<IfEnd<[], 0>, true>;
20
+ * type f = CheckType<IfEnd<[1], 0>, false>;
21
+ */
22
+ type IfEnd<TArr extends ArrR, I extends number, IfTrue = true, IfFalse = false> = TArr extends undefined ? never : I extends undefined ? never : TArr[I] extends undefined ? IfTrue : IfFalse;
23
+ /**
24
+ * @summary Array type length.\
25
+ * ⚠ Unsafe, internal
26
+ * @template TArr Array type
27
+ * @returns Length of `TArr` type
28
+ * @example
29
+ * type n = CheckType<_Length<never>, never>;
30
+ * type u = CheckType<_Length<undefined>, 1>; // ⚠
31
+ *
32
+ * type r0 = CheckType<_Length<[]>, 0>;
33
+ * type r1 = CheckType<_Length<['A']>, 1>;
34
+ * type r2 = CheckType<_Length<['A' , 1]>, 2>;
35
+ * type r3 = CheckType<_Length<[undefined, undefined, undefined]>, 3>;
36
+ * type rr3 = CheckType<_Length<readonly [undefined, undefined, undefined]>, 3>;
37
+ */
38
+ type _Length<TArr extends ArrR, I extends number = 0> = TArr extends readonly [unknown, ...infer Rest] ? _Length<Rest, Increment<I>> : I;
39
+ /**
40
+ * @summary Array type length.
41
+ * @template TArr Array type
42
+ * @returns Length of `TArr` type
43
+ * @example
44
+ * type n = CheckType<Length<never>, never>;
45
+ * type u = CheckType<Length<undefined>, never>;
46
+ *
47
+ * type r0 = CheckType<Length<[]>, 0>;
48
+ * type r1 = CheckType<Length<['A']>, 1>;
49
+ * type r2 = CheckType<Length<['A' , 1]>, 2>;
50
+ * type r3 = CheckType<Length<[undefined, undefined, undefined]>, 3>;
51
+ * type r4 = CheckType<Length<['' , '']>, 2>;
52
+ * type rr4 = CheckType<Length<readonly ['' , '']>, 2>;
53
+ */
54
+ type Length<TArr extends ArrR> = TArr extends undefined ? never : TArr extends ArrN ? _Length<TArr> : never;
55
+ namespace Length {
56
+ type _IfExeeded<TArr extends ArrR, L extends number, IfTrue = true, IfFalse = false> = TArr extends readonly [unknown, ...infer Rest] ? L extends 0 ? IfTrue : _IfExeeded<Rest, Decrement<L>, IfTrue, IfFalse> : IfFalse;
57
+ /**
58
+ * @summary Test array type length.
59
+ * @template TArr Tested array type
60
+ * @template L Length limit
61
+ * @template IfTrue Result, if `TArr` length exeeded `L`
62
+ * @template IfFalse Result, if `TArr` length NOT exeeded `L`
63
+ * @returns `IfFalse` or `IfTrue` param
64
+ * @example
65
+ * type n0 = CheckType<Length.IfExeeded<never, any>, never>;
66
+ * type n1 = CheckType<Length.IfExeeded<any, never>, never>;
67
+ *
68
+ * type u0 = CheckType<Length.IfExeeded<undefined, any>, never>;
69
+ * type u1 = CheckType<Length.IfExeeded<any, undefined>, never>;
70
+ *
71
+ * type r0f = CheckType<Length.IfExeeded<[], 0>, false>;
72
+ * type r1t = CheckType<Length.IfExeeded<['A'], 0>, true>;
73
+ * type r1f = CheckType<Length.IfExeeded<['A'], 1>, false>;
74
+ * type r2t = CheckType<Length.IfExeeded<['A', 1], 1>, true>;
75
+ * type r2f = CheckType<Length.IfExeeded<['A', 1], 600>, false>;
76
+ * type r3t = CheckType<Length.IfExeeded<[undefined, undefined, undefined], 2>, true>;
77
+ * type r3f = CheckType<Length.IfExeeded<[undefined, undefined, undefined], 3>, false>;
78
+ * type rr3t = CheckType<Length.IfExeeded<readonly [undefined, undefined, undefined], 2>, true>;
79
+ * type rr3f = CheckType<Length.IfExeeded<readonly [undefined, undefined, undefined], 3>, false>;
80
+ */
81
+ export type IfExeeded<TArr extends ArrR, L extends number, IfTrue = true, IfFalse = false> = TArr extends undefined ? never : L extends undefined ? never : TArr extends ArrN ? _IfExeeded<TArr, L, IfTrue, IfFalse> : never;
82
+ export {};
83
+ }
84
+ }
@@ -0,0 +1,121 @@
1
+ declare namespace AVStantso.TS.Array {
2
+ /**
3
+ * @summary Calculate key by array of keys.
4
+ * @template TArr Array of keys
5
+ * @returns Key that includes all array items
6
+ * @example
7
+ * type n = CheckType<ToKey<never>, never>;
8
+ * type u = CheckType<ToKey<undefined>, unknown>;
9
+ *
10
+ * type k0 = CheckType<ToKey<[]>, never>;
11
+ * type k1 = CheckType<ToKey<['a']>, 'a'>;
12
+ * type k2 = CheckType<ToKey<['a', 1]>, 'a' | 1>;
13
+ * type rk2 = CheckType<ToKey<readonly ['a', 1]>, 'a' | 1>;
14
+ */
15
+ export type ToKey<TArr extends readonly Key[]> = TArr[number];
16
+ /**
17
+ * @summary Calculate key to key record by array of keys.\
18
+ * ⚠ Unsafe, internal
19
+ * @template TArr Array of keys
20
+ * @returns Key to key record that includes all array items
21
+ * @example
22
+ * type n = CheckType<_ToKey2Key<never>, never>;
23
+ * type u = CheckType<_ToKey2Key<undefined>, {
24
+ * [x: string]: Key;
25
+ * [x: number]: Key;
26
+ * [x: symbol]: Key;
27
+ * }>; // ⚠
28
+ *
29
+ * type k0 = CheckType<_ToKey2Key<[]>, {}>; // ⚠
30
+ * type k1 = CheckType<_ToKey2Key<['a']>, { a: 'a' }>;
31
+ * type k2 = CheckType<_ToKey2Key<['a', 1]>, { a: 'a', 1: 1 }>;
32
+ * type rk2 = CheckType<_ToKey2Key<readonly ['a', 1]>, { a: 'a', 1: 1 }>;
33
+ */
34
+ export type _ToKey2Key<TArr extends readonly Key[], R = unknown> = TArr extends readonly [infer F extends Key, ...infer Rest extends Key[]] ? _ToKey2Key<Rest, R & {
35
+ [K in F]: F;
36
+ }> : {
37
+ [K in keyof R]: R[K];
38
+ };
39
+ /**
40
+ * @summary Calculate key to key record by array of keys.
41
+ * @template TArr Array of keys
42
+ * @returns Key to key record that includes all array items
43
+ * @example
44
+ * type n = CheckType<ToKey2Key<never>, never>;
45
+ * type u = CheckType<ToKey2Key<undefined>, undefined>;
46
+ *
47
+ * type k0 = CheckType<ToKey2Key<[]>, {}>;
48
+ * type k1 = CheckType<ToKey2Key<['a']>, { a: 'a' }>;
49
+ * type k2 = CheckType<ToKey2Key<['a', 1]>, { a: 'a', 1: 1 }>;
50
+ * type rk2 = CheckType<ToKey2Key<readonly ['a', 1]>, { a: 'a', 1: 1 }>;
51
+ */
52
+ export type ToKey2Key<TArr extends readonly Key[]> = TArr extends undefined ? TArr : _ToKey2Key<TArr>;
53
+ /**
54
+ * @summary Calculate record of `T` with key by array of keys.
55
+ * @template TArr Array of keys
56
+ * @template T Value type
57
+ * @example
58
+ * type n = CheckType<ToRecord<never, never>, {}>;
59
+ * type nu1 = CheckType<ToRecord<undefined, never>, {}>;
60
+ * type nu2 = CheckType<ToRecord<never, undefined>, {}>;
61
+ * type u = CheckType<ToRecord<undefined, undefined>, {}>;
62
+ *
63
+ * type k0 = CheckType<ToRecord<[], string>, {}>;
64
+ * type k1 = CheckType<ToRecord<['a'], string>, { a: string }>;
65
+ * type k2 = CheckType<ToRecord<['a', 1], boolean>, { a: boolean, 1: boolean }>;
66
+ * type rk2 = CheckType<ToRecord<readonly ['a', 1], () => 0>, { a: () => 0, 1: () => 0 }>;
67
+ */
68
+ export type ToRecord<TArr extends readonly Key[], T> = Record<TArr[number], T>;
69
+ type _MapFrom<Keys extends readonly Key[], Value extends number, KeyToKey extends boolean, R = unknown> = Keys extends readonly [infer F extends Key, ...infer Rest extends Key[]] ? _MapFrom<Rest, Value extends undefined ? Value : Increment<Value>, KeyToKey, R & (KeyToKey extends true ? {
70
+ [K in F]: Value;
71
+ } : {
72
+ [K in Value]: F;
73
+ })> : {
74
+ [K in keyof R]: R[K];
75
+ };
76
+ /**
77
+ * @summary Create key-value map by list of keys and first value
78
+ * @template Keys Array of keys
79
+ * @template FirstValue Value for first item
80
+ * @returns Key-value map structural object
81
+ * @example
82
+ * type n = CheckType<KeyValueMapFrom<never>, never>;
83
+ * type u = CheckType<KeyValueMapFrom<undefined>, never>;
84
+ *
85
+ * type k0 = CheckType<KeyValueMapFrom<[]>, object>;
86
+ * type k1 = CheckType<KeyValueMapFrom<['a']>, { a: 0; }>;
87
+ * type k2 = CheckType<KeyValueMapFrom<['a', 1]>, { a: 0; 1: 1; }>;
88
+ * type k3 = CheckType<KeyValueMapFrom<['a', undefined, 1]>, { a: 0; 1: 2; }>;
89
+ * type k4 = CheckType<KeyValueMapFrom<['a', never, 1]>, { a: 0; 1: 2; }>;
90
+ *
91
+ * type kn = CheckType<KeyValueMapFrom<['a', 1], never>, { a: never; 1: never; }>;
92
+ * type ku = CheckType<KeyValueMapFrom<['a', 1], undefined>, { a: undefined; 1: undefined; }>;
93
+ * type rku = CheckType<
94
+ * KeyValueMapFrom<readonly ['a', 1], undefined>,
95
+ * { a: undefined; 1: undefined; }
96
+ * >;
97
+ */
98
+ export type KeyValueMapFrom<Keys extends readonly Key[], FirstValue extends number = 0> = Keys extends undefined ? never : Keys extends ArrN ? _MapFrom<Keys, FirstValue, true> : never;
99
+ /**
100
+ * @summary Create value-key map by list of keys and first value
101
+ * @template Keys Array of keys
102
+ * @template FirstValue Value for first item. If is `undefined` or `never` — returns `never`
103
+ * @returns Value-key map structural object
104
+ * @see KeyValueMapFrom
105
+ * @example
106
+ * type n = CheckType<ValueKeyMapFrom<never>, never>;
107
+ * type u = CheckType<ValueKeyMapFrom<undefined>, never>;
108
+ *
109
+ * type k0 = CheckType<ValueKeyMapFrom<[]>, object>;
110
+ * type k1 = CheckType<ValueKeyMapFrom<['a']>, { 0: 'a'; }>;
111
+ * type k2 = CheckType<ValueKeyMapFrom<['a', 1]>, { 0: 'a'; 1: 1; }>;
112
+ * type k3 = CheckType<ValueKeyMapFrom<['a', undefined, 1]>, { 0: 'a'; 1: undefined; 2: 1 }>;
113
+ * type k4 = CheckType<ValueKeyMapFrom<['a', never, 1]>, { 0: 'a'; 1: never; 2: 1 }>;
114
+ *
115
+ * type kn = CheckType<ValueKeyMapFrom<['a', 1], never>, never>;
116
+ * type ku = CheckType<ValueKeyMapFrom<['a', 1], undefined>, never>;
117
+ * type rku = CheckType<ValueKeyMapFrom<readonly ['a', 1], undefined>, never>;
118
+ */
119
+ export type ValueKeyMapFrom<Keys extends readonly Key[], FirstValue extends number = 0> = Keys extends undefined ? never : FirstValue extends undefined ? never : Keys extends ArrN ? _MapFrom<Keys, FirstValue, false> : never;
120
+ export {};
121
+ }
@@ -0,0 +1,244 @@
1
+ declare namespace AVStantso.TS.Array {
2
+ type _ExtremumIndex<TArr extends readonly string[] | readonly number[], IsMin extends boolean, TRest extends readonly string[] | readonly number[] = TArr, R extends number = undefined, I extends number = 0> = TRest extends readonly [
3
+ infer F extends string | number,
4
+ ...infer Rest extends string[] | number[]
5
+ ] ? _ExtremumIndex<TArr, IsMin, Rest, R extends undefined ? 0 : F extends undefined ? R : _LT_GT<[F, TArr[R], I, R], IsMin>, Increment<I>> : R;
6
+ type _Extremum<TArr extends readonly string[] | readonly number[], IsMin extends boolean, ReturnIdx extends boolean, R extends number = _ExtremumIndex<TArr, IsMin>> = ReturnIdx extends true ? R : TArr[R];
7
+ type Extremum<TArr extends readonly string[] | readonly number[], IsMin extends boolean, ReturnIdx extends boolean> = TArr extends [] ? undefined : TArr extends ArrN ? _Extremum<TArr, IsMin, ReturnIdx> : never;
8
+ /**
9
+ * @summary Find array minimal item.
10
+ * @template TArr Array to find
11
+ * @returns Minimal item. `undefined` for empty array
12
+ * @example
13
+ * type n = CheckType<Min<never>, never>;
14
+ * type u = CheckType<Min<undefined>, never>;
15
+ *
16
+ * type z = CheckType<Min<[]>, undefined>;
17
+ *
18
+ * type n0 = CheckType<Min<[1]>, 1>;
19
+ * type n1 = CheckType<Min<[2, 1]>, 1>;
20
+ * type n2 = CheckType<Min<[2, undefined, 1]>, 1>;
21
+ *
22
+ * type s0 = CheckType<Min<['a']>, 'a'>;
23
+ * type s1 = CheckType<Min<['b', 'a']>, 'a'>;
24
+ * type s2 = CheckType<Min<['b', undefined, 'a']>, 'a'>;
25
+ * type rs2 = CheckType<Min<readonly ['b', undefined, 'a']>, 'a'>;
26
+ */
27
+ export type Min<TArr extends readonly string[] | readonly number[]> = TArr extends undefined ? never : Extremum<TArr, true, false>;
28
+ export namespace Min {
29
+ /**
30
+ * @summary Find array minimal item index.
31
+ * @template TArr Array to find
32
+ * @returns Minimal item index. `undefined` for empty array
33
+ * @example
34
+ * type n = CheckType<Min.Index<never>, never>;
35
+ * type u = CheckType<Min.Index<undefined>, never>;
36
+ *
37
+ * type z = CheckType<Min.Index<[]>, undefined>;
38
+ *
39
+ * type n0 = CheckType<Min.Index<[1]>, 0>;
40
+ * type n1 = CheckType<Min.Index<[2, 1]>, 1>;
41
+ * type n2 = CheckType<Min.Index<[1, 2]>, 0>;
42
+ * type n3 = CheckType<Min<[2, undefined, 1]>, 1>;
43
+ *
44
+ * type s0 = CheckType<Min.Index<['a']>, 0>;
45
+ * type s1 = CheckType<Min.Index<['b', 'a']>, 1>;
46
+ * type s2 = CheckType<Min.Index<['b', undefined, 'a']>, 2>;
47
+ * type rs2 = CheckType<Min.Index<readonly ['b', undefined, 'a']>, 2>;
48
+ */
49
+ type Index<TArr extends readonly string[] | readonly number[]> = TArr extends undefined ? never : Extremum<TArr, true, true>;
50
+ }
51
+ /**
52
+ * @summary Find array maximal item.
53
+ * @template TArr Array to find
54
+ * @returns Maximal item. `undefined` for empty array
55
+ * @example
56
+ * type n = CheckType<Max<never>, never>;
57
+ * type u = CheckType<Max<undefined>, never>;
58
+ *
59
+ * type z = CheckType<Max<[]>, undefined>;
60
+ *
61
+ * type n0 = CheckType<Max<[1]>, 1>;
62
+ * type n1 = CheckType<Max<[2, 1]>, 2>;
63
+ * type n2 = CheckType<Max<[2, undefined, 1]>, 2>;
64
+ *
65
+ * type s0 = CheckType<Max<['a']>, 'a'>;
66
+ * type s1 = CheckType<Max<['b', 'a']>, 'b'>;
67
+ * type s2 = CheckType<Max<['b', undefined, 'a']>, 'b'>;
68
+ * type rs2 = CheckType<Max<readonly ['b', undefined, 'a']>, 'b'>;
69
+ */
70
+ export type Max<TArr extends readonly string[] | readonly number[]> = TArr extends undefined ? never : Extremum<TArr, false, false>;
71
+ export namespace Max {
72
+ /**
73
+ * @summary Find array maximal item index.
74
+ * @template TArr Array to find
75
+ * @returns Maximal item index. `undefined` for empty array
76
+ * @example
77
+ * type n = CheckType<Max.Index<never>, never>;
78
+ * type u = CheckType<Max.Index<undefined>, never>;
79
+ *
80
+ * type z = CheckType<Max.Index<[]>, undefined>;
81
+ *
82
+ * type n0 = CheckType<Max.Index<[1]>, 0>;
83
+ * type n1 = CheckType<Max.Index<[2, 1]>, 0>;
84
+ * type n2 = CheckType<Max.Index<[1, 2]>, 1>;
85
+ * type n3 = CheckType<Max.Index<[1, undefined, 2]>, 2>;
86
+ *
87
+ * type s0 = CheckType<Max.Index<['a']>, 0>;
88
+ * type s1 = CheckType<Max.Index<['b', 'a']>, 0>;
89
+ * type s2 = CheckType<Max.Index<['b', undefined, 'a']>, 0>;
90
+ * type rs2 = CheckType<Max.Index<readonly ['b', undefined, 'a']>, 0>;
91
+ */
92
+ type Index<TArr extends readonly string[] | readonly number[]> = TArr extends undefined ? never : Extremum<TArr, false, true>;
93
+ }
94
+ type _Sort<TArr extends ArrR, Asc extends boolean, L extends number, I extends number = 0, R extends Arr = []> = I extends L ? [...R, ...TArr] : TArr extends readonly [infer F, infer S, ...infer Rest] ? _LT_GT<[F, S, [F, S], [S, F]], Asc> extends readonly [infer _F, infer _S] ? _Sort<[_S, ...Rest], Asc, L, I, [...R, _F]> : never : _Sort<[...R, ...TArr], Asc, L, Increment<I>>;
95
+ type _SortPairs<TArr extends readonly Sort.Pair[], Asc extends boolean, L extends number, I extends number = 0, R extends readonly Sort.Pair[] = []> = I extends L ? [...R, ...TArr] : TArr extends readonly [
96
+ infer F extends Sort.Pair,
97
+ infer S extends Sort.Pair,
98
+ ...infer Rest extends Sort.Pair[]
99
+ ] ? _LT_GT<[F[0], S[0], [F, S], [S, F]], Asc, Asc> extends readonly [
100
+ infer _F extends Sort.Pair,
101
+ infer _S extends Sort.Pair
102
+ ] ? _SortPairs<[_S, ...Rest], Asc, L, I, [...R, _F]> : never : _SortPairs<[...R, ...TArr], Asc, L, Increment<I>>;
103
+ type _SortCheck<TArr extends readonly string[] | readonly number[] | readonly Sort.Pair<string>[] | readonly Sort.Pair<number>[], Asc extends boolean, L extends number = Length<TArr>> = L extends 0 | 1 ? TArr : TArr extends readonly string[] | readonly number[] ? _Sort<TArr, Asc, Increment<L>> : TArr extends readonly Sort.Pair<string>[] | readonly Sort.Pair<number>[] ? Asc extends true ? _SortPairs<TArr, Asc, Increment<L>> : _SortPairs<_Reverse<TArr>, Asc, Increment<L>> : never;
104
+ /**
105
+ * @summary Sort array items.
106
+ * @template TArr Array to sort
107
+ * @template Asc Is ascending sort order
108
+ * @example
109
+ * type dn = [1, 4, 5, 3, 2, 78, 1];
110
+ * type ds = ['abc', 'eb', '', '1', 'ab', ' '];
111
+ * type dpn = [
112
+ * [1, symbol],
113
+ * [4, () => null],
114
+ * [5, []],
115
+ * [3, { n: number }],
116
+ * [2, Buffer],
117
+ * [78, 45],
118
+ * [1, never]
119
+ * ];
120
+ * type dps = [
121
+ * ['abc', symbol],
122
+ * ['eb', () => null],
123
+ * [ '', []],
124
+ * ['1', { n: number }],
125
+ * ['ab', Buffer],
126
+ * [' ', 45]
127
+ * ];
128
+ * @example
129
+ * type n = CheckType<Sort<never>, never>;
130
+ * type u = CheckType<Sort<undefined>, never>;
131
+ *
132
+ * type n_asc = CheckType<Sort<dn>, [1, 1, 2, 3, 4, 5, 78]>;
133
+ * type n_desc = CheckType<Sort<dn, false>, [78, 5, 4, 3, 2, 1, 1]>;
134
+ *
135
+ * type s_asc = CheckType<Sort<ds>, ['', ' ', '1', 'ab', 'abc', 'eb']>;
136
+ * type s_desc = CheckType<Sort<ds, false>, ['eb', 'abc', 'ab', '1', ' ', '']>;
137
+ *
138
+ * type rs_asc = CheckType<Sort<readonly [...ds]>, ['', ' ', '1', 'ab', 'abc', 'eb']>;
139
+ * type rs_desc = CheckType<Sort<readonly [...ds], false>, ['eb', 'abc', 'ab', '1', ' ', '']>;
140
+ *
141
+ * type n_pasc = CheckType<
142
+ * Sort<dpn>, [
143
+ * [1, symbol],
144
+ * [1, never],
145
+ * [2, Buffer],
146
+ * [3, { n: number; }],
147
+ * [4, () => null],
148
+ * [5, []],
149
+ * [78, 45]
150
+ * ]>;
151
+ * type n_pdesc = CheckType<
152
+ * Sort<dpn, false>, [
153
+ * [78, 45],
154
+ * [5, []],
155
+ * [4, () => null],
156
+ * [3, { n: number; }],
157
+ * [2, Buffer],
158
+ * [1, never],
159
+ * [1, symbol]
160
+ * ]>;
161
+ *
162
+ * type s_pasc = CheckType<
163
+ * Sort<dps>, [
164
+ * ['', []],
165
+ * [' ', 45],
166
+ * ['1', { n: number; }],
167
+ * ['ab', Buffer],
168
+ * ['abc', symbol],
169
+ * ['eb', () => null]
170
+ * ]>;
171
+ *
172
+ * type s_pdesc = CheckType<
173
+ * Sort<dps, false>, [
174
+ * ['eb', () => null],
175
+ * ['abc', symbol],
176
+ * ['ab', Buffer],
177
+ * ['1', { n: number; }],
178
+ * [' ', 45],
179
+ * ['', []]
180
+ * ]>;
181
+ */
182
+ export type Sort<TArr extends readonly string[] | readonly number[] | readonly Sort.Pair<string>[] | readonly Sort.Pair<number>[], Asc extends boolean = true> = TArr extends undefined ? never : TArr extends ArrN ? _SortCheck<TArr, Asc> : never;
183
+ export namespace Sort {
184
+ /**
185
+ * @summary Pair key-data for sort any data by key
186
+ */
187
+ type Pair<K extends number | string = number | string> = [K, any];
188
+ /**
189
+ * @summary Sort array items descending.
190
+ * @template TArr Array to sort
191
+ * @example
192
+ * type dn = [1, 4, 5, 3, 2, 78, 1];
193
+ * type ds = ['abc', 'eb', '', '1', 'ab', ' '];
194
+ * type dpn = [
195
+ * [1, symbol],
196
+ * [4, () => null],
197
+ * [5, []],
198
+ * [3, { n: number }],
199
+ * [2, Buffer],
200
+ * [78, 45],
201
+ * [1, never]
202
+ * ];
203
+ * type dps = [
204
+ * ['abc', symbol],
205
+ * ['eb', () => null],
206
+ * [ '', []],
207
+ * ['1', { n: number }],
208
+ * ['ab', Buffer],
209
+ * [' ', 45]
210
+ * ];
211
+ * @example
212
+ * type n = CheckType<Sort.Desc<never>, never>;
213
+ * type u = CheckType<Sort.Desc<undefined>, never>;
214
+ *
215
+ * type n_desc = CheckType<Sort.Desc<dn>, [78, 5, 4, 3, 2, 1, 1]>;
216
+ *
217
+ * type s_desc = CheckType<Sort.Desc<ds>, ['eb', 'abc', 'ab', '1', ' ', '']>;
218
+ * type rs_desc = CheckType<Sort.Desc<readonly [...ds]>, ['eb', 'abc', 'ab', '1', ' ', '']>;
219
+ *
220
+ * type n_pdesc = CheckType<
221
+ * Sort.Desc<dpn>, [
222
+ * [78, 45],
223
+ * [5, []],
224
+ * [4, () => null],
225
+ * [3, { n: number; }],
226
+ * [2, Buffer],
227
+ * [1, never],
228
+ * [1, symbol]
229
+ * ]>;
230
+ *
231
+ * type s_pdesc = CheckType<
232
+ * Sort.Desc<dps>, [
233
+ * ['eb', () => null],
234
+ * ['abc', symbol],
235
+ * ['ab', Buffer],
236
+ * ['1', { n: number; }],
237
+ * [' ', 45],
238
+ * ['', []]
239
+ * ]>;
240
+ */
241
+ type Desc<TArr extends readonly string[] | readonly number[] | readonly Sort.Pair<string>[] | readonly Sort.Pair<number>[]> = _SortCheck<TArr, false>;
242
+ }
243
+ export {};
244
+ }
@@ -0,0 +1,84 @@
1
+ declare namespace AVStantso {
2
+ const ASCII_Control_Characters: readonly ["␀", "␁", "␂", "␃", "␄", "␅", "␆", "␇", "␈", "␉", "␊", "␋", "␌", "␍", "␎", "␏", "␐", "␑", "␒", "␓", "␔", "␕", "␖", "␗", "␘", "␙", "␚", "␛", "␜", "␝", "␞", "␟"];
3
+ const ASCII_Printable_Characters_Letters_Upper: readonly ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"];
4
+ const ASCII_Printable_Characters_Letters_Lower: readonly ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"];
5
+ const ASCII_Printable_Characters: readonly [" ", "!", "\"", "#", "$", "%", "&", "'", "(", ")", "*", "+", ",", "-", ".", "/", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ":", ";", "<", "=", ">", "?", "@", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "[", "\\", "]", "^", "_", "`", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "{", "|", "}", "~", "␡"];
6
+ const ASCII_Extended_Codes: readonly ["€", "Unused0", "‚", "ƒ", "„", "…", "†", "‡", "ˆ", "‰", "Š", "‹", "Œ", "Unused1", "Ž", "Unused2", "Unused3", "‘", "’", "“", "”", "•", "–", "—", "˜", "™", "š", "›", "œ", "Unused4", "ž", "Ÿ", "NBSP", "¡", "¢", "£", "¤", "¥", "¦", "§", "¨", "©", "ª", "«", "¬", "SHY", "®", "¯", "°", "±", "²", "³", "´", "µ", "¶", "·", "¸", "¹", "º", "»", "¼", "½", "¾", "¿", "À", "Á", "Â", "Ã", "Ä", "Å", "Æ", "Ç", "È", "É", "Ê", "Ë", "Ì", "Í", "Î", "Ï", "Ð", "Ñ", "Ò", "Ó", "Ô", "Õ", "Ö", "×", "Ø", "Ù", "Ú", "Û", "Ü", "Ý", "Þ", "ß", "à", "á", "â", "ã", "ä", "å", "æ", "ç", "è", "é", "ê", "ë", "ì", "í", "î", "ï", "ð", "ñ", "ò", "ó", "ô", "õ", "ö", "÷", "ø", "ù", "ú", "û", "ü", "ý", "þ", "ÿ"];
7
+ export namespace TS {
8
+ /**
9
+ * @summary English letters
10
+ */
11
+ namespace Letters {
12
+ type Upper = typeof ASCII_Printable_Characters_Letters_Upper;
13
+ type Lower = typeof ASCII_Printable_Characters_Letters_Lower;
14
+ }
15
+ type Letters<IsUpper extends boolean = true> = IsUpper extends true ? Letters.Upper : Letters.Lower;
16
+ /**
17
+ * @summary English letter
18
+ */
19
+ namespace Letter {
20
+ type Upper = Letters.Upper[number];
21
+ type Lower = Letters.Lower[number];
22
+ }
23
+ type Letter<IsUpper extends boolean = true> = IsUpper extends true ? Letter.Upper : Letter.Lower;
24
+ /**
25
+ * @summary `ASCII` characters
26
+ * @see https://www.ascii-code.com/
27
+ */
28
+ type ASCII = readonly [
29
+ ...ASCII.Control,
30
+ ...ASCII.Printable,
31
+ ...ASCII.Extended
32
+ ];
33
+ namespace ASCII {
34
+ /**
35
+ * @summary ASCII control characters (character code `0-31`)
36
+ */
37
+ type Control = typeof ASCII_Control_Characters;
38
+ /**
39
+ * @summary ASCII printable characters (character code `32-127`)
40
+ */
41
+ type Printable = typeof ASCII_Printable_Characters;
42
+ /**
43
+ * @summary The extended ASCII codes (character code `128-255`)
44
+ */
45
+ type Extended = typeof ASCII_Extended_Codes;
46
+ /**
47
+ * @summary ASCII characters map char-code
48
+ */
49
+ namespace Map {
50
+ /**
51
+ * @summary ASCII control characters (character code `0-31`)
52
+ */
53
+ type Control = Array.KeyValueMapFrom<ASCII.Control>;
54
+ /**
55
+ * @summary ASCII printable characters (character code `32-127`)
56
+ */
57
+ type Printable = Array.KeyValueMapFrom<ASCII.Printable, 32>;
58
+ /**
59
+ * @summary The extended ASCII codes (character code `128-255`)
60
+ */
61
+ type Extended = Array.KeyValueMapFrom<ASCII.Extended, 128>;
62
+ }
63
+ type Map = Array.KeyValueMapFrom<ASCII>;
64
+ type _Code<S extends string, R extends number = Extract<ASCII.Map[Extract<S, keyof ASCII.Map>], number>> = R;
65
+ /**
66
+ * @summary Gets `ASCII` characters code by `S`. `never` if `S` is not a character.
67
+ */
68
+ type Code<S extends string> = _Code<S>;
69
+ /**
70
+ * @summary ASCII character union
71
+ */
72
+ type Character = Array.ToKey<ASCII>;
73
+ }
74
+ }
75
+ export namespace Code {
76
+ interface TS {
77
+ /**
78
+ * @summary `ASCII` characters array
79
+ */
80
+ ASCII: AVStantso.TS.ASCII;
81
+ }
82
+ }
83
+ export {};
84
+ }
@@ -0,0 +1,74 @@
1
+ declare namespace AVStantso.TS {
2
+ /**
3
+ * @summary If `Condition` is `true` returns `IfTrue` else `IfFalse`
4
+ * @template Condition Condition
5
+ * @template IfTrue Result, if `Condition` is `true`
6
+ * @template IfFalse Result, if `Condition` is NOT `true`
7
+ * @returns `IfFalse` or `IfTrue` param
8
+ * @example
9
+ * type nv = CheckType<If<never>, never>;
10
+ * type u = CheckType<If<undefined>, false>;
11
+ * type nl = CheckType<If<null>, false>;
12
+ * type f = CheckType<If<false>, false>;
13
+ * type t = CheckType<If<true>, true>;
14
+ * type a = CheckType<If<any>, boolean>;
15
+ */
16
+ type If<Condition extends boolean, IfTrue = true, IfFalse = false> = Condition extends undefined ? IfFalse : Condition extends true ? IfTrue : IfFalse;
17
+ namespace If {
18
+ }
19
+ /**
20
+ * @summary If all `Conditions` in array is `true` returns `IfTrue` else `IfFalse`
21
+ * @template Conditions Conditions array
22
+ * @template IfTrue Result, if all `Conditions` is `true`
23
+ * @template IfFalse Result, if any item of `Conditions` is NOT `true`
24
+ * @returns `IfFalse` or `IfTrue` param
25
+ * @example
26
+ * type n = CheckType<And<never>, never>;
27
+ * type u = CheckType<And<undefined>, never>;
28
+ * type u2 = CheckType<And<[true, undefined, true]>, false>;
29
+ * type f = CheckType<And<[true, true, false]>, false>;
30
+ * type t = CheckType<And<[true, true, true]>, true>;
31
+ * type tr = CheckType<And<readonly [true, true, true]>, true>;
32
+ */
33
+ type And<Conditions extends readonly boolean[], IfTrue = true, IfFalse = false> = Array.IfEach<Conditions, true, IfTrue, IfFalse>;
34
+ namespace And {
35
+ }
36
+ /**
37
+ * @summary If one or more `Conditions` in array is `true` returns `IfTrue` else `IfFalse`
38
+ * @template Conditions Conditions array
39
+ * @template IfTrue Result, if any item of `Conditions` is `true`
40
+ * @template IfFalse Result, if all `Conditions` is NOT `true`
41
+ * @returns `IfFalse` or `IfTrue` param
42
+ * @example
43
+ * type n = CheckType<Or<never>, never>;
44
+ * type u = CheckType<Or<undefined>, never>;
45
+ * type u2 = CheckType<Or<[false, undefined, true]>, true>;
46
+ * type f = CheckType<Or<[false, false, false]>, false>;
47
+ * type t = CheckType<Or<[true, true, false]>, true>;
48
+ * type tr = CheckType<Or<readonly [true, true, false]>, true>;
49
+ */
50
+ type Or<Conditions extends readonly boolean[], IfTrue = true, IfFalse = false> = Array.IfHasItem<Conditions, true, IfTrue, IfFalse>;
51
+ namespace Or {
52
+ }
53
+ /**
54
+ * @summary If only one item of `Conditions` in array is `true` returns `IfTrue` else `IfFalse`
55
+ * @template Conditions Conditions array
56
+ * @template IfTrue Result, if only one item of `Conditions` is `true`
57
+ * @template IfFalse Result, if each item of `Conditions` is NOT `true` or more one item of `Conditions` is `true`
58
+ * @returns `IfFalse` or `IfTrue` param
59
+ * @example
60
+ * type n = CheckType<Xor<never>, never>;
61
+ * type u = CheckType<Xor<undefined>, never>;
62
+ * type u2 = CheckType<Xor<[false, undefined, true]>, true>;
63
+ * type fff = CheckType<Xor<[false, false, false]>, false>;
64
+ * type ttf = CheckType<Xor<[true, true, false]>, false>;
65
+ * type tff = CheckType<Xor<[true, false, false]>, true>;
66
+ * type ftf = CheckType<Xor<[false, true, false]>, true>;
67
+ * type fft = CheckType<Xor<[false, false, true]>, true>;
68
+ * type ttt = CheckType<Xor<[true, true, false]>, false>;
69
+ * type tr = CheckType<Xor<readonly [true, true, false]>, false>;
70
+ */
71
+ type Xor<Conditions extends readonly boolean[], IfTrue = true, IfFalse = false> = Conditions extends undefined ? never : Array.CountOf<Conditions, true> extends 1 ? IfTrue : IfFalse;
72
+ namespace Xor {
73
+ }
74
+ }