import { Observable } from 'rxjs'; export type CamelToSnakeCase = S extends `${infer T}${infer U}` ? `${T extends Capitalize ? '_' : ''}${Lowercase}${CamelToSnakeCase}` : S; export type PartialRecord = Partial>; export type AtLeastOne; }> = Partial & U[keyof U]; export type WithOptionalPartial = Omit & { [P in K]?: Partial; }; export type WithRequired = T & { [P in K]-?: T[P]; }; export type SelectRequired = { [K in keyof T as T[K] extends Required[K] ? K : never]: T[K]; }; export type SelectNonRequired = { [K in keyof T as undefined extends T[K] ? K : never]: T[K]; }; export type UnwrapObservable = T extends Observable ? U : T;