-
Notifications
You must be signed in to change notification settings - Fork 27.3k
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: handle optional catchall parameters properly when deployed #74562
fix: handle optional catchall parameters properly when deployed #74562
Conversation
Tests Passed |
Stats from current PRDefault Build (Increase detected
|
vercel/next.js canary | vercel/next.js 01-06-fix_handle_optional_catchall_parameters_properly_on_vercel | Change | |
---|---|---|---|
buildDuration | 31.8s | 27.5s | N/A |
buildDurationCached | 32.8s | 25.1s | N/A |
nodeModulesSize | 417 MB | 417 MB | N/A |
nextStartRea..uration (ms) | 738ms | 848ms |
Client Bundles (main, webpack)
vercel/next.js canary | vercel/next.js 01-06-fix_handle_optional_catchall_parameters_properly_on_vercel | 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 | 53 kB | 53 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 | vercel/next.js 01-06-fix_handle_optional_catchall_parameters_properly_on_vercel | 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 | vercel/next.js 01-06-fix_handle_optional_catchall_parameters_properly_on_vercel | 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 | vercel/next.js 01-06-fix_handle_optional_catchall_parameters_properly_on_vercel | Change | |
---|---|---|---|
_buildManifest.js gzip | 749 B | 747 B | N/A |
Overall change | 0 B | 0 B | ✓ |
Rendered Page Sizes
vercel/next.js canary | vercel/next.js 01-06-fix_handle_optional_catchall_parameters_properly_on_vercel | 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 | vercel/next.js 01-06-fix_handle_optional_catchall_parameters_properly_on_vercel | 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 | vercel/next.js 01-06-fix_handle_optional_catchall_parameters_properly_on_vercel | Change | |
---|---|---|---|
middleware-b..fest.js gzip | 668 B | 669 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 | vercel/next.js 01-06-fix_handle_optional_catchall_parameters_properly_on_vercel | 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 | ✓ |
app-page-exp..prod.js gzip | 129 kB | 129 kB | ✓ |
app-page-tur..prod.js gzip | 142 kB | 142 kB | ✓ |
app-page-tur..prod.js gzip | 138 kB | 138 kB | ✓ |
app-page.run...dev.js gzip | 352 kB | 352 kB | ✓ |
app-page.run..prod.js gzip | 125 kB | 125 kB | ✓ |
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 | N/A |
Overall change | 1.53 MB | 1.53 MB | ✓ |
build cache Overall increase ⚠️
vercel/next.js canary | vercel/next.js 01-06-fix_handle_optional_catchall_parameters_properly_on_vercel | Change | |
---|---|---|---|
0.pack gzip | 2.08 MB | 2.08 MB | N/A |
index.pack gzip | 74.1 kB | 74.9 kB | |
Overall change | 74.1 kB | 74.9 kB |
Diff details
Diff for middleware.js
Diff too large to display
Diff for edge-ssr.js
Diff too large to display
Diff for main-HASH.js
Diff too large to display
Diff for server.runtime.prod.js
Diff too large to display
e393e49
to
620baa1
Compare
types are complaining. Can we add a normal e2e test as well? That would be tested on vercel.com via deploy test nowadays so it should fail without this change. |
620baa1
to
8481e19
Compare
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.
Would it have been possible for other hosting providers to massage x-now-route-matches
to work around this bug?
@@ -236,7 +236,7 @@ describe('Required Server Files', () => { | |||
{ | |||
headers: { | |||
'x-matched-path': '/fallback/first', | |||
'x-now-route-matches': '1=first', | |||
'x-now-route-matches': 'nxtPslug=first', |
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.
So we already had test showing symptoms of the bug?
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 specific to the way that Vercel handles the matches. We used to previously support both the index based and name based matches, but this isn't supported on Vercel anymore, which is what I suspect cause this to surface.
8481e19
to
d2eb952
Compare
Previously, we had code responsible for parsing and handling the
x-now-route-matches
header (sent by Vercel) that included the route matches used for parameter parsing that only read from the named parameters if they were all present. This doesn't apply to routes with optional parameters (such as[[...rest]]
), so it wasn't utilizing that matching mechanism. It previously fell back onto the second stage of parsing that utilized numeric based group matching, but this was recently changed on Vercel, so the fallback no longer applies for Next.js applications that are running on 15+.Closes https://linear.app/vercel/issue/NEXT-3948