Raising the error (opposite of forwarding) #795
-
Hey, I just migrated to the new Valibot API and wonder how to deal with the following situation. This is part of a form validation schema. The user enters a range of years (i.e., "2001-2006"). This range is parsed into a tuple of numbers, and I want to validate each number. const referenceProjectSchema = v.pipe(
v.object({
id: v.pipe(
v.unknown(),
v.transform((s) => (s ? Number(s) : null)),
),
description: v.pipe(v.string(), v.trim(), v.nonEmpty('Bitte gib eine Beschreibung ein.')),
timeSpan: v.pipe(
v.string(),
v.transform(parseTimeSpan),
v.tuple([
v.pipe(
v.number(),
v.minValue(1950, 'Bitte gib sinnvolle Jahreszahlen ein.'),
v.maxValue(2100, 'Bitte gib sinnvolle Jahreszahlen ein.'),
v.check(
(input) => input <= new Date().getFullYear(),
'Der Zeitraum kann nicht in der Zukunft liegen.',
),
),
v.pipe(
v.number(),
v.minValue(1950, 'Bitte gib sinnvolle Jahreszahlen ein.'),
v.maxValue(2100, 'Bitte gib sinnvolle Jahreszahlen ein.'),
),
]),
v.check(
(input) => input[0] <= input[1],
'Bitte gib ein oder zwei Jahreszahlen in der richtigen Reihenfolge ein.',
),
),
}),
v.transform(({ timeSpan, ...rest }) => ({ ...rest, startYear: timeSpan[0], endYear: timeSpan[1] })),
); If any validation fails, I get a path like Or is there something obvious I'm missing? |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 1 reply
-
Your goal requires that you validate the numbers in the outer pipeline. Here is an example. Check it out in this playground. import * as v from 'valibot';
const TimeSpanSchema = v.pipe(
v.string(),
v.regex(
/^\d{4}-\d{4}$/u,
'Bitte gib zwei Jahreszahlen im Format "YYYY-YYYY" ein.',
),
v.transform((input) => input.split('-').map(Number) as [number, number]),
v.everyItem(
(input) => input >= 1950 && input <= 2100,
'Bitte gib sinnvolle Jahreszahlen ein.',
),
v.check(
(input) => input[0] <= input[1],
'Bitte gib die Jahreszahlen in der richtigen Reihenfolge ein.',
),
); |
Beta Was this translation helpful? Give feedback.
Your goal requires that you validate the numbers in the outer pipeline. Here is an example. Check it out in this playground.