UNPKG

rivo

Version:

🤖 The ultimate library you need for composable type-level programming in TypeScript, powered by HKT.

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