From d9135f09c9852fbb162d8100f9a59d6b85816a0e Mon Sep 17 00:00:00 2001 From: Dennis Kats Date: Fri, 11 Jul 2025 01:23:45 -0400 Subject: [PATCH 1/2] Allow returning a temporary reference from an async function in ReactFlightServerTemporaryReferences.js --- .../react-server/src/ReactFlightServerTemporaryReferences.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/react-server/src/ReactFlightServerTemporaryReferences.js b/packages/react-server/src/ReactFlightServerTemporaryReferences.js index e368b2e8007..e28b603edf9 100644 --- a/packages/react-server/src/ReactFlightServerTemporaryReferences.js +++ b/packages/react-server/src/ReactFlightServerTemporaryReferences.js @@ -70,6 +70,9 @@ const proxyHandlers = { `Instead, you can export a Client Component wrapper ` + `that itself renders a Client Context Provider.`, ); + // Allow returning a temporary reference from an async function + case 'then': + return undefined; } throw new Error( // eslint-disable-next-line react-internal/safe-string-coercion From 6ff0af1c0a7b8c7afc05cfd576390b8d136177c3 Mon Sep 17 00:00:00 2001 From: Dennis Kats Date: Fri, 11 Jul 2025 01:45:58 -0400 Subject: [PATCH 2/2] Add tests for ReactFlightServerTemporaryReferences to validate temporary reference async retrieval --- ...actFlightServerTemporaryReferences-test.js | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 packages/react-server/src/__tests__/ReactFlightServerTemporaryReferences-test.js diff --git a/packages/react-server/src/__tests__/ReactFlightServerTemporaryReferences-test.js b/packages/react-server/src/__tests__/ReactFlightServerTemporaryReferences-test.js new file mode 100644 index 00000000000..7e93179268d --- /dev/null +++ b/packages/react-server/src/__tests__/ReactFlightServerTemporaryReferences-test.js @@ -0,0 +1,36 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @emails react-core + * @jest-environment node + */ + +'use strict'; + +let ReactFlightServerTemporaryReferences; + +describe('ReactFlightServerTemporaryReferences', () => { + beforeEach(() => { + jest.resetModules(); + ReactFlightServerTemporaryReferences = require('react-server/src/ReactFlightServerTemporaryReferences'); + }); + + it('can return a temporary reference from an async function', async () => { + const temporaryReferenceSet = + ReactFlightServerTemporaryReferences.createTemporaryReferenceSet(); + const temporaryReference = + ReactFlightServerTemporaryReferences.createTemporaryReference( + temporaryReferenceSet, + 'test', + ); + + async function foo() { + return temporaryReference; + } + + await expect(foo()).resolves.toBe(temporaryReference); + }); +});