From 9f61562860da8c816f3c8eacf508e0bdb52cdef9 Mon Sep 17 00:00:00 2001 From: SKairinos Date: Sun, 23 Jul 2023 17:45:16 +0100 Subject: [PATCH] fix: camel to snake case --- src/helpers/general.ts | 32 +++++++++++++++++++++----------- src/helpers/index.ts | 4 +++- 2 files changed, 24 insertions(+), 12 deletions(-) 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,