37 lines
1.1 KiB
TypeScript
37 lines
1.1 KiB
TypeScript
function camelToSnake(str: string): string {
|
|
return str.replace(/[A-Z]/g, letter => `_${letter.toLowerCase()}`);
|
|
}
|
|
|
|
function snakeToCamel(str: string): string {
|
|
return str.replace(/(_[\w])/g, (match) =>
|
|
match[1].toUpperCase()
|
|
);
|
|
}
|
|
|
|
export function convertKeysFromSnakeToCamel<T>(obj: T): T {
|
|
if (Array.isArray(obj)) {
|
|
return obj.map(convertKeysFromSnakeToCamel) as unknown as T;
|
|
} else if (obj !== null && typeof obj === 'object') {
|
|
return Object.keys(obj).reduce((acc, key) => {
|
|
const newKey = snakeToCamel(key);
|
|
acc[newKey] = convertKeysFromSnakeToCamel((obj as any)[key]);
|
|
return acc;
|
|
}, {} as any);
|
|
}
|
|
return obj;
|
|
}
|
|
|
|
|
|
export function convertKeysFromCamelToSnake<T>(obj: T): T {
|
|
if (Array.isArray(obj)) {
|
|
return obj.map(convertKeysFromCamelToSnake) as unknown as T;
|
|
} else if (obj !== null && typeof obj === 'object') {
|
|
return Object.keys(obj).reduce((acc, key) => {
|
|
const newKey = camelToSnake(key);
|
|
acc[newKey] = convertKeysFromCamelToSnake((obj as any)[key]);
|
|
return acc;
|
|
}, {} as any);
|
|
}
|
|
return obj;
|
|
}
|