@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,335 @@
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
+ * type user_id = {
254
+ * userId: CheckType<Camel<'user_id'>, 'userId'>;
255
+ * UserId: CheckType<Pascal<'user_id'>, 'UserId'>;
256
+ * user_id: CheckType<Snake<'user_id'>, 'user_id'>;
257
+ * 'user-id': CheckType<Kebab<'user_id'>, 'user-id'>;
258
+ * };
259
+ *
260
+ * type XMLHttpRequest = {
261
+ * xmlHttpRequest: CheckType<Camel<'XMLHttpRequest'>, 'xmlHttpRequest'>;
262
+ * XmlHttpRequest: CheckType<Pascal<'XMLHttpRequest'>, 'XmlHttpRequest'>;
263
+ * xml_http_request: CheckType<Snake<'XMLHttpRequest'>, 'xml_http_request'>;
264
+ * 'xml-http-request': CheckType<Kebab<'XMLHttpRequest'>, 'xml-http-request'>;
265
+ * };
266
+ */
267
+ export namespace Case {
268
+ /**
269
+ * @summary String cases settings
270
+ */
271
+ export namespace Settings {
272
+ /**
273
+ * @summary String cases global removes settings
274
+ */
275
+ namespace Removes {
276
+ /**
277
+ * @summary String cases global removes map for keys. Values ignored
278
+ */
279
+ interface Map {
280
+ ' ': 0;
281
+ '-': 0;
282
+ _: 0;
283
+ ',': 0;
284
+ '.': 0;
285
+ '!': 0;
286
+ }
287
+ }
288
+ type Removes = keyof Removes.Map;
289
+ }
290
+ type _IsWordStart<C extends string, E extends string, PrevUpper extends boolean> = C extends Uppercase<C> ? PrevUpper extends true ? E extends `${infer Next}${string}` ? Next extends Lowercase<Next> ? true : false : false : true : false;
291
+ type _CamelPascal<S extends string, RM extends string, U extends boolean = false, PrevUpper extends boolean = false, R extends string = ''> = S extends `${infer C}${infer E}` ? C extends RM ? _CamelPascal<E, RM, true, false, R> : _IsWordStart<C, E, PrevUpper> extends true ? _CamelPascal<E, RM, false, C extends Uppercase<C> ? true : false, `${R}${R extends '' ? (U extends true ? Uppercase<C> : Lowercase<C>) : Uppercase<C>}`> : _CamelPascal<E, RM, false, C extends Uppercase<C> ? true : false, `${R}${U extends true ? Uppercase<C> : Lowercase<C>}`> : R;
292
+ type _SnakeKebab<S extends string, Sep extends string, RM extends string, U extends boolean = false, F extends boolean = true, PrevUpper extends boolean = false, R extends string = ''> = S extends `${infer C}${infer E}` ? C extends RM ? _SnakeKebab<E, Sep, RM, true, F, false, R> : _SnakeKebab<E, Sep, RM, false, false, C extends Uppercase<C> ? true : false, `${R}${F extends true ? '' : U extends true ? Sep : _IsWordStart<C, E, PrevUpper> extends true ? Sep : ''}${Lowercase<C>}`> : R;
293
+ /**
294
+ * @summary Camel case
295
+ */
296
+ export type Camel<S extends string, R extends string = Settings.Removes> = _CamelPascal<S, R>;
297
+ /**
298
+ * @summary Pascal case
299
+ */
300
+ export type Pascal<S extends string, R extends string = Settings.Removes> = _CamelPascal<S, R, true>;
301
+ /**
302
+ * @summary Snake case
303
+ */
304
+ export type Snake<S extends string, R extends string = Settings.Removes> = _SnakeKebab<S, '_', R>;
305
+ export namespace Snake {
306
+ /**
307
+ * @summary Snake UPPER_CASE
308
+ */
309
+ type Up<S extends string, R extends string = Settings.Removes> = Uppercase<_SnakeKebab<S, '_', R>>;
310
+ }
311
+ /**
312
+ * @summary Kebab case
313
+ */
314
+ export type Kebab<S extends string, R extends string = Settings.Removes> = _SnakeKebab<S, '-', R>;
315
+ export {};
316
+ }
317
+ 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;
318
+ export namespace Case {
319
+ }
320
+ export {};
321
+ }
322
+ declare namespace AVStantso.TS {
323
+ /**
324
+ * @example
325
+ * type n0 = CheckType<String<never>, never>;
326
+ * type u0 = CheckType<String<undefined>, 'undefined'>;
327
+ * type a0 = CheckType<String<any>, `${any}`>;
328
+ *
329
+ * type s = CheckType<String<'abcd'>, 'abcd'>;
330
+ * type n = CheckType<String<123>, '123'>;
331
+ * type t = CheckType<String<true>, 'true'>;
332
+ * type f = CheckType<String<false>, 'false'>;
333
+ */
334
+ type String<T, D extends string = ''> = T extends TS.String.Possible ? `${T}` : D;
335
+ }
@@ -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
+ }
@@ -0,0 +1,2 @@
1
+ import './_register';
2
+ import './structure';