import isObject from 'lodash.isobject'; import lodashCamelCase from 'lodash.camelcase'; import upperFirst from 'lodash.upperfirst'; import { PascalCase, PascalCasedPropertiesDeep } from 'type-fest'; export const pascalCase = (text: T) => upperFirst(lodashCamelCase(text as unknown as string)) as PascalCase; export const pascalCaseDeep = (value: T): PascalCasedPropertiesDeep => { // Check if it's an array if (Array.isArray(value)) { return value.map(pascalCaseDeep) as PascalCasedPropertiesDeep; } // Check if it's an object if (isObject(value)) { const result: Record = {}; for (const key in value) { result[pascalCase(key)] = pascalCaseDeep(value[key]); } return result as PascalCasedPropertiesDeep; } return value as PascalCasedPropertiesDeep; };