import isObject from 'lodash.isobject'; import lodashSnakeCase from 'lodash.snakecase'; import { SnakeCase, SnakeCasedPropertiesDeep } from 'type-fest'; export const snakeCase = (text: T) => lodashSnakeCase(text as unknown as string) as SnakeCase; export const snakeCaseDeep = (value: T): SnakeCasedPropertiesDeep => { // Check if it's an array if (Array.isArray(value)) { return value.map(snakeCaseDeep) as SnakeCasedPropertiesDeep; } // Check if it's an object if (isObject(value)) { const result: Record = {}; for (const key in value) { result[snakeCase(key)] = snakeCaseDeep(value[key]); } return result as SnakeCasedPropertiesDeep; } return value as SnakeCasedPropertiesDeep; };