import type {CamelCaseOptions, _DefaultCamelCaseOptions} from './camel-case.d.ts'; import type {ApplyDefaultOptions} from './internal/index.d.ts'; import type {PascalCase} from './pascal-case.d.ts'; /** Convert object properties to pascal case recursively. This can be useful when, for example, converting some API types from a different style. @see PascalCase @see PascalCasedProperties @example ``` import type {PascalCasedPropertiesDeep} from 'type-fest'; interface User { userId: number; userName: string; } interface UserWithFriends { userInfo: User; userFriends: User[]; } const result: PascalCasedPropertiesDeep = { UserInfo: { UserId: 1, UserName: 'Tom', }, UserFriends: [ { UserId: 2, UserName: 'Jerry', }, { UserId: 3, UserName: 'Spike', }, ], }; const preserveConsecutiveUppercase: PascalCasedPropertiesDeep<{fooBAR: {fooBARBiz: [{fooBARBaz: string}]}}, {preserveConsecutiveUppercase: true}> = { FooBAR: { FooBARBiz: [{ FooBARBaz: 'string', }], }, }; ``` @category Change case @category Template literal @category Object */ export type PascalCasedPropertiesDeep = _PascalCasedPropertiesDeep>; type _PascalCasedPropertiesDeep> = Value extends Function | Date | RegExp ? Value : Value extends Array ? Array<_PascalCasedPropertiesDeep> : Value extends Set ? Set<_PascalCasedPropertiesDeep> : Value extends object ? { [K in keyof Value as PascalCase]: _PascalCasedPropertiesDeep; } : Value; export {};