[Fizz] Fallback to client replaying actions if we're trying to serialize a Blob
This follows the same principle as in #28611.
We cannot serialize Blobs of a form data into HTML because you can't initialize a file input to some value. However the serialization of state in an Action can contain blobs. In this case we do error but outside the try/catch that recovers to error to client replaying instead of MPA mode. This errors earlier to ensure that this works.
Testing this is a bit annoying because JSDOM doesn't have any of the Blob methods but the Blob needs to be compatible with FormData and the FormData needs to be compatible with <form> nodes in these tests. So I polyfilled those in JSDOM with some hacks.
A possible future enhancement would be to encode these blobs in a base64 mode instead and have some way to receive them on the server. It's just a matter of layering this. I think the RSC layer's FORM_DATA implementation can pass some flag to encode as base64 and then have decodeAction include some way to parse them. That way this case would work in MPA mode too.
Comparing: 0a0a3af75a740d0920ebf7f4affaf8d1ce8c107f...8dc0498e76125cb200b9f7b0c7e7a869ee9fc9b0
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.66 kB | 6.66 kB | +0.11% | 1.82 kB | 1.82 kB |
| oss-stable/react-dom/cjs/react-dom-client.production.js | = | 492.61 kB | 492.61 kB | = | 87.88 kB | 87.88 kB |
| oss-experimental/react-dom/cjs/react-dom.production.js | = | 6.67 kB | 6.67 kB | +0.11% | 1.83 kB | 1.83 kB |
| oss-experimental/react-dom/cjs/react-dom-client.production.js | = | 498.86 kB | 498.86 kB | = | 88.92 kB | 88.93 kB |
| facebook-www/ReactDOM-prod.classic.js | = | 591.22 kB | 591.22 kB | = | 103.96 kB | 103.96 kB |
| facebook-www/ReactDOM-prod.modern.js | = | 567.44 kB | 567.44 kB | = | 100.36 kB | 100.36 kB |
| test_utils/ReactAllWarnings.js | Deleted | 64.26 kB | 0.00 kB | Deleted | 16.02 kB | 0.00 kB |
Significant size changes
Includes any change greater than 0.2%:
Expand to show
| Name | +/- | Base | Current | +/- gzip | Base gzip | Current gzip |
|---|---|---|---|---|---|---|
| test_utils/ReactAllWarnings.js | Deleted | 64.26 kB | 0.00 kB | Deleted | 16.02 kB | 0.00 kB |
Generated by :no_entry_sign: dangerJS against 8dc0498e76125cb200b9f7b0c7e7a869ee9fc9b0