1 | import type {CamelCase, CamelCaseOptions} from './camel-case';
|
2 | import type {UnknownArray} from './unknown-array';
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 |
|
28 |
|
29 |
|
30 |
|
31 |
|
32 |
|
33 |
|
34 |
|
35 |
|
36 |
|
37 |
|
38 |
|
39 |
|
40 |
|
41 |
|
42 |
|
43 |
|
44 |
|
45 |
|
46 |
|
47 |
|
48 | export type CamelCasedPropertiesDeep<
|
49 | Value,
|
50 | Options extends CamelCaseOptions = {preserveConsecutiveUppercase: true},
|
51 | > = Value extends Function
|
52 | ? Value
|
53 | : Value extends UnknownArray
|
54 | ? CamelCasedPropertiesArrayDeep<Value>
|
55 | : Value extends Set<infer U>
|
56 | ? Set<CamelCasedPropertiesDeep<U, Options>>
|
57 | : {
|
58 | [K in keyof Value as CamelCase<K, Options>]: CamelCasedPropertiesDeep<
|
59 | Value[K],
|
60 | Options
|
61 | >;
|
62 | };
|
63 |
|
64 |
|
65 |
|
66 | type CamelCasedPropertiesArrayDeep<Value extends UnknownArray> =
|
67 | Value extends []
|
68 | ? []
|
69 | :
|
70 | Value extends [infer U, ...infer V]
|
71 | ? [CamelCasedPropertiesDeep<U>, ...CamelCasedPropertiesDeep<V>]
|
72 | : Value extends readonly [infer U, ...infer V]
|
73 | ? readonly [CamelCasedPropertiesDeep<U>, ...CamelCasedPropertiesDeep<V>]
|
74 | :
|
75 | Value extends readonly [...infer U, infer V]
|
76 | ? [...CamelCasedPropertiesDeep<U>, CamelCasedPropertiesDeep<V>]
|
77 | : Value extends readonly [...infer U, infer V]
|
78 | ? readonly [
|
79 | ...CamelCasedPropertiesDeep<U>,
|
80 | CamelCasedPropertiesDeep<V>,
|
81 | ]
|
82 | :
|
83 | Value extends Array<infer U>
|
84 | ? Array<CamelCasedPropertiesDeep<U>>
|
85 | : Value extends ReadonlyArray<infer U>
|
86 | ? ReadonlyArray<CamelCasedPropertiesDeep<U>>
|
87 | : never;
|