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;