Skip to content
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

Merged
merged 13 commits into from
Jan 22, 2025

Conversation

amannn
Copy link
Contributor

@amannn amannn commented Dec 2, 2024

Fixes #69000

@ijjk
Copy link
Member

ijjk commented Dec 2, 2024

Allow CI Workflow Run

  • approve CI run for commit: 1e6188b

Note: this should only be enabled once the PR is ready to go and can only be enabled by a maintainer

@amannn
Copy link
Contributor Author

amannn commented Dec 5, 2024

@samcx Any chance you could have a look at this PR? I think this should address #69000 :)

@ijjk
Copy link
Member

ijjk commented Dec 5, 2024

Tests Passed

@ijjk
Copy link
Member

ijjk commented Dec 5, 2024

Stats from current PR

Default Build (Increase detected ⚠️)
General Overall increase ⚠️
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 ⚠️ +15.8 kB
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 ⚠️ +1.64 kB
Overall change 73.8 kB 75.5 kB ⚠️ +1.64 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

Commit: 0cc45a8

@samcx
Copy link
Member

samcx commented Dec 5, 2024

@amannn It looks like we need to update the test in the comment above mine :one-eye-cowboy:

@amannn
Copy link
Contributor Author

amannn commented Dec 5, 2024

@samcx Thanks for running the CI suite!

Hmm, that's a bit odd, locally the test was passing for me. I've adapted it in 1e6188b to make the test more robust.

Can we have another look if CI passes now?

@samcx
Copy link
Member

samcx commented Dec 6, 2024

@amannn New conflicts again :oh_no: . I'll add the CI label so we don't need to wait for us again.

@samcx samcx added the CI approved Approve running CI for fork label Dec 6, 2024
@amannn
Copy link
Contributor Author

amannn commented Dec 9, 2024

@samcx Tests are passing! 🎉

@amannn
Copy link
Contributor Author

amannn commented Dec 12, 2024

@samcx Any chance you could consider this PR for being merged? You have quite a busy canary branch, would be cool to get this in before there's another conflict 😄

@amannn
Copy link
Contributor Author

amannn commented Dec 18, 2024

@samcx Sorry to bother you again, is there something missing in this PR or could it be merged?

@samcx
Copy link
Member

samcx commented Dec 18, 2024

@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)
Copy link
Contributor

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

Copy link
Contributor Author

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.

Copy link
Contributor Author

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?

Copy link
Member

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!

Copy link
Contributor Author

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?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

All checks have passed now @samcx! 🎉 /cc @gnoff

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

@amannn amannn requested a review from gnoff December 21, 2024 08:43
@vordgi vordgi mentioned this pull request Dec 26, 2024
Copy link
Contributor

@gnoff gnoff left a 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?

Comment on lines +2545 to +2551
if (Array.isArray(value)) {
value.forEach((item) => {
res.appendHeader(name, item)
})
} else {
res.appendHeader(name, value)
}
Copy link
Contributor

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

Copy link
Contributor

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

@gnoff gnoff merged commit 7be48db into vercel:canary Jan 22, 2025
103 checks passed
@github-actions github-actions bot added the locked label Feb 6, 2025
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Feb 6, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

next/font interferes with header links from middleware.
6 participants