diff --git a/packages/common/src/Types.ts b/packages/common/src/Types.ts index ba03139..cc71c38 100644 --- a/packages/common/src/Types.ts +++ b/packages/common/src/Types.ts @@ -31,9 +31,16 @@ export type SnakeCase = S extends `${infer A}${infer Rest}` : Lowercase; export type ObjectToLower = Identify<{ - [K in keyof T as CamelCase>]: T[K] extends object ? Identify> : T[K]; + [K in keyof T as CamelCase>]: T[K] extends unknown[] + ? Identify[]> + : T[K] extends object + ? Identify> + : T[K]; }>; - export type ObjectToSnake = Identify<{ - [K in keyof T as SnakeCase>]: T[K] extends object ? Identify> : T[K]; + [K in keyof T as SnakeCase>]: T[K] extends unknown[] + ? Identify[]> + : T[K] extends object + ? Identify> + : T[K]; }>; diff --git a/packages/common/src/Util.ts b/packages/common/src/Util.ts index 86f69aa..36374ee 100644 --- a/packages/common/src/Util.ts +++ b/packages/common/src/Util.ts @@ -1,12 +1,12 @@ import { setTimeout } from 'node:timers/promises'; -import { ObjectToSnake, ObjectToLower } from './Types'; +import { ObjectToLower, ObjectToSnake } from './Types'; const isPlainObject = (value: any) => { return ( (value !== null && typeof value === 'object' && typeof value.constructor === 'function' && - // eslint-disable-next-line no-prototype-builtins + // rome-ignore lint/suspicious/noPrototypeBuiltins: js tricks (value.constructor.prototype.hasOwnProperty('isPrototypeOf') || Object.getPrototypeOf(value.constructor.prototype) === null)) || (value && Object.getPrototypeOf(value) === null) ); @@ -48,7 +48,7 @@ export const Options = (defaults: any, ...options: any[]): T => { * @param target The object to convert. * @returns The converted object. */ -export function toSnakeCase(target: Obj): ObjectToSnake { +export function toSnakeCase>(target: Obj): ObjectToSnake { const result = {}; for (const [key, value] of Object.entries(target)) { switch (typeof value) { @@ -62,7 +62,7 @@ export function toSnakeCase(target: Obj): break; case 'object': if (Array.isArray(value)) { - result[ReplaceRegex.camel(key)] = Promise.all(value.map((prop) => toSnakeCase(prop))); + result[ReplaceRegex.camel(key)] = value.map((prop) => toSnakeCase(prop)); break; } if (!Number.isNaN(value)) { @@ -81,7 +81,7 @@ export function toSnakeCase(target: Obj): * @param target The object to convert. * @returns The converted object. */ -export function toCamelCase(target: Obj): ObjectToLower { +export function toCamelCase>(target: Obj): ObjectToLower { const result = {}; for (const [key, value] of Object.entries(target)) { switch (typeof value) { @@ -95,7 +95,7 @@ export function toCamelCase(target: Obj): break; case 'object': if (Array.isArray(value)) { - result[ReplaceRegex.snake(key)] = Promise.all(value.map((prop) => toCamelCase(prop))); + result[ReplaceRegex.snake(key)] = value.map((prop) => toCamelCase(prop)); break; } if (!Number.isNaN(value)) {