Commit cc9d4fb
authored
Strip T | null unions in mutation engine via replace() (#73)
## Summary
- Use `MutationNode.replace()` to swap `T | null` wrapper unions with the inner type, so downstream code sees the unwrapped type instead of a two-variant union
- Track nullability via the `setNullable()` state map
- Extract `getNullableUnionType()` from `isNullableWrapper()` to support the `replace()` call
## Motivation
Previously, nullable wrapper unions (`string | null`, `Dog | null`) were kept structurally intact — the mutation called `mutate()` and marked the source union as nullable. This meant downstream code had to re-detect `T | null` structurally. With `replace()`, the union node is swapped out in the mutation graph and parent edges (e.g. a ModelProperty's type) update automatically. After mutation, `property.type` is the `string` scalar, not `string | null`.
## Test plan
- Updated 3 existing nullable union tests to assert `mutatedType.kind` is the inner type (`Scalar` / `Model`) rather than `Union`
- Updated assertions to check `isNullable` on `mutation.mutatedType` instead of the source union
- Added new test: `T | null` on a model property is unwrapped to the inner type at the property level1 parent fa20db1 commit cc9d4fb
3 files changed
Lines changed: 44 additions & 31 deletions
File tree
- packages/graphql
- src
- lib
- mutation-engine/mutations
- test/mutation-engine
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
29 | 29 | | |
30 | 30 | | |
31 | 31 | | |
32 | | - | |
| 32 | + | |
33 | 33 | | |
34 | 34 | | |
35 | 35 | | |
36 | | - | |
| 36 | + | |
37 | 37 | | |
38 | 38 | | |
39 | 39 | | |
| 40 | + | |
| 41 | + | |
40 | 42 | | |
41 | | - | |
42 | | - | |
| 43 | + | |
| 44 | + | |
43 | 45 | | |
44 | | - | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
45 | 49 | | |
46 | 50 | | |
47 | 51 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
| 16 | + | |
16 | 17 | | |
17 | | - | |
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
| |||
106 | 106 | | |
107 | 107 | | |
108 | 108 | | |
109 | | - | |
110 | | - | |
111 | | - | |
112 | | - | |
113 | | - | |
114 | | - | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
115 | 118 | | |
116 | 119 | | |
117 | 120 | | |
| |||
Lines changed: 25 additions & 19 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
488 | 488 | | |
489 | 489 | | |
490 | 490 | | |
491 | | - | |
| 491 | + | |
492 | 492 | | |
493 | 493 | | |
494 | 494 | | |
495 | 495 | | |
496 | 496 | | |
497 | 497 | | |
498 | 498 | | |
| 499 | + | |
| 500 | + | |
499 | 501 | | |
500 | | - | |
| 502 | + | |
501 | 503 | | |
502 | 504 | | |
503 | | - | |
| 505 | + | |
504 | 506 | | |
505 | 507 | | |
506 | 508 | | |
| |||
511 | 513 | | |
512 | 514 | | |
513 | 515 | | |
514 | | - | |
515 | | - | |
516 | | - | |
| 516 | + | |
| 517 | + | |
517 | 518 | | |
518 | | - | |
| 519 | + | |
519 | 520 | | |
520 | 521 | | |
521 | 522 | | |
| |||
594 | 595 | | |
595 | 596 | | |
596 | 597 | | |
| 598 | + | |
| 599 | + | |
| 600 | + | |
| 601 | + | |
| 602 | + | |
| 603 | + | |
| 604 | + | |
| 605 | + | |
| 606 | + | |
| 607 | + | |
| 608 | + | |
| 609 | + | |
| 610 | + | |
| 611 | + | |
| 612 | + | |
| 613 | + | |
| 614 | + | |
597 | 615 | | |
598 | 616 | | |
599 | 617 | | |
| |||
878 | 896 | | |
879 | 897 | | |
880 | 898 | | |
881 | | - | |
882 | | - | |
883 | | - | |
884 | | - | |
885 | | - | |
886 | | - | |
887 | | - | |
888 | | - | |
889 | | - | |
890 | | - | |
891 | | - | |
892 | | - | |
893 | 899 | | |
894 | 900 | | |
895 | 901 | | |
| |||
0 commit comments