Fix readField during merge of objects sandwiched between circular objects.#13084
Draft
phryneas wants to merge 1 commit intorelease-4.1from
Draft
Fix readField during merge of objects sandwiched between circular objects.#13084phryneas wants to merge 1 commit intorelease-4.1from
readField during merge of objects sandwiched between circular objects.#13084phryneas wants to merge 1 commit intorelease-4.1from
Conversation
🦋 Changeset detectedLatest commit: 1ee5b01 The changes in this PR will be included in the next version bump. Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
commit: |
phryneas
commented
Jan 7, 2026
| this.get(objectOrReference.__ref, storeFieldName) | ||
| : objectOrReference && objectOrReference[storeFieldName] | ||
| ) as SafeReadonly<T>; | ||
| ) as SafeReadonly<T> | undefined; |
Member
Author
There was a problem hiding this comment.
Kinda unrelated, but it came up during the PR. getFieldValue<string> is a hidden cast to string, even though the function can always return undefined, too.
✅ Docs preview readyThe preview is ready to be viewed. View the preview File Changes 0 new, 4 changed, 0 removedBuild ID: 6d765f1e679e779f48f96fb4 URL: https://www.apollographql.com/docs/deploy-preview/6d765f1e679e779f48f96fb4 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
See #9315 (comment) for the user reproduction.
The test for this uncovers additional problems that might be fixed later.
The general problem here is a situation where an incoming object has another normalized object both as a parent and child.
So, in this case, the
mergefunction forParentruns before themergeforChildhas a chance to run - and thereadFieldfunction that would like to access properties ofChildcannot read them from the store yet.This doesn't happen for non-circular objects, since these are merged from
incomingByIdin a leaf-to-root order, but in this circular case, leaf and root are the same object - so no matter which order they are merged in, a child will have unmerged fields.I'm not happy with this solution, so putting it as draft for now. I'd be happy to feedback.