react-hook-form / resolvers

📋 Validation resolvers: Yup, Zod, Superstruct, Joi, Vest, Class Validator, io-ts, Nope, computed-types, typanion, Ajv, TypeBox, ArkType, Valibot, effect-ts and VineJS
https://react-hook-form.com/
MIT License
1.71k stars 155 forks source link

Zod preprocess does not generate error #635

Closed dhulme closed 3 months ago

dhulme commented 10 months ago

Describe the bug Using z.preprocess() instead of z.coerce() in a validation schema does not generate an error. When using zod directly, both of these approaches generate the same error.

To Reproduce Steps to reproduce the behavior:

  1. On codesandbox link, click submit button
  2. 'Age coerce' input generates an error, but 'Age preprocess' does not
  3. Note how the errors produced from zod directly are identical in the console

Codesandbox link (Required) https://codesandbox.io/s/react-hook-form-zod-preprocess-mn8sy4?file=/src/index.js

Expected behavior An error should be generated

Screenshots If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

Additional context Add any other context about the problem here.

yukukotani commented 10 months ago

I have the same issue here.

Interestingly, it works if agePreprocess condition is the first property of the schema object.

 const SignupSchema = z.object({
-  ageCoerce,
-  agePreprocess,
+  agePreprocess,
+  ageCoerce,
 });
dhulme commented 10 months ago

That is interesting. I can confirm the same behaviour.

stackline commented 10 months ago

@dhulme

I have the same issue. I downgraded the zod version from 3.22.3 to 3.21.4 and the issue was resolved, so I would like to share it.

Codesandbox link (Changed zod version from 3.22.3 to 3.21.4) https://codesandbox.io/s/react-hook-form-zod-preprocess-forked-cqm66q

Update: I have also opened an issue on the zod repository.

Austin-Love commented 10 months ago

We have found the same behavior with the fields being order-depdendent. We replaced our preprocessors with transforms, and they work similarly to how the preprocessors worked in 3.21.4. Downgrading is not an option for us due to a CVE in 3.21.4 our cyber team flagged.

stackline commented 4 months ago

@dhulme

The issue commented on https://github.com/react-hook-form/resolvers/issues/635#issuecomment-1778665491 has been resolved by the following pr fix for zod, so I would like to share it.

And this fix is included in v3.23.0 of zod.

dhulme commented 3 months ago

@stackline Confirmed as fixed, thanks!