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;