diff --git a/src/helpers/general.ts b/src/helpers/general.ts index 22afdf97..136f65e5 100644 --- a/src/helpers/general.ts +++ b/src/helpers/general.ts @@ -59,18 +59,28 @@ export function snakeCaseToCamelCase(obj: Record): void { Object.entries(obj).forEach(([snakeKey, value]) => { if (typeof value === 'object') snakeCaseToCamelCase(value); - const keys = snakeKey.split('_').filter((key) => key !== ''); + const camelKey = snakeKey.replace( + /_[a-z]/g, + (_char) => _char[1].toUpperCase() + ); - if (keys.length >= 1) { - const camelCaseKey = keys.reduce((previousValue, currentValue) => - previousValue + - currentValue.charAt(0).toUpperCase() + - currentValue.slice(1) - ); + // eslint-disable-next-line @typescript-eslint/no-dynamic-delete + delete obj[snakeKey]; + obj[camelKey] = value; + }); +} - // eslint-disable-next-line @typescript-eslint/no-dynamic-delete - delete obj[snakeKey]; - obj[camelCaseKey] = value; - } +export function camelCaseToSnakeCase(obj: Record): void { + Object.entries(obj).forEach(([camelKey, value]) => { + if (typeof value === 'object') camelCaseToSnakeCase(value); + + const snakeKey = camelKey.replace( + /[A-Z]/g, + (char) => `_${char.toLowerCase()}` + ); + + // eslint-disable-next-line @typescript-eslint/no-dynamic-delete + delete obj[camelKey]; + obj[snakeKey] = value; }); } diff --git a/src/helpers/index.ts b/src/helpers/index.ts index 0ea5440e..818122c4 100644 --- a/src/helpers/index.ts +++ b/src/helpers/index.ts @@ -3,7 +3,8 @@ import { wrap, path, Path, - snakeCaseToCamelCase + snakeCaseToCamelCase, + camelCaseToSnakeCase } from './general'; import { insertDividerBetweenElements, @@ -20,6 +21,7 @@ export { wrap, path, type Path, snakeCaseToCamelCase, + camelCaseToSnakeCase, // materialUI insertDividerBetweenElements, getStyleOverrides,