pussy-ts/src/types/dto.ts

// 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];
};

Synonyms

cyb/src/utils/dto.ts
cyb/src/types/dto.ts
pussy-ts/src/utils/dto.ts
cyb/src/services/CozoDb/types/dto.ts
pussy-ts/src/services/CozoDb/types/dto.ts

Neighbours