Resolve route admission before opaque data preparation - #12
Merged
Conversation
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.
Cold loads and speculative prefetches could begin resolver and data work before an application applied synchronous admission policy. That unnecessarily warmed protected route data and left authentication boundaries exposed to preparation races.
Routes now support synchronous parent-first
guard(route)checks before resolver loading, preparation, prefetching, or rendering. Returning a destination redirects; returningundefinedadmits the segment and continues through its children. React Space Router depends onspace-router@^2.1.0and reuses its canonicalgetRouteRedirect()helper, so cold preparation follows the same guard-before-redirect ordering as normal navigation.Preparation also no longer assumes that every data layer represents work as
[definition, args]. Routes declare flat arrays of opaque requests, either statically or through one outerqueries(ctx)resolver. The router never invokes values inside that array, including function-valued requests, and forwards each one unchanged todata.prepare(request)ordata.prefetch(request). Argument binding and validation stay entirely with the adapter.Validation:
npm testpasses all 102 tests against the publishedspace-router@2.1.0package.