// Utility type to capitalize the first letter of a string
type Capitalize<S extends string> = S extends `${infer T}${infer U}` ? `${Uppercase}${U}` : S;
// Utility type to convert snake_case to camelCase
type SnakeToCamelCase<S extends string> = S extends `${infer T}_${infer U}`
? `${T}${Capitalize<SnakeToCamelCase<U>>}`
: S;
// Generic type transformer to convert DB entity type to DTO type
export type EntityToDto<T> = {
[P in keyof T as P extends string ? SnakeToCamelCase<P> : never]: T[P] extends object
? EntityToDto<T[P]>
: T[P];
};
type CamelCaseToSnake<S extends string> = S extends `${infer T}${infer U}`
? `${T extends Capitalize ? `_${Lowercase<T>}` : T}${CamelCaseToSnake<U>}`
: S;
export type DtoToEntity<T> = {
[P in keyof T as P extends string ? CamelCaseToSnake<P> : never]: T[P];
};