refactor(gatsby): simplified materialization a bit #31882
Merged
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.
Description
Change 1
Materialization is specific to node types but not to interface types. So in the case of interface types, we should run multiple passes on each node type separately.
And since we cache results by type - we are running materialization multiple times for the same type when site has mixed graphql queries (some on interface type, others - on specific node types)
Change 2
Use
WeakSet
fortrackedRootNodes
vsSet
for correctness: we useWeakMap
forrootNodeMap
but if the node is garbage-collected from this map, its id still stays intrackedRootNodes
which is wrong. After this change, if it is garbage-collected, both maps will reflect a consistent state of the world.This was not a big deal before (because nodes were never actually garbage-collected but will be a problem with lmdb)