ITADN

Validation breaks for `z.literal` when form data contains empty string

#664ClosedStadly 创建于 2025-12-03
bugdone
S
Stadlycommented
A schema requiring a literal value is considered valid when passed a form data containing an empty string! ```ts const schema = z.object({ foo: z.literal("bar") }); const pojo = { foo: "" }; const pojoValidated = await superValidate(pojo, zod(schema)); console.log( `validating pojo value of foo: ${JSON.stringify(pojo.foo)} validation:`, pojoValidated ); /* Output: validating pojo value of foo: "" validation: { id: 'v59z1c', valid: false, posted: false, errors: { foo: [ 'Invalid literal value, expected "bar"' ] }, data: { foo: '' }, constraints: { foo: { required: true } } } */ const formData = new FormData(); formData.append("foo", ""); const formDataValidated = await superValidate(formData, zod(schema)); console.log( `validating form data value of foo: ${JSON.stringify(formData.get("foo"))} validation:`, formDataValidated ); /* Output: validating form data value of foo: "" validation: { id: 'v59z1c', valid: true, posted: true, errors: {}, data: { foo: 'bar' } } */ ``` I would have expected the same result when validating `formData` as when validating `pojo`. Reproduction (just look at the outputs in the console): https://www.sveltelab.dev/e14w70jqas4n1l8?files=.%2Fsrc%2Froutes%2F%2Bpage.server.ts
关闭于 2025-12-16 2 条评论