diff --git a/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOM-test.js b/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOM-test.js
index 80562624eb173..6dc004829b75f 100644
--- a/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOM-test.js
+++ b/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOM-test.js
@@ -62,11 +62,9 @@ describe('ReactFlightDOM', () => {
jest.mock('react-server-dom-webpack/server', () =>
require('react-server-dom-webpack/server.node.unbundled'),
);
- if (__EXPERIMENTAL__) {
- jest.mock('react-server-dom-webpack/static', () =>
- require('react-server-dom-webpack/static.node.unbundled'),
- );
- }
+ jest.mock('react-server-dom-webpack/static', () =>
+ require('react-server-dom-webpack/static.node.unbundled'),
+ );
const WebpackMock = require('./utils/WebpackMock');
clientExports = WebpackMock.clientExports;
clientExportsESM = WebpackMock.clientExportsESM;
@@ -74,9 +72,7 @@ describe('ReactFlightDOM', () => {
webpackMap = WebpackMock.webpackMap;
ReactServerDOMServer = require('react-server-dom-webpack/server');
- if (__EXPERIMENTAL__) {
- ReactServerDOMStaticServer = require('react-server-dom-webpack/static');
- }
+ ReactServerDOMStaticServer = require('react-server-dom-webpack/static');
// This reset is to load modules for the SSR/Browser scope.
jest.unmock('react-server-dom-webpack/server');
@@ -2771,7 +2767,6 @@ describe('ReactFlightDOM', () => {
);
});
- // @gate experimental
it('can prerender', async () => {
let resolveGreeting;
const greetingPromise = new Promise(resolve => {
@@ -2834,7 +2829,6 @@ describe('ReactFlightDOM', () => {
expect(getMeaningfulChildren(container)).toEqual(
hello world
);
});
- // @gate enableHalt
it('does not propagate abort reasons errors when aborting a prerender', async () => {
let resolveGreeting;
const greetingPromise = new Promise(resolve => {
@@ -2916,7 +2910,6 @@ describe('ReactFlightDOM', () => {
expect(getMeaningfulChildren(container)).toEqual(loading...
);
});
- // @gate enableHalt
it('will leave async iterables in an incomplete state when halting', async () => {
let resolve;
const wait = new Promise(r => (resolve = r));
@@ -2976,7 +2969,6 @@ describe('ReactFlightDOM', () => {
expect(await race).toBe('timeout');
});
- // @gate enableHalt
it('will halt unfinished chunks inside Suspense when aborting a prerender', async () => {
const controller = new AbortController();
function ComponentThatAborts() {
diff --git a/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMBrowser-test.js b/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMBrowser-test.js
index 4313c379b70bd..c85189817b2fd 100644
--- a/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMBrowser-test.js
+++ b/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMBrowser-test.js
@@ -63,12 +63,10 @@ describe('ReactFlightDOMBrowser', () => {
webpackMap = WebpackMock.webpackMap;
webpackServerMap = WebpackMock.webpackServerMap;
ReactServerDOMServer = require('react-server-dom-webpack/server');
- if (__EXPERIMENTAL__) {
- jest.mock('react-server-dom-webpack/static', () =>
- require('react-server-dom-webpack/static.browser'),
- );
- ReactServerDOMStaticServer = require('react-server-dom-webpack/static');
- }
+ jest.mock('react-server-dom-webpack/static', () =>
+ require('react-server-dom-webpack/static.browser'),
+ );
+ ReactServerDOMStaticServer = require('react-server-dom-webpack/static');
__unmockReact();
jest.resetModules();
@@ -2465,7 +2463,6 @@ describe('ReactFlightDOMBrowser', () => {
expect(errors).toEqual([reason]);
});
- // @gate experimental
it('can prerender', async () => {
let resolveGreeting;
const greetingPromise = new Promise(resolve => {
@@ -2514,7 +2511,6 @@ describe('ReactFlightDOMBrowser', () => {
expect(container.innerHTML).toBe('hello world
');
});
- // @gate enableHalt
it('does not propagate abort reasons errors when aborting a prerender', async () => {
let resolveGreeting;
const greetingPromise = new Promise(resolve => {
diff --git a/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMEdge-test.js b/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMEdge-test.js
index 5194913d2cb32..39dc351a5b1a1 100644
--- a/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMEdge-test.js
+++ b/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMEdge-test.js
@@ -87,12 +87,10 @@ describe('ReactFlightDOMEdge', () => {
ReactServer = require('react');
ReactServerDOMServer = require('react-server-dom-webpack/server');
- if (__EXPERIMENTAL__) {
- jest.mock('react-server-dom-webpack/static', () =>
- require('react-server-dom-webpack/static.edge'),
- );
- ReactServerDOMStaticServer = require('react-server-dom-webpack/static');
- }
+ jest.mock('react-server-dom-webpack/static', () =>
+ require('react-server-dom-webpack/static.edge'),
+ );
+ ReactServerDOMStaticServer = require('react-server-dom-webpack/static');
jest.resetModules();
__unmockReact();
@@ -1291,7 +1289,6 @@ describe('ReactFlightDOMEdge', () => {
]);
});
- // @gate experimental
it('can prerender', async () => {
let resolveGreeting;
const greetingPromise = new Promise(resolve => {
@@ -1345,7 +1342,6 @@ describe('ReactFlightDOMEdge', () => {
expect(result).toBe('hello world
');
});
- // @gate enableHalt
it('does not propagate abort reasons errors when aborting a prerender', async () => {
let resolveGreeting;
const greetingPromise = new Promise(resolve => {
@@ -1423,7 +1419,6 @@ describe('ReactFlightDOMEdge', () => {
expect(div.textContent).toBe('loading...');
});
- // @gate enableHalt
it('should abort parsing an incomplete prerender payload', async () => {
const infinitePromise = new Promise(() => {});
const controller = new AbortController();
@@ -1471,7 +1466,6 @@ describe('ReactFlightDOMEdge', () => {
expect(error.message).toBe('Connection closed.');
});
- // @gate experimental
it('should be able to handle a rejected promise in unstable_prerender', async () => {
const expectedError = new Error('Bam!');
const errors = [];
@@ -1510,7 +1504,6 @@ describe('ReactFlightDOMEdge', () => {
expect(error.message).toBe(expectedMessage);
});
- // @gate experimental
it('should be able to handle an erroring async iterable in unstable_prerender', async () => {
const expectedError = new Error('Bam!');
const errors = [];
@@ -1557,7 +1550,6 @@ describe('ReactFlightDOMEdge', () => {
expect(error.message).toBe(expectedMessage);
});
- // @gate experimental
it('should be able to handle an erroring readable stream in unstable_prerender', async () => {
const expectedError = new Error('Bam!');
const errors = [];
@@ -1605,7 +1597,6 @@ describe('ReactFlightDOMEdge', () => {
expect(error.message).toBe(expectedMessage);
});
- // @gate experimental
it('can prerender an async iterable', async () => {
const errors = [];
@@ -1649,7 +1640,6 @@ describe('ReactFlightDOMEdge', () => {
expect(text).toBe('hello world');
});
- // @gate experimental
it('can prerender a readable stream', async () => {
const errors = [];
@@ -1683,7 +1673,6 @@ describe('ReactFlightDOMEdge', () => {
expect(result).toBe('hello world');
});
- // @gate experimental
it('does not return a prerender prelude early when an error is emitted and there are still pending tasks', async () => {
let rejectPromise;
const rejectingPromise = new Promise(
diff --git a/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMNode-test.js b/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMNode-test.js
index 43e36348327ff..e599a5c6f90b3 100644
--- a/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMNode-test.js
+++ b/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMNode-test.js
@@ -49,12 +49,10 @@ describe('ReactFlightDOMNode', () => {
);
ReactServer = require('react');
ReactServerDOMServer = require('react-server-dom-webpack/server');
- if (__EXPERIMENTAL__) {
- jest.mock('react-server-dom-webpack/static', () =>
- require('react-server-dom-webpack/static.node'),
- );
- ReactServerDOMStaticServer = require('react-server-dom-webpack/static');
- }
+ jest.mock('react-server-dom-webpack/static', () =>
+ require('react-server-dom-webpack/static.node'),
+ );
+ ReactServerDOMStaticServer = require('react-server-dom-webpack/static');
const WebpackMock = require('./utils/WebpackMock');
clientExports = WebpackMock.clientExports;
@@ -385,7 +383,6 @@ describe('ReactFlightDOMNode', () => {
expect(errors).toEqual([reason]);
});
- // @gate experimental
it('can prerender', async () => {
let resolveGreeting;
const greetingPromise = new Promise(resolve => {
@@ -440,7 +437,6 @@ describe('ReactFlightDOMNode', () => {
expect(result).toBe('hello world
');
});
- // @gate enableHalt
it('does not propagate abort reasons errors when aborting a prerender', async () => {
let resolveGreeting;
const greetingPromise = new Promise(resolve => {
diff --git a/packages/react-server/src/ReactFlightServer.js b/packages/react-server/src/ReactFlightServer.js
index aefcf5f6ee809..9da5512130f12 100644
--- a/packages/react-server/src/ReactFlightServer.js
+++ b/packages/react-server/src/ReactFlightServer.js
@@ -15,7 +15,6 @@ import type {TemporaryReferenceSet} from './ReactFlightServerTemporaryReferences
import {
enablePostpone,
- enableHalt,
enableTaint,
enableProfilerTimer,
enableComponentPerformanceTrack,
@@ -656,7 +655,7 @@ function serializeThenable(
// We can no longer accept any resolved values
request.abortableTasks.delete(newTask);
newTask.status = ABORTED;
- if (enableHalt && request.type === PRERENDER) {
+ if (request.type === PRERENDER) {
request.pendingChunks--;
} else {
const errorId: number = (request.fatalError: any);
@@ -804,7 +803,7 @@ function serializeReadableStream(
}
aborted = true;
request.abortListeners.delete(abortStream);
- if (enableHalt && request.type === PRERENDER) {
+ if (request.type === PRERENDER) {
request.pendingChunks--;
} else {
erroredTask(request, streamTask, reason);
@@ -930,7 +929,7 @@ function serializeAsyncIterable(
}
aborted = true;
request.abortListeners.delete(abortIterable);
- if (enableHalt && request.type === PRERENDER) {
+ if (request.type === PRERENDER) {
request.pendingChunks--;
} else {
erroredTask(request, streamTask, reason);
@@ -2263,7 +2262,7 @@ function serializeBlob(request: Request, blob: Blob): string {
}
aborted = true;
request.abortListeners.delete(abortBlob);
- if (enableHalt && request.type === PRERENDER) {
+ if (request.type === PRERENDER) {
request.pendingChunks--;
} else {
erroredTask(request, newTask, reason);
@@ -2318,7 +2317,7 @@ function renderModel(
if (request.status === ABORTING) {
task.status = ABORTED;
- if (enableHalt && request.type === PRERENDER) {
+ if (request.type === PRERENDER) {
// This will create a new task and refer to it in this slot
// the new task won't be retried because we are aborting
return outlineHaltedTask(request, task, wasReactNode);
@@ -4048,7 +4047,7 @@ function retryTask(request: Request, task: Task): void {
if (request.status === ABORTING) {
request.abortableTasks.delete(task);
task.status = ABORTED;
- if (enableHalt && request.type === PRERENDER) {
+ if (request.type === PRERENDER) {
// When aborting a prerener with halt semantics we don't emit
// anything into the slot for a task that aborts, it remains unresolved
request.pendingChunks--;
@@ -4325,7 +4324,7 @@ export function abort(request: Request, reason: mixed): void {
}
const abortableTasks = request.abortableTasks;
if (abortableTasks.size > 0) {
- if (enableHalt && request.type === PRERENDER) {
+ if (request.type === PRERENDER) {
// When prerendering with halt semantics we simply halt the task
// and leave the reference unfulfilled.
abortableTasks.forEach(task => haltTask(task, request));