import type { Args, Fn } from "../HKT"; import type { List } from "../List"; import type { ToCamelCase } from "../Str/ToCamelCase"; type _CamelizeMutableList = TS extends [infer Head, ...infer Tail] ? [Head extends object ? Camelize : Head, ..._CamelizeMutableList] : []; type _CamelizeImmutableList = TS extends readonly [infer Head, ...infer Tail] ? readonly [Head extends object ? Camelize : Head, ..._CamelizeImmutableList] : readonly []; export type Camelize = O extends Array ? number extends O["length"] ? Array : U> : _CamelizeMutableList : O extends ReadonlyArray ? number extends O["length"] ? ReadonlyArray : U> : _CamelizeImmutableList : { [K in keyof O & string as ToCamelCase]: [O[K]] extends [object] ? Camelize : O[K] }; export default interface CamelizeFn extends Fn<[object], object> { def: ([o]: Args) => Camelize; }