@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.
- package/CHANGELOG.md +7 -0
- package/dist/_global/_register.d.ts +80 -0
- package/dist/_global/array/_register.d.ts +28 -0
- package/dist/_global/array/arr-n.d.ts +21 -0
- package/dist/_global/array/create.d.ts +59 -0
- package/dist/_global/array/derivative.d.ts +197 -0
- package/dist/_global/array/find.d.ts +89 -0
- package/dist/_global/array/index.d.ts +8 -0
- package/dist/_global/array/low-level.d.ts +84 -0
- package/dist/_global/array/map-key-value.d.ts +121 -0
- package/dist/_global/array/min-max-sort.d.ts +244 -0
- package/dist/_global/ascii.d.ts +76 -0
- package/dist/_global/boolean.d.ts +74 -0
- package/dist/_global/comparisons.d.ts +85 -0
- package/dist/_global/func.d.ts +17 -0
- package/dist/_global/index.d.ts +14 -0
- package/dist/_global/literal.d.ts +180 -0
- package/dist/_global/numeric/domain/describes.d.ts +62 -0
- package/dist/_global/numeric/domain/generated.d.ts +11240 -0
- package/dist/_global/numeric/domain/inc-dec.d.ts +52 -0
- package/dist/_global/numeric/domain/independent.d.ts +203 -0
- package/dist/_global/numeric/domain/index.d.ts +4 -0
- package/dist/_global/numeric/inc-dec.d.ts +50 -0
- package/dist/_global/numeric/index.d.ts +3 -0
- package/dist/_global/numeric/math.d.ts +257 -0
- package/dist/_global/resolve.d.ts +45 -0
- package/dist/_global/string.d.ts +306 -0
- package/dist/_global/structure/_register.d.ts +93 -0
- package/dist/_global/structure/index.d.ts +2 -0
- package/dist/_global/structure/structure.d.ts +289 -0
- package/dist/_global/type/_register.d.ts +64 -0
- package/dist/_global/type/def.d.ts +47 -0
- package/dist/_global/type/index.d.ts +7 -0
- package/dist/_global/type/key-arr-def.d.ts +14 -0
- package/dist/_global/type/key-def.d.ts +76 -0
- package/dist/_global/type/key-literal-default-arr.d.ts +45 -0
- package/dist/_global/type/not.d.ts +44 -0
- package/dist/_global/type/union.d.ts +33 -0
- package/dist/_global/union.d.ts +79 -0
- package/dist/_global/utility/alt.d.ts +58 -0
- package/dist/_global/utility/flat.d.ts +60 -0
- package/dist/_global/utility/if-def.d.ts +22 -0
- package/dist/_global/utility/index.d.ts +9 -0
- package/dist/_global/utility/merge.d.ts +29 -0
- package/dist/_global/utility/opaque.d.ts +17 -0
- package/dist/_global/utility/options.d.ts +34 -0
- package/dist/_global/utility/override.d.ts +100 -0
- package/dist/_global/utility/replace-key.d.ts +33 -0
- package/dist/_global/utility/required-optional.d.ts +24 -0
- package/dist/_std-ext/index.d.ts +1 -0
- package/dist/_std-ext/object.d.ts +23 -0
- package/dist/export.d.ts +2 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +480 -0
- package/dist/index.js.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
declare namespace AVStantso.TS.String {
|
|
2
|
+
/**
|
|
3
|
+
* @summary Type possible to convert ``` `${x}` ``` to string literal
|
|
4
|
+
* @example
|
|
5
|
+
* type p = CheckType<`${Possible}`, string>;
|
|
6
|
+
*
|
|
7
|
+
* type S<T> = T extends Possible ? `${T}` : never;
|
|
8
|
+
* type sn = CheckType<S<number>, string>;
|
|
9
|
+
* type ss = CheckType<S<symbol>, never>;
|
|
10
|
+
*/
|
|
11
|
+
export type Possible = string | number | bigint | boolean;
|
|
12
|
+
/**
|
|
13
|
+
* @summary Some shortcuts for regular expression patterns
|
|
14
|
+
*/
|
|
15
|
+
export interface Pattern {
|
|
16
|
+
'\\s': ' \r\n\t\f\v';
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* @summary Calc `string` literal length. ⚠ Unsafe, internal
|
|
20
|
+
* @template S Tested `string` literal
|
|
21
|
+
* @returns `string` literal length
|
|
22
|
+
* @example
|
|
23
|
+
* type n = CheckType<_Length<never>, never>;
|
|
24
|
+
* type u = CheckType<_Length<undefined>, 0>; // ⚠
|
|
25
|
+
*
|
|
26
|
+
* type l0 = CheckType<_Length<''>, 0>;
|
|
27
|
+
* type l1 = CheckType<_Length<'A'>, 1>;
|
|
28
|
+
* type l2 = CheckType<_Length<'AB'>, 2>;
|
|
29
|
+
*/
|
|
30
|
+
export type _Length<S extends string, R extends number = 0> = S extends `${string}${infer Rest}` ? _Length<Rest, Increment<R>> : R;
|
|
31
|
+
/**
|
|
32
|
+
* @summary Calc `string` literal length
|
|
33
|
+
* @template S Tested `string` literal
|
|
34
|
+
* @returns `string` literal length
|
|
35
|
+
* @example
|
|
36
|
+
* type n = CheckType<Length<never>, never>;
|
|
37
|
+
* type u = CheckType<Length<undefined>, undefined>;
|
|
38
|
+
*
|
|
39
|
+
* type l0 = CheckType<Length<''>, 0>;
|
|
40
|
+
* type l1 = CheckType<Length<'A'>, 1>;
|
|
41
|
+
* type l2 = CheckType<Length<'AB'>, 2>;
|
|
42
|
+
*/
|
|
43
|
+
export type Length<S extends string> = S extends undefined ? undefined : _Length<S>;
|
|
44
|
+
type _IsLengthBetween<S extends string, Min extends number, Max extends number, L extends number = _Length<S>> = LT<L, Min> extends true ? false : GT<L, Max> extends true ? false : true;
|
|
45
|
+
/**
|
|
46
|
+
* @summary Is `string` literal length in `[Min, Max]`.
|
|
47
|
+
*
|
|
48
|
+
* Shortcut for `GTE<Length<S>, Min> & LTE<Length<S>, Max>`
|
|
49
|
+
* @template S Tested `string` literal
|
|
50
|
+
* @template Min Minimal length
|
|
51
|
+
* @template Max Maximal length
|
|
52
|
+
* @template IfTrue Result, if `S` length in `[Min, Max]`
|
|
53
|
+
* @template IfFalse Result, if ``S` length NOT in `[Min, Max]`
|
|
54
|
+
* @returns `IfFalse` or `IfTrue` param
|
|
55
|
+
* @example
|
|
56
|
+
* type n0 = CheckType<IsLengthBetween<never, number, number>, never>;
|
|
57
|
+
* type n1 = CheckType<IsLengthBetween<string, never, number>, never>;
|
|
58
|
+
* type n2 = CheckType<IsLengthBetween<string, number, never>, never>;
|
|
59
|
+
* type n3 = CheckType<IsLengthBetween<string, 2, 1>, never>;
|
|
60
|
+
*
|
|
61
|
+
* type u0 = CheckType<IsLengthBetween<string, undefined, number>, undefined>;
|
|
62
|
+
* type u1 = CheckType<IsLengthBetween<string, undefined, number>, undefined>;
|
|
63
|
+
* type u2 = CheckType<IsLengthBetween<string, number, undefined>, undefined>;
|
|
64
|
+
*
|
|
65
|
+
* type t0 = CheckType<IsLengthBetween<'', 0>, true>;
|
|
66
|
+
* type f0 = CheckType<IsLengthBetween<'', 1>, false>;
|
|
67
|
+
*
|
|
68
|
+
* type t1 = CheckType<IsLengthBetween<'A', 1, 2>, true>;
|
|
69
|
+
* type f1 = CheckType<IsLengthBetween<'A', 2>, false>;
|
|
70
|
+
*
|
|
71
|
+
* type t2_02 = CheckType<IsLengthBetween<'AB', 0, 2>, true>;
|
|
72
|
+
* type t2_12 = CheckType<IsLengthBetween<'AB', 1, 2>, true>;
|
|
73
|
+
* type t2_22 = CheckType<IsLengthBetween<'AB', 2, 2>, true>;
|
|
74
|
+
* type t2_23 = CheckType<IsLengthBetween<'AB', 2, 3>, true>;
|
|
75
|
+
* type f2_1 = CheckType<IsLengthBetween<'AB', 1>, false>;
|
|
76
|
+
*/
|
|
77
|
+
export type IsLengthBetween<S extends string, Min extends number, Max extends number = Min, IfTrue = true, IfFalse = false> = S extends undefined ? undefined : Min extends undefined ? undefined : Max extends undefined ? undefined : GT<Min, Max> extends true ? never : _IsLengthBetween<S, Min, Max> extends true ? IfTrue : IfFalse;
|
|
78
|
+
/**
|
|
79
|
+
* @summary Split `string` literal to chars array. ⚠ Unsafe, internal
|
|
80
|
+
* @example
|
|
81
|
+
* type n = CheckType<_SplitToChars<never>, never>;
|
|
82
|
+
* type u = CheckType<_SplitToChars<undefined>, []>; // ⚠
|
|
83
|
+
*
|
|
84
|
+
* type l0 = CheckType<_SplitToChars<''>, []>;
|
|
85
|
+
* type l1 = CheckType<_SplitToChars<'A'>, ['A']>;
|
|
86
|
+
* type l2 = CheckType<_SplitToChars<'AB'>, ['A', 'B']>;
|
|
87
|
+
*/
|
|
88
|
+
export type _SplitToChars<S extends string, R extends string[] = []> = S extends `${infer C}${infer E}` ? _SplitToChars<E, [...R, C]> : R;
|
|
89
|
+
/**
|
|
90
|
+
* @summary Split `string` literal to chars array
|
|
91
|
+
* @example
|
|
92
|
+
* type n = CheckType<SplitToChars<never>, never>;
|
|
93
|
+
* type u = CheckType<SplitToChars<undefined>, undefined>;
|
|
94
|
+
*
|
|
95
|
+
* type l0 = CheckType<SplitToChars<''>, []>;
|
|
96
|
+
* type l1 = CheckType<SplitToChars<'A'>, ['A']>;
|
|
97
|
+
* type l2 = CheckType<SplitToChars<'AB'>, ['A', 'B']>;
|
|
98
|
+
*/
|
|
99
|
+
export type SplitToChars<S extends string> = S extends undefined ? S : _SplitToChars<S>;
|
|
100
|
+
type _Repeat<S extends Possible, N extends number, R extends string = ''> = N extends 0 ? R : _Repeat<S, Decrement<N>, `${R}${S}`>;
|
|
101
|
+
/**
|
|
102
|
+
* @summary Repeat string possible `S` by `N` times
|
|
103
|
+
* @example
|
|
104
|
+
* type n0 = CheckType<Repeat<never, any>, never>;
|
|
105
|
+
* type n1 = CheckType<Repeat<any, never>, never>;
|
|
106
|
+
* type u0 = CheckType<Repeat<undefined, any>, never>;
|
|
107
|
+
* type u1 = CheckType<Repeat<any, undefined>, never>;
|
|
108
|
+
*
|
|
109
|
+
* type l0 = CheckType<Repeat<'', any>, ''>;
|
|
110
|
+
* type l1 = CheckType<Repeat<'AB', 0>, ''>;
|
|
111
|
+
* type l2 = CheckType<Repeat<'A1', 3>, 'A1A1A1'>;
|
|
112
|
+
*/
|
|
113
|
+
export type Repeat<S extends Possible, N extends number> = S extends undefined ? never : N extends undefined ? never : LT<N, 0> extends true ? never : S extends '' ? S : _Repeat<S, N>;
|
|
114
|
+
type _Includes<S extends string, P extends Possible, IfTrue, IfFalse> = S extends `${string}${P}${string}` ? IfTrue : IfFalse;
|
|
115
|
+
/**
|
|
116
|
+
* @summary String `S` includes possible `P`
|
|
117
|
+
* @template S String for test
|
|
118
|
+
* @template P String possible for match
|
|
119
|
+
* @template IfTrue Result, if `S` length in `[Min, Max]`
|
|
120
|
+
* @template IfFalse Result, if ``S` length NOT in `[Min, Max]`
|
|
121
|
+
* @returns `IfFalse` or `IfTrue` param
|
|
122
|
+
* @example
|
|
123
|
+
* type n0 = CheckType<Includes<never, any>, never>;
|
|
124
|
+
* type n1 = CheckType<Includes<any, never>, never>;
|
|
125
|
+
* type u0 = CheckType<Includes<undefined, any>, never>;
|
|
126
|
+
* type u1 = CheckType<Includes<any, undefined>, never>;
|
|
127
|
+
*
|
|
128
|
+
* type t0 = CheckType<Includes<'', ''>, true>;
|
|
129
|
+
* type t1 = CheckType<Includes<'AB', ''>, true>;
|
|
130
|
+
* type t2 = CheckType<Includes<'AB', 'A'>, true>;
|
|
131
|
+
* type t3 = CheckType<Includes<'AB', 'B'>, true>;
|
|
132
|
+
* type t4 = CheckType<Includes<'AB', 'AB'>, true>;
|
|
133
|
+
*
|
|
134
|
+
* type num = CheckType<Includes<'A8B', 8>, true>;
|
|
135
|
+
* type bool = CheckType<Includes<'AfalseB', false>, true>;
|
|
136
|
+
*
|
|
137
|
+
* type f0 = CheckType<Includes<'AB', 'C'>, false>;
|
|
138
|
+
*/
|
|
139
|
+
export type Includes<S extends string, P extends Possible, IfTrue = true, IfFalse = false> = S extends undefined ? never : P extends undefined ? never : _Includes<S, P, IfTrue, IfFalse>;
|
|
140
|
+
type _IndexOf<S extends string, P extends Possible> = S extends `${infer F}${P}${string}` ? _Length<F> : -1;
|
|
141
|
+
namespace _IndexOfMultiple {
|
|
142
|
+
type GetAllStep<S extends string, P extends readonly Possible[], R extends readonly [number, Possible][], F extends Possible, I extends number = _IndexOf<S, F>> = I extends -1 ? GetAll<S, P, R> : GetAll<S, P, [...R, [I, F]]>;
|
|
143
|
+
type GetAll<S extends string, P extends readonly Possible[], R extends readonly [number, Possible][] = []> = P extends readonly [infer F extends Possible, ...infer Rest extends Possible[]] ? GetAllStep<S, Rest, R, F> : R;
|
|
144
|
+
export type Calculate<S extends string, P extends readonly Possible[], A extends readonly [number, Possible][] = Array.Sort<GetAll<S, P>>> = A;
|
|
145
|
+
export {};
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* @summary Index of possible `P` in string `S`. `-1` if not includes.\
|
|
149
|
+
* Returns sorted array of pairs for union `P`
|
|
150
|
+
* @template S String for test
|
|
151
|
+
* @template P String possible for match
|
|
152
|
+
* @example
|
|
153
|
+
* type n0 = CheckType<IndexOf<never, any>, never>;
|
|
154
|
+
* type n1 = CheckType<IndexOf<any, never>, never>;
|
|
155
|
+
* type u0 = CheckType<IndexOf<undefined, any>, never>;
|
|
156
|
+
* type u1 = CheckType<IndexOf<any, undefined>, never>;
|
|
157
|
+
*
|
|
158
|
+
* type t0 = CheckType<IndexOf<'', ''>, never>;
|
|
159
|
+
* type t1 = CheckType<IndexOf<'AB', ''>, never>;
|
|
160
|
+
* type t2 = CheckType<IndexOf<'AB', 'A'>, 0>;
|
|
161
|
+
* type t3 = CheckType<IndexOf<'AB', 'B'>, 1>;
|
|
162
|
+
* type t4 = CheckType<IndexOf<'AB', 'AB'>, 0>;
|
|
163
|
+
*
|
|
164
|
+
* type num = CheckType<IndexOf<'A8B', 8>, 1>;
|
|
165
|
+
* type bool = CheckType<IndexOf<'AfalseB', false>, 1>;
|
|
166
|
+
*
|
|
167
|
+
* type f0 = CheckType<IndexOf<'AB', 'C'>, -1>;
|
|
168
|
+
*
|
|
169
|
+
* type m = CheckType<IndexOf<'AfalseB', 'B' | false | 'l'>, [[1, false], [3, 'l'], [6, 'B']]>;
|
|
170
|
+
*/
|
|
171
|
+
export type IndexOf<S extends string, P extends Possible> = IsUnion<P> extends false ? S extends undefined ? never : P extends undefined | '' ? never : _IndexOf<S, P> : _IndexOfMultiple.Calculate<S, Extract<Union.ToTuple<P>, readonly Possible[]>>;
|
|
172
|
+
type _ReplaceOne<S extends string, M extends Possible, T extends Possible, N extends number, R extends string = ''> = N extends 0 ? `${R}${S}` : S extends `${infer F}${M}${infer E}` ? _ReplaceOne<E, M, T, Decrement<N>, `${R}${F}${T}`> : `${R}${S}`;
|
|
173
|
+
type _ReplaceComplex<S extends string, M extends Possible, T extends Possible, N extends number, R extends string = ''> = N extends 0 ? `${R}${S}` : IndexOf<S, M> extends readonly [
|
|
174
|
+
[
|
|
175
|
+
number,
|
|
176
|
+
infer M0 extends Possible
|
|
177
|
+
],
|
|
178
|
+
...unknown[]
|
|
179
|
+
] ? S extends `${infer F}${M0}${infer E}` ? _ReplaceComplex<E, M, T, Decrement<N>, `${R}${F}${T}`> : `${R}${S}` : `${R}${S}`;
|
|
180
|
+
/**
|
|
181
|
+
* @summary Replace in string `S` all substrings matched to `M` to `T` string `N` times or less
|
|
182
|
+
* @template S String for change
|
|
183
|
+
* @template M String possible for match.
|
|
184
|
+
* @template T String possible for substitute
|
|
185
|
+
* @example
|
|
186
|
+
* type n0 = CheckType<Replace<never, any>, never>;
|
|
187
|
+
* type n1 = CheckType<Replace<any, never>, never>;
|
|
188
|
+
* type u0 = CheckType<Replace<undefined, any>, never>;
|
|
189
|
+
* type u1 = CheckType<Replace<any, undefined>, never>;
|
|
190
|
+
*
|
|
191
|
+
* type r1 = CheckType<Replace<Replace<'a-b_c_d', '_'>, '-'>, 'abcd'>;
|
|
192
|
+
* type r2 = CheckType<Replace<'123456_246', '2' | '4' | '6', '#', 3>, '1#3#5#_246'>;
|
|
193
|
+
* type r3 = CheckType<Replace<'abcde', 'a' | 'b' | 'c' | 'd' | 'e', 'ae '>, 'ae ae ae ae ae '>;
|
|
194
|
+
*/
|
|
195
|
+
export type Replace<S extends string, M extends Possible, T extends Possible = '', N extends number = 4000> = IsUnion<M> extends false ? S extends undefined ? never : M extends undefined ? never : LTE<N, 0> extends true ? S : _ReplaceOne<S, M, T, N> : _ReplaceComplex<S, M, T, N>;
|
|
196
|
+
type SpaceCharsUnion = SplitToChars<Pattern['\\s']>[number];
|
|
197
|
+
type _Trim<S extends string, Start extends boolean, End extends boolean, SU extends string = Start extends true ? SpaceCharsUnion : '', EU extends string = End extends true ? SpaceCharsUnion : ''> = S extends `${SU}${infer Rest}${EU}` ? S extends Rest ? S : _Trim<Rest, Start, End> : S;
|
|
198
|
+
/**
|
|
199
|
+
* @summary Replace spaces chars in string `S` start and end
|
|
200
|
+
* @template S String for change
|
|
201
|
+
* @example
|
|
202
|
+
* type n0 = CheckType<Trim<never>, never>;
|
|
203
|
+
* type u0 = CheckType<Trim<undefined>, never>;
|
|
204
|
+
* type a0 = CheckType<Trim<any>, any>;
|
|
205
|
+
*
|
|
206
|
+
* type t1 = CheckType<Trim<'abcd'>, 'abcd'>;
|
|
207
|
+
* type r2 = CheckType<Trim<' \r\n\t\f\v \r\n\t\f\v123456 \r\n\t\f\v \r\n\t\f\v'>, '123456'>;
|
|
208
|
+
*/
|
|
209
|
+
export type Trim<S extends string> = S extends undefined ? never : _Trim<_Trim<S, true, false>, false, true>;
|
|
210
|
+
export namespace Trim {
|
|
211
|
+
/**
|
|
212
|
+
* @summary Replace spaces chars in string `S` start
|
|
213
|
+
* @template S String for change
|
|
214
|
+
* @example
|
|
215
|
+
* type n0 = CheckType<Trim.Start<never>, never>;
|
|
216
|
+
* type u0 = CheckType<Trim.Start<undefined>, never>;
|
|
217
|
+
* type a0 = CheckType<Trim.Start<any>, any>;
|
|
218
|
+
*
|
|
219
|
+
* type t1 = CheckType<Trim.Start<'abcd'>, 'abcd'>;
|
|
220
|
+
* type r2 = CheckType<
|
|
221
|
+
* Trim.Start<' \r\n\t\f\v \r\n\t\f\v123456 \r\n\t\f\v \r\n\t\f\v'>,
|
|
222
|
+
* '123456 \r\n\t\f\v \r\n\t\f\v'
|
|
223
|
+
* >;
|
|
224
|
+
*/
|
|
225
|
+
type Start<S extends string> = S extends undefined ? never : _Trim<S, true, false>;
|
|
226
|
+
/**
|
|
227
|
+
* @summary Replace spaces chars in string `S` end
|
|
228
|
+
* @template S String for change
|
|
229
|
+
* @example
|
|
230
|
+
* type n0 = CheckType<Trim.End<never>, never>;
|
|
231
|
+
* type u0 = CheckType<Trim.End<undefined>, never>;
|
|
232
|
+
* type a0 = CheckType<Trim.End<any>, any>;
|
|
233
|
+
*
|
|
234
|
+
* type t1 = CheckType<Trim.End<'abcd'>, 'abcd'>;
|
|
235
|
+
* type r2 = CheckType<
|
|
236
|
+
* Trim.End<' \r\n\t\f\v \r\n\t\f\v123456 \r\n\t\f\v \r\n\t\f\v'>,
|
|
237
|
+
* ' \r\n\t\f\v \r\n\t\f\v123456'
|
|
238
|
+
* >;
|
|
239
|
+
*/
|
|
240
|
+
type End<S extends string> = S extends undefined ? never : _Trim<S, false, true>;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* @summary String cases
|
|
244
|
+
* @example
|
|
245
|
+
* type w =
|
|
246
|
+
* 'Oh! Jingle bells, jingle bells Jingle all the way';
|
|
247
|
+
* type c = CheckType<Camel<w>, 'ohJingleBellsJingleBellsJingleAllTheWay'>;
|
|
248
|
+
* type p = CheckType<Pascal<w>, 'OhJingleBellsJingleBellsJingleAllTheWay'>;
|
|
249
|
+
* type s = CheckType<Snake<w>, 'oh_jingle_bells_jingle_bells_jingle_all_the_way'>;
|
|
250
|
+
* type S = CheckType<Snake.Up<w>, 'OH_JINGLE_BELLS_JINGLE_BELLS_JINGLE_ALL_THE_WAY'>;
|
|
251
|
+
* type k = CheckType<Kebab<w>, 'oh-jingle-bells-jingle-bells-jingle-all-the-way'>;
|
|
252
|
+
*/
|
|
253
|
+
export namespace Case {
|
|
254
|
+
/**
|
|
255
|
+
* @summary String cases settings
|
|
256
|
+
*/
|
|
257
|
+
export namespace Settings {
|
|
258
|
+
/**
|
|
259
|
+
* @summary String cases global removes settings
|
|
260
|
+
*/
|
|
261
|
+
namespace Removes {
|
|
262
|
+
/**
|
|
263
|
+
* @summary String cases global removes map for keys. Values ignored
|
|
264
|
+
*/
|
|
265
|
+
interface Map {
|
|
266
|
+
' ': 0;
|
|
267
|
+
'-': 0;
|
|
268
|
+
_: 0;
|
|
269
|
+
',': 0;
|
|
270
|
+
'.': 0;
|
|
271
|
+
'!': 0;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
type Removes = keyof Removes.Map;
|
|
275
|
+
}
|
|
276
|
+
type _CamelPascal<S extends string, RM extends string, U extends boolean = false, R extends string = ''> = S extends `${infer C}${infer E}` ? C extends RM ? _CamelPascal<E, RM, true, R> : _CamelPascal<E, RM, false, `${R}${U extends true ? Uppercase<C> : Lowercase<C>}`> : R;
|
|
277
|
+
type _SnakeKebab<S extends string, Sep extends string, RM extends string, U extends boolean = false, F extends boolean = true, R extends string = ''> = S extends `${infer C}${infer E}` ? C extends RM ? _SnakeKebab<E, Sep, RM, true, F, R> : _SnakeKebab<E, Sep, RM, false, false, `${R}${F extends true ? '' : U extends true ? Sep : C extends Uppercase<C> ? Sep : ''}${Lowercase<C>}`> : R;
|
|
278
|
+
/**
|
|
279
|
+
* @summary Camel case
|
|
280
|
+
*/
|
|
281
|
+
export type Camel<S extends string, R extends string = Settings.Removes> = _CamelPascal<S, R>;
|
|
282
|
+
/**
|
|
283
|
+
* @summary Pascal case
|
|
284
|
+
*/
|
|
285
|
+
export type Pascal<S extends string, R extends string = Settings.Removes> = _CamelPascal<S, R, true>;
|
|
286
|
+
/**
|
|
287
|
+
* @summary Snake case
|
|
288
|
+
*/
|
|
289
|
+
export type Snake<S extends string, R extends string = Settings.Removes> = _SnakeKebab<S, '_', R>;
|
|
290
|
+
export namespace Snake {
|
|
291
|
+
/**
|
|
292
|
+
* @summary Snake UPPER_CASE
|
|
293
|
+
*/
|
|
294
|
+
type Up<S extends string, R extends string = Settings.Removes> = Uppercase<_SnakeKebab<S, '_', R>>;
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* @summary Kebab case
|
|
298
|
+
*/
|
|
299
|
+
export type Kebab<S extends string, R extends string = Settings.Removes> = _SnakeKebab<S, '-', R>;
|
|
300
|
+
export {};
|
|
301
|
+
}
|
|
302
|
+
export type Case<Type extends 'c' | 'p' | 's' | 'S' | 'k', S extends string, R extends string = Case.Settings.Removes> = Type extends 'c' ? Case.Camel<S, R> : Type extends 'p' ? Case.Pascal<S, R> : Type extends 's' ? Case.Snake<S, R> : Type extends 'S' ? Case.Snake.Up<S, R> : Type extends 'k' ? Case.Kebab<S, R> : never;
|
|
303
|
+
export namespace Case {
|
|
304
|
+
}
|
|
305
|
+
export {};
|
|
306
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
declare namespace AVStantso {
|
|
2
|
+
namespace Code {
|
|
3
|
+
namespace TS {
|
|
4
|
+
namespace Structure {
|
|
5
|
+
/**
|
|
6
|
+
* @summary Not strict Structure.
|
|
7
|
+
*/
|
|
8
|
+
type Wildcard = AVStantso.TS.Structure.Wildcard;
|
|
9
|
+
/**
|
|
10
|
+
* @summary Find structure `object` `T` key by `value` `V`
|
|
11
|
+
* @template T Structure
|
|
12
|
+
* @template V Structure value or provider subvalue
|
|
13
|
+
* @template TProviderFiled Sub key of `object` values for extract value
|
|
14
|
+
* @param structure Structure for search
|
|
15
|
+
* @param value Structure value or provider subvalue
|
|
16
|
+
* @param field Sub key of `object` values for extract value
|
|
17
|
+
*/
|
|
18
|
+
interface KeyByValue {
|
|
19
|
+
/**
|
|
20
|
+
* @summary Find structure `object` `T` key by `value` `V`
|
|
21
|
+
* @template T Structure
|
|
22
|
+
* @template V Structure value
|
|
23
|
+
* @param structure Structure for search
|
|
24
|
+
* @param value Structure value or provider subvalue
|
|
25
|
+
*/
|
|
26
|
+
<T extends Structure.Wildcard, V>(structure: T, value: V): AVStantso.TS.Structure.Reverse<T> extends infer R ? V extends keyof R ? R[V] : unknown : unknown;
|
|
27
|
+
/**
|
|
28
|
+
* @summary Find structure `object` `T` key by `value` `V`
|
|
29
|
+
* @template T Structure
|
|
30
|
+
* @template V Structure value or provider subvalue
|
|
31
|
+
* @template TProviderFiled Sub key of `object` values for extract value
|
|
32
|
+
* @param field Sub key of `object` values for extract value
|
|
33
|
+
* @param structure Structure for search
|
|
34
|
+
* @param value Structure value or provider subvalue
|
|
35
|
+
*/
|
|
36
|
+
<T extends Structure.Wildcard, V, TProviderFiled extends AVStantso.TS.Key = undefined>(field: TProviderFiled, structure: T, value: V): AVStantso.TS.Structure.Reverse<T, TProviderFiled> extends infer R ? V extends keyof R ? R[V] : unknown : unknown;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* @summary TypeScript structure helpers utility
|
|
41
|
+
*/
|
|
42
|
+
interface Structure {
|
|
43
|
+
/**
|
|
44
|
+
* @summary Check `candidate` is `Structure` and cast to `T`.
|
|
45
|
+
* @param candidate Tested value
|
|
46
|
+
* @param noSpecialClasses If setted, returns `false` for `Array`, `Map`, `Set` etc.
|
|
47
|
+
*/
|
|
48
|
+
is<T extends Structure.Wildcard>(candidate: unknown, noSpecialClasses?: boolean): candidate is T;
|
|
49
|
+
/**
|
|
50
|
+
* @summary Find structure `object` `T` key by `value` `V`
|
|
51
|
+
* @template T Structure
|
|
52
|
+
* @template V Structure value or provider subvalue
|
|
53
|
+
* @template TProviderFiled Sub key of `object` values for extract value
|
|
54
|
+
* @param field Sub key of `object` values for extract value
|
|
55
|
+
* @param structure Structure for search
|
|
56
|
+
* @param value Structure value or provider subvalue
|
|
57
|
+
*/
|
|
58
|
+
keyByValue: Structure.KeyByValue;
|
|
59
|
+
/**
|
|
60
|
+
* @summary Reverse structure `object` `T` to map value-key.\
|
|
61
|
+
* Non keyable values is ignored\
|
|
62
|
+
* except `object` if defined `TProviderFiled` and it's have this key
|
|
63
|
+
* @template T Structure object for reverse
|
|
64
|
+
* @template TProviderFiled Sub key of `object` values for extract value
|
|
65
|
+
* @example
|
|
66
|
+
* type r_simple = CheckType<
|
|
67
|
+
* Reverse<{ x: 1; y: 'ABC'; z: { a: true } }>,
|
|
68
|
+
* {
|
|
69
|
+
* 1: 'x';
|
|
70
|
+
* ABC: 'y';
|
|
71
|
+
* }
|
|
72
|
+
* >;
|
|
73
|
+
*
|
|
74
|
+
* type r_provider = CheckType<
|
|
75
|
+
* Reverse<{ x: 1; y: 'ABC'; z: { a: 15 } }, 'a'>,
|
|
76
|
+
* {
|
|
77
|
+
* 1: 'x';
|
|
78
|
+
* ABC: 'y';
|
|
79
|
+
* 15: 'z';
|
|
80
|
+
* }
|
|
81
|
+
* >;
|
|
82
|
+
*/
|
|
83
|
+
reverse<T extends object, TProviderFiled extends AVStantso.TS.Key = undefined>(structure: T, field?: TProviderFiled): AVStantso.TS.Structure.Reverse<T, TProviderFiled>;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
interface TS {
|
|
87
|
+
/**
|
|
88
|
+
* @summary TypeScript structure helpers utility
|
|
89
|
+
*/
|
|
90
|
+
Structure: TS.Structure;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|