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
ensure null loading boundaries still render a Suspense boundary #63726
ensure null loading boundaries still render a Suspense boundary #63726
Conversation
This stack of pull requests is managed by Graphite. Learn more about stacking. |
Failing test suitesCommit: 20cb3c3
Expand output● Graceful Shutdown › production (standalone mode) › should not accept new requests during shutdown cleanup › when there is no activity
Read more about building and testing Next.js in contributing.md.
Expand output● app dir - navigation › scroll restoration › should restore original scroll position when navigating back
Read more about building and testing Next.js in contributing.md. |
bf2be77
to
af682db
Compare
Stats from current PRDefault Build (Increase detected
|
vercel/next.js canary | vercel/next.js 03-26-ensure_null_loading_boundaries_still_render_a_Suspense_boundary | Change | |
---|---|---|---|
buildDuration | 14s | 13.8s | N/A |
buildDurationCached | 7.5s | 6.2s | N/A |
nodeModulesSize | 198 MB | 198 MB | |
nextStartRea..uration (ms) | 400ms | 412ms | N/A |
Client Bundles (main, webpack)
vercel/next.js canary | vercel/next.js 03-26-ensure_null_loading_boundaries_still_render_a_Suspense_boundary | Change | |
---|---|---|---|
2453-HASH.js gzip | 30.8 kB | 30.8 kB | N/A |
3304.HASH.js gzip | 181 B | 181 B | ✓ |
3f784ff6-HASH.js gzip | 53.7 kB | 53.7 kB | ✓ |
8299-HASH.js gzip | 5.04 kB | 5.04 kB | N/A |
framework-HASH.js gzip | 45.2 kB | 45.2 kB | ✓ |
main-app-HASH.js gzip | 242 B | 239 B | N/A |
main-HASH.js gzip | 32.2 kB | 32.2 kB | N/A |
webpack-HASH.js gzip | 1.68 kB | 1.68 kB | N/A |
Overall change | 99 kB | 99 kB | ✓ |
Legacy Client Bundles (polyfills)
vercel/next.js canary | vercel/next.js 03-26-ensure_null_loading_boundaries_still_render_a_Suspense_boundary | Change | |
---|---|---|---|
polyfills-HASH.js gzip | 31 kB | 31 kB | ✓ |
Overall change | 31 kB | 31 kB | ✓ |
Client Pages
vercel/next.js canary | vercel/next.js 03-26-ensure_null_loading_boundaries_still_render_a_Suspense_boundary | Change | |
---|---|---|---|
_app-HASH.js gzip | 196 B | 197 B | N/A |
_error-HASH.js gzip | 184 B | 184 B | ✓ |
amp-HASH.js gzip | 505 B | 505 B | ✓ |
css-HASH.js gzip | 324 B | 325 B | N/A |
dynamic-HASH.js gzip | 2.5 kB | 2.5 kB | N/A |
edge-ssr-HASH.js gzip | 258 B | 258 B | ✓ |
head-HASH.js gzip | 352 B | 352 B | ✓ |
hooks-HASH.js gzip | 370 B | 371 B | N/A |
image-HASH.js gzip | 4.21 kB | 4.21 kB | ✓ |
index-HASH.js gzip | 259 B | 259 B | ✓ |
link-HASH.js gzip | 2.67 kB | 2.67 kB | N/A |
routerDirect..HASH.js gzip | 314 B | 312 B | N/A |
script-HASH.js gzip | 386 B | 386 B | ✓ |
withRouter-HASH.js gzip | 309 B | 309 B | ✓ |
1afbb74e6ecf..834.css gzip | 106 B | 106 B | ✓ |
Overall change | 6.57 kB | 6.57 kB | ✓ |
Client Build Manifests
vercel/next.js canary | vercel/next.js 03-26-ensure_null_loading_boundaries_still_render_a_Suspense_boundary | Change | |
---|---|---|---|
_buildManifest.js gzip | 481 B | 484 B | N/A |
Overall change | 0 B | 0 B | ✓ |
Rendered Page Sizes
vercel/next.js canary | vercel/next.js 03-26-ensure_null_loading_boundaries_still_render_a_Suspense_boundary | Change | |
---|---|---|---|
index.html gzip | 529 B | 529 B | ✓ |
link.html gzip | 541 B | 541 B | ✓ |
withRouter.html gzip | 524 B | 523 B | N/A |
Overall change | 1.07 kB | 1.07 kB | ✓ |
Edge SSR bundle Size
vercel/next.js canary | vercel/next.js 03-26-ensure_null_loading_boundaries_still_render_a_Suspense_boundary | Change | |
---|---|---|---|
edge-ssr.js gzip | 95.3 kB | 95.3 kB | N/A |
page.js gzip | 3.04 kB | 3.04 kB | N/A |
Overall change | 0 B | 0 B | ✓ |
Middleware size
vercel/next.js canary | vercel/next.js 03-26-ensure_null_loading_boundaries_still_render_a_Suspense_boundary | Change | |
---|---|---|---|
middleware-b..fest.js gzip | 625 B | 625 B | ✓ |
middleware-r..fest.js gzip | 151 B | 151 B | ✓ |
middleware.js gzip | 25.5 kB | 25.5 kB | N/A |
edge-runtime..pack.js gzip | 839 B | 839 B | ✓ |
Overall change | 1.61 kB | 1.61 kB | ✓ |
Next Runtimes
vercel/next.js canary | vercel/next.js 03-26-ensure_null_loading_boundaries_still_render_a_Suspense_boundary | Change | |
---|---|---|---|
app-page-exp...dev.js gzip | 170 kB | 170 kB | ✓ |
app-page-exp..prod.js gzip | 96.8 kB | 96.8 kB | ✓ |
app-page-tur..prod.js gzip | 98.5 kB | 98.5 kB | ✓ |
app-page-tur..prod.js gzip | 92.8 kB | 92.8 kB | ✓ |
app-page.run...dev.js gzip | 144 kB | 144 kB | ✓ |
app-page.run..prod.js gzip | 91.3 kB | 91.3 kB | ✓ |
app-route-ex...dev.js gzip | 21.3 kB | 21.3 kB | ✓ |
app-route-ex..prod.js gzip | 15 kB | 15 kB | ✓ |
app-route-tu..prod.js gzip | 15 kB | 15 kB | ✓ |
app-route-tu..prod.js gzip | 14.8 kB | 14.8 kB | ✓ |
app-route.ru...dev.js gzip | 21 kB | 21 kB | ✓ |
app-route.ru..prod.js gzip | 14.8 kB | 14.8 kB | ✓ |
pages-api-tu..prod.js gzip | 9.55 kB | 9.55 kB | ✓ |
pages-api.ru...dev.js gzip | 9.82 kB | 9.82 kB | ✓ |
pages-api.ru..prod.js gzip | 9.55 kB | 9.55 kB | ✓ |
pages-turbo...prod.js gzip | 22.5 kB | 22.5 kB | ✓ |
pages.runtim...dev.js gzip | 23.1 kB | 23.1 kB | ✓ |
pages.runtim..prod.js gzip | 22.4 kB | 22.4 kB | ✓ |
server.runti..prod.js gzip | 50.9 kB | 50.9 kB | ✓ |
Overall change | 943 kB | 943 kB | ✓ |
build cache Overall increase ⚠️
vercel/next.js canary | vercel/next.js 03-26-ensure_null_loading_boundaries_still_render_a_Suspense_boundary | Change | |
---|---|---|---|
0.pack gzip | 1.56 MB | 1.56 MB | N/A |
index.pack gzip | 105 kB | 106 kB | |
Overall change | 105 kB | 106 kB |
Diff details
Diff for middleware.js
Diff too large to display
Diff for 2453-HASH.js
Diff too large to display
af682db
to
bd03626
Compare
ea7f313
to
20cb3c3
Compare
20cb3c3
to
616b5af
Compare
This ensures that even if a
loading.js
returnsnull
, that we still render aSuspense
boundary, as it's perfectly valid to have an empty fallback.This was accidentally lost in #62346 -- this brings back the
hasLoading
prop which will check the loading module itself (rather than theReactNode
) for truthiness, and I've added a test to avoid another regression.Closes NEXT-2936