diff --git a/packages/react-dom/src/__tests__/ReactDOMFizzServer-test.js b/packages/react-dom/src/__tests__/ReactDOMFizzServer-test.js
index fd13b9cb505d..26ba6cfe46d6 100644
--- a/packages/react-dom/src/__tests__/ReactDOMFizzServer-test.js
+++ b/packages/react-dom/src/__tests__/ReactDOMFizzServer-test.js
@@ -6710,7 +6710,6 @@ describe('ReactDOMFizzServer', () => {
},
);
- // @gate enableHalt
it('can resume a prerender that was aborted', async () => {
const promise = new Promise(r => {});
diff --git a/packages/react-dom/src/__tests__/ReactDOMFizzStatic-test.js b/packages/react-dom/src/__tests__/ReactDOMFizzStatic-test.js
index 4542ca618ba3..e8add024998e 100644
--- a/packages/react-dom/src/__tests__/ReactDOMFizzStatic-test.js
+++ b/packages/react-dom/src/__tests__/ReactDOMFizzStatic-test.js
@@ -230,9 +230,7 @@ describe('ReactDOMFizzStatic', () => {
const result = await promise;
- expect(result.postponed).toBe(
- gate(flags => flags.enableHalt) ? null : undefined,
- );
+ expect(result.postponed).toBe(null);
await act(async () => {
result.prelude.pipe(writable);
@@ -362,7 +360,6 @@ describe('ReactDOMFizzStatic', () => {
);
});
- // @gate enableHalt
it('will halt a prerender when aborting with an error during a render', async () => {
const controller = new AbortController();
function App() {
@@ -384,7 +381,6 @@ describe('ReactDOMFizzStatic', () => {
expect(getVisibleChildren(container)).toEqual(undefined);
});
- // @gate enableHalt
it('will halt a prerender when aborting with an error in a microtask', async () => {
const errors = [];
diff --git a/packages/react-dom/src/__tests__/ReactDOMFizzStaticBrowser-test.js b/packages/react-dom/src/__tests__/ReactDOMFizzStaticBrowser-test.js
index 334bb2ddce76..30dce64f1049 100644
--- a/packages/react-dom/src/__tests__/ReactDOMFizzStaticBrowser-test.js
+++ b/packages/react-dom/src/__tests__/ReactDOMFizzStaticBrowser-test.js
@@ -309,40 +309,6 @@ describe('ReactDOMFizzStaticBrowser', () => {
expect(errors).toEqual(['This operation was aborted']);
});
- // @gate !enableHalt
- it('should reject if aborting before the shell is complete and enableHalt is disabled', async () => {
- const errors = [];
- const controller = new AbortController();
- const promise = serverAct(() =>
- ReactDOMFizzStatic.prerender(
-
-
-
,
- {
- signal: controller.signal,
- onError(x) {
- errors.push(x.message);
- },
- },
- ),
- );
-
- await jest.runAllTimers();
-
- const theReason = new Error('aborted for reasons');
- controller.abort(theReason);
-
- let caughtError = null;
- try {
- await promise;
- } catch (error) {
- caughtError = error;
- }
- expect(caughtError).toBe(theReason);
- expect(errors).toEqual(['aborted for reasons']);
- });
-
- // @gate enableHalt
it('should resolve an empty prelude if aborting before the shell is complete', async () => {
const errors = [];
const controller = new AbortController();
@@ -403,59 +369,12 @@ describe('ReactDOMFizzStaticBrowser', () => {
),
);
- if (gate(flags => flags.enableHalt)) {
- const {prelude} = await streamPromise;
- const content = await readContent(prelude);
- expect(errors).toEqual(['This operation was aborted']);
- expect(content).toBe('');
- } else {
- let caughtError = null;
- try {
- await streamPromise;
- } catch (error) {
- caughtError = error;
- }
- expect(caughtError.message).toBe('This operation was aborted');
- expect(errors).toEqual(['This operation was aborted']);
- }
- });
-
- // @gate !enableHalt
- it('should reject if passing an already aborted signal and enableHalt is disabled', async () => {
- const errors = [];
- const controller = new AbortController();
- const theReason = new Error('aborted for reasons');
- controller.abort(theReason);
-
- const promise = serverAct(() =>
- ReactDOMFizzStatic.prerender(
-
- Loading
}>
-
-
- ,
- {
- signal: controller.signal,
- onError(x) {
- errors.push(x.message);
- },
- },
- ),
- );
-
- // Technically we could still continue rendering the shell but currently the
- // semantics mean that we also abort any pending CPU work.
- let caughtError = null;
- try {
- await promise;
- } catch (error) {
- caughtError = error;
- }
- expect(caughtError).toBe(theReason);
- expect(errors).toEqual(['aborted for reasons']);
+ const {prelude} = await streamPromise;
+ const content = await readContent(prelude);
+ expect(errors).toEqual(['This operation was aborted']);
+ expect(content).toBe('');
});
- // @gate enableHalt
it('should resolve an empty prelude if passing an already aborted signal', async () => {
const errors = [];
const controller = new AbortController();
@@ -593,16 +512,13 @@ describe('ReactDOMFizzStaticBrowser', () => {
onError,
}),
);
- expect(prerendered.postponed).toBe(
- gate(flags => flags.enableHalt) ? null : undefined,
- );
+ expect(prerendered.postponed).toBe(null);
expect(errors).toEqual(['bad onHeaders']);
await readIntoContainer(prerendered.prelude);
expect(getVisibleChildren(container)).toEqual(hello
);
});
- // @gate enableHalt
it('can resume render of a prerender', async () => {
const errors = [];
@@ -689,7 +605,6 @@ describe('ReactDOMFizzStaticBrowser', () => {
expect(getVisibleChildren(container)).toEqual(Hello
);
});
- // @gate enableHalt
it('can prerender a preamble', async () => {
const errors = [];
@@ -850,7 +765,6 @@ describe('ReactDOMFizzStaticBrowser', () => {
expect(errors).toEqual(['boom']);
});
- // @gate enableHalt
it('will render fallback Document when erroring a boundary above the body', async () => {
let isPrerendering = true;
const promise = new Promise(() => {});
@@ -927,7 +841,6 @@ describe('ReactDOMFizzStaticBrowser', () => {
);
});
- // @gate enableHalt
it('can omit a preamble with an empty shell if no preamble is ready when prerendering finishes', async () => {
const errors = [];
@@ -1027,7 +940,7 @@ describe('ReactDOMFizzStaticBrowser', () => {
);
});
- // @gate enableHalt && enableSuspenseList
+ // @gate enableSuspenseList
it('can resume a partially prerendered SuspenseList', async () => {
const errors = [];
@@ -1112,7 +1025,7 @@ describe('ReactDOMFizzStaticBrowser', () => {
);
});
- // @gate enableHalt && enableOptimisticKey
+ // @gate enableOptimisticKey
it('can resume an optimistic keyed slot', async () => {
const errors = [];
diff --git a/packages/react-dom/src/__tests__/ReactDOMFizzStaticNode-test.js b/packages/react-dom/src/__tests__/ReactDOMFizzStaticNode-test.js
index cf98658f9322..83bc6cb5d306 100644
--- a/packages/react-dom/src/__tests__/ReactDOMFizzStaticNode-test.js
+++ b/packages/react-dom/src/__tests__/ReactDOMFizzStaticNode-test.js
@@ -56,7 +56,6 @@ describe('ReactDOMFizzStaticNode', () => {
}
}
- // @gate enableHalt
it('should call prerenderToNodeStream', async () => {
const result = await ReactDOMFizzStatic.prerenderToNodeStream(
hello world
,
@@ -65,14 +64,12 @@ describe('ReactDOMFizzStaticNode', () => {
expect(prelude).toMatchInlineSnapshot(`"hello world
"`);
});
- // @gate enableHalt
it('should suppport web streams', async () => {
const result = await ReactDOMFizzStatic.prerender(hello world
);
const prelude = await readContentWeb(result.prelude);
expect(prelude).toMatchInlineSnapshot(`"hello world
"`);
});
- // @gate enableHalt
it('should emit DOCTYPE at the root of the document', async () => {
const result = await ReactDOMFizzStatic.prerenderToNodeStream(
@@ -91,7 +88,6 @@ describe('ReactDOMFizzStaticNode', () => {
}
});
- // @gate enableHalt
it('should emit bootstrap script src at the end', async () => {
const result = await ReactDOMFizzStatic.prerenderToNodeStream(
hello world
,
@@ -107,7 +103,6 @@ describe('ReactDOMFizzStaticNode', () => {
);
});
- // @gate enableHalt
it('emits all HTML as one unit', async () => {
let hasLoaded = false;
let resolve;
@@ -137,7 +132,6 @@ describe('ReactDOMFizzStaticNode', () => {
expect(prelude).toMatchInlineSnapshot(`"Done
"`);
});
- // @gate enableHalt
it('should reject the promise when an error is thrown at the root', async () => {
const reportedErrors = [];
let caughtError = null;
@@ -159,7 +153,6 @@ describe('ReactDOMFizzStaticNode', () => {
expect(reportedErrors).toEqual([theError]);
});
- // @gate enableHalt
it('should reject the promise when an error is thrown inside a fallback', async () => {
const reportedErrors = [];
let caughtError = null;
@@ -183,7 +176,6 @@ describe('ReactDOMFizzStaticNode', () => {
expect(reportedErrors).toEqual([theError]);
});
- // @gate enableHalt
it('should not error the stream when an error is thrown inside suspense boundary', async () => {
const reportedErrors = [];
const result = await ReactDOMFizzStatic.prerenderToNodeStream(
@@ -204,7 +196,6 @@ describe('ReactDOMFizzStaticNode', () => {
expect(reportedErrors).toEqual([theError]);
});
- // @gate enableHalt
it('should be able to complete by aborting even if the promise never resolves', async () => {
const errors = [];
const controller = new AbortController();
@@ -234,39 +225,6 @@ describe('ReactDOMFizzStaticNode', () => {
expect(errors).toEqual(['This operation was aborted']);
});
- // @gate enableHalt
- // @gate !enableHalt
- it('should reject if aborting before the shell is complete and enableHalt is disabled', async () => {
- const errors = [];
- const controller = new AbortController();
- const promise = ReactDOMFizzStatic.prerenderToNodeStream(
-
-
-
,
- {
- signal: controller.signal,
- onError(x) {
- errors.push(x.message);
- },
- },
- );
-
- await jest.runAllTimers();
-
- const theReason = new Error('aborted for reasons');
- controller.abort(theReason);
-
- let caughtError = null;
- try {
- await promise;
- } catch (error) {
- caughtError = error;
- }
- expect(caughtError).toBe(theReason);
- expect(errors).toEqual(['aborted for reasons']);
- });
-
- // @gate enableHalt
it('should resolve an empty shell if aborting before the shell is complete', async () => {
const errors = [];
const controller = new AbortController();
@@ -300,7 +258,6 @@ describe('ReactDOMFizzStaticNode', () => {
expect(content).toBe('');
});
- // @gate enableHalt
it('should be able to abort before something suspends', async () => {
const errors = [];
const controller = new AbortController();
@@ -324,58 +281,12 @@ describe('ReactDOMFizzStaticNode', () => {
},
);
- if (gate(flags => flags.enableHalt)) {
- const {prelude} = await streamPromise;
- const content = await readContent(prelude);
- expect(errors).toEqual(['This operation was aborted']);
- expect(content).toBe('');
- } else {
- let caughtError = null;
- try {
- await streamPromise;
- } catch (error) {
- caughtError = error;
- }
- expect(caughtError.message).toBe('This operation was aborted');
- expect(errors).toEqual(['This operation was aborted']);
- }
- });
-
- // @gate enableHalt
- // @gate !enableHalt
- it('should reject if passing an already aborted signal and enableHalt is disabled', async () => {
- const errors = [];
- const controller = new AbortController();
- const theReason = new Error('aborted for reasons');
- controller.abort(theReason);
-
- const promise = ReactDOMFizzStatic.prerenderToNodeStream(
-
- Loading
}>
-
-
- ,
- {
- signal: controller.signal,
- onError(x) {
- errors.push(x.message);
- },
- },
- );
-
- // Technically we could still continue rendering the shell but currently the
- // semantics mean that we also abort any pending CPU work.
- let caughtError = null;
- try {
- await promise;
- } catch (error) {
- caughtError = error;
- }
- expect(caughtError).toBe(theReason);
- expect(errors).toEqual(['aborted for reasons']);
+ const {prelude} = await streamPromise;
+ const content = await readContent(prelude);
+ expect(errors).toEqual(['This operation was aborted']);
+ expect(content).toBe('');
});
- // @gate enableHalt
it('should resolve with an empty prelude if passing an already aborted signal', async () => {
const errors = [];
const controller = new AbortController();
@@ -412,7 +323,6 @@ describe('ReactDOMFizzStaticNode', () => {
expect(content).toBe('');
});
- // @gate enableHalt
it('supports custom abort reasons with a string', async () => {
const promise = new Promise(r => {});
function Wait() {
@@ -454,7 +364,6 @@ describe('ReactDOMFizzStaticNode', () => {
expect(errors).toEqual(['foobar', 'foobar']);
});
- // @gate enableHalt
it('supports custom abort reasons with an Error', async () => {
const promise = new Promise(r => {});
function Wait() {
diff --git a/packages/react-dom/src/server/ReactDOMFizzStaticBrowser.js b/packages/react-dom/src/server/ReactDOMFizzStaticBrowser.js
index ba0e24c18782..c1024ea3f4d3 100644
--- a/packages/react-dom/src/server/ReactDOMFizzStaticBrowser.js
+++ b/packages/react-dom/src/server/ReactDOMFizzStaticBrowser.js
@@ -34,8 +34,6 @@ import {
createRootFormatContext,
} from 'react-dom-bindings/src/server/ReactFizzConfigDOM';
-import {enableHalt} from 'shared/ReactFeatureFlags';
-
import {ensureCorrectIsomorphicReactVersion} from '../shared/ensureCorrectIsomorphicReactVersion';
ensureCorrectIsomorphicReactVersion();
@@ -89,14 +87,10 @@ function prerender(
{highWaterMark: 0},
);
- const result: StaticResult = enableHalt
- ? {
- postponed: getPostponedState(request),
- prelude: stream,
- }
- : ({
- prelude: stream,
- }: any);
+ const result: StaticResult = {
+ postponed: getPostponedState(request),
+ prelude: stream,
+ };
resolve(result);
}
diff --git a/packages/react-dom/src/server/ReactDOMFizzStaticEdge.js b/packages/react-dom/src/server/ReactDOMFizzStaticEdge.js
index 785a8b2f2a43..002c4c51b44f 100644
--- a/packages/react-dom/src/server/ReactDOMFizzStaticEdge.js
+++ b/packages/react-dom/src/server/ReactDOMFizzStaticEdge.js
@@ -34,8 +34,6 @@ import {
createRootFormatContext,
} from 'react-dom-bindings/src/server/ReactFizzConfigDOM';
-import {enableHalt} from 'shared/ReactFeatureFlags';
-
import {ensureCorrectIsomorphicReactVersion} from '../shared/ensureCorrectIsomorphicReactVersion';
ensureCorrectIsomorphicReactVersion();
@@ -89,14 +87,10 @@ function prerender(
{highWaterMark: 0},
);
- const result: StaticResult = enableHalt
- ? {
- postponed: getPostponedState(request),
- prelude: stream,
- }
- : ({
- prelude: stream,
- }: any);
+ const result: StaticResult = {
+ postponed: getPostponedState(request),
+ prelude: stream,
+ };
resolve(result);
}
diff --git a/packages/react-dom/src/server/ReactDOMFizzStaticNode.js b/packages/react-dom/src/server/ReactDOMFizzStaticNode.js
index 60c602cc2aa1..73abcadeb7a7 100644
--- a/packages/react-dom/src/server/ReactDOMFizzStaticNode.js
+++ b/packages/react-dom/src/server/ReactDOMFizzStaticNode.js
@@ -36,8 +36,6 @@ import {
createRootFormatContext,
} from 'react-dom-bindings/src/server/ReactFizzConfigDOM';
-import {enableHalt} from 'shared/ReactFeatureFlags';
-
import {textEncoder} from 'react-server/src/ReactServerStreamConfigNode';
import {ensureCorrectIsomorphicReactVersion} from '../shared/ensureCorrectIsomorphicReactVersion';
@@ -130,14 +128,10 @@ function prerenderToNodeStream(
});
const writable = createFakeWritableFromReadable(readable);
- const result: StaticResult = enableHalt
- ? {
- postponed: getPostponedState(request),
- prelude: readable,
- }
- : ({
- prelude: readable,
- }: any);
+ const result: StaticResult = {
+ postponed: getPostponedState(request),
+ prelude: readable,
+ };
resolve(result);
}
const resumableState = createResumableState(
@@ -215,14 +209,10 @@ function prerender(
{highWaterMark: 0},
);
- const result = enableHalt
- ? {
- postponed: getPostponedState(request),
- prelude: stream,
- }
- : ({
- prelude: stream,
- }: any);
+ const result = {
+ postponed: getPostponedState(request),
+ prelude: stream,
+ };
resolve(result);
}
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 7070f39cea82..94a5ac94546a 100644
--- a/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOM-test.js
+++ b/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOM-test.js
@@ -2878,7 +2878,6 @@ describe('ReactFlightDOM', () => {
);
});
- // @gate enableHalt
it('can prerender', async () => {
let resolveGreeting;
const greetingPromise = new Promise(resolve => {
@@ -2940,7 +2939,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 => {
@@ -3023,8 +3021,6 @@ describe('ReactFlightDOM', () => {
expect(getMeaningfulChildren(container)).toEqual(loading...
);
});
- // This could be a bug. Discovered while making enableAsyncDebugInfo dynamic for www.
- // @gate enableHalt || (enableAsyncDebugInfo && __DEV__)
it('will leave async iterables in an incomplete state when halting', async () => {
let resolve;
const wait = new Promise(r => (resolve = r));
@@ -3083,7 +3079,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 412ec0c9ca73..1399effbc1ec 100644
--- a/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMBrowser-test.js
+++ b/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMBrowser-test.js
@@ -2389,7 +2389,6 @@ describe('ReactFlightDOMBrowser', () => {
expect(errors).toEqual([reason]);
});
- // @gate enableHalt
it('can prerender', async () => {
let resolveGreeting;
const greetingPromise = new Promise(resolve => {
@@ -2438,7 +2437,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 => {
@@ -2904,9 +2902,9 @@ describe('ReactFlightDOMBrowser', () => {
[
"Object.",
"/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMBrowser-test.js",
- 2826,
+ 2824,
19,
- 2810,
+ 2808,
89,
],
],
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 1094b464740b..266471e58881 100644
--- a/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMEdge-test.js
+++ b/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMEdge-test.js
@@ -1527,7 +1527,6 @@ describe('ReactFlightDOMEdge', () => {
]);
});
- // @gate enableHalt
it('can prerender', async () => {
let resolveGreeting;
const greetingPromise = new Promise(resolve => {
@@ -1581,7 +1580,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 => {
@@ -1661,7 +1659,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();
@@ -1709,7 +1706,6 @@ describe('ReactFlightDOMEdge', () => {
expect(error.message).toBe('Connection closed.');
});
- // @gate enableHalt
it('should be able to handle a rejected promise in prerender', async () => {
const expectedError = new Error('Bam!');
const errors = [];
@@ -1748,7 +1744,6 @@ describe('ReactFlightDOMEdge', () => {
expect(error.message).toBe(expectedMessage);
});
- // @gate enableHalt
it('should be able to handle an erroring async iterable in prerender', async () => {
const expectedError = new Error('Bam!');
const errors = [];
@@ -1795,7 +1790,6 @@ describe('ReactFlightDOMEdge', () => {
expect(error.message).toBe(expectedMessage);
});
- // @gate enableHalt
it('should be able to handle an erroring readable stream in prerender', async () => {
const expectedError = new Error('Bam!');
const errors = [];
@@ -1843,7 +1837,6 @@ describe('ReactFlightDOMEdge', () => {
expect(error.message).toBe(expectedMessage);
});
- // @gate enableHalt
it('can prerender an async iterable', async () => {
const errors = [];
@@ -1887,7 +1880,6 @@ describe('ReactFlightDOMEdge', () => {
expect(text).toBe('hello world');
});
- // @gate enableHalt
it('can prerender a readable stream', async () => {
const errors = [];
@@ -1921,7 +1913,6 @@ describe('ReactFlightDOMEdge', () => {
expect(result).toBe('hello world');
});
- // @gate enableHalt
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(
@@ -1990,7 +1981,6 @@ describe('ReactFlightDOMEdge', () => {
expect(error.message).toBe(expectedMessage);
});
- // @gate enableHalt
it('does not include source locations in component stacks for halted components', async () => {
// We only support adding source locations for halted components in the Node.js builds.
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 ad3ff1b4004c..0ac1f84cd396 100644
--- a/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMNode-test.js
+++ b/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMNode-test.js
@@ -548,7 +548,6 @@ describe('ReactFlightDOMNode', () => {
expect(errors).toEqual([reason]);
});
- // @gate enableHalt
it('can prerender', async () => {
let resolveGreeting;
const greetingPromise = new Promise(resolve => {
@@ -602,7 +601,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 => {
@@ -675,7 +673,6 @@ describe('ReactFlightDOMNode', () => {
expect(result).toContain('loading...');
});
- // @gate enableHalt
it('includes source locations in component and owner stacks for halted components', async () => {
async function Component() {
await new Promise(() => {});
@@ -810,7 +807,6 @@ describe('ReactFlightDOMNode', () => {
}
});
- // @gate enableHalt
it('includes source locations in component and owner stacks for halted Client components', async () => {
function SharedComponent({p1, p2, p3}) {
use(p1);
@@ -959,17 +955,16 @@ describe('ReactFlightDOMNode', () => {
// The concrete location may change as this test is updated.
// Just make sure they still point at React.use(p2)
(gate(flags => flags.enableAsyncDebugInfo)
- ? '\n at SharedComponent (./ReactFlightDOMNode-test.js:817:7)'
+ ? '\n at SharedComponent (./ReactFlightDOMNode-test.js:813:7)'
: '') +
- '\n at ServerComponent (file://./ReactFlightDOMNode-test.js:839:26)' +
- '\n at App (file://./ReactFlightDOMNode-test.js:856:25)',
+ '\n at ServerComponent (file://./ReactFlightDOMNode-test.js:835:26)' +
+ '\n at App (file://./ReactFlightDOMNode-test.js:852:25)',
);
} else {
expect(ownerStack).toBeNull();
}
});
- // @gate enableHalt
it('includes deeper location for aborted stacks', async () => {
async function getData() {
const signal = ReactServer.cacheSignal();
@@ -1127,8 +1122,6 @@ describe('ReactFlightDOMNode', () => {
}
});
- // @gate enableHalt
- // @gate enableHalt
it('can handle an empty prelude when prerendering', async () => {
function App() {
return null;
@@ -1549,12 +1542,12 @@ describe('ReactFlightDOMNode', () => {
'\n' +
' in Dynamic' +
(gate(flags => flags.enableAsyncDebugInfo)
- ? ' (file://ReactFlightDOMNode-test.js:1423:27)\n'
+ ? ' (file://ReactFlightDOMNode-test.js:1416:27)\n'
: '\n') +
' in body\n' +
' in html\n' +
- ' in App (file://ReactFlightDOMNode-test.js:1436:25)\n' +
- ' in ClientRoot (ReactFlightDOMNode-test.js:1511:16)',
+ ' in App (file://ReactFlightDOMNode-test.js:1429:25)\n' +
+ ' in ClientRoot (ReactFlightDOMNode-test.js:1504:16)',
);
} else {
expect(
@@ -1563,7 +1556,7 @@ describe('ReactFlightDOMNode', () => {
'\n' +
' in body\n' +
' in html\n' +
- ' in ClientRoot (ReactFlightDOMNode-test.js:1511:16)',
+ ' in ClientRoot (ReactFlightDOMNode-test.js:1504:16)',
);
}
@@ -1573,8 +1566,8 @@ describe('ReactFlightDOMNode', () => {
normalizeCodeLocInfo(ownerStack, {preserveLocation: true}),
).toBe(
'\n' +
- ' in Dynamic (file://ReactFlightDOMNode-test.js:1423:27)\n' +
- ' in App (file://ReactFlightDOMNode-test.js:1436:25)',
+ ' in Dynamic (file://ReactFlightDOMNode-test.js:1416:27)\n' +
+ ' in App (file://ReactFlightDOMNode-test.js:1429:25)',
);
} else {
expect(
@@ -1582,7 +1575,7 @@ describe('ReactFlightDOMNode', () => {
).toBe(
'' +
'\n' +
- ' in App (file://ReactFlightDOMNode-test.js:1436:25)',
+ ' in App (file://ReactFlightDOMNode-test.js:1429:25)',
);
}
} else {
diff --git a/packages/react-server/src/ReactFizzServer.js b/packages/react-server/src/ReactFizzServer.js
index 920e368674dc..d06d967b1f87 100644
--- a/packages/react-server/src/ReactFizzServer.js
+++ b/packages/react-server/src/ReactFizzServer.js
@@ -178,7 +178,6 @@ import {
disableLegacyContext,
disableLegacyContextForFunctionComponents,
enableScopeAPI,
- enableHalt,
enableAsyncIterableChildren,
enableViewTransition,
enableFizzBlockingRender,
@@ -4643,11 +4642,7 @@ function abortTask(task: Task, request: Request, error: mixed): void {
if (replay === null) {
// We didn't complete the root so we have nothing to show. We can close
// the request;
- if (
- enableHalt &&
- request.trackedPostpones !== null &&
- segment !== null
- ) {
+ if (request.trackedPostpones !== null && segment !== null) {
const trackedPostpones = request.trackedPostpones;
// We are aborting a prerender and must treat the shell as halted
// We log the error but we still resolve the prerender
@@ -4693,20 +4688,18 @@ function abortTask(task: Task, request: Request, error: mixed): void {
// boundary the message is referring to
const trackedPostpones = request.trackedPostpones;
if (boundary.status !== CLIENT_RENDERED) {
- if (enableHalt) {
- if (trackedPostpones !== null && segment !== null) {
- // We are aborting a prerender and must halt this boundary.
- // We treat this like other postpones during prerendering
- logRecoverableError(request, error, errorInfo, task.debugTask);
- trackPostpone(request, trackedPostpones, task, segment);
- // If this boundary was still pending then we haven't already cancelled its fallbacks.
- // We'll need to abort the fallbacks, which will also error that parent boundary.
- boundary.fallbackAbortableTasks.forEach(fallbackTask =>
- abortTask(fallbackTask, request, error),
- );
- boundary.fallbackAbortableTasks.clear();
- return finishedTask(request, boundary, task.row, segment);
- }
+ if (trackedPostpones !== null && segment !== null) {
+ // We are aborting a prerender and must halt this boundary.
+ // We treat this like other postpones during prerendering
+ logRecoverableError(request, error, errorInfo, task.debugTask);
+ trackPostpone(request, trackedPostpones, task, segment);
+ // If this boundary was still pending then we haven't already cancelled its fallbacks.
+ // We'll need to abort the fallbacks, which will also error that parent boundary.
+ boundary.fallbackAbortableTasks.forEach(fallbackTask =>
+ abortTask(fallbackTask, request, error),
+ );
+ boundary.fallbackAbortableTasks.clear();
+ return finishedTask(request, boundary, task.row, segment);
}
boundary.status = CLIENT_RENDERED;
// We are aborting a render or resume which should put boundaries
@@ -5110,11 +5103,7 @@ function retryRenderTask(
? request.fatalError
: thrownValue;
- if (
- enableHalt &&
- request.status === ABORTING &&
- request.trackedPostpones !== null
- ) {
+ if (request.status === ABORTING && request.trackedPostpones !== null) {
// We are aborting a prerender and need to halt this task.
const trackedPostpones = request.trackedPostpones;
const thrownInfo = getThrownInfo(task.componentStack);
diff --git a/packages/react-server/src/ReactFlightServer.js b/packages/react-server/src/ReactFlightServer.js
index 80d5f3e5c005..3bafdcf40bc9 100644
--- a/packages/react-server/src/ReactFlightServer.js
+++ b/packages/react-server/src/ReactFlightServer.js
@@ -12,7 +12,6 @@ import type {Chunk, BinaryChunk, Destination} from './ReactServerStreamConfig';
import type {TemporaryReferenceSet} from './ReactFlightServerTemporaryReferences';
import {
- enableHalt,
enableTaint,
enableProfilerTimer,
enableComponentPerformanceTrack,
@@ -1083,7 +1082,7 @@ function serializeThenable(
if (request.status === ABORTING) {
// We can no longer accept any resolved values
request.abortableTasks.delete(newTask);
- if (enableHalt && request.type === PRERENDER) {
+ if (request.type === PRERENDER) {
haltTask(newTask, request);
finishHaltedTask(newTask, request);
} else {
@@ -1245,7 +1244,7 @@ function serializeReadableStream(
const signal = request.cacheController.signal;
signal.removeEventListener('abort', abortStream);
const reason = signal.reason;
- if (enableHalt && request.type === PRERENDER) {
+ if (request.type === PRERENDER) {
request.abortableTasks.delete(streamTask);
haltTask(streamTask, request);
finishHaltedTask(streamTask, request);
@@ -1379,7 +1378,7 @@ function serializeAsyncIterable(
const signal = request.cacheController.signal;
signal.removeEventListener('abort', abortIterable);
const reason = signal.reason;
- if (enableHalt && request.type === PRERENDER) {
+ if (request.type === PRERENDER) {
request.abortableTasks.delete(streamTask);
haltTask(streamTask, request);
finishHaltedTask(streamTask, request);
@@ -3322,7 +3321,7 @@ function serializeBlob(request: Request, blob: Blob): string {
const signal = request.cacheController.signal;
signal.removeEventListener('abort', abortBlob);
const reason = signal.reason;
- if (enableHalt && request.type === PRERENDER) {
+ if (request.type === PRERENDER) {
request.abortableTasks.delete(newTask);
haltTask(newTask, request);
finishHaltedTask(newTask, request);
@@ -3383,7 +3382,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);
@@ -5814,7 +5813,7 @@ function retryTask(request: Request, task: Task): void {
if (request.status === ABORTING) {
request.abortableTasks.delete(task);
task.status = PENDING;
- 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
haltTask(task, request);
@@ -6251,7 +6250,7 @@ export function abort(request: Request, reason: mixed): void {
request.cacheController.abort(reason);
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));
diff --git a/packages/shared/ReactFeatureFlags.js b/packages/shared/ReactFeatureFlags.js
index bdeab6aef43e..022034a6f9b6 100644
--- a/packages/shared/ReactFeatureFlags.js
+++ b/packages/shared/ReactFeatureFlags.js
@@ -78,8 +78,6 @@ export const enableAsyncIterableChildren = __EXPERIMENTAL__;
export const enableTaint = __EXPERIMENTAL__;
-export const enableHalt: boolean = true;
-
export const enableViewTransition: boolean = true;
export const enableGestureTransition = __EXPERIMENTAL__;
diff --git a/packages/shared/forks/ReactFeatureFlags.native-fb.js b/packages/shared/forks/ReactFeatureFlags.native-fb.js
index eeabe40d33bb..a587e425703b 100644
--- a/packages/shared/forks/ReactFeatureFlags.native-fb.js
+++ b/packages/shared/forks/ReactFeatureFlags.native-fb.js
@@ -46,7 +46,6 @@ export const enableCPUSuspense: boolean = true;
export const enableCreateEventHandleAPI: boolean = false;
export const enableMoveBefore: boolean = true;
export const enableFizzExternalRuntime: boolean = true;
-export const enableHalt: boolean = true;
export const enableInfiniteRenderLoopDetection: boolean = false;
export const enableLegacyCache: boolean = false;
export const enableLegacyFBSupport: boolean = false;
diff --git a/packages/shared/forks/ReactFeatureFlags.native-oss.js b/packages/shared/forks/ReactFeatureFlags.native-oss.js
index 415b479b7c19..72904e251cae 100644
--- a/packages/shared/forks/ReactFeatureFlags.native-oss.js
+++ b/packages/shared/forks/ReactFeatureFlags.native-oss.js
@@ -30,7 +30,6 @@ export const enableCPUSuspense: boolean = false;
export const enableCreateEventHandleAPI: boolean = false;
export const enableMoveBefore: boolean = true;
export const enableFizzExternalRuntime: boolean = true;
-export const enableHalt: boolean = true;
export const enableHiddenSubtreeInsertionEffectCleanup: boolean = false;
export const enableInfiniteRenderLoopDetection: boolean = false;
export const enableLegacyCache: boolean = false;
diff --git a/packages/shared/forks/ReactFeatureFlags.test-renderer.js b/packages/shared/forks/ReactFeatureFlags.test-renderer.js
index 5c1ece810825..afa71d5754c6 100644
--- a/packages/shared/forks/ReactFeatureFlags.test-renderer.js
+++ b/packages/shared/forks/ReactFeatureFlags.test-renderer.js
@@ -21,7 +21,6 @@ export const enableUpdaterTracking: boolean = false;
export const enableLegacyCache: boolean = __EXPERIMENTAL__;
export const enableAsyncIterableChildren: boolean = false;
export const enableTaint: boolean = true;
-export const enableHalt: boolean = true;
export const disableCommentsAsDOMContainers: boolean = true;
export const disableInputAttributeSyncing: boolean = false;
export const enableScopeAPI: boolean = false;
diff --git a/packages/shared/forks/ReactFeatureFlags.test-renderer.native-fb.js b/packages/shared/forks/ReactFeatureFlags.test-renderer.native-fb.js
index a2e623ff5201..a81f67ee94fe 100644
--- a/packages/shared/forks/ReactFeatureFlags.test-renderer.native-fb.js
+++ b/packages/shared/forks/ReactFeatureFlags.test-renderer.native-fb.js
@@ -25,7 +25,6 @@ export const enableCPUSuspense = true;
export const enableCreateEventHandleAPI = false;
export const enableMoveBefore = false;
export const enableFizzExternalRuntime = true;
-export const enableHalt = true;
export const enableInfiniteRenderLoopDetection = false;
export const enableHiddenSubtreeInsertionEffectCleanup = true;
export const enableLegacyCache = false;
diff --git a/packages/shared/forks/ReactFeatureFlags.test-renderer.www.js b/packages/shared/forks/ReactFeatureFlags.test-renderer.www.js
index 4751ffb49bc4..d819bd275eb5 100644
--- a/packages/shared/forks/ReactFeatureFlags.test-renderer.www.js
+++ b/packages/shared/forks/ReactFeatureFlags.test-renderer.www.js
@@ -21,7 +21,6 @@ export const enableUpdaterTracking: boolean = false;
export const enableLegacyCache: boolean = true;
export const enableAsyncIterableChildren: boolean = false;
export const enableTaint: boolean = true;
-export const enableHalt: boolean = true;
export const disableCommentsAsDOMContainers: boolean = true;
export const disableInputAttributeSyncing: boolean = false;
export const enableScopeAPI: boolean = true;
diff --git a/packages/shared/forks/ReactFeatureFlags.www.js b/packages/shared/forks/ReactFeatureFlags.www.js
index d32d8fe08baf..0c8ec7f25aa4 100644
--- a/packages/shared/forks/ReactFeatureFlags.www.js
+++ b/packages/shared/forks/ReactFeatureFlags.www.js
@@ -74,8 +74,6 @@ export const enableAsyncIterableChildren: boolean = false;
export const enableTaint: boolean = false;
-export const enableHalt: boolean = true;
-
// TODO: www currently relies on this feature. It's disabled in open source.
// Need to remove it.
export const disableCommentsAsDOMContainers: boolean = false;