blob: 82b82793ec7838a0f1edf8493a79d0c293ce5168 (
plain)
1
2
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
|
function pascalCaseToCamelCaseImpl(str: string): string {
return str.charAt(0).toLowerCase() + str.slice(1);
}
function snakeCaseToCamelCaseImpl(str: string): string {
return str.replace(/_([a-z])/gi, (matches) => matches[1].toUpperCase());
}
function camelCaseToSnakeCaseImpl(str: string): string {
return str
.replace(/[a-z0-9][A-Z]/g, (matches) => `${matches[0]}_${matches[1].toLowerCase()}`)
.toLowerCase();
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export function pascalCaseToCamelCase<T>(anObject: { [key: string]: any }): T {
return transformObjectKeys(anObject, pascalCaseToCamelCaseImpl) as T;
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export function snakeCaseToCamelCase<T>(anObject: { [key: string]: any }): T {
return transformObjectKeys(anObject, snakeCaseToCamelCaseImpl) as T;
}
export function camelCaseToSnakeCase<T>(anObject: T): Record<string, unknown> {
return transformObjectKeys(anObject, camelCaseToSnakeCaseImpl);
}
function transformObjectKeys(
anObject: { [key: string]: any }, // eslint-disable-line @typescript-eslint/no-explicit-any
keyTransformer: (key: string) => string,
) {
for (const sourceKey of Object.keys(anObject)) {
const targetKey = keyTransformer(sourceKey);
const sourceValue = anObject[sourceKey];
anObject[targetKey] =
sourceValue !== null && typeof sourceValue === 'object'
? transformObjectKeys(sourceValue, keyTransformer)
: sourceValue;
if (sourceKey !== targetKey) {
delete anObject[sourceKey];
}
}
return anObject;
}
|