Skip to content

Remove middleware depth restrictions #13172

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Mar 6, 2025

Conversation

brophdawg11
Copy link
Contributor

No description provided.

Copy link

changeset-bot bot commented Mar 6, 2025

🦋 Changeset detected

Latest commit: c689c79

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 11 packages
Name Type
react-router Patch
@react-router/architect Patch
@react-router/cloudflare Patch
@react-router/dev Patch
react-router-dom Patch
@react-router/express Patch
@react-router/node Patch
@react-router/serve Patch
@react-router/fs-routes Patch
@react-router/remix-routes-option-adapter Patch
create-react-router Patch

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

@@ -2101,7 +2101,7 @@ test.describe("Middleware", () => {

(await page.$('a[href="/a/b"]'))?.click();
await page.waitForSelector("[data-b]");
expect(await page.locator("[data-a]").textContent()).toBe("A: a");
expect(await page.locator("[data-a]").textContent()).toBe("A: a,b");
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jacob-ebey This might be a somewhat unforeseen side effect, but without this "lowest match idx to run middleware for" concept we end up running deeper than maybe we expect on granular .data requests.

Say you have routes a and b and a has a clientLoader calling serverLoader, we'll end up with 2 reqeusts:

The navigational request will be GET /a/b.data?_routes=root,b and will calls both A and B middlewares ✅

But the targeted serverLoader call will be GET /a/b.data?_routes=a which is basically a direct call to the A loader endpoint, but will now call the middleware down through B, which feels like it could catch folks off guard?

"child 1 loader start",
"child 2 loader start",
"child 2 loader end",
"child 1 loader end",
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We no longer trim off routes for which we won't be calling loaders, so even though we won't call the "child" loaders here because we are rendering the child error boundary, we'll now call the child middlewares.

Comment on lines +4958 to +4961
handler: () => T extends true
? MaybePromise<Response>
: MaybePromise<Record<string, DataStrategyResult>>,
errorHandler: (error: MiddlewareError) => unknown
Copy link
Contributor Author

@brophdawg11 brophdawg11 Mar 6, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I stopped passing a mutable keyedResults through to the handler and now you just return one from your handler directly and we propagate it back out from runMiddleware - this should make our user-facing runMiddleware function we plan to pass to dataStrategy easier

@brophdawg11 brophdawg11 marked this pull request as ready for review March 6, 2025 19:44
@brophdawg11 brophdawg11 merged commit fb014ce into release-next Mar 6, 2025
8 checks passed
@brophdawg11 brophdawg11 deleted the brophdawg11/middleware-depth branch March 6, 2025 19:44
Copy link
Contributor

github-actions bot commented Mar 6, 2025

🤖 Hello there,

We just published version 7.3.0-pre.1 which includes this pull request. If you'd like to take it for a test run please try it out and let us know what you think!

Thanks!

brophdawg11 added a commit that referenced this pull request Mar 6, 2025
Copy link
Contributor

github-actions bot commented Mar 6, 2025

🤖 Hello there,

We just published version 7.3.0 which includes this pull request. If you'd like to take it for a test run please try it out and let us know what you think!

Thanks!

wilcoxmd added a commit to wilcoxmd/react-router that referenced this pull request Mar 18, 2025
…d-route-typegen

* upstream/dev: (55 commits)
  Fix root loader data on initial load redirects in SPA mode (remix-run#13222)
  Ensure ancestor pathless/index routes are loaded via manifest requests (remix-run#13203)
  Fix shoulRevalidate behavior in clientLoader-only routes (remix-run#13221)
  Stop leaking internal MiddlewareError implementation detail (remix-run#13180)
  Fix validation of split route modules for root route (remix-run#13238)
  Fix `RequestHandler` `loadContext` type when middleware is enabled (remix-run#13204)
  Change middleware return type from void to undefined (remix-run#13199)
  update docs home page
  add API docs
  Fix error message typo
  Fix Windows CI (remix-run#13215)
  Remove Vite server hooks in child compiler plugins (remix-run#13184)
  Support flexible ordering of Vite plugins that override SSR environment (remix-run#13183)
  chore: format
  chore: Update version for release (remix-run#13175)
  Exit prerelease mode
  chore: Update version for release (pre) (remix-run#13174)
  Fix JSDoc types for context (remix-run#13170)
  Remove middleware depth restrictions (remix-run#13172)
  minor language improvements in context/middleware decision doc
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant