import type { JsonObject } from './types'; export function asString(value: unknown): string | undefined { if (typeof value !== 'string') return undefined; const trimmed = value.trim(); return trimmed ? trimmed : undefined; } export function isRecord(value: unknown): value is JsonObject { return typeof value === 'object' && value !== null && !Array.isArray(value); } export function compactObject>(input: T): Partial { const output: Partial = {}; for (const [key, value] of Object.entries(input)) { if (value !== undefined) { output[key as keyof T] = value as T[keyof T]; } } return output; } export function truncateText(text: string, maxCharacters: number): string { if (text.length <= maxCharacters) return text; return `${text.slice(0, Math.max(0, maxCharacters - 1)).trimEnd()}…`; }