type SnakeToCamel = S extends `${infer H}_${infer T}` ? `${Lowercase}${Capitalize>}` : Lowercase; type PascalToCamel = S extends `${infer F}${infer R}` ? `${Lowercase}${R}` : S; /** If it's snake_case, apply the snake_case rule; otherwise, just lowercase the first letter (including PascalCase → camelCase). */ type AnyToCamel = S extends `${string}_${string}` ? SnakeToCamel : PascalToCamel; type NonPlainObject = Date | RegExp | Map | Set | WeakMap | WeakSet | Promise | Error | ArrayBuffer | DataView | Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array | BigInt64Array | BigUint64Array | ((...args: any[]) => any) | typeof globalThis; type ToCamelCaseKeys = T extends NonPlainObject ? T : T extends any[] ? Array> : T extends Record ? { [K in keyof T as AnyToCamel>]: ToCamelCaseKeys; } : T; /** * Creates a new object composed of the properties with keys converted to camelCase. * * This function takes an object and returns a new object that includes the same properties, * but with all keys converted to camelCase format. * * @template T - The type of object. * @param {T} obj - The object to convert keys from. * @returns {ToCamelCaseKeys} A new object with all keys converted to camelCase. * * @example * // Example with objects * const obj = { user_id: 1, first_name: 'John' }; * const result = toCamelCaseKeys(obj); * // result will be { userId: 1, firstName: 'John' } * * // Example with arrays of objects * const arr = [ * { user_id: 1, first_name: 'John' }, * { user_id: 2, first_name: 'Jane' } * ]; * const arrResult = toCamelCaseKeys(arr); * // arrResult will be [{ userId: 1, firstName: 'John' }, { userId: 2, firstName: 'Jane' }] * * // Example with nested objects * const nested = { * user_data: { * user_id: 1, * user_address: { * street_name: 'Main St', * zip_code: '12345' * } * } * }; * const nestedResult = toCamelCaseKeys(nested); * // nestedResult will be: * // { * // userData: { * // userId: 1, * // userAddress: { * // streetName: 'Main St', * // zipCode: '12345' * // } * // } * // } */ declare function toCamelCaseKeys(obj: T): ToCamelCaseKeys; export { toCamelCaseKeys };