diff --git a/packages/react-reconciler/src/__tests__/ActivityReactServer-test.js b/packages/react-reconciler/src/__tests__/ActivityReactServer-test.js new file mode 100644 index 0000000000000..93f4e5683b620 --- /dev/null +++ b/packages/react-reconciler/src/__tests__/ActivityReactServer-test.js @@ -0,0 +1,65 @@ +/** + * 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 act; +let Activity; +let React; +let ReactServer; +let ReactNoop; +let ReactNoopFlightClient; +let ReactNoopFlightServer; + +describe('ActivityReactServer', () => { + beforeEach(() => { + jest.resetModules(); + jest.mock('react', () => require('react/react.react-server')); + ReactServer = require('react'); + Activity = ReactServer.Activity; + ReactNoopFlightServer = require('react-noop-renderer/flight-server'); + + jest.resetModules(); + __unmockReact(); + React = require('react'); + ReactNoopFlightClient = require('react-noop-renderer/flight-client'); + ReactNoop = require('react-noop-renderer'); + const InternalTestUtils = require('internal-test-utils'); + act = InternalTestUtils.act; + }); + + afterEach(() => { + jest.restoreAllMocks(); + }); + + it('can be rendered in React Server', async () => { + function App() { + return ReactServer.createElement( + Activity, + {mode: 'hidden'}, + ReactServer.createElement('div', null, 'Hello, Dave!'), + ); + } + + const transport = ReactNoopFlightServer.render( + ReactServer.createElement(App, null), + ); + + await act(async () => { + const app = await ReactNoopFlightClient.read(transport); + + ReactNoop.render(app); + }); + + expect(ReactNoop).toMatchRenderedOutput( + , + ); + }); +}); diff --git a/packages/react-reconciler/src/__tests__/ViewTransitionReactServer-test.js b/packages/react-reconciler/src/__tests__/ViewTransitionReactServer-test.js new file mode 100644 index 0000000000000..8f1104a12833e --- /dev/null +++ b/packages/react-reconciler/src/__tests__/ViewTransitionReactServer-test.js @@ -0,0 +1,64 @@ +/** + * 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 act; +let ViewTransition; +let React; +let ReactServer; +let ReactNoop; +let ReactNoopFlightClient; +let ReactNoopFlightServer; + +describe('ViewTransitionReactServer', () => { + beforeEach(() => { + jest.resetModules(); + jest.mock('react', () => require('react/react.react-server')); + ReactServer = require('react'); + ViewTransition = ReactServer.unstable_ViewTransition; + ReactNoopFlightServer = require('react-noop-renderer/flight-server'); + + jest.resetModules(); + __unmockReact(); + React = require('react'); + ReactNoopFlightClient = require('react-noop-renderer/flight-client'); + ReactNoop = require('react-noop-renderer'); + const InternalTestUtils = require('internal-test-utils'); + act = InternalTestUtils.act; + }); + + afterEach(() => { + jest.restoreAllMocks(); + }); + + // @gate enableViewTransition || fb + it('can be rendered in React Server', async () => { + function App() { + return ReactServer.createElement( + ViewTransition, + {}, + ReactServer.createElement('div', null, 'Hello, Dave!'), + ); + } + + const transport = ReactNoopFlightServer.render( + ReactServer.createElement(App, null), + ); + + await act(async () => { + const app = await ReactNoopFlightClient.read(transport); + + ReactNoop.render(app); + }); + + expect(ReactNoop).toMatchRenderedOutput(
Hello, Dave!
); + }); +}); diff --git a/packages/react/src/ReactServer.experimental.development.js b/packages/react/src/ReactServer.experimental.development.js index 082eb58ccacc2..9e9417677bb46 100644 --- a/packages/react/src/ReactServer.experimental.development.js +++ b/packages/react/src/ReactServer.experimental.development.js @@ -58,6 +58,7 @@ export { export { Children, + REACT_ACTIVITY_TYPE as Activity, REACT_FRAGMENT_TYPE as Fragment, REACT_PROFILER_TYPE as Profiler, REACT_STRICT_MODE_TYPE as StrictMode, @@ -83,6 +84,5 @@ export { // Experimental REACT_SUSPENSE_LIST_TYPE as unstable_SuspenseList, REACT_VIEW_TRANSITION_TYPE as unstable_ViewTransition, - REACT_ACTIVITY_TYPE as unstable_Activity, captureOwnerStack, // DEV-only }; diff --git a/packages/react/src/ReactServer.experimental.js b/packages/react/src/ReactServer.experimental.js index 4fe83248e2c77..e380789d71bf6 100644 --- a/packages/react/src/ReactServer.experimental.js +++ b/packages/react/src/ReactServer.experimental.js @@ -57,6 +57,7 @@ export { export { Children, + REACT_ACTIVITY_TYPE as Activity, REACT_FRAGMENT_TYPE as Fragment, REACT_PROFILER_TYPE as Profiler, REACT_STRICT_MODE_TYPE as StrictMode, @@ -82,5 +83,4 @@ export { // Experimental REACT_SUSPENSE_LIST_TYPE as unstable_SuspenseList, REACT_VIEW_TRANSITION_TYPE as unstable_ViewTransition, - REACT_ACTIVITY_TYPE as Activity, }; diff --git a/packages/react/src/ReactServer.fb.js b/packages/react/src/ReactServer.fb.js index 998a78679830e..fe6089fc160a7 100644 --- a/packages/react/src/ReactServer.fb.js +++ b/packages/react/src/ReactServer.fb.js @@ -12,10 +12,13 @@ export {default as __SERVER_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRA import {forEach, map, count, toArray, only} from './ReactChildren'; import {captureOwnerStack as captureOwnerStackImpl} from './ReactOwnerStack'; import { + REACT_ACTIVITY_TYPE, REACT_FRAGMENT_TYPE, REACT_PROFILER_TYPE, REACT_STRICT_MODE_TYPE, REACT_SUSPENSE_TYPE, + REACT_SUSPENSE_LIST_TYPE, + REACT_VIEW_TRANSITION_TYPE, } from 'shared/ReactSymbols'; import { cloneElement, @@ -45,6 +48,7 @@ if (__DEV__) { export { Children, + REACT_ACTIVITY_TYPE as Activity, REACT_FRAGMENT_TYPE as Fragment, REACT_PROFILER_TYPE as Profiler, REACT_STRICT_MODE_TYPE as StrictMode, @@ -65,4 +69,7 @@ export { useMemo, version, captureOwnerStack, // DEV-only + // Experimental + REACT_SUSPENSE_LIST_TYPE as unstable_SuspenseList, + REACT_VIEW_TRANSITION_TYPE as unstable_ViewTransition, }; diff --git a/packages/react/src/ReactServer.js b/packages/react/src/ReactServer.js index be5cd22d91b3f..f218074deea41 100644 --- a/packages/react/src/ReactServer.js +++ b/packages/react/src/ReactServer.js @@ -11,6 +11,7 @@ export {default as __SERVER_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRA import {forEach, map, count, toArray, only} from './ReactChildren'; import { + REACT_ACTIVITY_TYPE, REACT_FRAGMENT_TYPE, REACT_PROFILER_TYPE, REACT_STRICT_MODE_TYPE, @@ -40,6 +41,7 @@ const Children = { export { Children, + REACT_ACTIVITY_TYPE as Activity, REACT_FRAGMENT_TYPE as Fragment, REACT_PROFILER_TYPE as Profiler, REACT_STRICT_MODE_TYPE as StrictMode,