-
Notifications
You must be signed in to change notification settings - Fork 27.6k
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
fix: Merge link
header from middleware with the ones from React
#73431
Conversation
Allow CI Workflow Run
Note: this should only be enabled once the PR is ready to go and can only be enabled by a maintainer |
Tests Passed |
Stats from current PRDefault Build (Increase detected
|
vercel/next.js canary | amannn/next.js fix/link-middleware | Change | |
---|---|---|---|
buildDuration | 20.7s | 18.5s | N/A |
buildDurationCached | 17.6s | 15.2s | N/A |
nodeModulesSize | 417 MB | 417 MB | |
nextStartRea..uration (ms) | 512ms | 510ms | N/A |
Client Bundles (main, webpack)
vercel/next.js canary | amannn/next.js fix/link-middleware | Change | |
---|---|---|---|
1187-HASH.js gzip | 52.6 kB | 52.6 kB | N/A |
8276.HASH.js gzip | 169 B | 168 B | N/A |
8377-HASH.js gzip | 5.44 kB | 5.44 kB | N/A |
bccd1874-HASH.js gzip | 52.9 kB | 52.9 kB | N/A |
framework-HASH.js gzip | 57.5 kB | 57.5 kB | N/A |
main-app-HASH.js gzip | 232 B | 235 B | N/A |
main-HASH.js gzip | 34.1 kB | 34.1 kB | N/A |
webpack-HASH.js gzip | 1.71 kB | 1.71 kB | N/A |
Overall change | 0 B | 0 B | ✓ |
Legacy Client Bundles (polyfills)
vercel/next.js canary | amannn/next.js fix/link-middleware | Change | |
---|---|---|---|
polyfills-HASH.js gzip | 39.4 kB | 39.4 kB | ✓ |
Overall change | 39.4 kB | 39.4 kB | ✓ |
Client Pages
vercel/next.js canary | amannn/next.js fix/link-middleware | Change | |
---|---|---|---|
_app-HASH.js gzip | 193 B | 193 B | ✓ |
_error-HASH.js gzip | 193 B | 193 B | ✓ |
amp-HASH.js gzip | 512 B | 510 B | N/A |
css-HASH.js gzip | 343 B | 342 B | N/A |
dynamic-HASH.js gzip | 1.84 kB | 1.84 kB | ✓ |
edge-ssr-HASH.js gzip | 265 B | 265 B | ✓ |
head-HASH.js gzip | 363 B | 362 B | N/A |
hooks-HASH.js gzip | 393 B | 392 B | N/A |
image-HASH.js gzip | 4.57 kB | 4.57 kB | N/A |
index-HASH.js gzip | 268 B | 268 B | ✓ |
link-HASH.js gzip | 2.35 kB | 2.34 kB | N/A |
routerDirect..HASH.js gzip | 328 B | 328 B | ✓ |
script-HASH.js gzip | 397 B | 397 B | ✓ |
withRouter-HASH.js gzip | 323 B | 326 B | N/A |
1afbb74e6ecf..834.css gzip | 106 B | 106 B | ✓ |
Overall change | 3.59 kB | 3.59 kB | ✓ |
Client Build Manifests
vercel/next.js canary | amannn/next.js fix/link-middleware | Change | |
---|---|---|---|
_buildManifest.js gzip | 749 B | 747 B | N/A |
Overall change | 0 B | 0 B | ✓ |
Rendered Page Sizes
vercel/next.js canary | amannn/next.js fix/link-middleware | Change | |
---|---|---|---|
index.html gzip | 523 B | 523 B | ✓ |
link.html gzip | 539 B | 537 B | N/A |
withRouter.html gzip | 519 B | 520 B | N/A |
Overall change | 523 B | 523 B | ✓ |
Edge SSR bundle Size
vercel/next.js canary | amannn/next.js fix/link-middleware | Change | |
---|---|---|---|
edge-ssr.js gzip | 128 kB | 128 kB | N/A |
page.js gzip | 206 kB | 206 kB | N/A |
Overall change | 0 B | 0 B | ✓ |
Middleware size
vercel/next.js canary | amannn/next.js fix/link-middleware | Change | |
---|---|---|---|
middleware-b..fest.js gzip | 670 B | 668 B | N/A |
middleware-r..fest.js gzip | 155 B | 156 B | N/A |
middleware.js gzip | 31.2 kB | 31.2 kB | N/A |
edge-runtime..pack.js gzip | 844 B | 844 B | ✓ |
Overall change | 844 B | 844 B | ✓ |
Next Runtimes
vercel/next.js canary | amannn/next.js fix/link-middleware | Change | |
---|---|---|---|
274-experime...dev.js gzip | 322 B | 322 B | ✓ |
274.runtime.dev.js gzip | 314 B | 314 B | ✓ |
app-page-exp...dev.js gzip | 364 kB | 364 kB | N/A |
app-page-exp..prod.js gzip | 129 kB | 129 kB | N/A |
app-page-tur..prod.js gzip | 142 kB | 142 kB | N/A |
app-page-tur..prod.js gzip | 138 kB | 138 kB | N/A |
app-page.run...dev.js gzip | 352 kB | 352 kB | N/A |
app-page.run..prod.js gzip | 125 kB | 125 kB | N/A |
app-route-ex...dev.js gzip | 37.5 kB | 37.5 kB | ✓ |
app-route-ex..prod.js gzip | 25.6 kB | 25.6 kB | ✓ |
app-route-tu..prod.js gzip | 25.6 kB | 25.6 kB | ✓ |
app-route-tu..prod.js gzip | 25.4 kB | 25.4 kB | ✓ |
app-route.ru...dev.js gzip | 39.2 kB | 39.2 kB | ✓ |
app-route.ru..prod.js gzip | 25.4 kB | 25.4 kB | ✓ |
pages-api-tu..prod.js gzip | 9.69 kB | 9.69 kB | ✓ |
pages-api.ru...dev.js gzip | 11.6 kB | 11.6 kB | ✓ |
pages-api.ru..prod.js gzip | 9.68 kB | 9.68 kB | ✓ |
pages-turbo...prod.js gzip | 21.7 kB | 21.7 kB | ✓ |
pages.runtim...dev.js gzip | 27.5 kB | 27.5 kB | ✓ |
pages.runtim..prod.js gzip | 21.7 kB | 21.7 kB | ✓ |
server.runti..prod.js gzip | 916 kB | 916 kB | ✓ |
Overall change | 1.2 MB | 1.2 MB | ✓ |
build cache Overall increase ⚠️
vercel/next.js canary | amannn/next.js fix/link-middleware | Change | |
---|---|---|---|
0.pack gzip | 2.08 MB | 2.08 MB | N/A |
index.pack gzip | 73.8 kB | 75.5 kB | |
Overall change | 73.8 kB | 75.5 kB |
Diff details
Diff for main-HASH.js
Diff too large to display
Diff for app-page-exp..ntime.dev.js
Diff too large to display
Diff for app-page-exp..time.prod.js
Diff too large to display
Diff for app-page-tur..time.prod.js
Diff too large to display
Diff for app-page-tur..time.prod.js
Diff too large to display
Diff for app-page.runtime.dev.js
Diff too large to display
Diff for app-page.runtime.prod.js
Diff too large to display
@amannn It looks like we need to update the test in the comment above mine |
@amannn New conflicts again |
# Conflicts: # packages/next/src/server/app-render/app-render.tsx
@samcx Tests are passing! 🎉 |
@samcx Any chance you could consider this PR for being merged? You have quite a busy |
@samcx Sorry to bother you again, is there something missing in this PR or could it be merged? |
@amannn Sorry I haven't able to take a look yet—let me take a look now! |
@@ -1634,7 +1651,9 @@ async function renderToStream( | |||
|
|||
let reactServerResult: null | ReactServerResult = null | |||
|
|||
const setHeader = res.setHeader.bind(res) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
we can just use res.appendHeader
insteads for React's onHeaders callback. I'd remove the other changes. appending is not always useful. for instance it doesn't make sense for location. If you want to resubmit the PR with just appendHeader
for the onHeaders callback I think we can merge quickly
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Many thanks for the review @gnoff!
I've refactored the fix to use res.appendHeader
now instead and reverted the other changes (51fd66b).
I've extracted the part of setting metadata.headers
to a shared function to be used for both setHeader
and appendHeader
—hope that makes sense!
Let me know if there's something else left to do! I've also enabled edits by maintainers if there's something quick you'd like to adjust.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Some seemingly unrelated tests failed in the last CI run (example), any chance the tests are a bit flaky?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@amannn Looks like that was a flake. Re-running the CI!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for merging the latest changes from canary @samcx!
However, now another unrelated Turbopack dev test is failing. Can you try to rerun that particular one?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi. At the risk of creating some noise, can I ask the likelihood that this PR will make it in soon? We have a lot of undeployed work that is dependent on this change being released, and if this is not going to go in we need to come up with a plan B. cc @gnoff
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good but can you clean up that one last bit with the array check for appendHeaders?
if (Array.isArray(value)) { | ||
value.forEach((item) => { | ||
res.appendHeader(name, item) | ||
}) | ||
} else { | ||
res.appendHeader(name, value) | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
appendHeader can accept an array of values
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is wrong as @amannn pointed out to me. We abstract over node's response to support the edge runtime where the append method only accepts a single value so we need to keep the value iteration
Fixes #69000