Commit f2ff1be
committed
fix: serialize Date objects before Standard Schema validation
This commit fixes an issue where response validation fails when using
Standard Schema validators (Zod, Effect, etc.) with Date types.
## Problem
When returning Date objects from handlers with Standard Schema response
validation, the validation fails because:
1. Response validation (Check) happens BEFORE encoding
2. The schema expects a string (JSON representation)
3. But the Date object hasn't been serialized yet
4. JSON.stringify would convert Date to ISO string, but validation failed first
## Solution
Added `serializeDates` helper function that recursively converts Date objects
to ISO strings (matching JSON.stringify behavior). This function is now called
BEFORE validation in all three Standard Schema validator code paths:
- Dynamic async validators
- Non-async validators (with sub-validators)
- Non-async validators (without sub-validators)
The Encode function also uses serializeDates to ensure proper transformation.
Fixes #16701 parent 36bc9b8 commit f2ff1be
File tree
2 files changed
+230
-16
lines changed- src
- test/standard-schema
2 files changed
+230
-16
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
375 | 375 | | |
376 | 376 | | |
377 | 377 | | |
| 378 | + | |
| 379 | + | |
| 380 | + | |
| 381 | + | |
| 382 | + | |
| 383 | + | |
| 384 | + | |
| 385 | + | |
| 386 | + | |
| 387 | + | |
| 388 | + | |
| 389 | + | |
| 390 | + | |
| 391 | + | |
| 392 | + | |
| 393 | + | |
| 394 | + | |
| 395 | + | |
| 396 | + | |
| 397 | + | |
| 398 | + | |
| 399 | + | |
| 400 | + | |
| 401 | + | |
| 402 | + | |
| 403 | + | |
| 404 | + | |
| 405 | + | |
| 406 | + | |
378 | 407 | | |
379 | 408 | | |
380 | 409 | | |
| |||
618 | 647 | | |
619 | 648 | | |
620 | 649 | | |
| 650 | + | |
| 651 | + | |
| 652 | + | |
| 653 | + | |
| 654 | + | |
| 655 | + | |
621 | 656 | | |
622 | | - | |
623 | | - | |
624 | | - | |
| 657 | + | |
625 | 658 | | |
626 | 659 | | |
627 | 660 | | |
628 | | - | |
629 | | - | |
| 661 | + | |
| 662 | + | |
| 663 | + | |
630 | 664 | | |
631 | 665 | | |
632 | 666 | | |
| |||
831 | 865 | | |
832 | 866 | | |
833 | 867 | | |
834 | | - | |
835 | | - | |
| 868 | + | |
| 869 | + | |
| 870 | + | |
| 871 | + | |
836 | 872 | | |
837 | 873 | | |
838 | 874 | | |
839 | | - | |
| 875 | + | |
840 | 876 | | |
841 | 877 | | |
842 | 878 | | |
| |||
858 | 894 | | |
859 | 895 | | |
860 | 896 | | |
861 | | - | |
862 | | - | |
| 897 | + | |
| 898 | + | |
| 899 | + | |
863 | 900 | | |
864 | 901 | | |
865 | 902 | | |
| |||
941 | 978 | | |
942 | 979 | | |
943 | 980 | | |
944 | | - | |
| 981 | + | |
945 | 982 | | |
946 | 983 | | |
947 | 984 | | |
| |||
951 | 988 | | |
952 | 989 | | |
953 | 990 | | |
954 | | - | |
955 | | - | |
| 991 | + | |
| 992 | + | |
| 993 | + | |
| 994 | + | |
956 | 995 | | |
957 | 996 | | |
958 | 997 | | |
959 | | - | |
| 998 | + | |
960 | 999 | | |
961 | 1000 | | |
962 | 1001 | | |
| |||
978 | 1017 | | |
979 | 1018 | | |
980 | 1019 | | |
981 | | - | |
982 | | - | |
| 1020 | + | |
| 1021 | + | |
| 1022 | + | |
983 | 1023 | | |
984 | 1024 | | |
985 | 1025 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
0 commit comments