Validation breaks for `z.literal` when form data contains empty string
bugdone
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 条评论