@jokoor/sdk
Version:
Jokoor SMS API SDK for JavaScript/TypeScript
65 lines • 2.47 kB
TypeScript
/**
* 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