import { z } from 'zod'; /** HTML type=number binds number; API/store may return number — normalize to string for validation. */ function retentionMinutesInput(val: unknown): string { if (val === undefined || val === null) return ''; if (typeof val === 'number') { if (!Number.isFinite(val)) return ''; return String(Math.trunc(val)); } return String(val); } const revisionRetentionMinutes = z.preprocess( retentionMinutesInput, z.string().refine( (v) => { const s = v.trim(); if (s === '') return true; const ttl = Number(s); return /^\d+$/.test(s) && Number.isInteger(ttl) && ttl >= 15 && ttl <= 43200; }, { message: 'TTL ревизий должен быть целым числом от 15 до 43200 минут' } ) ); export const revisionSettingsSchema = z.object({ revision_retention_minutes: revisionRetentionMinutes }); export type RevisionSettingsForm = z.infer; export const emptyRevisionSettingsForm = (): RevisionSettingsForm => ({ revision_retention_minutes: '' });