Commit 07b0c3d
authored
fix: preserve explicit superRefine issue input (#6053)
`_issue.input ??= payload.value` discarded an explicitly-supplied nullish `input`, so `superRefine` was the one place in Zod that could not emit an issue whose `input` matched the value-at-the-path convention every builtin issue follows. Forwarding a nested parse's issues was worse: an inner `input: undefined` for a missing key got overwritten with the outer payload, which breaks the documented `iss.input === undefined` test for a missing field.
Switching to a presence check preserves an explicit `null` or `undefined` while still backfilling when `input` is omitted. `undefined` is a meaningful value for `input` in a way it isn't for the `code`/`inst`/`continue` defaults alongside it, which is why only this one moves off `??=`.
Costs 26 B raw in classic, 0 B in mini unless `z.superRefine` is imported. No memory change, and the line only runs when an issue is constructed.1 parent ba98071 commit 07b0c3d
4 files changed
Lines changed: 40 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2199 | 2199 | | |
2200 | 2200 | | |
2201 | 2201 | | |
2202 | | - | |
| 2202 | + | |
2203 | 2203 | | |
2204 | 2204 | | |
2205 | 2205 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
735 | 735 | | |
736 | 736 | | |
737 | 737 | | |
| 738 | + | |
| 739 | + | |
| 740 | + | |
| 741 | + | |
| 742 | + | |
| 743 | + | |
| 744 | + | |
| 745 | + | |
| 746 | + | |
| 747 | + | |
| 748 | + | |
| 749 | + | |
| 750 | + | |
| 751 | + | |
| 752 | + | |
| 753 | + | |
| 754 | + | |
| 755 | + | |
| 756 | + | |
| 757 | + | |
738 | 758 | | |
739 | 759 | | |
740 | 760 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
338 | 338 | | |
339 | 339 | | |
340 | 340 | | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
341 | 359 | | |
342 | 360 | | |
343 | 361 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1686 | 1686 | | |
1687 | 1687 | | |
1688 | 1688 | | |
1689 | | - | |
| 1689 | + | |
1690 | 1690 | | |
1691 | 1691 | | |
1692 | 1692 | | |
| |||
0 commit comments