Error handling for hanging promises in "use cache" closures#74750
Merged
unstubbable merged 6 commits intoJan 22, 2025
Conversation
Contributor
Author
This stack of pull requests is managed by Graphite. Learn more about stacking. |
"use cache" closures
Member
Tests Passed |
Member
Stats from current PRDefault Build (Increase detected
|
| vercel/next.js canary | vercel/next.js hl/use-cache-hanging-inputs-error-handling-bound-args | Change | |
|---|---|---|---|
| buildDuration | 17.2s | 15.7s | N/A |
| buildDurationCached | 14.7s | 12.3s | N/A |
| nodeModulesSize | 419 MB | 419 MB | |
| nextStartRea..uration (ms) | 402ms | 419ms | N/A |
Client Bundles (main, webpack)
| vercel/next.js canary | vercel/next.js hl/use-cache-hanging-inputs-error-handling-bound-args | Change | |
|---|---|---|---|
| 5306-HASH.js gzip | 54 kB | 54 kB | N/A |
| 8276.HASH.js gzip | 169 B | 168 B | N/A |
| 8377-HASH.js gzip | 5.46 kB | 5.46 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 | 241 B | 242 B | N/A |
| main-HASH.js gzip | 34.6 kB | 34.6 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 hl/use-cache-hanging-inputs-error-handling-bound-args | 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 hl/use-cache-hanging-inputs-error-handling-bound-args | 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.59 kB | 4.58 kB | N/A |
| index-HASH.js gzip | 268 B | 268 B | ✓ |
| link-HASH.js gzip | 2.35 kB | 2.35 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 hl/use-cache-hanging-inputs-error-handling-bound-args | Change | |
|---|---|---|---|
| _buildManifest.js gzip | 748 B | 747 B | N/A |
| Overall change | 0 B | 0 B | ✓ |
Rendered Page Sizes
| vercel/next.js canary | vercel/next.js hl/use-cache-hanging-inputs-error-handling-bound-args | Change | |
|---|---|---|---|
| index.html gzip | 524 B | 524 B | ✓ |
| link.html gzip | 539 B | 539 B | ✓ |
| withRouter.html gzip | 520 B | 521 B | N/A |
| Overall change | 1.06 kB | 1.06 kB | ✓ |
Edge SSR bundle Size
| vercel/next.js canary | vercel/next.js hl/use-cache-hanging-inputs-error-handling-bound-args | Change | |
|---|---|---|---|
| edge-ssr.js gzip | 129 kB | 129 kB | N/A |
| page.js gzip | 209 kB | 209 kB | N/A |
| Overall change | 0 B | 0 B | ✓ |
Middleware size
| vercel/next.js canary | vercel/next.js hl/use-cache-hanging-inputs-error-handling-bound-args | Change | |
|---|---|---|---|
| middleware-b..fest.js gzip | 670 B | 667 B | N/A |
| middleware-r..fest.js gzip | 155 B | 156 B | N/A |
| middleware.js gzip | 31.3 kB | 31.3 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 hl/use-cache-hanging-inputs-error-handling-bound-args | 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 | 376 kB | 376 kB | N/A |
| app-page-exp..prod.js gzip | 131 kB | 131 kB | N/A |
| app-page-tur..prod.js gzip | 144 kB | 144 kB | N/A |
| app-page-tur..prod.js gzip | 140 kB | 140 kB | N/A |
| app-page.run...dev.js gzip | 364 kB | 364 kB | N/A |
| app-page.run..prod.js gzip | 127 kB | 127 kB | N/A |
| app-route-ex...dev.js gzip | 37.6 kB | 37.6 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.9 kB | 21.9 kB | N/A |
| pages.runtim...dev.js gzip | 27.7 kB | 27.7 kB | N/A |
| pages.runtim..prod.js gzip | 21.9 kB | 21.9 kB | N/A |
| server.runti..prod.js gzip | 916 kB | 916 kB | N/A |
| Overall change | 211 kB | 211 kB | ✓ |
build cache Overall increase ⚠️
| vercel/next.js canary | vercel/next.js hl/use-cache-hanging-inputs-error-handling-bound-args | Change | |
|---|---|---|---|
| 0.pack gzip | 2.1 MB | 2.1 MB | |
| index.pack gzip | 75.8 kB | 76.2 kB | |
| Overall change | 2.17 MB | 2.18 MB |
Diff details
Diff for middleware.js
Diff too large to display
Diff for edge-ssr.js
Diff too large to display
Diff for 5306-HASH.js
Diff too large to display
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
Diff for pages-turbo...time.prod.js
Diff too large to display
Diff for pages.runtime.dev.js
Diff too large to display
Diff for pages.runtime.prod.js
Diff too large to display
Diff for server.runtime.prod.js
Diff too large to display
wyattjoh
reviewed
Jan 14, 2025
c61c618 to
837b7de
Compare
11b9e06 to
4a21ed5
Compare
837b7de to
b980539
Compare
db1901a to
2973c5a
Compare
c8ed464 to
caf7b77
Compare
2973c5a to
1ac8aa4
Compare
caf7b77 to
2151b79
Compare
1ac8aa4 to
1bce2cb
Compare
Turbopack doesn't treeshake properly, so this ended up triggering errors for `process.nextTick` usage in edge bundles.
1bce2cb to
7ddb06b
Compare
2151b79 to
338eb99
Compare
7ddb06b to
fe8dbbd
Compare
gnoff
reviewed
Jan 22, 2025
And use `scheduleOnNextTick` to avoid edge runtime build errors for `process.nextTick` usage.
gnoff
approved these changes
Jan 22, 2025
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.

Based on #74652, this adds error handling for
"use cache"closures that use closed-over hanging promises. It uses a similar technique to encode the hanging promises into the serialized bound arguments string. In addition, we need to notify the cache signal when decrypting the bound args, since this operation does not resolve in the current task. This is now the same behavior as for encrypting the bound args (see #73521).