@samitouri / QOS-React-2 / commits / 152080276c

Remove enableFlightReadableStream (#31766)

Base: https://github.com/facebook/react/pull/31765 Landed everywhere

Ricky committed Dec 13, 2024 at 16:39 UTC 152080276c61873fdfc88db7f5856332742ddb02
17 files changed +96 -163
packages/react-client/src/ReactFlightClient.js
+37 -56
@@ -44,7 +44,6 @@ import type {TemporaryReferenceSet} from './ReactFlightTemporaryReferences';
44
45 import {
46 enablePostpone,
47 - enableFlightReadableStream,
47 enableOwnerStacks,
48 enableServerComponentLogs,
49 enableProfilerTimer,
@@ -406,14 +405,12 @@ function wakeChunkIfInitialized<T>(
405
406 function triggerErrorOnChunk<T>(chunk: SomeChunk<T>, error: mixed): void {
407 if (chunk.status !== PENDING && chunk.status !== BLOCKED) {
409 - if (enableFlightReadableStream) {
410 - // If we get more data to an already resolved ID, we assume that it's
411 - // a stream chunk since any other row shouldn't have more than one entry.
412 - const streamChunk: InitializedStreamChunk<any> = (chunk: any);
413 - const controller = streamChunk.reason;
414 - // $FlowFixMe[incompatible-call]: The error method should accept mixed.
415 - controller.error(error);
416 - }
408 + // If we get more data to an already resolved ID, we assume that it's
409 + // a stream chunk since any other row shouldn't have more than one entry.
410 + const streamChunk: InitializedStreamChunk<any> = (chunk: any);
411 + const controller = streamChunk.reason;
412 + // $FlowFixMe[incompatible-call]: The error method should accept mixed.
413 + controller.error(error);
414 return;
415 }
416 const listeners = chunk.reason;
@@ -512,13 +509,11 @@ function resolveModelChunk<T>(
509 value: UninitializedModel,
510 ): void {
511 if (chunk.status !== PENDING) {
515 - if (enableFlightReadableStream) {
516 - // If we get more data to an already resolved ID, we assume that it's
517 - // a stream chunk since any other row shouldn't have more than one entry.
518 - const streamChunk: InitializedStreamChunk<any> = (chunk: any);
519 - const controller = streamChunk.reason;
520 - controller.enqueueModel(value);
521 - }
512 + // If we get more data to an already resolved ID, we assume that it's
513 + // a stream chunk since any other row shouldn't have more than one entry.
514 + const streamChunk: InitializedStreamChunk<any> = (chunk: any);
515 + const controller = streamChunk.reason;
516 + controller.enqueueModel(value);
517 return;
518 }
519 const resolveListeners = chunk.value;
@@ -1718,16 +1713,14 @@ function resolveModel(
1713
1714 function resolveText(response: Response, id: number, text: string): void {
1715 const chunks = response._chunks;
1721 - if (enableFlightReadableStream) {
1722 - const chunk = chunks.get(id);
1723 - if (chunk && chunk.status !== PENDING) {
1724 - // If we get more data to an already resolved ID, we assume that it's
1725 - // a stream chunk since any other row shouldn't have more than one entry.
1726 - const streamChunk: InitializedStreamChunk<any> = (chunk: any);
1727 - const controller = streamChunk.reason;
1728 - controller.enqueueValue(text);
1729 - return;
1730 - }
1716 + const chunk = chunks.get(id);
1717 + if (chunk && chunk.status !== PENDING) {
1718 + // If we get more data to an already resolved ID, we assume that it's
1719 + // a stream chunk since any other row shouldn't have more than one entry.
1720 + const streamChunk: InitializedStreamChunk<any> = (chunk: any);
1721 + const controller = streamChunk.reason;
1722 + controller.enqueueValue(text);
1723 + return;
1724 }
1725 chunks.set(id, createInitializedTextChunk(response, text));
1726 }
@@ -1738,16 +1731,14 @@ function resolveBuffer(
1731 buffer: $ArrayBufferView | ArrayBuffer,
1732 ): void {
1733 const chunks = response._chunks;
1741 - if (enableFlightReadableStream) {
1742 - const chunk = chunks.get(id);
1743 - if (chunk && chunk.status !== PENDING) {
1744 - // If we get more data to an already resolved ID, we assume that it's
1745 - // a stream chunk since any other row shouldn't have more than one entry.
1746 - const streamChunk: InitializedStreamChunk<any> = (chunk: any);
1747 - const controller = streamChunk.reason;
1748 - controller.enqueueValue(buffer);
1749 - return;
1750 - }
1734 + const chunk = chunks.get(id);
1735 + if (chunk && chunk.status !== PENDING) {
1736 + // If we get more data to an already resolved ID, we assume that it's
1737 + // a stream chunk since any other row shouldn't have more than one entry.
1738 + const streamChunk: InitializedStreamChunk<any> = (chunk: any);
1739 + const controller = streamChunk.reason;
1740 + controller.enqueueValue(buffer);
1741 + return;
1742 }
1743 chunks.set(id, createInitializedBufferChunk(response, buffer));
1744 }
@@ -2967,38 +2958,28 @@ function processFullStringRow(
2958 );
2959 }
2960 case 82 /* "R" */: {
2970 - if (enableFlightReadableStream) {
2971 - startReadableStream(response, id, undefined);
2972 - return;
2973 - }
2961 + startReadableStream(response, id, undefined);
2962 + return;
2963 }
2964 // Fallthrough
2965 case 114 /* "r" */: {
2977 - if (enableFlightReadableStream) {
2978 - startReadableStream(response, id, 'bytes');
2979 - return;
2980 - }
2966 + startReadableStream(response, id, 'bytes');
2967 + return;
2968 }
2969 // Fallthrough
2970 case 88 /* "X" */: {
2984 - if (enableFlightReadableStream) {
2985 - startAsyncIterable(response, id, false);
2986 - return;
2987 - }
2971 + startAsyncIterable(response, id, false);
2972 + return;
2973 }
2974 // Fallthrough
2975 case 120 /* "x" */: {
2991 - if (enableFlightReadableStream) {
2992 - startAsyncIterable(response, id, true);
2993 - return;
2994 - }
2976 + startAsyncIterable(response, id, true);
2977 + return;
2978 }
2979 // Fallthrough
2980 case 67 /* "C" */: {
2998 - if (enableFlightReadableStream) {
2999 - stopStream(response, id, row);
3000 - return;
3001 - }
2981 + stopStream(response, id, row);
2982 + return;
2983 }
2984 // Fallthrough
2985 case 80 /* "P" */: {
packages/react-client/src/ReactFlightReplyClient.js
+16 -21
@@ -18,10 +18,7 @@ import type {
18 import type {LazyComponent} from 'react/src/ReactLazy';
19 import type {TemporaryReferenceSet} from './ReactFlightTemporaryReferences';
20
21 -import {
22 - enableRenderableContext,
23 - enableFlightReadableStream,
24 -} from 'shared/ReactFeatureFlags';
21 +import {enableRenderableContext} from 'shared/ReactFeatureFlags';
22
23 import {
24 REACT_ELEMENT_TYPE,
@@ -663,23 +660,21 @@ export function processReply(
660 return Array.from((iterator: any));
661 }
662
666 - if (enableFlightReadableStream) {
667 - // TODO: ReadableStream is not available in old Node. Remove the typeof check later.
668 - if (
669 - typeof ReadableStream === 'function' &&
670 - value instanceof ReadableStream
671 - ) {
672 - return serializeReadableStream(value);
673 - }
674 - const getAsyncIterator: void | (() => $AsyncIterator<any, any, any>) =
675 - (value: any)[ASYNC_ITERATOR];
676 - if (typeof getAsyncIterator === 'function') {
677 - // We treat AsyncIterables as a Fragment and as such we might need to key them.
678 - return serializeAsyncIterable(
679 - (value: any),
680 - getAsyncIterator.call((value: any)),
681 - );
682 - }
663 + // TODO: ReadableStream is not available in old Node. Remove the typeof check later.
664 + if (
665 + typeof ReadableStream === 'function' &&
666 + value instanceof ReadableStream
667 + ) {
668 + return serializeReadableStream(value);
669 + }
670 + const getAsyncIterator: void | (() => $AsyncIterator<any, any, any>) =
671 + (value: any)[ASYNC_ITERATOR];
672 + if (typeof getAsyncIterator === 'function') {
673 + // We treat AsyncIterables as a Fragment and as such we might need to key them.
674 + return serializeAsyncIterable(
675 + (value: any),
676 + getAsyncIterator.call((value: any)),
677 + );
678 }
679
680 // Verify that this is a simple plain object.
packages/react-client/src/__tests__/ReactFlight-test.js
+5 -6
@@ -2623,7 +2623,7 @@ describe('ReactFlight', () => {
2623 );
2624 });
2625
2626 - // @gate enableFlightReadableStream && enableAsyncIterableChildren
2626 + // @gate enableAsyncIterableChildren
2627 it('shares state when moving keyed Server Components that render async iterables', async () => {
2628 function StatefulClient({name, initial}) {
2629 const [state] = React.useState(initial);
@@ -2814,7 +2814,7 @@ describe('ReactFlight', () => {
2814 );
2815 });
2816
2817 - // @gate enableFlightReadableStream && enableAsyncIterableChildren
2817 + // @gate enableAsyncIterableChildren
2818 it('preserves debug info for server-to-server pass through of async iterables', async () => {
2819 let resolve;
2820 const iteratorPromise = new Promise(r => (resolve = r));
@@ -2849,10 +2849,9 @@ describe('ReactFlight', () => {
2849 },
2850 );
2851
2852 - if (gate(flag => flag.enableFlightReadableStream)) {
2853 - // Wait for the iterator to finish
2854 - await iteratorPromise;
2855 - }
2852 + // Wait for the iterator to finish
2853 + await iteratorPromise;
2854 +
2855 await 0; // One more tick for the return value / closing.
2856
2857 const transport = ReactNoopFlightServer.render(
packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMBrowser-test.js
-6
@@ -2079,7 +2079,6 @@ describe('ReactFlightDOMBrowser', () => {
2079 });
2080 }
2081
2082 - // @gate enableFlightReadableStream
2082 it('should supports streaming ReadableStream with objects', async () => {
2083 const errors = [];
2084 let controller1;
@@ -2161,7 +2160,6 @@ describe('ReactFlightDOMBrowser', () => {
2160 expect(errors).toEqual(['rejected']);
2161 });
2162
2164 - // @gate enableFlightReadableStream
2163 it('should cancels the underlying ReadableStream when we are cancelled', async () => {
2164 let controller;
2165 let cancelReason;
@@ -2194,7 +2192,6 @@ describe('ReactFlightDOMBrowser', () => {
2192 expect(loggedReason).toBe(reason);
2193 });
2194
2197 - // @gate enableFlightReadableStream
2195 it('should cancels the underlying ReadableStream when we abort', async () => {
2196 const errors = [];
2197 let controller;
@@ -2252,7 +2249,6 @@ describe('ReactFlightDOMBrowser', () => {
2249 expect(errors).toEqual([reason]);
2250 });
2251
2255 - // @gate enableFlightReadableStream
2252 it('should supports streaming AsyncIterables with objects', async () => {
2253 let resolve;
2254 const wait = new Promise(r => (resolve = r));
@@ -2369,7 +2365,6 @@ describe('ReactFlightDOMBrowser', () => {
2365 );
2366 });
2367
2372 - // @gate enableFlightReadableStream
2368 it('should cancels the underlying AsyncIterable when we are cancelled', async () => {
2369 let resolve;
2370 const wait = new Promise(r => (resolve = r));
@@ -2408,7 +2403,6 @@ describe('ReactFlightDOMBrowser', () => {
2403 expect(loggedReason).toBe(reason);
2404 });
2405
2411 - // @gate enableFlightReadableStream
2406 it('should cancels the underlying AsyncIterable when we abort', async () => {
2407 const errors = [];
2408 const abortController = new AbortController();
packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMEdge-test.js
-5
@@ -645,7 +645,6 @@ describe('ReactFlightDOMEdge', () => {
645 expect(result.get('value')).toBe('hello');
646 });
647
648 - // @gate enableFlightReadableStream
648 it('can pass an async import to a ReadableStream while enqueuing in order', async () => {
649 let resolve;
650 const promise = new Promise(r => (resolve = r));
@@ -690,7 +689,6 @@ describe('ReactFlightDOMEdge', () => {
689 expect(await reader.read()).toEqual({value: undefined, done: true});
690 });
691
693 - // @gate enableFlightReadableStream
692 it('can pass an async import a AsyncIterable while allowing peaking at future values', async () => {
693 let resolve;
694 const promise = new Promise(r => (resolve = r));
@@ -742,7 +740,6 @@ describe('ReactFlightDOMEdge', () => {
740 expect(await iterator.next()).toEqual({value: undefined, done: true});
741 });
742
745 - // @gate enableFlightReadableStream
743 it('should ideally dedupe objects inside async iterables but does not yet', async () => {
744 const obj = {
745 this: {is: 'a large objected'},
@@ -820,7 +817,6 @@ describe('ReactFlightDOMEdge', () => {
817 );
818 });
819
823 - // @gate enableFlightReadableStream
820 it('should supports ReadableStreams with typed arrays', async () => {
821 const buffer = new Uint8Array([
822 123, 4, 10, 5, 100, 255, 244, 45, 56, 67, 43, 124, 67, 89, 100, 20,
@@ -879,7 +875,6 @@ describe('ReactFlightDOMEdge', () => {
875 expect(streamedBuffers).toEqual(buffers);
876 });
877
882 - // @gate enableFlightReadableStream
878 it('should support BYOB binary ReadableStreams', async () => {
879 const buffer = new Uint8Array([
880 123, 4, 10, 5, 100, 255, 244, 45, 56, 67, 43, 124, 67, 89, 100, 20,
packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMNode-test.js
-2
@@ -292,7 +292,6 @@ describe('ReactFlightDOMNode', () => {
292 );
293 });
294
295 - // @gate enableFlightReadableStream
295 it('should cancels the underlying ReadableStream when we are cancelled', async () => {
296 let controller;
297 let cancelReason;
@@ -336,7 +335,6 @@ describe('ReactFlightDOMNode', () => {
335 );
336 });
337
339 - // @gate enableFlightReadableStream
338 it('should cancels the underlying ReadableStream when we abort', async () => {
339 const errors = [];
340 let controller;
packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMReply-test.js
-2
@@ -449,7 +449,6 @@ describe('ReactFlightDOMReply', () => {
449 expect(response.obj).toBe(obj);
450 });
451
452 - // @gate enableFlightReadableStream
452 it('should supports streaming ReadableStream with objects', async () => {
453 let controller1;
454 let controller2;
@@ -511,7 +510,6 @@ describe('ReactFlightDOMReply', () => {
510 });
511 });
512
514 - // @gate enableFlightReadableStream
513 it('should supports streaming AsyncIterables with objects', async () => {
514 let resolve;
515 const wait = new Promise(r => (resolve = r));
packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMReplyEdge-test.js
-2
@@ -147,7 +147,6 @@ describe('ReactFlightDOMReplyEdge', () => {
147 expect(await resultBlob.arrayBuffer()).toEqual(await blob.arrayBuffer());
148 });
149
150 - // @gate enableFlightReadableStream
150 it('should supports ReadableStreams with typed arrays', async () => {
151 const buffer = new Uint8Array([
152 123, 4, 10, 5, 100, 255, 244, 45, 56, 67, 43, 124, 67, 89, 100, 20,
@@ -194,7 +193,6 @@ describe('ReactFlightDOMReplyEdge', () => {
193 expect(streamedBuffers).toEqual(buffers);
194 });
195
197 - // @gate enableFlightReadableStream
196 it('should support BYOB binary ReadableStreams', async () => {
197 const buffer = new Uint8Array([
198 123, 4, 10, 5, 100, 255, 244, 45, 56, 67, 43, 124, 67, 89, 100, 20,
packages/react-server/src/ReactFlightReplyServer.js
+26 -34
@@ -30,7 +30,6 @@ import {
30 createTemporaryReference,
31 registerTemporaryReference,
32 } from './ReactFlightServerTemporaryReferences';
33 -import {enableFlightReadableStream} from 'shared/ReactFeatureFlags';
33 import {ASYNC_ITERATOR} from 'shared/ReactSymbols';
34
35 import hasOwnProperty from 'shared/hasOwnProperty';
@@ -230,14 +229,12 @@ function wakeChunkIfInitialized<T>(
229
230 function triggerErrorOnChunk<T>(chunk: SomeChunk<T>, error: mixed): void {
231 if (chunk.status !== PENDING && chunk.status !== BLOCKED) {
233 - if (enableFlightReadableStream) {
234 - // If we get more data to an already resolved ID, we assume that it's
235 - // a stream chunk since any other row shouldn't have more than one entry.
236 - const streamChunk: InitializedStreamChunk<any> = (chunk: any);
237 - const controller = streamChunk.reason;
238 - // $FlowFixMe[incompatible-call]: The error method should accept mixed.
239 - controller.error(error);
240 - }
232 + // If we get more data to an already resolved ID, we assume that it's
233 + // a stream chunk since any other row shouldn't have more than one entry.
234 + const streamChunk: InitializedStreamChunk<any> = (chunk: any);
235 + const controller = streamChunk.reason;
236 + // $FlowFixMe[incompatible-call]: The error method should accept mixed.
237 + controller.error(error);
238 return;
239 }
240 const listeners = chunk.reason;
@@ -264,16 +261,14 @@ function resolveModelChunk<T>(
261 id: number,
262 ): void {
263 if (chunk.status !== PENDING) {
267 - if (enableFlightReadableStream) {
268 - // If we get more data to an already resolved ID, we assume that it's
269 - // a stream chunk since any other row shouldn't have more than one entry.
270 - const streamChunk: InitializedStreamChunk<any> = (chunk: any);
271 - const controller = streamChunk.reason;
272 - if (value[0] === 'C') {
273 - controller.close(value === 'C' ? '"$undefined"' : value.slice(1));
274 - } else {
275 - controller.enqueueModel(value);
276 - }
264 + // If we get more data to an already resolved ID, we assume that it's
265 + // a stream chunk since any other row shouldn't have more than one entry.
266 + const streamChunk: InitializedStreamChunk<any> = (chunk: any);
267 + const controller = streamChunk.reason;
268 + if (value[0] === 'C') {
269 + controller.close(value === 'C' ? '"$undefined"' : value.slice(1));
270 + } else {
271 + controller.enqueueModel(value);
272 }
273 return;
274 }
@@ -1054,23 +1049,20 @@ function parseModelString(
1049 return backingEntry;
1050 }
1051 }
1057 - if (enableFlightReadableStream) {
1058 - switch (value[1]) {
1059 - case 'R': {
1060 - return parseReadableStream(response, value, undefined, obj, key);
1061 - }
1062 - case 'r': {
1063 - return parseReadableStream(response, value, 'bytes', obj, key);
1064 - }
1065 - case 'X': {
1066 - return parseAsyncIterable(response, value, false, obj, key);
1067 - }
1068 - case 'x': {
1069 - return parseAsyncIterable(response, value, true, obj, key);
1070 - }
1052 + switch (value[1]) {
1053 + case 'R': {
1054 + return parseReadableStream(response, value, undefined, obj, key);
1055 + }
1056 + case 'r': {
1057 + return parseReadableStream(response, value, 'bytes', obj, key);
1058 + }
1059 + case 'X': {
1060 + return parseAsyncIterable(response, value, false, obj, key);
1061 + }
1062 + case 'x': {
1063 + return parseAsyncIterable(response, value, true, obj, key);
1064 }
1065 }
1073 -
1066 // We assume that anything else is a reference ID.
1067 const ref = value.slice(1);
1068 return getOutlinedModel(response, ref, obj, key, createModel);
packages/react-server/src/ReactFlightServer.js
+12 -22
@@ -23,8 +23,6 @@ import {
23 enableComponentPerformanceTrack,
24 } from 'shared/ReactFeatureFlags';
25
26 -import {enableFlightReadableStream} from 'shared/ReactFeatureFlags';
27 -
26 import {
27 scheduleWork,
28 scheduleMicrotask,
@@ -1162,7 +1160,6 @@ function processServerComponentReturnValue(
1160 return multiShot;
1161 }
1162 if (
1165 - enableFlightReadableStream &&
1163 typeof (result: any)[ASYNC_ITERATOR] === 'function' &&
1164 (typeof ReadableStream !== 'function' ||
1165 !(result instanceof ReadableStream))
@@ -2762,25 +2759,18 @@ function renderModelDestructive(
2759 return renderFragment(request, task, Array.from((iterator: any)));
2760 }
2761
2765 - if (enableFlightReadableStream) {
2766 - // TODO: Blob is not available in old Node. Remove the typeof check later.
2767 - if (
2768 - typeof ReadableStream === 'function' &&
2769 - value instanceof ReadableStream
2770 - ) {
2771 - return serializeReadableStream(request, task, value);
2772 - }
2773 - const getAsyncIterator: void | (() => $AsyncIterator<any, any, any>) =
2774 - (value: any)[ASYNC_ITERATOR];
2775 - if (typeof getAsyncIterator === 'function') {
2776 - // We treat AsyncIterables as a Fragment and as such we might need to key them.
2777 - return renderAsyncFragment(
2778 - request,
2779 - task,
2780 - (value: any),
2781 - getAsyncIterator,
2782 - );
2783 - }
2762 + // TODO: Blob is not available in old Node. Remove the typeof check later.
2763 + if (
2764 + typeof ReadableStream === 'function' &&
2765 + value instanceof ReadableStream
2766 + ) {
2767 + return serializeReadableStream(request, task, value);
2768 + }
2769 + const getAsyncIterator: void | (() => $AsyncIterator<any, any, any>) =
2770 + (value: any)[ASYNC_ITERATOR];
2771 + if (typeof getAsyncIterator === 'function') {
2772 + // We treat AsyncIterables as a Fragment and as such we might need to key them.
2773 + return renderAsyncFragment(request, task, (value: any), getAsyncIterator);
2774 }
2775
2776 // We put the Date check low b/c most of the time Date's will already have been serialized
packages/shared/ReactFeatureFlags.js
-1
@@ -78,7 +78,6 @@ export const enableLegacyFBSupport = false;
78 export const enableCache = true;
79 export const enableLegacyCache = __EXPERIMENTAL__;
80
81 -export const enableFlightReadableStream = true;
81 export const enableAsyncIterableChildren = __EXPERIMENTAL__;
82
83 export const enableTaint = __EXPERIMENTAL__;
packages/shared/forks/ReactFeatureFlags.native-fb.js
-1
@@ -52,7 +52,6 @@ export const enableDeferRootSchedulingToMicrotask = true;
52 export const enableDO_NOT_USE_disableStrictPassiveEffect = false;
53 export const enableMoveBefore = true;
54 export const enableFizzExternalRuntime = true;
55 -export const enableFlightReadableStream = true;
55 export const enableGetInspectorDataForInstanceInProduction = true;
56 export const enableHalt = false;
57 export const enableInfiniteRenderLoopDetection = false;
packages/shared/forks/ReactFeatureFlags.native-oss.js
-1
@@ -40,7 +40,6 @@ export const enableDO_NOT_USE_disableStrictPassiveEffect = false;
40 export const enableFabricCompleteRootInCommitPhase = false;
41 export const enableMoveBefore = true;
42 export const enableFizzExternalRuntime = true;
43 -export const enableFlightReadableStream = true;
43 export const enableGetInspectorDataForInstanceInProduction = false;
44 export const enableHalt = false;
45 export const enableHiddenSubtreeInsertionEffectCleanup = false;
packages/shared/forks/ReactFeatureFlags.test-renderer.js
-1
@@ -21,7 +21,6 @@ export const enableComponentPerformanceTrack = false;
21 export const enableUpdaterTracking = false;
22 export const enableCache = true;
23 export const enableLegacyCache = __EXPERIMENTAL__;
24 -export const enableFlightReadableStream = true;
24 export const enableAsyncIterableChildren = false;
25 export const enableTaint = true;
26 export const enablePostpone = false;
packages/shared/forks/ReactFeatureFlags.test-renderer.native-fb.js
-1
@@ -31,7 +31,6 @@ export const enableDeferRootSchedulingToMicrotask = true;
31 export const enableDO_NOT_USE_disableStrictPassiveEffect = false;
32 export const enableMoveBefore = false;
33 export const enableFizzExternalRuntime = true;
34 -export const enableFlightReadableStream = true;
34 export const enableGetInspectorDataForInstanceInProduction = false;
35 export const enableHalt = false;
36 export const enableInfiniteRenderLoopDetection = false;
packages/shared/forks/ReactFeatureFlags.test-renderer.www.js
-1
@@ -21,7 +21,6 @@ export const enableComponentPerformanceTrack = false;
21 export const enableUpdaterTracking = false;
22 export const enableCache = true;
23 export const enableLegacyCache = true;
24 -export const enableFlightReadableStream = true;
24 export const enableAsyncIterableChildren = false;
25 export const enableTaint = true;
26 export const enablePostpone = false;
packages/shared/forks/ReactFeatureFlags.www.js
-1
@@ -75,7 +75,6 @@ export const enableGetInspectorDataForInstanceInProduction = false;
75 export const enableCache = true;
76 export const enableLegacyCache = true;
77
78 -export const enableFlightReadableStream = true;
78 export const enableAsyncIterableChildren = false;
79
80 export const enableTaint = false;