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.
Once complete, this removes what is probably the largest blocker to us quickly shipping
@warp-drive/schema-record
and/or building decorators for@ember-data/model
to replacebelongsTo
andhasMany
with new semantics.There are two paths forward with this PR:
isPaginated
somewhere in the schema (either viakind
or via something on options)and switch handling in the graph based on schema.
There's a case to be made for either, though I have a preference for the first as it likely offers the largest amount of test coverage by default and a single set of codepaths is simpler to maintain in the long run.
However, for the unpaginated case, performance may be slightly better in the old storage mechanism. I suspect though this will be easily offset by a couple of perf gains I noticed while implementing the storage for pagination in this PR: (1) we no longer need a separate array for remoteState and (2) construction of localState is ~15% faster if we use copy the set, delete the removals, and the Array.from the result.
The best case for (2) is that it may make handling the migration easier for legacy relationships, as editing those relationships generally uses patterns we want to discourage in new relationship primitives.