Commit 28c156e
fix: apply description and default metadata to enum, const, and not schemas in fromJSONSchema (#5758)
* fix: apply description and default to enum, const, and not schemas in fromJSONSchema
Fixes #5732
Early returns for enum, const, and not: {} (never) schemas in
convertBaseSchema() bypassed the metadata application block at the end
of the function.
Extract metadata application into a helper function applyBaseMetadata()
and call it from each of the affected early-return paths so that
description and default are consistently honored across all schema types.
* refactor: consolidate annotation metadata application in convertSchema
Move `description` and `default` handling out of `convertBaseSchema` and
into a single application site at the end of `convertSchema`, after
composition keywords (anyOf/oneOf/allOf) and wrappers (nullable/readOnly)
have been applied.
This eliminates the original bug class — early returns in
`convertBaseSchema` for `enum`, `const`, and `not: {}` silently dropped
description/default — without needing per-branch helper calls. As a
side effect it also fixes the same latent bug for the `type: [...]`
array expansion path.
Apply order is `default` → extraMeta → `describe`, so the `.describe()`
clone sits at the top of the parent chain. `_zod.parent` inheritance in
`$ZodRegistry.get()` then keeps `extraMeta` reachable from the returned
reference, while `schema.description` continues to resolve via
globalRegistry as before.
Adds tests for description/default on `type: [...]` arrays and for the
description+default+anyOf composition cases.
---------
Co-authored-by: Colin McDonnell <[email protected]>1 parent e06af5d commit 28c156e
2 files changed
Lines changed: 124 additions & 12 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
527 | 527 | | |
528 | 528 | | |
529 | 529 | | |
530 | | - | |
531 | | - | |
532 | | - | |
533 | | - | |
534 | | - | |
535 | | - | |
536 | | - | |
537 | | - | |
538 | 530 | | |
539 | 531 | | |
540 | 532 | | |
| |||
586 | 578 | | |
587 | 579 | | |
588 | 580 | | |
589 | | - | |
| 581 | + | |
| 582 | + | |
| 583 | + | |
| 584 | + | |
| 585 | + | |
| 586 | + | |
| 587 | + | |
| 588 | + | |
| 589 | + | |
| 590 | + | |
590 | 591 | | |
591 | 592 | | |
592 | | - | |
593 | 593 | | |
594 | 594 | | |
595 | 595 | | |
596 | 596 | | |
597 | 597 | | |
598 | 598 | | |
599 | 599 | | |
600 | | - | |
601 | 600 | | |
602 | 601 | | |
603 | 602 | | |
604 | 603 | | |
605 | 604 | | |
606 | 605 | | |
607 | 606 | | |
608 | | - | |
609 | 607 | | |
610 | 608 | | |
611 | 609 | | |
| |||
616 | 614 | | |
617 | 615 | | |
618 | 616 | | |
| 617 | + | |
| 618 | + | |
| 619 | + | |
| 620 | + | |
| 621 | + | |
| 622 | + | |
| 623 | + | |
619 | 624 | | |
620 | 625 | | |
621 | 626 | | |
| |||
Lines changed: 107 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
732 | 732 | | |
733 | 733 | | |
734 | 734 | | |
| 735 | + | |
| 736 | + | |
| 737 | + | |
| 738 | + | |
| 739 | + | |
| 740 | + | |
| 741 | + | |
| 742 | + | |
| 743 | + | |
| 744 | + | |
| 745 | + | |
| 746 | + | |
| 747 | + | |
| 748 | + | |
| 749 | + | |
| 750 | + | |
| 751 | + | |
| 752 | + | |
| 753 | + | |
| 754 | + | |
| 755 | + | |
| 756 | + | |
| 757 | + | |
| 758 | + | |
| 759 | + | |
| 760 | + | |
| 761 | + | |
| 762 | + | |
| 763 | + | |
| 764 | + | |
| 765 | + | |
| 766 | + | |
| 767 | + | |
| 768 | + | |
| 769 | + | |
| 770 | + | |
| 771 | + | |
| 772 | + | |
| 773 | + | |
| 774 | + | |
| 775 | + | |
| 776 | + | |
| 777 | + | |
| 778 | + | |
| 779 | + | |
| 780 | + | |
| 781 | + | |
| 782 | + | |
| 783 | + | |
| 784 | + | |
| 785 | + | |
| 786 | + | |
| 787 | + | |
| 788 | + | |
| 789 | + | |
| 790 | + | |
| 791 | + | |
| 792 | + | |
| 793 | + | |
| 794 | + | |
| 795 | + | |
| 796 | + | |
| 797 | + | |
| 798 | + | |
| 799 | + | |
| 800 | + | |
| 801 | + | |
| 802 | + | |
| 803 | + | |
| 804 | + | |
| 805 | + | |
| 806 | + | |
| 807 | + | |
| 808 | + | |
| 809 | + | |
| 810 | + | |
| 811 | + | |
| 812 | + | |
| 813 | + | |
| 814 | + | |
| 815 | + | |
| 816 | + | |
| 817 | + | |
| 818 | + | |
| 819 | + | |
| 820 | + | |
| 821 | + | |
| 822 | + | |
| 823 | + | |
| 824 | + | |
| 825 | + | |
| 826 | + | |
| 827 | + | |
| 828 | + | |
| 829 | + | |
| 830 | + | |
| 831 | + | |
| 832 | + | |
| 833 | + | |
| 834 | + | |
| 835 | + | |
| 836 | + | |
| 837 | + | |
| 838 | + | |
| 839 | + | |
| 840 | + | |
| 841 | + | |
0 commit comments