@samitouri / QOS-React-1 / commits / 7cb356e862

[Flight] rename `prerender` to `unstable_prerender` and include in stable channel (#31724)

[Flight] rename `prerender` to `unstable_prerender` and include in stable channel (#31724) We added an experimental `prerender` API to flight. This change exposes this API in stable channels prefixed as `unstable_prerender`. We have high confidence this API should exist but because we have not yet settled on how to handle resuming/replaying of RSC streams we may need to change the API contract to suit future needs. This release will allow us to get more usage out of the existing implemented functionality without requiring you to use experimental builds which will open up greater adoption and opportunity for feedback. the `prerender` implementation is documented in the `react-server` package. As with all RSC APIs implemented in bundler specific binding packages these aren't intended to be called by end users but instead be used by frameworks implementing React Server Components. Previously `prerender` was exposed unprefixed and only in the experimental channel. This PR renames the export across all channels to `unstable_prerender` so users of this previously unprefixed api will need to update to the unstable form. This isn't a breaking change because it was only exposed in the experimental channel which does not follow semver. The reason we don't expose it under both names is that users may feature detect the unprefixed form and then when we finally do ship it as unprefixed we may change the function signature and break this code. Changing the name now is much safer.

Josh Story committed Dec 10, 2024 at 11:51 UTC 7cb356e8622e6413671bc22ea273ea39b0b265e4
37 files changed +97 -83
fixtures/flight/server/region.js
+1 -1
@@ -106,7 +106,7 @@ async function renderApp(res, returnValue, formState) {
106 }
107
108 async function prerenderApp(res, returnValue, formState) {
109 - const {prerenderToNodeStream} = await import(
109 + const {unstable_prerenderToNodeStream: prerenderToNodeStream} = await import(
110 'react-server-dom-webpack/static'
111 );
112 // const m = require('../src/App.js');
packages/react-server-dom-esm/npm/static.node.js
+2 -2
@@ -7,6 +7,6 @@ if (process.env.NODE_ENV === 'production') {
7 s = require('./cjs/react-server-dom-esm-server.node.development.js');
8 }
9
10 -if (s.prerenderToNodeStream) {
11 - exports.prerenderToNodeStream = s.prerenderToNodeStream;
10 +if (s.unstable_prerenderToNodeStream) {
11 + exports.unstable_prerenderToNodeStream = s.unstable_prerenderToNodeStream;
12 }
packages/react-server-dom-esm/src/server/react-flight-dom-server.node.js
+1 -1
@@ -9,7 +9,7 @@
9
10 export {
11 renderToPipeableStream,
12 - prerenderToNodeStream,
12 + prerenderToNodeStream as unstable_prerenderToNodeStream,
13 decodeReplyFromBusboy,
14 decodeReply,
15 decodeAction,
packages/react-server-dom-esm/src/server/react-flight-dom-server.node.stable.js
+1
@@ -9,6 +9,7 @@
9
10 export {
11 renderToPipeableStream,
12 + prerenderToNodeStream as unstable_prerenderToNodeStream,
13 decodeReplyFromBusboy,
14 decodeReply,
15 decodeAction,
packages/react-server-dom-esm/static.node.js
+1 -1
@@ -7,4 +7,4 @@
7 * @flow
8 */
9
10 -export {prerenderToNodeStream} from './src/server/react-flight-dom-server.node';
10 +export {unstable_prerenderToNodeStream} from './src/server/react-flight-dom-server.node';
packages/react-server-dom-turbopack/npm/static.browser.js
+2 -2
@@ -7,6 +7,6 @@ if (process.env.NODE_ENV === 'production') {
7 s = require('./cjs/react-server-dom-turbopack-server.browser.development.js');
8 }
9
10 -if (s.prerender) {
11 - exports.prerender = s.prerender;
10 +if (s.unstable_prerender) {
11 + exports.unstable_prerender = s.unstable_prerender;
12 }
packages/react-server-dom-turbopack/npm/static.edge.js
+2 -2
@@ -7,6 +7,6 @@ if (process.env.NODE_ENV === 'production') {
7 s = require('./cjs/react-server-dom-turbopack-server.edge.development.js');
8 }
9
10 -if (s.prerender) {
11 - exports.prerender = s.prerender;
10 +if (s.unstable_prerender) {
11 + exports.unstable_prerender = s.unstable_prerender;
12 }
packages/react-server-dom-turbopack/npm/static.node.js
+2 -2
@@ -7,6 +7,6 @@ if (process.env.NODE_ENV === 'production') {
7 s = require('./cjs/react-server-dom-turbopack-server.node.development.js');
8 }
9
10 -if (s.prerenderToNodeStream) {
11 - exports.prerenderToNodeStream = s.prerenderToNodeStream;
10 +if (s.unstable_prerenderToNodeStream) {
11 + exports.unstable_prerenderToNodeStream = s.unstable_prerenderToNodeStream;
12 }
packages/react-server-dom-turbopack/src/server/react-flight-dom-server.browser.js
+1 -1
@@ -9,7 +9,7 @@
9
10 export {
11 renderToReadableStream,
12 - prerender,
12 + prerender as unstable_prerender,
13 decodeReply,
14 decodeAction,
15 decodeFormState,
packages/react-server-dom-turbopack/src/server/react-flight-dom-server.browser.stable.js
+1
@@ -9,6 +9,7 @@
9
10 export {
11 renderToReadableStream,
12 + prerender as unstable_prerender,
13 decodeReply,
14 decodeAction,
15 decodeFormState,
packages/react-server-dom-turbopack/src/server/react-flight-dom-server.edge.js
+1 -1
@@ -9,7 +9,7 @@
9
10 export {
11 renderToReadableStream,
12 - prerender,
12 + prerender as unstable_prerender,
13 decodeReply,
14 decodeAction,
15 decodeFormState,
packages/react-server-dom-turbopack/src/server/react-flight-dom-server.edge.stable.js
+1
@@ -9,6 +9,7 @@
9
10 export {
11 renderToReadableStream,
12 + prerender as unstable_prerender,
13 decodeReply,
14 decodeAction,
15 decodeFormState,
packages/react-server-dom-turbopack/src/server/react-flight-dom-server.node.js
+1 -1
@@ -9,7 +9,7 @@
9
10 export {
11 renderToPipeableStream,
12 - prerenderToNodeStream,
12 + prerenderToNodeStream as unstable_prerenderToNodeStream,
13 decodeReplyFromBusboy,
14 decodeReply,
15 decodeAction,
packages/react-server-dom-turbopack/src/server/react-flight-dom-server.node.stable.js
+1
@@ -9,6 +9,7 @@
9
10 export {
11 renderToPipeableStream,
12 + prerenderToNodeStream as unstable_prerenderToNodeStream,
13 decodeReplyFromBusboy,
14 decodeReply,
15 decodeAction,
packages/react-server-dom-turbopack/static.browser.js
+1 -1
@@ -7,4 +7,4 @@
7 * @flow
8 */
9
10 -export {prerender} from './src/server/react-flight-dom-server.browser';
10 +export {unstable_prerender} from './src/server/react-flight-dom-server.browser';
packages/react-server-dom-turbopack/static.edge.js
+1 -1
@@ -7,4 +7,4 @@
7 * @flow
8 */
9
10 -export {prerender} from './src/server/react-flight-dom-server.edge';
10 +export {unstable_prerender} from './src/server/react-flight-dom-server.edge';
packages/react-server-dom-turbopack/static.node.js
+1 -1
@@ -7,4 +7,4 @@
7 * @flow
8 */
9
10 -export {prerenderToNodeStream} from './src/server/react-flight-dom-server.node';
10 +export {unstable_prerenderToNodeStream} from './src/server/react-flight-dom-server.node';
packages/react-server-dom-webpack/npm/static.browser.js
+2 -2
@@ -7,6 +7,6 @@ if (process.env.NODE_ENV === 'production') {
7 s = require('./cjs/react-server-dom-webpack-server.browser.development.js');
8 }
9
10 -if (s.prerender) {
11 - exports.prerender = s.prerender;
10 +if (s.unstable_prerender) {
11 + exports.unstable_prerender = s.unstable_prerender;
12 }
packages/react-server-dom-webpack/npm/static.edge.js
+2 -2
@@ -7,6 +7,6 @@ if (process.env.NODE_ENV === 'production') {
7 s = require('./cjs/react-server-dom-webpack-server.edge.development.js');
8 }
9
10 -if (s.prerender) {
11 - exports.prerender = s.prerender;
10 +if (s.unstable_prerender) {
11 + exports.unstable_prerender = s.unstable_prerender;
12 }
packages/react-server-dom-webpack/npm/static.node.js
+2 -2
@@ -7,6 +7,6 @@ if (process.env.NODE_ENV === 'production') {
7 s = require('./cjs/react-server-dom-webpack-server.node.development.js');
8 }
9
10 -if (s.prerenderToNodeStream) {
11 - exports.prerenderToNodeStream = s.prerenderToNodeStream;
10 +if (s.unstable_prerenderToNodeStream) {
11 + exports.unstable_prerenderToNodeStream = s.unstable_prerenderToNodeStream;
12 }
packages/react-server-dom-webpack/npm/static.node.unbundled.js
+2 -2
@@ -7,6 +7,6 @@ if (process.env.NODE_ENV === 'production') {
7 s = require('./cjs/react-server-dom-webpack-server.node.unbundled.development.js');
8 }
9
10 -if (s.prerenderToNodeStream) {
11 - exports.prerenderToNodeStream = s.prerenderToNodeStream;
10 +if (s.unstable_prerenderToNodeStream) {
11 + exports.unstable_prerenderToNodeStream = s.unstable_prerenderToNodeStream;
12 }
packages/react-server-dom-webpack/src/__tests__/ReactFlightDOM-test.js
+37 -33
@@ -2787,10 +2787,11 @@ describe('ReactFlightDOM', () => {
2787 const {pendingResult} = await serverAct(async () => {
2788 // destructure trick to avoid the act scope from awaiting the returned value
2789 return {
2790 - pendingResult: ReactServerDOMStaticServer.prerenderToNodeStream(
2791 - <App />,
2792 - webpackMap,
2793 - ),
2790 + pendingResult:
2791 + ReactServerDOMStaticServer.unstable_prerenderToNodeStream(
2792 + <App />,
2793 + webpackMap,
2794 + ),
2795 };
2796 });
2797
@@ -2853,16 +2854,17 @@ describe('ReactFlightDOM', () => {
2854 const {pendingResult} = await serverAct(async () => {
2855 // destructure trick to avoid the act scope from awaiting the returned value
2856 return {
2856 - pendingResult: ReactServerDOMStaticServer.prerenderToNodeStream(
2857 - <App />,
2858 - webpackMap,
2859 - {
2860 - signal: controller.signal,
2861 - onError(err) {
2862 - errors.push(err);
2857 + pendingResult:
2858 + ReactServerDOMStaticServer.unstable_prerenderToNodeStream(
2859 + <App />,
2860 + webpackMap,
2861 + {
2862 + signal: controller.signal,
2863 + onError(err) {
2864 + errors.push(err);
2865 + },
2866 },
2864 - },
2865 - ),
2867 + ),
2868 };
2869 });
2870
@@ -2934,18 +2936,19 @@ describe('ReactFlightDOM', () => {
2936 const controller = new AbortController();
2937 const {pendingResult} = await serverAct(() => {
2938 return {
2937 - pendingResult: ReactServerDOMStaticServer.prerenderToNodeStream(
2938 - {
2939 - multiShotIterable,
2940 - },
2941 - {},
2942 - {
2943 - onError(x) {
2944 - errors.push(x);
2939 + pendingResult:
2940 + ReactServerDOMStaticServer.unstable_prerenderToNodeStream(
2941 + {
2942 + multiShotIterable,
2943 },
2946 - signal: controller.signal,
2947 - },
2948 - ),
2944 + {},
2945 + {
2946 + onError(x) {
2947 + errors.push(x);
2948 + },
2949 + signal: controller.signal,
2950 + },
2951 + ),
2952 };
2953 });
2954
@@ -3017,16 +3020,17 @@ describe('ReactFlightDOM', () => {
3020 const errors = [];
3021 const {pendingResult} = await serverAct(() => {
3022 return {
3020 - pendingResult: ReactServerDOMStaticServer.prerenderToNodeStream(
3021 - <App />,
3022 - {},
3023 - {
3024 - onError(x) {
3025 - errors.push(x);
3023 + pendingResult:
3024 + ReactServerDOMStaticServer.unstable_prerenderToNodeStream(
3025 + <App />,
3026 + {},
3027 + {
3028 + onError(x) {
3029 + errors.push(x);
3030 + },
3031 + signal: controller.signal,
3032 },
3027 - signal: controller.signal,
3028 - },
3029 - ),
3033 + ),
3034 };
3035 });
3036
packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMBrowser-test.js
+2 -2
@@ -2490,7 +2490,7 @@ describe('ReactFlightDOMBrowser', () => {
2490 const {pendingResult} = await serverAct(async () => {
2491 // destructure trick to avoid the act scope from awaiting the returned value
2492 return {
2493 - pendingResult: ReactServerDOMStaticServer.prerender(
2493 + pendingResult: ReactServerDOMStaticServer.unstable_prerender(
2494 <App />,
2495 webpackMap,
2496 ),
@@ -2543,7 +2543,7 @@ describe('ReactFlightDOMBrowser', () => {
2543 const {pendingResult} = await serverAct(async () => {
2544 // destructure trick to avoid the act scope from awaiting the returned value
2545 return {
2546 - pendingResult: ReactServerDOMStaticServer.prerender(
2546 + pendingResult: ReactServerDOMStaticServer.unstable_prerender(
2547 <App />,
2548 webpackMap,
2549 {
packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMEdge-test.js
+2 -2
@@ -1134,7 +1134,7 @@ describe('ReactFlightDOMEdge', () => {
1134 const {pendingResult} = await serverAct(async () => {
1135 // destructure trick to avoid the act scope from awaiting the returned value
1136 return {
1137 - pendingResult: ReactServerDOMStaticServer.prerender(
1137 + pendingResult: ReactServerDOMStaticServer.unstable_prerender(
1138 <App />,
1139 webpackMap,
1140 ),
@@ -1192,7 +1192,7 @@ describe('ReactFlightDOMEdge', () => {
1192 const {pendingResult} = await serverAct(async () => {
1193 // destructure trick to avoid the act scope from awaiting the returned value
1194 return {
1195 - pendingResult: ReactServerDOMStaticServer.prerender(
1195 + pendingResult: ReactServerDOMStaticServer.unstable_prerender(
1196 <App />,
1197 webpackMap,
1198 {
packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMNode-test.js
+15 -13
@@ -411,10 +411,11 @@ describe('ReactFlightDOMNode', () => {
411 const {pendingResult} = await serverAct(async () => {
412 // destructure trick to avoid the act scope from awaiting the returned value
413 return {
414 - pendingResult: ReactServerDOMStaticServer.prerenderToNodeStream(
415 - <App />,
416 - webpackMap,
417 - ),
414 + pendingResult:
415 + ReactServerDOMStaticServer.unstable_prerenderToNodeStream(
416 + <App />,
417 + webpackMap,
418 + ),
419 };
420 });
421
@@ -469,16 +470,17 @@ describe('ReactFlightDOMNode', () => {
470 const {pendingResult} = await serverAct(async () => {
471 // destructure trick to avoid the act scope from awaiting the returned value
472 return {
472 - pendingResult: ReactServerDOMStaticServer.prerenderToNodeStream(
473 - <App />,
474 - webpackMap,
475 - {
476 - signal: controller.signal,
477 - onError(err) {
478 - errors.push(err);
473 + pendingResult:
474 + ReactServerDOMStaticServer.unstable_prerenderToNodeStream(
475 + <App />,
476 + webpackMap,
477 + {
478 + signal: controller.signal,
479 + onError(err) {
480 + errors.push(err);
481 + },
482 },
480 - },
481 - ),
483 + ),
484 };
485 });
486
packages/react-server-dom-webpack/src/server/react-flight-dom-server.browser.js
+1 -1
@@ -9,7 +9,7 @@
9
10 export {
11 renderToReadableStream,
12 - prerender,
12 + prerender as unstable_prerender,
13 decodeReply,
14 decodeAction,
15 decodeFormState,
packages/react-server-dom-webpack/src/server/react-flight-dom-server.browser.stable.js
+1
@@ -9,6 +9,7 @@
9
10 export {
11 renderToReadableStream,
12 + prerender as unstable_prerender,
13 decodeReply,
14 decodeAction,
15 decodeFormState,
packages/react-server-dom-webpack/src/server/react-flight-dom-server.edge.js
+1 -1
@@ -9,7 +9,7 @@
9
10 export {
11 renderToReadableStream,
12 - prerender,
12 + prerender as unstable_prerender,
13 decodeReply,
14 decodeAction,
15 decodeFormState,
packages/react-server-dom-webpack/src/server/react-flight-dom-server.edge.stable.js
+1
@@ -9,6 +9,7 @@
9
10 export {
11 renderToReadableStream,
12 + prerender as unstable_prerender,
13 decodeReply,
14 decodeAction,
15 decodeFormState,
packages/react-server-dom-webpack/src/server/react-flight-dom-server.node.js
+1 -1
@@ -9,7 +9,7 @@
9
10 export {
11 renderToPipeableStream,
12 - prerenderToNodeStream,
12 + prerenderToNodeStream as unstable_prerenderToNodeStream,
13 decodeReplyFromBusboy,
14 decodeReply,
15 decodeAction,
packages/react-server-dom-webpack/src/server/react-flight-dom-server.node.stable.js
+1
@@ -9,6 +9,7 @@
9
10 export {
11 renderToPipeableStream,
12 + prerenderToNodeStream as unstable_prerenderToNodeStream,
13 decodeReplyFromBusboy,
14 decodeReply,
15 decodeAction,
packages/react-server-dom-webpack/src/server/react-flight-dom-server.node.unbundled.js
+1 -1
@@ -9,7 +9,7 @@
9
10 export {
11 renderToPipeableStream,
12 - prerenderToNodeStream,
12 + prerenderToNodeStream as unstable_prerenderToNodeStream,
13 decodeReplyFromBusboy,
14 decodeReply,
15 decodeAction,
packages/react-server-dom-webpack/src/server/react-flight-dom-server.node.unbundled.stable.js
+1
@@ -9,6 +9,7 @@
9
10 export {
11 renderToPipeableStream,
12 + prerenderToNodeStream as unstable_prerenderToNodeStream,
13 decodeReplyFromBusboy,
14 decodeReply,
15 decodeAction,
packages/react-server-dom-webpack/static.browser.js
+1 -1
@@ -7,4 +7,4 @@
7 * @flow
8 */
9
10 -export {prerender} from './src/server/react-flight-dom-server.browser';
10 +export {unstable_prerender} from './src/server/react-flight-dom-server.browser';
packages/react-server-dom-webpack/static.edge.js
+1 -1
@@ -7,4 +7,4 @@
7 * @flow
8 */
9
10 -export {prerender} from './src/server/react-flight-dom-server.edge';
10 +export {unstable_prerender} from './src/server/react-flight-dom-server.edge';
packages/react-server-dom-webpack/static.node.js
+1 -1
@@ -7,4 +7,4 @@
7 * @flow
8 */
9
10 -export {prerenderToNodeStream} from './src/server/react-flight-dom-server.node';
10 +export {unstable_prerenderToNodeStream} from './src/server/react-flight-dom-server.node';
packages/react-server-dom-webpack/static.node.unbundled.js
+1 -1
@@ -7,4 +7,4 @@
7 * @flow
8 */
9
10 -export {prerenderToNodeStream} from './src/server/react-flight-dom-server.node.unbundled';
10 +export {unstable_prerenderToNodeStream} from './src/server/react-flight-dom-server.node.unbundled';