useAsyncValidation
DB-backed field validation as the user types — debounced, typed, over a query.
Async checks that need the DB (uniqueness, cross-row rules) run reactively as the user types, debounced + typed, over a query — the same query gates submit.
const email = useAsyncValidation('app', 'users.emailAvailable', value, {
input: (v) => ({ email: v }),
interpret: (r) => ({ valid: r.available, message: r.available ? undefined : 'Email taken' }),
}) // email.status: 'idle' | 'checking' | 'valid' | 'invalid'