@samitouri / QOS-React / commits / 1bd1f01f2a

Ship partial-prerendering APIs to Canary (#34633)

Sebastian "Sebbie" Silbermann committed Oct 1, 2025 at 18:22 UTC 1bd1f01f2a46fa453de5099280b54385ca7773b1
56 files changed +233 -253
fixtures/flight/server/region.js
+1 -1
@@ -133,7 +133,7 @@ async function renderApp(res, returnValue, formState, noCache, debugChannel) {
133 }
134
135 async function prerenderApp(res, returnValue, formState, noCache) {
136 - const {unstable_prerenderToNodeStream: prerenderToNodeStream} = await import(
136 + const {prerenderToNodeStream} = await import(
137 'react-server-dom-webpack/static'
138 );
139 // const m = require('../src/App.js');
packages/react-dom/npm/server.browser.js
+1 -3
@@ -13,6 +13,4 @@ exports.version = l.version;
13 exports.renderToString = l.renderToString;
14 exports.renderToStaticMarkup = l.renderToStaticMarkup;
15 exports.renderToReadableStream = s.renderToReadableStream;
16 -if (s.resume) {
17 - exports.resume = s.resume;
18 -}
16 +exports.resume = s.resume;
packages/react-dom/npm/server.bun.js
+1 -3
@@ -12,8 +12,6 @@ if (process.env.NODE_ENV === 'production') {
12
13 exports.version = b.version;
14 exports.renderToReadableStream = b.renderToReadableStream;
15 -if (b.resume) {
16 - exports.resume = b.resume;
17 -}
15 +exports.resume = b.resume;
16 exports.renderToString = l.renderToString;
17 exports.renderToStaticMarkup = l.renderToStaticMarkup;
packages/react-dom/npm/server.edge.js
+1 -3
@@ -14,6 +14,4 @@ exports.version = b.version;
14 exports.renderToReadableStream = b.renderToReadableStream;
15 exports.renderToString = l.renderToString;
16 exports.renderToStaticMarkup = l.renderToStaticMarkup;
17 -if (b.resume) {
18 - exports.resume = b.resume;
19 -}
17 +exports.resume = b.resume;
packages/react-dom/npm/server.node.js
+2 -6
@@ -14,9 +14,5 @@ exports.renderToString = l.renderToString;
14 exports.renderToStaticMarkup = l.renderToStaticMarkup;
15 exports.renderToPipeableStream = s.renderToPipeableStream;
16 exports.renderToReadableStream = s.renderToReadableStream;
17 -if (s.resumeToPipeableStream) {
18 - exports.resumeToPipeableStream = s.resumeToPipeableStream;
19 -}
20 -if (s.resume) {
21 - exports.resume = s.resume;
22 -}
17 +exports.resumeToPipeableStream = s.resumeToPipeableStream;
18 +exports.resume = s.resume;
packages/react-dom/src/__tests__/ReactDOMFizzStatic-test.js
+10
@@ -416,7 +416,11 @@ describe('ReactDOMFizzStatic', () => {
416 return <div>aborted</div>;
417 }
418
419 + const errors = [];
420 const pendingResult = ReactDOMFizzStatic.prerenderToNodeStream(<App />, {
421 + onError: error => {
422 + errors.push(error);
423 + },
424 signal: controller.signal,
425 });
426 pendingResult.catch(() => {});
@@ -430,6 +434,7 @@ describe('ReactDOMFizzStatic', () => {
434 result.prelude.pipe(writable);
435 });
436 expect(getVisibleChildren(container)).toEqual(undefined);
437 + expect(errors).toEqual([]);
438 });
439
440 // @gate enablePostpone
@@ -447,13 +452,18 @@ describe('ReactDOMFizzStatic', () => {
452 return <div>aborted</div>;
453 }
454
455 + const errors = [];
456 const result = await ReactDOMFizzStatic.prerenderToNodeStream(<App />, {
457 + onError: error => {
458 + errors.push(error);
459 + },
460 signal: controller.signal,
461 });
462 await act(async () => {
463 result.prelude.pipe(writable);
464 });
465 expect(getVisibleChildren(container)).toEqual(undefined);
466 + expect(errors).toEqual([]);
467 });
468
469 // @gate enableHalt
packages/react-dom/src/__tests__/ReactDOMFizzStaticFloat-test.js
+1 -3
@@ -40,9 +40,7 @@ describe('ReactDOMFizzStaticFloat', () => {
40 React = require('react');
41 ReactDOM = require('react-dom');
42 ReactDOMFizzServer = require('react-dom/server.browser');
43 - if (__EXPERIMENTAL__) {
44 - ReactDOMFizzStatic = require('react-dom/static.browser');
45 - }
43 + ReactDOMFizzStatic = require('react-dom/static.browser');
44 Suspense = React.Suspense;
45 container = document.createElement('div');
46 document.body.appendChild(container);
packages/react-dom/src/__tests__/ReactDOMFizzStaticNode-test.js
+15 -17
@@ -18,9 +18,7 @@ describe('ReactDOMFizzStaticNode', () => {
18 beforeEach(() => {
19 jest.resetModules();
20 React = require('react');
21 - if (__EXPERIMENTAL__) {
22 - ReactDOMFizzStatic = require('react-dom/static');
23 - }
21 + ReactDOMFizzStatic = require('react-dom/static');
22 Suspense = React.Suspense;
23 });
24
@@ -58,7 +56,7 @@ describe('ReactDOMFizzStaticNode', () => {
56 }
57 }
58
61 - // @gate experimental
59 + // @gate enableHalt || enablePostpone
60 it('should call prerenderToNodeStream', async () => {
61 const result = await ReactDOMFizzStatic.prerenderToNodeStream(
62 <div>hello world</div>,
@@ -67,14 +65,14 @@ describe('ReactDOMFizzStaticNode', () => {
65 expect(prelude).toMatchInlineSnapshot(`"<div>hello world</div>"`);
66 });
67
70 - // @gate experimental
68 + // @gate enableHalt || enablePostpone
69 it('should suppport web streams', async () => {
70 const result = await ReactDOMFizzStatic.prerender(<div>hello world</div>);
71 const prelude = await readContentWeb(result.prelude);
72 expect(prelude).toMatchInlineSnapshot(`"<div>hello world</div>"`);
73 });
74
77 - // @gate experimental
75 + // @gate enableHalt || enablePostpone
76 it('should emit DOCTYPE at the root of the document', async () => {
77 const result = await ReactDOMFizzStatic.prerenderToNodeStream(
78 <html>
@@ -93,7 +91,7 @@ describe('ReactDOMFizzStaticNode', () => {
91 }
92 });
93
96 - // @gate experimental
94 + // @gate enableHalt || enablePostpone
95 it('should emit bootstrap script src at the end', async () => {
96 const result = await ReactDOMFizzStatic.prerenderToNodeStream(
97 <div>hello world</div>,
@@ -109,7 +107,7 @@ describe('ReactDOMFizzStaticNode', () => {
107 );
108 });
109
112 - // @gate experimental
110 + // @gate enableHalt || enablePostpone
111 it('emits all HTML as one unit', async () => {
112 let hasLoaded = false;
113 let resolve;
@@ -139,7 +137,7 @@ describe('ReactDOMFizzStaticNode', () => {
137 expect(prelude).toMatchInlineSnapshot(`"<div><!--$-->Done<!--/$--></div>"`);
138 });
139
142 - // @gate experimental
140 + // @gate enableHalt || enablePostpone
141 it('should reject the promise when an error is thrown at the root', async () => {
142 const reportedErrors = [];
143 let caughtError = null;
@@ -161,7 +159,7 @@ describe('ReactDOMFizzStaticNode', () => {
159 expect(reportedErrors).toEqual([theError]);
160 });
161
164 - // @gate experimental
162 + // @gate enableHalt || enablePostpone
163 it('should reject the promise when an error is thrown inside a fallback', async () => {
164 const reportedErrors = [];
165 let caughtError = null;
@@ -185,7 +183,7 @@ describe('ReactDOMFizzStaticNode', () => {
183 expect(reportedErrors).toEqual([theError]);
184 });
185
188 - // @gate experimental
186 + // @gate enableHalt || enablePostpone
187 it('should not error the stream when an error is thrown inside suspense boundary', async () => {
188 const reportedErrors = [];
189 const result = await ReactDOMFizzStatic.prerenderToNodeStream(
@@ -206,7 +204,7 @@ describe('ReactDOMFizzStaticNode', () => {
204 expect(reportedErrors).toEqual([theError]);
205 });
206
209 - // @gate experimental
207 + // @gate enableHalt || enablePostpone
208 it('should be able to complete by aborting even if the promise never resolves', async () => {
209 const errors = [];
210 const controller = new AbortController();
@@ -236,7 +234,7 @@ describe('ReactDOMFizzStaticNode', () => {
234 expect(errors).toEqual(['This operation was aborted']);
235 });
236
239 - // @gate experimental
237 + // @gate enableHalt || enablePostpone
238 // @gate !enableHalt
239 it('should reject if aborting before the shell is complete and enableHalt is disabled', async () => {
240 const errors = [];
@@ -302,7 +300,7 @@ describe('ReactDOMFizzStaticNode', () => {
300 expect(content).toBe('');
301 });
302
305 - // @gate experimental
303 + // @gate enableHalt || enablePostpone
304 it('should be able to abort before something suspends', async () => {
305 const errors = [];
306 const controller = new AbortController();
@@ -343,7 +341,7 @@ describe('ReactDOMFizzStaticNode', () => {
341 }
342 });
343
346 - // @gate experimental
344 + // @gate enableHalt || enablePostpone
345 // @gate !enableHalt
346 it('should reject if passing an already aborted signal and enableHalt is disabled', async () => {
347 const errors = [];
@@ -414,7 +412,7 @@ describe('ReactDOMFizzStaticNode', () => {
412 expect(content).toBe('');
413 });
414
417 - // @gate experimental
415 + // @gate enableHalt || enablePostpone
416 it('supports custom abort reasons with a string', async () => {
417 const promise = new Promise(r => {});
418 function Wait() {
@@ -456,7 +454,7 @@ describe('ReactDOMFizzStaticNode', () => {
454 expect(errors).toEqual(['foobar', 'foobar']);
455 });
456
459 - // @gate experimental
457 + // @gate enableHalt || enablePostpone
458 it('supports custom abort reasons with an Error', async () => {
459 const promise = new Promise(r => {});
460 function Wait() {
packages/react-dom/src/server/react-dom-server.browser.stable.js
+6 -2
@@ -7,5 +7,9 @@
7 * @flow
8 */
9
10 -export {renderToReadableStream, version} from './ReactDOMFizzServerBrowser.js';
11 -export {prerender} from './ReactDOMFizzStaticBrowser.js';
10 +export {
11 + renderToReadableStream,
12 + resume,
13 + version,
14 +} from './ReactDOMFizzServerBrowser.js';
15 +export {prerender, resumeAndPrerender} from './ReactDOMFizzStaticBrowser.js';
packages/react-dom/src/server/react-dom-server.edge.stable.js
+6 -2
@@ -7,5 +7,9 @@
7 * @flow
8 */
9
10 -export {renderToReadableStream, version} from './ReactDOMFizzServerEdge.js';
11 -export {prerender} from './ReactDOMFizzStaticEdge.js';
10 +export {
11 + renderToReadableStream,
12 + resume,
13 + version,
14 +} from './ReactDOMFizzServerEdge.js';
15 +export {prerender, resumeAndPrerender} from './ReactDOMFizzStaticEdge.js';
packages/react-dom/src/server/react-dom-server.node.stable.js
+8 -1
@@ -10,6 +10,13 @@
10 export {
11 renderToPipeableStream,
12 renderToReadableStream,
13 + resume,
14 + resumeToPipeableStream,
15 version,
16 } from './ReactDOMFizzServerNode.js';
15 -export {prerenderToNodeStream, prerender} from './ReactDOMFizzStaticNode.js';
17 +export {
18 + prerenderToNodeStream,
19 + prerender,
20 + resumeAndPrerender,
21 + resumeAndPrerenderToNodeStream,
22 +} from './ReactDOMFizzStaticNode.js';
packages/react-reconciler/src/__tests__/ReactHooks-test.internal.js
+7 -9
@@ -1589,17 +1589,15 @@ describe('ReactHooks', () => {
1589 useStateHelper,
1590 ];
1591
1592 - if (__EXPERIMENTAL__) {
1593 - const useTransitionHelper = () => React.useTransition();
1594 - const useDeferredValueHelper = () =>
1595 - React.useDeferredValue(0, {timeoutMs: 1000});
1592 + const useTransitionHelper = () => React.useTransition();
1593 + const useDeferredValueHelper = () =>
1594 + React.useDeferredValue(0, {timeoutMs: 1000});
1595
1597 - orderedHooks.push(useTransitionHelper);
1598 - orderedHooks.push(useDeferredValueHelper);
1596 + orderedHooks.push(useTransitionHelper);
1597 + orderedHooks.push(useDeferredValueHelper);
1598
1600 - hooksInList.push(useTransitionHelper);
1601 - hooksInList.push(useDeferredValueHelper);
1602 - }
1599 + hooksInList.push(useTransitionHelper);
1600 + hooksInList.push(useDeferredValueHelper);
1601
1602 const formatHookNamesToMatchErrorMessage = (hookNameA, hookNameB) => {
1603 return `use${hookNameA}${' '.repeat(24 - hookNameA.length)}${
packages/react-server-dom-esm/npm/static.node.js
+1 -3
@@ -7,6 +7,4 @@ if (process.env.NODE_ENV === 'production') {
7 s = require('./cjs/react-server-dom-esm-server.node.development.js');
8 }
9
10 -if (s.unstable_prerenderToNodeStream) {
11 - exports.unstable_prerenderToNodeStream = s.unstable_prerenderToNodeStream;
12 -}
10 +exports.prerenderToNodeStream = s.prerenderToNodeStream;
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 as unstable_prerenderToNodeStream,
12 + 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 {unstable_prerenderToNodeStream} from './src/server/react-flight-dom-server.node';
10 +export {prerenderToNodeStream} from './src/server/react-flight-dom-server.node';
packages/react-server-dom-parcel/npm/static.browser.js
+1 -3
@@ -7,6 +7,4 @@ if (process.env.NODE_ENV === 'production') {
7 s = require('./cjs/react-server-dom-parcel-server.browser.development.js');
8 }
9
10 -if (s.unstable_prerender) {
11 - exports.unstable_prerender = s.unstable_prerender;
12 -}
10 +exports.prerender = s.prerender;
packages/react-server-dom-parcel/npm/static.edge.js
+1 -3
@@ -7,6 +7,4 @@ if (process.env.NODE_ENV === 'production') {
7 s = require('./cjs/react-server-dom-parcel-server.edge.development.js');
8 }
9
10 -if (s.unstable_prerender) {
11 - exports.unstable_prerender = s.unstable_prerender;
12 -}
10 +exports.prerender = s.prerender;
packages/react-server-dom-parcel/npm/static.node.js
+2 -6
@@ -7,9 +7,5 @@ if (process.env.NODE_ENV === 'production') {
7 s = require('./cjs/react-server-dom-parcel-server.node.development.js');
8 }
9
10 -if (s.unstable_prerender) {
11 - exports.unstable_prerender = s.unstable_prerender;
12 -}
13 -if (s.unstable_prerenderToNodeStream) {
14 - exports.unstable_prerenderToNodeStream = s.unstable_prerenderToNodeStream;
15 -}
10 +exports.prerender = s.prerender;
11 +exports.prerenderToNodeStream = s.prerenderToNodeStream;
packages/react-server-dom-parcel/src/server/react-flight-dom-server.browser.js
+1 -1
@@ -9,7 +9,7 @@
9
10 export {
11 renderToReadableStream,
12 - prerender as unstable_prerender,
12 + prerender,
13 decodeReply,
14 decodeAction,
15 decodeFormState,
packages/react-server-dom-parcel/src/server/react-flight-dom-server.edge.js
+1 -1
@@ -9,7 +9,7 @@
9
10 export {
11 renderToReadableStream,
12 - prerender as unstable_prerender,
12 + prerender,
13 decodeReply,
14 decodeReplyFromAsyncIterable,
15 decodeAction,
packages/react-server-dom-parcel/src/server/react-flight-dom-server.node.js
+2 -2
@@ -10,8 +10,8 @@
10 export {
11 renderToReadableStream,
12 renderToPipeableStream,
13 - prerender as unstable_prerender,
14 - prerenderToNodeStream as unstable_prerenderToNodeStream,
13 + prerender,
14 + prerenderToNodeStream,
15 decodeReply,
16 decodeReplyFromBusboy,
17 decodeReplyFromAsyncIterable,
packages/react-server-dom-parcel/static.browser.js
+1 -1
@@ -7,4 +7,4 @@
7 * @flow
8 */
9
10 -export {unstable_prerender} from './src/server/react-flight-dom-server.browser';
10 +export {prerender} from './src/server/react-flight-dom-server.browser';
packages/react-server-dom-parcel/static.edge.js
+1 -1
@@ -7,4 +7,4 @@
7 * @flow
8 */
9
10 -export {unstable_prerender} from './src/server/react-flight-dom-server.edge';
10 +export {prerender} from './src/server/react-flight-dom-server.edge';
packages/react-server-dom-parcel/static.node.js
+2 -2
@@ -8,6 +8,6 @@
8 */
9
10 export {
11 - unstable_prerender,
12 - unstable_prerenderToNodeStream,
11 + prerender,
12 + prerenderToNodeStream,
13 } from './src/server/react-flight-dom-server.node';
packages/react-server-dom-turbopack/npm/static.browser.js
+1 -3
@@ -7,6 +7,4 @@ if (process.env.NODE_ENV === 'production') {
7 s = require('./cjs/react-server-dom-turbopack-server.browser.development.js');
8 }
9
10 -if (s.unstable_prerender) {
11 - exports.unstable_prerender = s.unstable_prerender;
12 -}
10 +exports.prerender = s.prerender;
packages/react-server-dom-turbopack/npm/static.edge.js
+1 -3
@@ -7,6 +7,4 @@ if (process.env.NODE_ENV === 'production') {
7 s = require('./cjs/react-server-dom-turbopack-server.edge.development.js');
8 }
9
10 -if (s.unstable_prerender) {
11 - exports.unstable_prerender = s.unstable_prerender;
12 -}
10 +exports.prerender = s.prerender;
packages/react-server-dom-turbopack/npm/static.node.js
+2 -6
@@ -7,9 +7,5 @@ if (process.env.NODE_ENV === 'production') {
7 s = require('./cjs/react-server-dom-turbopack-server.node.development.js');
8 }
9
10 -if (s.unstable_prerender) {
11 - exports.unstable_prerender = s.unstable_prerender;
12 -}
13 -if (s.unstable_prerenderToNodeStream) {
14 - exports.unstable_prerenderToNodeStream = s.unstable_prerenderToNodeStream;
15 -}
10 +exports.prerender = s.prerender;
11 +exports.prerenderToNodeStream = s.prerenderToNodeStream;
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 as unstable_prerender,
12 + 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 as unstable_prerender,
12 + prerender,
13 decodeReply,
14 decodeReplyFromAsyncIterable,
15 decodeAction,
packages/react-server-dom-turbopack/src/server/react-flight-dom-server.node.js
+2 -2
@@ -10,8 +10,8 @@
10 export {
11 renderToReadableStream,
12 renderToPipeableStream,
13 - prerender as unstable_prerender,
14 - prerenderToNodeStream as unstable_prerenderToNodeStream,
13 + prerender,
14 + prerenderToNodeStream,
15 decodeReply,
16 decodeReplyFromBusboy,
17 decodeReplyFromAsyncIterable,
packages/react-server-dom-turbopack/static.browser.js
+1 -1
@@ -7,4 +7,4 @@
7 * @flow
8 */
9
10 -export {unstable_prerender} from './src/server/react-flight-dom-server.browser';
10 +export {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 {unstable_prerender} from './src/server/react-flight-dom-server.edge';
10 +export {prerender} from './src/server/react-flight-dom-server.edge';
packages/react-server-dom-turbopack/static.node.js
+2 -2
@@ -8,6 +8,6 @@
8 */
9
10 export {
11 - unstable_prerender,
12 - unstable_prerenderToNodeStream,
11 + prerender,
12 + prerenderToNodeStream,
13 } from './src/server/react-flight-dom-server.node';
packages/react-server-dom-webpack/npm/static.browser.js
+1 -3
@@ -7,6 +7,4 @@ if (process.env.NODE_ENV === 'production') {
7 s = require('./cjs/react-server-dom-webpack-server.browser.development.js');
8 }
9
10 -if (s.unstable_prerender) {
11 - exports.unstable_prerender = s.unstable_prerender;
12 -}
10 +exports.prerender = s.prerender;
packages/react-server-dom-webpack/npm/static.edge.js
+1 -3
@@ -7,6 +7,4 @@ if (process.env.NODE_ENV === 'production') {
7 s = require('./cjs/react-server-dom-webpack-server.edge.development.js');
8 }
9
10 -if (s.unstable_prerender) {
11 - exports.unstable_prerender = s.unstable_prerender;
12 -}
10 +exports.prerender = s.prerender;
packages/react-server-dom-webpack/npm/static.node.js
+2 -6
@@ -7,9 +7,5 @@ if (process.env.NODE_ENV === 'production') {
7 s = require('./cjs/react-server-dom-webpack-server.node.development.js');
8 }
9
10 -if (s.unstable_prerender) {
11 - exports.unstable_prerender = s.unstable_prerender;
12 -}
13 -if (s.unstable_prerenderToNodeStream) {
14 - exports.unstable_prerenderToNodeStream = s.unstable_prerenderToNodeStream;
15 -}
10 +exports.prerender = s.prerender;
11 +exports.prerenderToNodeStream = s.prerenderToNodeStream;
packages/react-server-dom-webpack/npm/static.node.unbundled.js
+1 -3
@@ -7,6 +7,4 @@ if (process.env.NODE_ENV === 'production') {
7 s = require('./cjs/react-server-dom-webpack-server.node.unbundled.development.js');
8 }
9
10 -if (s.unstable_prerenderToNodeStream) {
11 - exports.unstable_prerenderToNodeStream = s.unstable_prerenderToNodeStream;
12 -}
10 +exports.prerenderToNodeStream = s.prerenderToNodeStream;
packages/react-server-dom-webpack/src/__tests__/ReactFlightDOM-test.js
+39 -47
@@ -63,11 +63,9 @@ describe('ReactFlightDOM', () => {
63 jest.mock('react-server-dom-webpack/server', () =>
64 require('react-server-dom-webpack/server.node.unbundled'),
65 );
66 - if (__EXPERIMENTAL__) {
67 - jest.mock('react-server-dom-webpack/static', () =>
68 - require('react-server-dom-webpack/static.node.unbundled'),
69 - );
70 - }
66 + jest.mock('react-server-dom-webpack/static', () =>
67 + require('react-server-dom-webpack/static.node.unbundled'),
68 + );
69 const WebpackMock = require('./utils/WebpackMock');
70 clientExports = WebpackMock.clientExports;
71 clientExportsESM = WebpackMock.clientExportsESM;
@@ -75,9 +73,7 @@ describe('ReactFlightDOM', () => {
73 webpackMap = WebpackMock.webpackMap;
74
75 ReactServerDOMServer = require('react-server-dom-webpack/server');
78 - if (__EXPERIMENTAL__) {
79 - ReactServerDOMStaticServer = require('react-server-dom-webpack/static');
80 - }
76 + ReactServerDOMStaticServer = require('react-server-dom-webpack/static');
77
78 // This reset is to load modules for the SSR/Browser scope.
79 jest.unmock('react-server-dom-webpack/server');
@@ -2874,7 +2870,7 @@ describe('ReactFlightDOM', () => {
2870 );
2871 });
2872
2877 - // @gate experimental
2873 + // @gate enableHalt || enablePostpone
2874 it('can prerender', async () => {
2875 let resolveGreeting;
2876 const greetingPromise = new Promise(resolve => {
@@ -2897,11 +2893,10 @@ describe('ReactFlightDOM', () => {
2893 const {pendingResult} = await serverAct(async () => {
2894 // destructure trick to avoid the act scope from awaiting the returned value
2895 return {
2900 - pendingResult:
2901 - ReactServerDOMStaticServer.unstable_prerenderToNodeStream(
2902 - <App />,
2903 - webpackMap,
2904 - ),
2896 + pendingResult: ReactServerDOMStaticServer.prerenderToNodeStream(
2897 + <App />,
2898 + webpackMap,
2899 + ),
2900 };
2901 });
2902
@@ -2964,17 +2959,16 @@ describe('ReactFlightDOM', () => {
2959 const {pendingResult} = await serverAct(async () => {
2960 // destructure trick to avoid the act scope from awaiting the returned value
2961 return {
2967 - pendingResult:
2968 - ReactServerDOMStaticServer.unstable_prerenderToNodeStream(
2969 - <App />,
2970 - webpackMap,
2971 - {
2972 - signal: controller.signal,
2973 - onError(err) {
2974 - errors.push(err);
2975 - },
2962 + pendingResult: ReactServerDOMStaticServer.prerenderToNodeStream(
2963 + <App />,
2964 + webpackMap,
2965 + {
2966 + signal: controller.signal,
2967 + onError(err) {
2968 + errors.push(err);
2969 },
2977 - ),
2970 + },
2971 + ),
2972 };
2973 });
2974
@@ -3022,7 +3016,7 @@ describe('ReactFlightDOM', () => {
3016 });
3017
3018 // This could be a bug. Discovered while making enableAsyncDebugInfo dynamic for www.
3025 - // @gate experimental && (enableHalt || (enableAsyncDebugInfo && __DEV__))
3019 + // @gate enableHalt || enablePostpone || (enableAsyncDebugInfo && __DEV__)
3020 it('will leave async iterables in an incomplete state when halting', async () => {
3021 let resolve;
3022 const wait = new Promise(r => (resolve = r));
@@ -3040,19 +3034,18 @@ describe('ReactFlightDOM', () => {
3034 const controller = new AbortController();
3035 const {pendingResult} = await serverAct(() => {
3036 return {
3043 - pendingResult:
3044 - ReactServerDOMStaticServer.unstable_prerenderToNodeStream(
3045 - {
3046 - multiShotIterable,
3047 - },
3048 - {},
3049 - {
3050 - onError(x) {
3051 - errors.push(x);
3052 - },
3053 - signal: controller.signal,
3037 + pendingResult: ReactServerDOMStaticServer.prerenderToNodeStream(
3038 + {
3039 + multiShotIterable,
3040 + },
3041 + {},
3042 + {
3043 + onError(x) {
3044 + errors.push(x);
3045 },
3055 - ),
3046 + signal: controller.signal,
3047 + },
3048 + ),
3049 };
3050 });
3051
@@ -3124,17 +3117,16 @@ describe('ReactFlightDOM', () => {
3117 const errors = [];
3118 const {pendingResult} = await serverAct(() => {
3119 return {
3127 - pendingResult:
3128 - ReactServerDOMStaticServer.unstable_prerenderToNodeStream(
3129 - <App />,
3130 - {},
3131 - {
3132 - onError(x) {
3133 - errors.push(x);
3134 - },
3135 - signal: controller.signal,
3120 + pendingResult: ReactServerDOMStaticServer.prerenderToNodeStream(
3121 + <App />,
3122 + {},
3123 + {
3124 + onError(x) {
3125 + errors.push(x);
3126 },
3137 - ),
3127 + signal: controller.signal,
3128 + },
3129 + ),
3130 };
3131 });
3132
packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMBrowser-test.js
+11 -13
@@ -69,12 +69,10 @@ describe('ReactFlightDOMBrowser', () => {
69 webpackMap = WebpackMock.webpackMap;
70 webpackServerMap = WebpackMock.webpackServerMap;
71 ReactServerDOMServer = require('react-server-dom-webpack/server');
72 - if (__EXPERIMENTAL__) {
73 - jest.mock('react-server-dom-webpack/static', () =>
74 - require('react-server-dom-webpack/static.browser'),
75 - );
76 - ReactServerDOMStaticServer = require('react-server-dom-webpack/static');
77 - }
72 + jest.mock('react-server-dom-webpack/static', () =>
73 + require('react-server-dom-webpack/static.browser'),
74 + );
75 + ReactServerDOMStaticServer = require('react-server-dom-webpack/static');
76
77 __unmockReact();
78 jest.resetModules();
@@ -2497,7 +2495,7 @@ describe('ReactFlightDOMBrowser', () => {
2495 expect(errors).toEqual([reason]);
2496 });
2497
2500 - // @gate experimental
2498 + // @gate enableHalt || enablePostpone
2499 it('can prerender', async () => {
2500 let resolveGreeting;
2501 const greetingPromise = new Promise(resolve => {
@@ -2520,7 +2518,7 @@ describe('ReactFlightDOMBrowser', () => {
2518 const {pendingResult} = await serverAct(async () => {
2519 // destructure trick to avoid the act scope from awaiting the returned value
2520 return {
2523 - pendingResult: ReactServerDOMStaticServer.unstable_prerender(
2521 + pendingResult: ReactServerDOMStaticServer.prerender(
2522 <App />,
2523 webpackMap,
2524 ),
@@ -2573,7 +2571,7 @@ describe('ReactFlightDOMBrowser', () => {
2571 const {pendingResult} = await serverAct(async () => {
2572 // destructure trick to avoid the act scope from awaiting the returned value
2573 return {
2576 - pendingResult: ReactServerDOMStaticServer.unstable_prerender(
2574 + pendingResult: ReactServerDOMStaticServer.prerender(
2575 <App />,
2576 webpackMap,
2577 {
@@ -3011,9 +3009,9 @@ describe('ReactFlightDOMBrowser', () => {
3009 [
3010 "",
3011 "/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMBrowser-test.js",
3014 - 2937,
3012 + 2935,
3013 27,
3016 - 2931,
3014 + 2929,
3015 34,
3016 ],
3017 [
@@ -3027,9 +3025,9 @@ describe('ReactFlightDOMBrowser', () => {
3025 [
3026 "Object.<anonymous>",
3027 "/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMBrowser-test.js",
3030 - 2931,
3028 + 2929,
3029 18,
3032 - 2918,
3030 + 2916,
3031 89,
3032 ],
3033 ],
packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMEdge-test.js
+24 -26
@@ -90,12 +90,10 @@ describe('ReactFlightDOMEdge', () => {
90
91 ReactServer = require('react');
92 ReactServerDOMServer = require('react-server-dom-webpack/server');
93 - if (__EXPERIMENTAL__) {
94 - jest.mock('react-server-dom-webpack/static', () =>
95 - require('react-server-dom-webpack/static.edge'),
96 - );
97 - ReactServerDOMStaticServer = require('react-server-dom-webpack/static');
98 - }
93 + jest.mock('react-server-dom-webpack/static', () =>
94 + require('react-server-dom-webpack/static.edge'),
95 + );
96 + ReactServerDOMStaticServer = require('react-server-dom-webpack/static');
97
98 jest.resetModules();
99 __unmockReact();
@@ -1372,7 +1370,7 @@ describe('ReactFlightDOMEdge', () => {
1370 ]);
1371 });
1372
1375 - // @gate experimental
1373 + // @gate enableHalt || enablePostpone
1374 it('can prerender', async () => {
1375 let resolveGreeting;
1376 const greetingPromise = new Promise(resolve => {
@@ -1395,7 +1393,7 @@ describe('ReactFlightDOMEdge', () => {
1393 const {pendingResult} = await serverAct(async () => {
1394 // destructure trick to avoid the act scope from awaiting the returned value
1395 return {
1398 - pendingResult: ReactServerDOMStaticServer.unstable_prerender(
1396 + pendingResult: ReactServerDOMStaticServer.prerender(
1397 <App />,
1398 webpackMap,
1399 ),
@@ -1453,7 +1451,7 @@ describe('ReactFlightDOMEdge', () => {
1451 const {pendingResult} = await serverAct(async () => {
1452 // destructure trick to avoid the act scope from awaiting the returned value
1453 return {
1456 - pendingResult: ReactServerDOMStaticServer.unstable_prerender(
1454 + pendingResult: ReactServerDOMStaticServer.prerender(
1455 <App />,
1456 webpackMap,
1457 {
@@ -1514,7 +1512,7 @@ describe('ReactFlightDOMEdge', () => {
1512 const {pendingResult} = await serverAct(async () => {
1513 // destructure trick to avoid the act scope from awaiting the returned value
1514 return {
1517 - pendingResult: ReactServerDOMStaticServer.unstable_prerender(
1515 + pendingResult: ReactServerDOMStaticServer.prerender(
1516 {promise: infinitePromise},
1517 webpackMap,
1518 {
@@ -1554,12 +1552,12 @@ describe('ReactFlightDOMEdge', () => {
1552 expect(error.message).toBe('Connection closed.');
1553 });
1554
1557 - // @gate experimental
1558 - it('should be able to handle a rejected promise in unstable_prerender', async () => {
1555 + // @gate enableHalt || enablePostpone
1556 + it('should be able to handle a rejected promise in prerender', async () => {
1557 const expectedError = new Error('Bam!');
1558 const errors = [];
1559
1562 - const {prelude} = await ReactServerDOMStaticServer.unstable_prerender(
1560 + const {prelude} = await ReactServerDOMStaticServer.prerender(
1561 Promise.reject(expectedError),
1562 webpackMap,
1563 {
@@ -1593,12 +1591,12 @@ describe('ReactFlightDOMEdge', () => {
1591 expect(error.message).toBe(expectedMessage);
1592 });
1593
1596 - // @gate experimental
1597 - it('should be able to handle an erroring async iterable in unstable_prerender', async () => {
1594 + // @gate enableHalt || enablePostpone
1595 + it('should be able to handle an erroring async iterable in prerender', async () => {
1596 const expectedError = new Error('Bam!');
1597 const errors = [];
1598
1601 - const {prelude} = await ReactServerDOMStaticServer.unstable_prerender(
1599 + const {prelude} = await ReactServerDOMStaticServer.prerender(
1600 {
1601 async *[Symbol.asyncIterator]() {
1602 await serverAct(() => {
@@ -1640,12 +1638,12 @@ describe('ReactFlightDOMEdge', () => {
1638 expect(error.message).toBe(expectedMessage);
1639 });
1640
1643 - // @gate experimental
1644 - it('should be able to handle an erroring readable stream in unstable_prerender', async () => {
1641 + // @gate enableHalt || enablePostpone
1642 + it('should be able to handle an erroring readable stream in prerender', async () => {
1643 const expectedError = new Error('Bam!');
1644 const errors = [];
1645
1648 - const {prelude} = await ReactServerDOMStaticServer.unstable_prerender(
1646 + const {prelude} = await ReactServerDOMStaticServer.prerender(
1647 new ReadableStream({
1648 async start(controller) {
1649 await serverAct(() => {
@@ -1688,11 +1686,11 @@ describe('ReactFlightDOMEdge', () => {
1686 expect(error.message).toBe(expectedMessage);
1687 });
1688
1691 - // @gate experimental
1689 + // @gate enableHalt || enablePostpone
1690 it('can prerender an async iterable', async () => {
1691 const errors = [];
1692
1695 - const {prelude} = await ReactServerDOMStaticServer.unstable_prerender(
1693 + const {prelude} = await ReactServerDOMStaticServer.prerender(
1694 {
1695 async *[Symbol.asyncIterator]() {
1696 yield 'hello';
@@ -1732,11 +1730,11 @@ describe('ReactFlightDOMEdge', () => {
1730 expect(text).toBe('hello world');
1731 });
1732
1735 - // @gate experimental
1733 + // @gate enableHalt || enablePostpone
1734 it('can prerender a readable stream', async () => {
1735 const errors = [];
1736
1739 - const {prelude} = await ReactServerDOMStaticServer.unstable_prerender(
1737 + const {prelude} = await ReactServerDOMStaticServer.prerender(
1738 new ReadableStream({
1739 start(controller) {
1740 controller.enqueue('hello world');
@@ -1766,7 +1764,7 @@ describe('ReactFlightDOMEdge', () => {
1764 expect(result).toBe('hello world');
1765 });
1766
1769 - // @gate experimental
1767 + // @gate enableHalt || enablePostpone
1768 it('does not return a prerender prelude early when an error is emitted and there are still pending tasks', async () => {
1769 let rejectPromise;
1770 const rejectingPromise = new Promise(
@@ -1775,7 +1773,7 @@ describe('ReactFlightDOMEdge', () => {
1773 const expectedError = new Error('Boom!');
1774 const errors = [];
1775
1778 - const {prelude} = await ReactServerDOMStaticServer.unstable_prerender(
1776 + const {prelude} = await ReactServerDOMStaticServer.prerender(
1777 [
1778 rejectingPromise,
1779 {
@@ -1862,7 +1860,7 @@ describe('ReactFlightDOMEdge', () => {
1860
1861 const serverAbortController = new AbortController();
1862 const errors = [];
1865 - const prerenderResult = ReactServerDOMStaticServer.unstable_prerender(
1863 + const prerenderResult = ReactServerDOMStaticServer.prerender(
1864 ReactServer.createElement(App, null),
1865 webpackMap,
1866 {
packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMNode-test.js
+49 -38
@@ -49,12 +49,10 @@ describe('ReactFlightDOMNode', () => {
49 );
50 ReactServer = require('react');
51 ReactServerDOMServer = require('react-server-dom-webpack/server');
52 - if (__EXPERIMENTAL__) {
53 - jest.mock('react-server-dom-webpack/static', () =>
54 - require('react-server-dom-webpack/static.node'),
55 - );
56 - ReactServerDOMStaticServer = require('react-server-dom-webpack/static');
57 - }
52 + jest.mock('react-server-dom-webpack/static', () =>
53 + require('react-server-dom-webpack/static.node'),
54 + );
55 + ReactServerDOMStaticServer = require('react-server-dom-webpack/static');
56
57 const WebpackMock = require('./utils/WebpackMock');
58 clientExports = WebpackMock.clientExports;
@@ -489,7 +487,7 @@ describe('ReactFlightDOMNode', () => {
487 expect(errors).toEqual([reason]);
488 });
489
492 - // @gate experimental
490 + // @gate enableHalt || enablePostpone
491 it('can prerender', async () => {
492 let resolveGreeting;
493 const greetingPromise = new Promise(resolve => {
@@ -512,11 +510,10 @@ describe('ReactFlightDOMNode', () => {
510 const {pendingResult} = await serverAct(async () => {
511 // destructure trick to avoid the act scope from awaiting the returned value
512 return {
515 - pendingResult:
516 - ReactServerDOMStaticServer.unstable_prerenderToNodeStream(
517 - <App />,
518 - webpackMap,
519 - ),
513 + pendingResult: ReactServerDOMStaticServer.prerenderToNodeStream(
514 + <App />,
515 + webpackMap,
516 + ),
517 };
518 });
519
@@ -571,17 +568,16 @@ describe('ReactFlightDOMNode', () => {
568 const {pendingResult} = await serverAct(async () => {
569 // destructure trick to avoid the act scope from awaiting the returned value
570 return {
574 - pendingResult:
575 - ReactServerDOMStaticServer.unstable_prerenderToNodeStream(
576 - <App />,
577 - webpackMap,
578 - {
579 - signal: controller.signal,
580 - onError(err) {
581 - errors.push(err);
582 - },
571 + pendingResult: ReactServerDOMStaticServer.prerenderToNodeStream(
572 + <App />,
573 + webpackMap,
574 + {
575 + signal: controller.signal,
576 + onError(err) {
577 + errors.push(err);
578 },
584 - ),
579 + },
580 + ),
581 };
582 });
583
@@ -618,7 +614,7 @@ describe('ReactFlightDOMNode', () => {
614 expect(result).toContain('loading...');
615 });
616
621 - // @gate enableHalt && enableAsyncDebugInfo
617 + // @gate enableHalt
618 it('includes source locations in component and owner stacks for halted components', async () => {
619 async function Component() {
620 await new Promise(() => {});
@@ -646,7 +642,7 @@ describe('ReactFlightDOMNode', () => {
642 const {pendingResult} = await serverAct(async () => {
643 // destructure trick to avoid the act scope from awaiting the returned value
644 return {
649 - pendingResult: ReactServerDOMStaticServer.unstable_prerender(
645 + pendingResult: ReactServerDOMStaticServer.prerender(
646 ReactServer.createElement(App, null),
647 webpackMap,
648 {
@@ -722,7 +718,9 @@ describe('ReactFlightDOMNode', () => {
718
719 if (__DEV__) {
720 expect(normalizeCodeLocInfo(componentStack)).toBe(
725 - '\n in Component (at **)\n' +
721 + '\n' +
722 + ' in Component' +
723 + (gate(flags => flags.enableAsyncDebugInfo) ? ' (at **)\n' : '\n') +
724 ' in Suspense\n' +
725 ' in body\n' +
726 ' in html\n' +
@@ -739,15 +737,19 @@ describe('ReactFlightDOMNode', () => {
737 }
738
739 if (__DEV__) {
742 - expect(normalizeCodeLocInfo(ownerStack)).toBe(
743 - '\n in Component (at **)\n in App (at **)',
744 - );
740 + if (gate(flags => flags.enableAsyncDebugInfo)) {
741 + expect(normalizeCodeLocInfo(ownerStack)).toBe(
742 + '\n in Component (at **)\n in App (at **)',
743 + );
744 + } else {
745 + expect(normalizeCodeLocInfo(ownerStack)).toBe('\n in App (at **)');
746 + }
747 } else {
748 expect(ownerStack).toBeNull();
749 }
750 });
751
750 - // @gate enableHalt && enableAsyncDebugInfo
752 + // @gate enableHalt
753 it('includes deeper location for aborted stacks', async () => {
754 async function getData() {
755 const signal = ReactServer.cacheSignal();
@@ -792,7 +794,7 @@ describe('ReactFlightDOMNode', () => {
794 const {pendingResult} = await serverAct(async () => {
795 // destructure trick to avoid the act scope from awaiting the returned value
796 return {
795 - pendingResult: ReactServerDOMStaticServer.unstable_prerender(
797 + pendingResult: ReactServerDOMStaticServer.prerender(
798 ReactServer.createElement(App, null),
799 webpackMap,
800 {
@@ -869,7 +871,9 @@ describe('ReactFlightDOMNode', () => {
871
872 if (__DEV__) {
873 expect(normalizeCodeLocInfo(componentStack)).toBe(
872 - '\n in Component (at **)\n' +
874 + '\n' +
875 + ' in Component' +
876 + (gate(flags => flags.enableAsyncDebugInfo) ? ' (at **)\n' : '\n') +
877 ' in Suspense\n' +
878 ' in body\n' +
879 ' in html\n' +
@@ -886,17 +890,24 @@ describe('ReactFlightDOMNode', () => {
890 }
891
892 if (__DEV__) {
889 - expect(normalizeCodeLocInfo(ownerStack)).toBe(
890 - '\n in getData (at **)' +
891 - '\n in Component (at **)' +
892 - '\n in App (at **)',
893 - );
893 + if (gate(flags => flags.enableAsyncDebugInfo)) {
894 + expect(normalizeCodeLocInfo(ownerStack)).toBe(
895 + '' +
896 + '\n in getData (at **)' +
897 + '\n in Component (at **)' +
898 + '\n in App (at **)',
899 + );
900 + } else {
901 + expect(normalizeCodeLocInfo(ownerStack)).toBe(
902 + '' + '\n in App (at **)',
903 + );
904 + }
905 } else {
906 expect(ownerStack).toBeNull();
907 }
908 });
909
899 - // @gate experimental
910 + // @gate enableHalt || enablePostpone
911 // @gate enableHalt
912 it('can handle an empty prelude when prerendering', async () => {
913 function App() {
@@ -909,7 +920,7 @@ describe('ReactFlightDOMNode', () => {
920 const {pendingResult} = await serverAct(async () => {
921 // destructure trick to avoid the act scope from awaiting the returned value
922 return {
912 - pendingResult: ReactServerDOMStaticServer.unstable_prerender(
923 + pendingResult: ReactServerDOMStaticServer.prerender(
924 ReactServer.createElement(App, null),
925 webpackMap,
926 {
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 as unstable_prerender,
12 + 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 as unstable_prerender,
12 + prerender,
13 decodeReply,
14 decodeReplyFromAsyncIterable,
15 decodeAction,
packages/react-server-dom-webpack/src/server/react-flight-dom-server.node.js
+2 -2
@@ -10,8 +10,8 @@
10 export {
11 renderToReadableStream,
12 renderToPipeableStream,
13 - prerender as unstable_prerender,
14 - prerenderToNodeStream as unstable_prerenderToNodeStream,
13 + prerender,
14 + prerenderToNodeStream,
15 decodeReply,
16 decodeReplyFromBusboy,
17 decodeReplyFromAsyncIterable,
packages/react-server-dom-webpack/src/server/react-flight-dom-server.node.unbundled.js
+2 -2
@@ -10,8 +10,8 @@
10 export {
11 renderToReadableStream,
12 renderToPipeableStream,
13 - prerender as unstable_prerender,
14 - prerenderToNodeStream as unstable_prerenderToNodeStream,
13 + prerender,
14 + prerenderToNodeStream,
15 decodeReply,
16 decodeReplyFromBusboy,
17 decodeReplyFromAsyncIterable,
packages/react-server-dom-webpack/static.browser.js
+1 -1
@@ -7,4 +7,4 @@
7 * @flow
8 */
9
10 -export {unstable_prerender} from './src/server/react-flight-dom-server.browser';
10 +export {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 {unstable_prerender} from './src/server/react-flight-dom-server.edge';
10 +export {prerender} from './src/server/react-flight-dom-server.edge';
packages/react-server-dom-webpack/static.node.js
+2 -2
@@ -8,6 +8,6 @@
8 */
9
10 export {
11 - unstable_prerender,
12 - unstable_prerenderToNodeStream,
11 + prerender,
12 + prerenderToNodeStream,
13 } from './src/server/react-flight-dom-server.node';
packages/react-server-dom-webpack/static.node.unbundled.js
+2 -2
@@ -8,6 +8,6 @@
8 */
9
10 export {
11 - unstable_prerender,
12 - unstable_prerenderToNodeStream,
11 + prerender,
12 + prerenderToNodeStream,
13 } from './src/server/react-flight-dom-server.node.unbundled';
packages/shared/ReactFeatureFlags.js
+1 -1
@@ -82,7 +82,7 @@ export const enableTaint = __EXPERIMENTAL__;
82
83 export const enablePostpone = __EXPERIMENTAL__;
84
85 -export const enableHalt = __EXPERIMENTAL__;
85 +export const enableHalt: boolean = true;
86
87 export const enableViewTransition = __EXPERIMENTAL__;
88
packages/shared/forks/ReactFeatureFlags.native-fb.js
+1 -1
@@ -44,7 +44,7 @@ export const enableCPUSuspense: boolean = true;
44 export const enableCreateEventHandleAPI: boolean = false;
45 export const enableMoveBefore: boolean = true;
46 export const enableFizzExternalRuntime: boolean = true;
47 -export const enableHalt: boolean = false;
47 +export const enableHalt: boolean = true;
48 export const enableInfiniteRenderLoopDetection: boolean = false;
49 export const enableLegacyCache: boolean = false;
50 export const enableLegacyFBSupport: boolean = false;
packages/shared/forks/ReactFeatureFlags.native-oss.js
+1 -1
@@ -30,7 +30,7 @@ export const enableCPUSuspense: boolean = false;
30 export const enableCreateEventHandleAPI: boolean = false;
31 export const enableMoveBefore: boolean = true;
32 export const enableFizzExternalRuntime: boolean = true;
33 -export const enableHalt: boolean = false;
33 +export const enableHalt: boolean = true;
34 export const enableHiddenSubtreeInsertionEffectCleanup: boolean = false;
35 export const enableInfiniteRenderLoopDetection: boolean = false;
36 export const enableLegacyCache: boolean = false;
packages/shared/forks/ReactFeatureFlags.test-renderer.js
+1 -1
@@ -21,7 +21,7 @@ export const enableLegacyCache: boolean = __EXPERIMENTAL__;
21 export const enableAsyncIterableChildren: boolean = false;
22 export const enableTaint: boolean = true;
23 export const enablePostpone: boolean = false;
24 -export const enableHalt: boolean = false;
24 +export const enableHalt: boolean = true;
25 export const disableCommentsAsDOMContainers: boolean = true;
26 export const disableInputAttributeSyncing: boolean = false;
27 export const enableScopeAPI: boolean = false;
packages/shared/forks/ReactFeatureFlags.test-renderer.native-fb.js
+1 -1
@@ -25,7 +25,7 @@ export const enableCPUSuspense = true;
25 export const enableCreateEventHandleAPI = false;
26 export const enableMoveBefore = false;
27 export const enableFizzExternalRuntime = true;
28 -export const enableHalt = false;
28 +export const enableHalt = true;
29 export const enableInfiniteRenderLoopDetection = false;
30 export const enableHiddenSubtreeInsertionEffectCleanup = true;
31 export const enableLegacyCache = false;
packages/shared/forks/ReactFeatureFlags.test-renderer.www.js
+1 -1
@@ -21,7 +21,7 @@ export const enableLegacyCache: boolean = true;
21 export const enableAsyncIterableChildren: boolean = false;
22 export const enableTaint: boolean = true;
23 export const enablePostpone: boolean = false;
24 -export const enableHalt: boolean = false;
24 +export const enableHalt: boolean = true;
25 export const disableCommentsAsDOMContainers: boolean = true;
26 export const disableInputAttributeSyncing: boolean = false;
27 export const enableScopeAPI: boolean = true;
packages/shared/forks/ReactFeatureFlags.www.js
+1 -1
@@ -73,7 +73,7 @@ export const enableTaint: boolean = false;
73
74 export const enablePostpone: boolean = false;
75
76 -export const enableHalt: boolean = false;
76 +export const enableHalt: boolean = true;
77
78 // TODO: www currently relies on this feature. It's disabled in open source.
79 // Need to remove it.