UNPKG

@jokoor/sdk

Version:
65 lines 2.47 kB
/** * Type-safe snake_case to camelCase conversion utilities */ /** * Convert a snake_case string literal type to camelCase */ type SnakeToCamelCase<S extends string> = S extends `${infer T}_${infer U}` ? `${T}${Capitalize<SnakeToCamelCase<U>>}` : S; /** * Convert all keys in an object from snake_case to camelCase */ export type KeysToCamelCase<T> = T extends Array<infer U> ? Array<KeysToCamelCase<U>> : T extends object ? { [K in keyof T as SnakeToCamelCase<K & string>]: KeysToCamelCase<T[K]>; } : T; /** * Convert a camelCase string literal type to snake_case */ type CamelToSnakeCase<S extends string> = S extends `${infer T}${infer U}` ? U extends Uncapitalize<U> ? `${T}${CamelToSnakeCase<U>}` : `${T}_${CamelToSnakeCase<Uncapitalize<U>>}` : S; /** * Convert all keys in an object from camelCase to snake_case */ export type KeysToSnakeCase<T> = T extends Array<infer U> ? Array<KeysToSnakeCase<U>> : T extends object ? { [K in keyof T as CamelToSnakeCase<K & string>]: KeysToSnakeCase<T[K]>; } : T; /** * Map of known field conversions for better type inference */ export interface FieldMappings { created_at: 'createdAt'; updated_at: 'updatedAt'; deleted_at: 'deletedAt'; message_id: 'messageId'; message_body: 'messageBody'; recipient_phone: 'recipientPhone'; scheduled_at: 'scheduledAt'; is_draft: 'isDraft'; phone_number: 'phoneNumber'; first_name: 'firstName'; last_name: 'lastName'; contact_count: 'contactCount'; campaign_id: 'campaignId'; original_message_body: 'originalMessageBody'; contact_ids: 'contactIds'; contact_group_ids: 'contactGroupIds'; sender_id_config_id: 'senderIdConfigId'; message_template_id: 'messageTemplateId'; template_params: 'templateParams'; organization_id: 'organizationId'; organization_name: 'organizationName'; } /** * Reverse mapping for camelCase to snake_case */ export type ReverseFieldMappings = { [K in keyof FieldMappings as FieldMappings[K]]: K; }; /** * Helper to get the camelCase version of a snake_case field */ export type ToCamelCaseField<T extends string> = T extends keyof FieldMappings ? FieldMappings[T] : SnakeToCamelCase<T>; /** * Helper to get the snake_case version of a camelCase field */ export type ToSnakeCaseField<T extends string> = T extends keyof ReverseFieldMappings ? ReverseFieldMappings[T] : CamelToSnakeCase<T>; export {}; //# sourceMappingURL=case-conversion.d.ts.map