export { isRecord } from '../utils/records' export function readStringList(value: unknown, fallback: string[]): string[] { if (Array.isArray(value)) { const items = value.map(item => String(item).trim()).filter(Boolean) return items.length ? items : fallback } if (typeof value === 'string') { const items = value.split(',').map(item => item.trim()).filter(Boolean) return items.length ? items : fallback } return fallback } export function readNumberList(value: unknown, fallback: number[]): number[] { const rawItems = Array.isArray(value) ? value : typeof value === 'string' ? value.split(',') : [] const items = rawItems .map(item => Number(String(item).trim())) .filter(item => Number.isFinite(item)) return items.length ? items : fallback } export function readString(value: unknown, fallback: string): string { return typeof value === 'string' && value.trim() ? value.trim() : fallback } export function readOptionalString(value: unknown): string | undefined { return typeof value === 'string' && value.trim() ? value.trim() : undefined } export function readInteger(value: unknown, fallback: number): number { const parsed = typeof value === 'number' ? value : typeof value === 'string' ? Number(value) : Number.NaN return Number.isFinite(parsed) ? Math.max(1, Math.round(parsed)) : fallback } export function readNumber(value: unknown, fallback: number): number { const parsed = typeof value === 'number' ? value : typeof value === 'string' ? Number(value) : Number.NaN return Number.isFinite(parsed) ? parsed : fallback } export function readBoolean(value: unknown, fallback: boolean): boolean { return typeof value === 'boolean' ? value : fallback }