Files
discordeno/packages/utils/src/casing.ts
2022-12-31 13:10:59 -06:00

27 lines
739 B
TypeScript

import type { Camelize } from '@discordeno/types'
export const camelize = <T>(object: T): Camelize<T> => {
if (Array.isArray(object)) {
return object.map((element) =>
camelize(element)
) as Camelize<T>
}
if (typeof object === 'object' && object !== null) {
const obj = {} as Camelize<T>;
(Object.keys(object) as Array<keyof T>).forEach((key) => {
// @ts-expect-error
(obj[
typeof key === 'string'
? key.replace(/([-_][a-z])/gi, ($1) => {
return $1.toUpperCase().replace('-', '').replace('_', '')
})
: key
] as Camelize<(T & object)[keyof T]>) = camelize(
object[key]
)
})
return obj
}
return object as Camelize<T>
}