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.