Recursive schema evaluation - stop evaluating initial value for empty array #1282
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.
Uniforms go through the schema to get starting values for the following fields. Therefore, during the initial load, it must go through all the 'leaves' of the schema tree. This eager approach prevents us from processing recursive schemas. However, this doesn't have to be the case.
When we think about different types of recursive schemas, they only make sense when they can be completed in a finite amount of time. This requires specific points where the evaluation can stop. An array has a built-in mechanism for this. It can contain one or multiple values to continue expanding the tree, or it can have 0 elements to close off a branch. This enables us to evaluate a recursive schema and create a finite model. In this model, the 'leaves' can consist of empty arrays.
Consider this schema, where we can add multiple children on different levels, and it will only evaluate the next tree level when we add a new value to the model (+ button).
So the schema of the family tree is potentially infinite, but the model is finite.