-
Notifications
You must be signed in to change notification settings - Fork 27.5k
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
Error handling for hanging promises in "use cache"
closures
#74750
Error handling for hanging promises in "use cache"
closures
#74750
Conversation
This stack of pull requests is managed by Graphite. Learn more about stacking. |
"use cache"
closures
Tests Passed |
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
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
packages/next/src/server/app-render/create-hanging-input-abort-signal.ts
Outdated
Show resolved
Hide resolved
And use `scheduleOnNextTick` to avoid edge runtime build errors for `process.nextTick` usage.
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).