Adopt unstable_stream API for internal middleware implementation #14103
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.
This is a decent-sized internal refactor for middleware logic, aligning code for consistency across middleware and non-middleware flows as well as RSC and non-RSC flows.
We used to have an
unstable_respond
API on the static handler which was basically in charge of converting aStaticHandlerContext -> Response
in the leafnext()
so we could bubble a Response back up the middleware chain.When RSC came around, we realized this was insufficient for server actions because we had no way to run middleware before the server action and then process the server action and the loaders for the revalidating RSC render as part of the leaf
next()
. To solve that we added anunstable_stream
alternative alongsideunstable_respond
which allowed us to opt-0into this more advanced functionality in the RSC work without causing potential regressions in non-RSC middleware code flows usingunstable_respond
.Now that RSC is out (unstable) and we're getting closer to stabilizing middleware, it's time to convert existing usages of
unstable_respond
over to the new API and get rid of it.This PR also renames it to
unstable_generateMiddlewareResponse
for clarity and does a bunch of code cleanup for better sharing of code across middleware and non-middleware flows.