export function recordValue(value: unknown): Record { return typeof value === 'object' && value !== null && !Array.isArray(value) ? value as Record : {} } export function numericValue(value: number | { value: number; message: string }): number { return typeof value === 'number' ? value : value.value } export function orderedUnique(values: string[]): string[] { return [...new Set(values)] } export function replaceRecord(target: Record, values: Record) { for (const key of Object.keys(target)) { delete target[key] } Object.assign(target, values) } export function omitUndefined(record: T): T { const next: Record = {} for (const [key, value] of Object.entries(record as Record)) { if (value !== undefined) next[key] = value } return next as T } export function humanize(value: string): string { return value .replace(/[_-]+/g, ' ') .replace(/([a-z])([A-Z])/g, '$1 $2') .trim() .replace(/\w\S*/g, word => word.charAt(0).toUpperCase() + word.slice(1)) }