Repository: facebook/react
Pull request: [Flight] Add context for non null prototype error

We already added this for other thrown errors, not just console.errors. There's a production form of this. We just missed adding this context.

Mainly the best context is the line number though which comes from owner stacks.

Changed files:
filename: packages/react-client/src/ReactFlightReplyClient.js
patch: @@ -692,7 +692,8 @@ export function processReply(
         if (temporaryReferences === undefined) {
           throw new Error(
             'Only plain objects, and a few built-ins, can be passed to Server Actions. ' +
-              'Classes or null prototypes are not supported.',
+              'Classes or null prototypes are not supported.' +
+              (__DEV__ ? describeObjectForErrorMessage(parent, key) : ''),
           );
         }
         // We will have written this object to the temporary reference set above

filename: packages/react-client/src/__tests__/ReactFlight-test.js
patch: @@ -1482,7 +1482,10 @@ describe('ReactFlight', () => {
 
     expect(errors).toEqual([
       'Only plain objects, and a few built-ins, can be passed to Client Components ' +
-        'from Server Components. Classes or null prototypes are not supported.',
+        'from Server Components. Classes or null prototypes are not supported.' +
+        (__DEV__
+          ? '\n' + '  <input value={{}}>\n' + '               ^^^^'
+          : '\n' + '  {value: {}}\n' + '          ^^'),
     ]);
   });
 

filename: packages/react-server/src/ReactFlightServer.js
patch: @@ -2615,7 +2615,8 @@ function renderModelDestructive(
     ) {
       throw new Error(
         'Only plain objects, and a few built-ins, can be passed to Client Components ' +
-          'from Server Components. Classes or null prototypes are not supported.',
+          'from Server Components. Classes or null prototypes are not supported.' +
+          describeObjectForErrorMessage(parent, parentPropertyName),
       );
     }
     if (__DEV__) {

filename: scripts/error-codes/codes.json
patch: @@ -483,8 +483,8 @@
   "495": "Cannot taint a %s because the value is too general and not unique enough to block globally.",
   "496": "Only objects or functions can be passed to taintObjectReference. Try taintUniqueValue instead.",
   "497": "Only objects or functions can be passed to taintObjectReference.",
-  "498": "Only plain objects, and a few built-ins, can be passed to Client Components from Server Components. Classes or null prototypes are not supported.",
-  "499": "Only plain objects, and a few built-ins, can be passed to Server Actions. Classes or null prototypes are not supported.",
+  "498": "Only plain objects, and a few built-ins, can be passed to Client Components from Server Components. Classes or null prototypes are not supported.%s",
+  "499": "Only plain objects, and a few built-ins, can be passed to Server Actions. Classes or null prototypes are not supported.%s",
   "500": "React expected a headers state to exist when emitEarlyPreloads was called but did not find it. This suggests emitEarlyPreloads was called more than once per request. This is a bug in React.",
   "501": "The render was aborted with postpone when the shell is incomplete. Reason: %s",
   "502": "Cannot read a Client Context from a Server Component.",