Skip to content

Conversation

sebmarkbage
Copy link
Collaborator

This lets you assign a name to a Promise that's passed into first party code from third party since it otherwise would have no other stack frame to indicate its name since the whole creation stack would be in third party.

We already respect the displayName on the client but it's more complicated on the server because we don't only consider the exact instance passed to use() but the whole await sequence and we can pick any Promise along the way for consideration. Therefore this also adds a change where we pick the Promise node for consideration if it has a name but no stack. Where we otherwise would've picked the I/O node.

Another thing that this PR does is treat anonymous stack frames (empty url) as third party for purposes of heuristics like "hasUnfilteredFrame" and the name assignment. This lets you include these in the actual generated stacks (by overriding filterStackFrame) but we don't actually want them to be considered first party code in the heuristics since it ends up favoring those stacks and using internals like Function.all in name assignment.

@meta-cla meta-cla bot added the CLA Signed label Oct 13, 2025
@github-actions github-actions bot added the React Core Team Opened by a member of the React Core Team label Oct 13, 2025
@react-sizebot
Copy link

Comparing: 1d68bce...e598297

Critical size changes

Includes critical production bundles, as well as any change greater than 2%:

Name +/- Base Current +/- gzip Base gzip Current gzip
oss-stable/react-dom/cjs/react-dom.production.js = 6.68 kB 6.68 kB +0.05% 1.83 kB 1.83 kB
oss-stable/react-dom/cjs/react-dom-client.production.js = 605.42 kB 604.98 kB = 107.21 kB 107.14 kB
oss-experimental/react-dom/cjs/react-dom.production.js = 6.69 kB 6.69 kB = 1.83 kB 1.83 kB
oss-experimental/react-dom/cjs/react-dom-client.production.js = 664.39 kB 663.95 kB = 117.09 kB 117.03 kB
facebook-www/ReactDOM-prod.classic.js = 688.26 kB 687.81 kB = 121.13 kB 121.07 kB
facebook-www/ReactDOM-prod.modern.js = 678.69 kB 678.24 kB = 119.48 kB 119.42 kB

Significant size changes

Includes any change greater than 0.2%:

Expand to show
Name +/- Base Current +/- gzip Base gzip Current gzip
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +0.30% 210.94 kB 211.57 kB +0.33% 38.50 kB 38.63 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +0.30% 210.94 kB 211.57 kB +0.33% 38.50 kB 38.63 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +0.29% 215.55 kB 216.17 kB +0.29% 39.35 kB 39.46 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js +0.29% 217.45 kB 218.08 kB +0.33% 39.19 kB 39.32 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js +0.29% 217.45 kB 218.08 kB +0.33% 39.19 kB 39.32 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js +0.28% 222.06 kB 222.69 kB +0.23% 40.05 kB 40.15 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js +0.28% 224.17 kB 224.79 kB +0.25% 40.29 kB 40.39 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js +0.28% 224.17 kB 224.79 kB +0.25% 40.29 kB 40.39 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +0.28% 225.37 kB 226.00 kB +0.26% 40.58 kB 40.69 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +0.28% 225.37 kB 226.00 kB +0.26% 40.58 kB 40.69 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +0.28% 225.42 kB 226.05 kB +0.26% 40.59 kB 40.69 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +0.28% 225.42 kB 226.05 kB +0.26% 40.59 kB 40.69 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js +0.27% 228.77 kB 229.40 kB +0.23% 41.12 kB 41.22 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +0.27% 229.98 kB 230.60 kB +0.22% 41.42 kB 41.51 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +0.27% 230.03 kB 230.66 kB +0.22% 41.42 kB 41.51 kB

Generated by 🚫 dangerJS against e598297

"name": "greeting",
"start": 0,
"value": {
"status": "halted",
Copy link
Collaborator

Choose a reason for hiding this comment

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

Wouldn't we expect the value here?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

This is an interesting one. Because the promise gets serialized by the props to Component before it has fully resolved, it gives up while serializing it. Later it also is awaited but then it's already serialized as part of props.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Debug channel fixes this ofc.

@sebmarkbage sebmarkbage merged commit 026abea into facebook:main Oct 13, 2025
246 of 247 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed React Core Team Opened by a member of the React Core Team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants