Skip to content

Conversation

@unstubbable
Copy link
Collaborator

If we don't handle Lazy types specifically in renderDebugModel, all of their properties will be emitted using renderDebugModel as well. This also includes its _debugInfo property, if the Lazy comes from the Flight client. That array might contain objects that are deduped, and resolving those references in the client can cause runtime errors, e.g.:

TypeError: Cannot read properties of undefined (reading '$$typeof')

This happened specifically when an "RSC stream" debug info entry, coming from the Flight client through IO tracking, was emitted and its debugTask property was deduped, which couldn't be resolved in the client.

To avoid actually initializing a lazy causing a side-effect, we make some assumptions about the structure of its payload, and only emit resolved or rejected values, otherwise we emit a halted chunk.

If we don't handle Lazy types specifically in `renderDebugModel`, all of
their properties will be emitted using `renderDebugModel` as well. This
also includes its `_debugInfo` property, if the Lazy comes from the
Flight client. That array might contain objects that are deduped, and
resolving those references in the client can cause runtime errors, e.g.:

```
TypeError: Cannot read properties of undefined (reading '$$typeof')
```

This happened specifically when an "RSC stream" debug info entry, coming
from the Flight client through IO tracking, was emitted and its
`debugTask` property was deduped, which couldn't be resolved in the
client.

To avoid actually initializing a lazy causing a side-effect, we make
some assumptions about the structure of its payload, and only emit
resolved or rejected values, otherwise we emit a halted chunk.
@meta-cla meta-cla bot added the CLA Signed label Sep 19, 2025
@github-actions github-actions bot added the React Core Team Opened by a member of the React Core Team label Sep 19, 2025
@react-sizebot
Copy link

react-sizebot commented Sep 19, 2025

Comparing: 5e3cd53...8c5e017

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 = 534.28 kB 534.28 kB = 94.31 kB 94.31 kB
oss-experimental/react-dom/cjs/react-dom.production.js = 6.69 kB 6.69 kB +0.05% 1.83 kB 1.83 kB
oss-experimental/react-dom/cjs/react-dom-client.production.js = 663.59 kB 663.59 kB = 116.98 kB 116.98 kB
facebook-www/ReactDOM-prod.classic.js = 687.51 kB 687.51 kB = 121.01 kB 121.01 kB
facebook-www/ReactDOM-prod.modern.js = 677.93 kB 677.93 kB = 119.36 kB 119.36 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/cjs/react-server-flight.development.js +1.35% 136.06 kB 137.90 kB +0.90% 24.52 kB 24.74 kB
oss-stable/react-server/cjs/react-server-flight.development.js +1.35% 136.06 kB 137.90 kB +0.90% 24.52 kB 24.74 kB
oss-experimental/react-server/cjs/react-server-flight.development.js +1.28% 143.62 kB 145.46 kB +0.77% 25.76 kB 25.96 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.development.js +1.05% 176.04 kB 177.88 kB +0.59% 32.20 kB 32.39 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.development.js +1.05% 176.04 kB 177.88 kB +0.59% 32.20 kB 32.39 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.development.js +1.02% 179.77 kB 181.61 kB +0.56% 32.69 kB 32.87 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.development.js +1.02% 179.77 kB 181.61 kB +0.56% 32.69 kB 32.87 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.development.js +1.00% 183.61 kB 185.45 kB +0.58% 33.38 kB 33.58 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js +1.00% 184.36 kB 186.20 kB +0.60% 33.62 kB 33.82 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js +1.00% 184.36 kB 186.20 kB +0.60% 33.62 kB 33.82 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js +0.98% 187.65 kB 189.49 kB +0.57% 34.01 kB 34.20 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js +0.98% 187.65 kB 189.49 kB +0.57% 34.01 kB 34.20 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.development.js +0.98% 187.69 kB 189.54 kB +0.57% 33.94 kB 34.14 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js +0.96% 191.93 kB 193.77 kB +0.57% 34.84 kB 35.04 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js +0.94% 183.88 kB 185.62 kB +0.55% 33.52 kB 33.71 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js +0.94% 183.88 kB 185.62 kB +0.55% 33.52 kB 33.71 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js +0.94% 195.57 kB 197.41 kB +0.54% 35.30 kB 35.49 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js +0.93% 187.65 kB 189.39 kB +0.51% 34.02 kB 34.19 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js +0.93% 187.65 kB 189.39 kB +0.51% 34.02 kB 34.19 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +0.92% 200.40 kB 202.25 kB +0.54% 36.77 kB 36.97 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +0.92% 200.40 kB 202.25 kB +0.54% 36.77 kB 36.97 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js +0.91% 191.45 kB 193.19 kB +0.52% 34.74 kB 34.92 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js +0.89% 206.90 kB 208.75 kB +0.56% 37.44 kB 37.65 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js +0.89% 206.90 kB 208.75 kB +0.56% 37.44 kB 37.65 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js +0.89% 195.57 kB 197.31 kB +0.50% 35.30 kB 35.48 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +0.89% 207.95 kB 209.80 kB +0.52% 38.04 kB 38.23 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js +0.86% 213.64 kB 215.48 kB +0.54% 38.56 kB 38.76 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js +0.86% 213.64 kB 215.48 kB +0.54% 38.56 kB 38.76 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js +0.86% 214.45 kB 216.30 kB +0.51% 38.70 kB 38.90 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +0.86% 214.84 kB 216.69 kB +0.54% 38.84 kB 39.05 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +0.86% 214.84 kB 216.69 kB +0.54% 38.84 kB 39.05 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js +0.83% 221.19 kB 223.03 kB +0.50% 39.79 kB 39.99 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +0.83% 222.39 kB 224.24 kB +0.50% 40.08 kB 40.28 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +0.81% 214.90 kB 216.63 kB +0.49% 38.85 kB 39.04 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +0.81% 214.90 kB 216.63 kB +0.49% 38.85 kB 39.04 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +0.78% 222.45 kB 224.18 kB +0.46% 40.09 kB 40.28 kB
oss-experimental/react-markup/cjs/react-markup.react-server.development.js +0.28% 663.42 kB 665.26 kB +0.17% 117.16 kB 117.37 kB

Generated by 🚫 dangerJS against 8c5e017

@unstubbable unstubbable marked this pull request as ready for review September 19, 2025 21:07
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.

3 participants