Adds more scaffolding for experimental event API (#15112)
* Adds more scaffolding for experimental event API
Dominic Gannaway committed
Mar 20, 2019 at 11:20 UTC
b83e01cade6f86b9a127bdfdda60f625fd14fdcd
19 files changed
+1066
-279
packages/react-art/src/ReactARTHostConfig.js
+5
-1
@@ -340,6 +340,10 @@ export function getChildHostContext() {
340
return NO_CONTEXT;
341
}
342
343
+export function getChildHostContextForEvent() {
344
+ return NO_CONTEXT;
345
+}
346
+
347
export const scheduleTimeout = setTimeout;
348
export const cancelTimeout = clearTimeout;
349
export const noTimeout = -1;
@@ -440,7 +444,7 @@ export function handleEventComponent(
444
}
445
446
export function handleEventTarget(
443
- type: string,
447
+ type: Symbol | number,
448
props: Props,
449
internalInstanceHandle: Object,
450
) {
packages/react-dom/src/client/ReactDOMHostConfig.js
+82
-5
@@ -44,6 +44,12 @@ import dangerousStyleValue from '../shared/dangerousStyleValue';
44
45
import type {DOMContainer} from './ReactDOM';
46
import type {ReactEventResponder} from 'shared/ReactTypes';
47
+import {
48
+ REACT_EVENT_COMPONENT_TYPE,
49
+ REACT_EVENT_TARGET_TYPE,
50
+ REACT_EVENT_TARGET_TOUCH_HIT,
51
+} from 'shared/ReactSymbols';
52
+import getElementFromTouchHitTarget from 'shared/getElementFromTouchHitTarget';
53
54
export type Type = string;
55
export type Props = {
@@ -65,6 +71,10 @@ export type PublicInstance = Element | Text;
71
type HostContextDev = {
72
namespace: string,
73
ancestorInfo: mixed,
74
+ eventData: null | {|
75
+ isEventComponent?: boolean,
76
+ isEventTarget?: boolean,
77
+ |},
78
};
79
type HostContextProd = string;
80
export type HostContext = HostContextDev | HostContextProd;
@@ -73,7 +83,11 @@ export type ChildSet = void; // Unused
83
export type TimeoutHandle = TimeoutID;
84
export type NoTimeout = -1;
85
76
-import {enableSuspenseServerRenderer} from 'shared/ReactFeatureFlags';
86
+import {
87
+ enableSuspenseServerRenderer,
88
+ enableEventAPI,
89
+} from 'shared/ReactFeatureFlags';
90
+import warning from 'shared/warning';
91
92
// Intentionally not named imports because Rollup would
93
// use dynamic dispatch for CommonJS interop named imports.
@@ -142,7 +156,7 @@ export function getRootHostContext(
156
if (__DEV__) {
157
const validatedTag = type.toLowerCase();
158
const ancestorInfo = updatedAncestorInfo(null, validatedTag);
145
- return {namespace, ancestorInfo};
159
+ return {namespace, ancestorInfo, eventData: null};
160
}
161
return namespace;
162
}
@@ -159,12 +173,42 @@ export function getChildHostContext(
173
parentHostContextDev.ancestorInfo,
174
type,
175
);
162
- return {namespace, ancestorInfo};
176
+ return {namespace, ancestorInfo, eventData: null};
177
}
178
const parentNamespace = ((parentHostContext: any): HostContextProd);
179
return getChildNamespace(parentNamespace, type);
180
}
181
182
+export function getChildHostContextForEvent(
183
+ parentHostContext: HostContext,
184
+ type: Symbol | number,
185
+): HostContext {
186
+ if (__DEV__) {
187
+ const parentHostContextDev = ((parentHostContext: any): HostContextDev);
188
+ const {namespace, ancestorInfo} = parentHostContextDev;
189
+ let eventData = null;
190
+
191
+ if (type === REACT_EVENT_COMPONENT_TYPE) {
192
+ eventData = {
193
+ isEventComponent: true,
194
+ isEventTarget: false,
195
+ };
196
+ } else if (type === REACT_EVENT_TARGET_TYPE) {
197
+ warning(
198
+ parentHostContextDev.eventData !== null &&
199
+ parentHostContextDev.eventData.isEventComponent,
200
+ 'validateDOMNesting: React event targets must be direct children of event components.',
201
+ );
202
+ eventData = {
203
+ isEventComponent: false,
204
+ isEventTarget: true,
205
+ };
206
+ }
207
+ return {namespace, ancestorInfo, eventData};
208
+ }
209
+ return parentHostContext;
210
+}
211
+
212
export function getPublicInstance(instance: Instance): * {
213
return instance;
214
}
@@ -296,6 +340,23 @@ export function createTextInstance(
340
if (__DEV__) {
341
const hostContextDev = ((hostContext: any): HostContextDev);
342
validateDOMNesting(null, text, hostContextDev.ancestorInfo);
343
+ if (enableEventAPI) {
344
+ const eventData = hostContextDev.eventData;
345
+ if (eventData !== null) {
346
+ warning(
347
+ !eventData.isEventComponent,
348
+ 'validateDOMNesting: React event components cannot have text DOM nodes as children. ' +
349
+ 'Wrap the child text "%s" in an element.',
350
+ text,
351
+ );
352
+ warning(
353
+ !eventData.isEventTarget,
354
+ 'validateDOMNesting: React event targets cannot have text DOM nodes as children. ' +
355
+ 'Wrap the child text "%s" in an element.',
356
+ text,
357
+ );
358
+ }
359
+ }
360
}
361
const textNode: TextInstance = createTextNode(text, rootContainerInstance);
362
precacheFiberNode(internalInstanceHandle, textNode);
@@ -804,9 +865,25 @@ export function handleEventComponent(
865
}
866
867
export function handleEventTarget(
807
- type: string,
868
+ type: Symbol | number,
869
props: Props,
870
internalInstanceHandle: Object,
871
) {
811
- // TODO: add handleEventTarget implementation
872
+ // Touch target hit slop handling
873
+ if (type === REACT_EVENT_TARGET_TOUCH_HIT) {
874
+ // Validates that there is a single element
875
+ const element = getElementFromTouchHitTarget(internalInstanceHandle);
876
+ if (element !== null) {
877
+ // We update the event target state node to be that of the element.
878
+ // We can then diff this entry to determine if we need to add the
879
+ // hit slop element, or change the dimensions of the hit slop.
880
+ const lastElement = internalInstanceHandle.stateNode;
881
+ if (lastElement !== element) {
882
+ internalInstanceHandle.stateNode = element;
883
+ // TODO: Create the hit slop element and attach it to the element
884
+ } else {
885
+ // TODO: Diff the left, top, right, bottom props
886
+ }
887
+ }
888
+ }
889
}
packages/react-native-renderer/src/ReactFabricHostConfig.js
+9
-1
@@ -283,6 +283,14 @@ export function getChildHostContext(
283
}
284
}
285
286
+export function getChildHostContextForEvent(
287
+ parentHostContext: HostContext,
288
+ type: Symbol | number,
289
+) {
290
+ // TODO: add getChildHostContextForEvent implementation
291
+ return parentHostContext;
292
+}
293
+
294
export function getPublicInstance(instance: Instance): * {
295
return instance.canonical;
296
}
@@ -428,7 +436,7 @@ export function handleEventComponent(
436
}
437
438
export function handleEventTarget(
431
- type: string,
439
+ type: Symbol | number,
440
props: Props,
441
internalInstanceHandle: Object,
442
) {
packages/react-native-renderer/src/ReactNativeHostConfig.js
+9
-1
@@ -206,6 +206,14 @@ export function getChildHostContext(
206
}
207
}
208
209
+export function getChildHostContextForEvent(
210
+ parentHostContext: HostContext,
211
+ type: Symbol | number,
212
+) {
213
+ // TODO: add getChildHostContextForEvent implementation
214
+ return parentHostContext;
215
+}
216
+
217
export function getPublicInstance(instance: Instance): * {
218
return instance;
219
}
@@ -487,7 +495,7 @@ export function handleEventComponent(
495
}
496
497
export function handleEventTarget(
490
- type: string,
498
+ type: Symbol | number,
499
props: Props,
500
internalInstanceHandle: Object,
501
) {
packages/react-noop-renderer/src/createReactNoop.js
+60
-1
@@ -21,8 +21,18 @@ import type {ReactNodeList} from 'shared/ReactTypes';
21
import * as Scheduler from 'scheduler/unstable_mock';
22
import {createPortal} from 'shared/ReactPortal';
23
import expect from 'expect';
24
-import {REACT_FRAGMENT_TYPE, REACT_ELEMENT_TYPE} from 'shared/ReactSymbols';
24
+import {
25
+ REACT_FRAGMENT_TYPE,
26
+ REACT_ELEMENT_TYPE,
27
+ REACT_EVENT_COMPONENT_TYPE,
28
+ REACT_EVENT_TARGET_TYPE,
29
+ REACT_EVENT_TARGET_TOUCH_HIT,
30
+} from 'shared/ReactSymbols';
31
import warningWithoutStack from 'shared/warningWithoutStack';
32
+import warning from 'shared/warning';
33
+import getElementFromTouchHitTarget from 'shared/getElementFromTouchHitTarget';
34
+
35
+import {enableEventAPI} from 'shared/ReactFeatureFlags';
36
37
// for .act's return value
38
type Thenable = {
@@ -54,6 +64,8 @@ type HostContext = Object;
64
65
const NO_CONTEXT = {};
66
const UPPERCASE_CONTEXT = {};
67
+const EVENT_COMPONENT_CONTEXT = {};
68
+const EVENT_TARGET_CONTEXT = {};
69
const UPDATE_SIGNAL = {};
70
if (__DEV__) {
71
Object.freeze(NO_CONTEXT);
@@ -250,6 +262,24 @@ function createReactNoop(reconciler: Function, useMutation: boolean) {
262
return NO_CONTEXT;
263
},
264
265
+ getChildHostContextForEvent(
266
+ parentHostContext: HostContext,
267
+ type: Symbol | number,
268
+ ) {
269
+ if (__DEV__ && enableEventAPI) {
270
+ if (type === REACT_EVENT_COMPONENT_TYPE) {
271
+ return EVENT_COMPONENT_CONTEXT;
272
+ } else if (type === REACT_EVENT_TARGET_TYPE) {
273
+ warning(
274
+ parentHostContext === EVENT_COMPONENT_CONTEXT,
275
+ 'validateDOMNesting: React event targets must be direct children of event components.',
276
+ );
277
+ return EVENT_TARGET_CONTEXT;
278
+ }
279
+ }
280
+ return parentHostContext;
281
+ },
282
+
283
getPublicInstance(instance) {
284
return instance;
285
},
@@ -333,6 +363,20 @@ function createReactNoop(reconciler: Function, useMutation: boolean) {
363
hostContext: Object,
364
internalInstanceHandle: Object,
365
): TextInstance {
366
+ if (__DEV__ && enableEventAPI) {
367
+ warning(
368
+ hostContext !== EVENT_COMPONENT_CONTEXT,
369
+ 'validateDOMNesting: React event components cannot have text DOM nodes as children. ' +
370
+ 'Wrap the child text "%s" in an element.',
371
+ text,
372
+ );
373
+ warning(
374
+ hostContext !== EVENT_TARGET_CONTEXT,
375
+ 'validateDOMNesting: React event targets cannot have text DOM nodes as children. ' +
376
+ 'Wrap the child text "%s" in an element.',
377
+ text,
378
+ );
379
+ }
380
if (hostContext === UPPERCASE_CONTEXT) {
381
text = text.toUpperCase();
382
}
@@ -363,6 +407,21 @@ function createReactNoop(reconciler: Function, useMutation: boolean) {
407
408
isPrimaryRenderer: true,
409
supportsHydration: false,
410
+
411
+ handleEventComponent() {
412
+ // NO-OP
413
+ },
414
+
415
+ handleEventTarget(
416
+ type: Symbol | number,
417
+ props: Props,
418
+ internalInstanceHandle: Object,
419
+ ) {
420
+ if (type === REACT_EVENT_TARGET_TOUCH_HIT) {
421
+ // Validates that there is a single element
422
+ getElementFromTouchHitTarget(internalInstanceHandle);
423
+ }
424
+ },
425
};
426
427
const hostConfig = useMutation
packages/react-reconciler/src/ReactFiber.js
+63
-2
@@ -8,7 +8,13 @@
8
*/
9
10
import type {ReactElement, Source} from 'shared/ReactElementType';
11
-import type {ReactFragment, ReactPortal, RefObject} from 'shared/ReactTypes';
11
+import type {
12
+ ReactFragment,
13
+ ReactPortal,
14
+ RefObject,
15
+ ReactEventComponent,
16
+ ReactEventTarget,
17
+} from 'shared/ReactTypes';
18
import type {WorkTag} from 'shared/ReactWorkTags';
19
import type {TypeOfMode} from './ReactTypeOfMode';
20
import type {SideEffectTag} from 'shared/ReactSideEffectTags';
@@ -19,7 +25,7 @@ import type {HookType} from './ReactFiberHooks';
25
26
import invariant from 'shared/invariant';
27
import warningWithoutStack from 'shared/warningWithoutStack';
22
-import {enableProfilerTimer} from 'shared/ReactFeatureFlags';
28
+import {enableProfilerTimer, enableEventAPI} from 'shared/ReactFeatureFlags';
29
import {NoEffect} from 'shared/ReactSideEffectTags';
30
import {
31
IndeterminateComponent,
@@ -38,6 +44,8 @@ import {
44
FunctionComponent,
45
MemoComponent,
46
LazyComponent,
47
+ EventComponent,
48
+ EventTarget,
49
} from 'shared/ReactWorkTags';
50
import getComponentName from 'shared/getComponentName';
51
@@ -60,6 +68,8 @@ import {
68
REACT_SUSPENSE_TYPE,
69
REACT_MEMO_TYPE,
70
REACT_LAZY_TYPE,
71
+ REACT_EVENT_COMPONENT_TYPE,
72
+ REACT_EVENT_TARGET_TYPE,
73
} from 'shared/ReactSymbols';
74
75
let hasBadMapPolyfill;
@@ -503,6 +513,28 @@ export function createFiberFromTypeAndProps(
513
fiberTag = LazyComponent;
514
resolvedType = null;
515
break getTag;
516
+ case REACT_EVENT_COMPONENT_TYPE:
517
+ if (enableEventAPI) {
518
+ return createFiberFromEventComponent(
519
+ type,
520
+ pendingProps,
521
+ mode,
522
+ expirationTime,
523
+ key,
524
+ );
525
+ }
526
+ break;
527
+ case REACT_EVENT_TARGET_TYPE:
528
+ if (enableEventAPI) {
529
+ return createFiberFromEventTarget(
530
+ type,
531
+ pendingProps,
532
+ mode,
533
+ expirationTime,
534
+ key,
535
+ );
536
+ }
537
+ break;
538
}
539
}
540
let info = '';
@@ -581,6 +613,35 @@ export function createFiberFromFragment(
613
return fiber;
614
}
615
616
+export function createFiberFromEventComponent(
617
+ eventComponent: ReactEventComponent,
618
+ pendingProps: any,
619
+ mode: TypeOfMode,
620
+ expirationTime: ExpirationTime,
621
+ key: null | string,
622
+): Fiber {
623
+ const fiber = createFiber(EventComponent, pendingProps, key, mode);
624
+ fiber.elementType = eventComponent;
625
+ fiber.type = eventComponent;
626
+ fiber.stateNode = new Map();
627
+ fiber.expirationTime = expirationTime;
628
+ return fiber;
629
+}
630
+
631
+export function createFiberFromEventTarget(
632
+ eventTarget: ReactEventTarget,
633
+ pendingProps: any,
634
+ mode: TypeOfMode,
635
+ expirationTime: ExpirationTime,
636
+ key: null | string,
637
+): Fiber {
638
+ const fiber = createFiber(EventTarget, pendingProps, key, mode);
639
+ fiber.elementType = eventTarget;
640
+ fiber.type = eventTarget;
641
+ fiber.expirationTime = expirationTime;
642
+ return fiber;
643
+}
644
+
645
function createFiberFromProfiler(
646
pendingProps: any,
647
mode: TypeOfMode,
packages/react-reconciler/src/ReactFiberBeginWork.js
+52
-1
@@ -35,6 +35,8 @@ import {
35
SimpleMemoComponent,
36
LazyComponent,
37
IncompleteClassComponent,
38
+ EventComponent,
39
+ EventTarget,
40
} from 'shared/ReactWorkTags';
41
import {
42
NoEffect,
@@ -52,6 +54,7 @@ import {
54
debugRenderPhaseSideEffectsForStrictMode,
55
enableProfilerTimer,
56
enableSuspenseServerRenderer,
57
+ enableEventAPI,
58
} from 'shared/ReactFeatureFlags';
59
import invariant from 'shared/invariant';
60
import shallowEqual from 'shared/shallowEqual';
@@ -93,7 +96,11 @@ import {
96
registerSuspenseInstanceRetry,
97
} from './ReactFiberHostConfig';
98
import type {SuspenseInstance} from './ReactFiberHostConfig';
96
-import {pushHostContext, pushHostContainer} from './ReactFiberHostContext';
99
+import {
100
+ pushHostContext,
101
+ pushHostContainer,
102
+ pushHostContextForEvent,
103
+} from './ReactFiberHostContext';
104
import {
105
pushProvider,
106
propagateContextChange,
@@ -1943,6 +1950,34 @@ function updateContextConsumer(
1950
return workInProgress.child;
1951
}
1952
1953
+function updateEventComponent(current, workInProgress, renderExpirationTime) {
1954
+ const nextProps = workInProgress.pendingProps;
1955
+ let nextChildren = nextProps.children;
1956
+
1957
+ reconcileChildren(
1958
+ current,
1959
+ workInProgress,
1960
+ nextChildren,
1961
+ renderExpirationTime,
1962
+ );
1963
+ pushHostContextForEvent(workInProgress);
1964
+ return workInProgress.child;
1965
+}
1966
+
1967
+function updateEventTarget(current, workInProgress, renderExpirationTime) {
1968
+ const nextProps = workInProgress.pendingProps;
1969
+ let nextChildren = nextProps.children;
1970
+
1971
+ reconcileChildren(
1972
+ current,
1973
+ workInProgress,
1974
+ nextChildren,
1975
+ renderExpirationTime,
1976
+ );
1977
+ pushHostContextForEvent(workInProgress);
1978
+ return workInProgress.child;
1979
+}
1980
+
1981
export function markWorkInProgressReceivedUpdate() {
1982
didReceiveUpdate = true;
1983
}
@@ -2259,6 +2294,22 @@ function beginWork(
2294
}
2295
break;
2296
}
2297
+ case EventComponent: {
2298
+ if (enableEventAPI) {
2299
+ return updateEventComponent(
2300
+ current,
2301
+ workInProgress,
2302
+ renderExpirationTime,
2303
+ );
2304
+ }
2305
+ break;
2306
+ }
2307
+ case EventTarget: {
2308
+ if (enableEventAPI) {
2309
+ return updateEventTarget(current, workInProgress, renderExpirationTime);
2310
+ }
2311
+ break;
2312
+ }
2313
}
2314
invariant(
2315
false,
packages/react-reconciler/src/ReactFiberCommitWork.js
+2
-16
@@ -43,7 +43,6 @@ import {
43
IncompleteClassComponent,
44
MemoComponent,
45
SimpleMemoComponent,
46
- EventTarget,
46
} from 'shared/ReactWorkTags';
47
import {
48
invokeGuardedCallback,
@@ -91,7 +90,6 @@ import {
90
hideTextInstance,
91
unhideInstance,
92
unhideTextInstance,
94
- handleEventTarget,
93
} from './ReactFiberHostConfig';
94
import {
95
captureCommitPhaseError,
@@ -301,7 +299,6 @@ function commitBeforeMutationLifeCycles(
299
case HostText:
300
case HostPortal:
301
case IncompleteClassComponent:
304
- case EventTarget:
302
// Nothing to do for these component types
303
return;
304
default: {
@@ -588,7 +585,6 @@ function commitLifeCycles(
585
}
586
case SuspenseComponent:
587
case IncompleteClassComponent:
591
- case EventTarget:
588
break;
589
default: {
590
invariant(
@@ -819,12 +815,8 @@ function commitContainer(finishedWork: Fiber) {
815
}
816
817
switch (finishedWork.tag) {
822
- case ClassComponent: {
823
- return;
824
- }
825
- case HostComponent: {
826
- return;
827
- }
818
+ case ClassComponent:
819
+ case HostComponent:
820
case HostText: {
821
return;
822
}
@@ -1216,12 +1208,6 @@ function commitWork(current: Fiber | null, finishedWork: Fiber): void {
1208
case IncompleteClassComponent: {
1209
return;
1210
}
1219
- case EventTarget: {
1220
- const newProps = finishedWork.memoizedProps;
1221
- const type = finishedWork.type.type;
1222
- handleEventTarget(type, newProps, finishedWork);
1223
- return;
1224
- }
1211
default: {
1212
invariant(
1213
false,
packages/react-reconciler/src/ReactFiberCompleteWork.js
+16
-5
@@ -66,6 +66,7 @@ import {
66
appendChildToContainerChildSet,
67
finalizeContainerChildren,
68
handleEventComponent,
69
+ handleEventTarget,
70
} from './ReactFiberHostConfig';
71
import {
72
getRootHostContainer,
@@ -85,7 +86,10 @@ import {
86
skipPastDehydratedSuspenseInstance,
87
popHydrationState,
88
} from './ReactFiberHydrationContext';
88
-import {enableSuspenseServerRenderer} from 'shared/ReactFeatureFlags';
89
+import {
90
+ enableSuspenseServerRenderer,
91
+ enableEventAPI,
92
+} from 'shared/ReactFeatureFlags';
93
94
function markUpdate(workInProgress: Fiber) {
95
// Tag the fiber with an update effect. This turns a Placement into
@@ -766,13 +770,20 @@ function completeWork(
770
break;
771
}
772
case EventComponent: {
769
- const rootContainerInstance = getRootHostContainer();
770
- const responder = workInProgress.type.responder;
771
- handleEventComponent(responder, rootContainerInstance, workInProgress);
773
+ if (enableEventAPI) {
774
+ popHostContext(workInProgress);
775
+ const rootContainerInstance = getRootHostContainer();
776
+ const responder = workInProgress.type.responder;
777
+ handleEventComponent(responder, rootContainerInstance, workInProgress);
778
+ }
779
break;
780
}
781
case EventTarget: {
775
- markUpdate(workInProgress);
782
+ if (enableEventAPI) {
783
+ popHostContext(workInProgress);
784
+ const type = workInProgress.type.type;
785
+ handleEventTarget(type, newProps, workInProgress);
786
+ }
787
break;
788
}
789
default:
packages/react-reconciler/src/ReactFiberHostContext.js
+22
-1
@@ -13,7 +13,11 @@ import type {Container, HostContext} from './ReactFiberHostConfig';
13
14
import invariant from 'shared/invariant';
15
16
-import {getChildHostContext, getRootHostContext} from './ReactFiberHostConfig';
16
+import {
17
+ getChildHostContext,
18
+ getRootHostContext,
19
+ getChildHostContextForEvent,
20
+} from './ReactFiberHostConfig';
21
import {createCursor, push, pop} from './ReactFiberStack';
22
23
declare class NoContextT {}
@@ -92,6 +96,22 @@ function pushHostContext(fiber: Fiber): void {
96
push(contextStackCursor, nextContext, fiber);
97
}
98
99
+function pushHostContextForEvent(fiber: Fiber): void {
100
+ const context: HostContext = requiredContext(contextStackCursor.current);
101
+ const eventTypeof = fiber.type.$$typeof;
102
+ const nextContext = getChildHostContextForEvent(context, eventTypeof);
103
+
104
+ // Don't push this Fiber's context unless it's unique.
105
+ if (context === nextContext) {
106
+ return;
107
+ }
108
+
109
+ // Track the context and the Fiber that provided it.
110
+ // This enables us to pop only Fibers that provide unique contexts.
111
+ push(contextFiberStackCursor, fiber, fiber);
112
+ push(contextStackCursor, nextContext, fiber);
113
+}
114
+
115
function popHostContext(fiber: Fiber): void {
116
// Do not pop unless this Fiber provided the current context.
117
// pushHostContext() only pushes Fibers that provide unique contexts.
@@ -110,4 +130,5 @@ export {
130
popHostContext,
131
pushHostContainer,
132
pushHostContext,
133
+ pushHostContextForEvent,
134
};
packages/react-reconciler/src/__tests__/ReactFiberEvents-test-internal.js
new
+361
@@ -0,0 +1,361 @@
1
+/**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ * @emails react-core
8
+ * @jest-environment node
9
+ */
10
+
11
+'use strict';
12
+
13
+let React;
14
+let ReactNoop;
15
+let Scheduler;
16
+let ReactFeatureFlags;
17
+let EventComponent;
18
+let ReactTestRenderer;
19
+let EventTarget;
20
+let ReactEvents;
21
+
22
+const noOpResponder = {
23
+ targetEventTypes: [],
24
+ handleEvent() {},
25
+};
26
+
27
+function createReactEventComponent() {
28
+ return {
29
+ $$typeof: Symbol.for('react.event_component'),
30
+ props: null,
31
+ responder: noOpResponder,
32
+ };
33
+}
34
+
35
+function init() {
36
+ jest.resetModules();
37
+ ReactFeatureFlags = require('shared/ReactFeatureFlags');
38
+ ReactFeatureFlags.enableEventAPI = true;
39
+ React = require('react');
40
+ Scheduler = require('scheduler');
41
+ ReactEvents = require('react-events');
42
+}
43
+
44
+function initNoopRenderer() {
45
+ init();
46
+ ReactNoop = require('react-noop-renderer');
47
+}
48
+
49
+function initTestRenderer() {
50
+ init();
51
+ ReactTestRenderer = require('react-test-renderer');
52
+}
53
+
54
+// This is a new feature in Fiber so I put it in its own test file. It could
55
+// probably move to one of the other test files once it is official.
56
+describe('ReactTopLevelText', () => {
57
+ describe('NoopRenderer', () => {
58
+ beforeEach(() => {
59
+ initNoopRenderer();
60
+ EventComponent = createReactEventComponent();
61
+ EventTarget = ReactEvents.TouchHitTarget;
62
+ });
63
+
64
+ it('should render a simple event component with a single child', () => {
65
+ const Test = () => (
66
+ <EventComponent>
67
+ <div>Hello world</div>
68
+ </EventComponent>
69
+ );
70
+
71
+ ReactNoop.render(<Test />);
72
+ expect(Scheduler).toFlushWithoutYielding();
73
+ expect(ReactNoop).toMatchRenderedOutput(<div>Hello world</div>);
74
+ });
75
+
76
+ it('should warn when an event component has a direct text child', () => {
77
+ const Test = () => <EventComponent>Hello world</EventComponent>;
78
+
79
+ expect(() => {
80
+ ReactNoop.render(<Test />);
81
+ expect(Scheduler).toFlushWithoutYielding();
82
+ }).toWarnDev(
83
+ 'Warning: validateDOMNesting: React event components cannot have text DOM nodes as children. ' +
84
+ 'Wrap the child text "Hello world" in an element.',
85
+ );
86
+ });
87
+
88
+ it('should warn when an event component has a direct text child #2', () => {
89
+ const ChildWrapper = () => 'Hello world';
90
+ const Test = () => (
91
+ <EventComponent>
92
+ <ChildWrapper />
93
+ </EventComponent>
94
+ );
95
+
96
+ expect(() => {
97
+ ReactNoop.render(<Test />);
98
+ expect(Scheduler).toFlushWithoutYielding();
99
+ }).toWarnDev(
100
+ 'Warning: validateDOMNesting: React event components cannot have text DOM nodes as children. ' +
101
+ 'Wrap the child text "Hello world" in an element.',
102
+ );
103
+ });
104
+
105
+ it('should render a simple event component with a single event target', () => {
106
+ const Test = () => (
107
+ <EventComponent>
108
+ <EventTarget>
109
+ <div>Hello world</div>
110
+ </EventTarget>
111
+ </EventComponent>
112
+ );
113
+
114
+ ReactNoop.render(<Test />);
115
+ expect(Scheduler).toFlushWithoutYielding();
116
+ expect(ReactNoop).toMatchRenderedOutput(<div>Hello world</div>);
117
+ });
118
+
119
+ it('should warn when an event target has a direct text child', () => {
120
+ const Test = () => (
121
+ <EventComponent>
122
+ <EventTarget>Hello world</EventTarget>
123
+ </EventComponent>
124
+ );
125
+
126
+ expect(() => {
127
+ ReactNoop.render(<Test />);
128
+ expect(Scheduler).toFlushWithoutYielding();
129
+ }).toWarnDev([
130
+ 'Warning: validateDOMNesting: React event targets cannot have text DOM nodes as children. ' +
131
+ 'Wrap the child text "Hello world" in an element.',
132
+ 'Warning: <TouchHitTarget> must have a single DOM element as a child. Found no children.',
133
+ ]);
134
+ });
135
+
136
+ it('should warn when an event target has a direct text child #2', () => {
137
+ const ChildWrapper = () => 'Hello world';
138
+ const Test = () => (
139
+ <EventComponent>
140
+ <EventTarget>
141
+ <ChildWrapper />
142
+ </EventTarget>
143
+ </EventComponent>
144
+ );
145
+
146
+ expect(() => {
147
+ ReactNoop.render(<Test />);
148
+ expect(Scheduler).toFlushWithoutYielding();
149
+ }).toWarnDev([
150
+ 'Warning: validateDOMNesting: React event targets cannot have text DOM nodes as children. ' +
151
+ 'Wrap the child text "Hello world" in an element.',
152
+ 'Warning: <TouchHitTarget> must have a single DOM element as a child. Found no children.',
153
+ ]);
154
+ });
155
+
156
+ it('should warn when an event target has more than one child', () => {
157
+ const Test = () => (
158
+ <EventComponent>
159
+ <EventTarget>
160
+ <span>Child 1</span>
161
+ <span>Child 2</span>
162
+ </EventTarget>
163
+ </EventComponent>
164
+ );
165
+
166
+ expect(() => {
167
+ ReactNoop.render(<Test />);
168
+ expect(Scheduler).toFlushWithoutYielding();
169
+ }).toWarnDev(
170
+ 'Warning: <TouchHitTarget> must only have a single DOM element as a child. Found many children.',
171
+ );
172
+ });
173
+
174
+ it('should warn if an event target is not a direct child of an event component', () => {
175
+ const Test = () => (
176
+ <EventComponent>
177
+ <div>
178
+ <EventTarget>
179
+ <span>Child 1</span>
180
+ </EventTarget>
181
+ </div>
182
+ </EventComponent>
183
+ );
184
+
185
+ expect(() => {
186
+ ReactNoop.render(<Test />);
187
+ expect(Scheduler).toFlushWithoutYielding();
188
+ }).toWarnDev(
189
+ 'Warning: validateDOMNesting: React event targets must be direct children of event components.',
190
+ );
191
+ });
192
+ });
193
+
194
+ describe('TestRenderer', () => {
195
+ beforeEach(() => {
196
+ initTestRenderer();
197
+ EventComponent = createReactEventComponent();
198
+ EventTarget = ReactEvents.TouchHitTarget;
199
+ });
200
+
201
+ it('should render a simple event component with a single child', () => {
202
+ const Test = () => (
203
+ <EventComponent>
204
+ <div>Hello world</div>
205
+ </EventComponent>
206
+ );
207
+
208
+ const root = ReactTestRenderer.create(null);
209
+ root.update(<Test />);
210
+ expect(Scheduler).toFlushWithoutYielding();
211
+ expect(root).toMatchRenderedOutput(<div>Hello world</div>);
212
+ });
213
+
214
+ it('should warn when an event component has a direct text child', () => {
215
+ const Test = () => <EventComponent>Hello world</EventComponent>;
216
+
217
+ const root = ReactTestRenderer.create(null);
218
+ expect(() => {
219
+ root.update(<Test />);
220
+ expect(Scheduler).toFlushWithoutYielding();
221
+ }).toWarnDev(
222
+ 'Warning: validateDOMNesting: React event components cannot have text DOM nodes as children. ' +
223
+ 'Wrap the child text "Hello world" in an element.',
224
+ );
225
+ });
226
+
227
+ it('should warn when an event component has a direct text child #2', () => {
228
+ const ChildWrapper = () => 'Hello world';
229
+ const Test = () => (
230
+ <EventComponent>
231
+ <ChildWrapper />
232
+ </EventComponent>
233
+ );
234
+
235
+ const root = ReactTestRenderer.create(null);
236
+ expect(() => {
237
+ root.update(<Test />);
238
+ expect(Scheduler).toFlushWithoutYielding();
239
+ }).toWarnDev(
240
+ 'Warning: validateDOMNesting: React event components cannot have text DOM nodes as children. ' +
241
+ 'Wrap the child text "Hello world" in an element.',
242
+ );
243
+ });
244
+
245
+ it('should render a simple event component with a single event target', () => {
246
+ const Test = () => (
247
+ <EventComponent>
248
+ <EventTarget>
249
+ <div>Hello world</div>
250
+ </EventTarget>
251
+ </EventComponent>
252
+ );
253
+
254
+ const root = ReactTestRenderer.create(null);
255
+ root.update(<Test />);
256
+ expect(Scheduler).toFlushWithoutYielding();
257
+ expect(root).toMatchRenderedOutput(<div>Hello world</div>);
258
+
259
+ const Test2 = () => (
260
+ <EventComponent>
261
+ <EventTarget>
262
+ <span>I am now a span</span>
263
+ </EventTarget>
264
+ </EventComponent>
265
+ );
266
+
267
+ root.update(<Test2 />);
268
+ expect(Scheduler).toFlushWithoutYielding();
269
+ expect(root).toMatchRenderedOutput(<span>I am now a span</span>);
270
+ });
271
+
272
+ it('should warn when an event target has a direct text child', () => {
273
+ const Test = () => (
274
+ <EventComponent>
275
+ <EventTarget>Hello world</EventTarget>
276
+ </EventComponent>
277
+ );
278
+
279
+ const root = ReactTestRenderer.create(null);
280
+ expect(() => {
281
+ root.update(<Test />);
282
+ expect(Scheduler).toFlushWithoutYielding();
283
+ }).toWarnDev([
284
+ 'Warning: validateDOMNesting: React event targets cannot have text DOM nodes as children. ' +
285
+ 'Wrap the child text "Hello world" in an element.',
286
+ 'Warning: <TouchHitTarget> must have a single DOM element as a child. Found no children.',
287
+ ]);
288
+ });
289
+
290
+ it('should warn when an event target has a direct text child #2', () => {
291
+ const ChildWrapper = () => 'Hello world';
292
+ const Test = () => (
293
+ <EventComponent>
294
+ <EventTarget>
295
+ <ChildWrapper />
296
+ </EventTarget>
297
+ </EventComponent>
298
+ );
299
+
300
+ const root = ReactTestRenderer.create(null);
301
+ expect(() => {
302
+ root.update(<Test />);
303
+ expect(Scheduler).toFlushWithoutYielding();
304
+ }).toWarnDev([
305
+ 'Warning: validateDOMNesting: React event targets cannot have text DOM nodes as children. ' +
306
+ 'Wrap the child text "Hello world" in an element.',
307
+ 'Warning: <TouchHitTarget> must have a single DOM element as a child. Found no children.',
308
+ ]);
309
+ });
310
+
311
+ it('should warn when an event target has more than one child', () => {
312
+ const Test = () => (
313
+ <EventComponent>
314
+ <EventTarget>
315
+ <span>Child 1</span>
316
+ <span>Child 2</span>
317
+ </EventTarget>
318
+ </EventComponent>
319
+ );
320
+
321
+ const root = ReactTestRenderer.create(null);
322
+ expect(() => {
323
+ root.update(<Test />);
324
+ expect(Scheduler).toFlushWithoutYielding();
325
+ }).toWarnDev(
326
+ 'Warning: <TouchHitTarget> must only have a single DOM element as a child. Found many children.',
327
+ );
328
+ // This should not fire a warning, as this is now valid.
329
+ const Test2 = () => (
330
+ <EventComponent>
331
+ <EventTarget>
332
+ <span>Child 1</span>
333
+ </EventTarget>
334
+ </EventComponent>
335
+ );
336
+ root.update(<Test2 />);
337
+ expect(Scheduler).toFlushWithoutYielding();
338
+ expect(root).toMatchRenderedOutput(<span>Child 1</span>);
339
+ });
340
+
341
+ it('should warn if an event target is not a direct child of an event component', () => {
342
+ const Test = () => (
343
+ <EventComponent>
344
+ <div>
345
+ <EventTarget>
346
+ <span>Child 1</span>
347
+ </EventTarget>
348
+ </div>
349
+ </EventComponent>
350
+ );
351
+
352
+ const root = ReactTestRenderer.create(null);
353
+ expect(() => {
354
+ root.update(<Test />);
355
+ expect(Scheduler).toFlushWithoutYielding();
356
+ }).toWarnDev(
357
+ 'Warning: validateDOMNesting: React event targets must be direct children of event components.',
358
+ );
359
+ });
360
+ });
361
+});
packages/react-reconciler/src/__tests__/ReactFiberHostContext-test.js
+3
@@ -31,6 +31,9 @@ describe('ReactFiberHostContext', () => {
31
getChildHostContext: function() {
32
return null;
33
},
34
+ getChildHostContextForEvent: function() {
35
+ return null;
36
+ },
37
shouldSetTextContent: function() {
38
return false;
39
},
packages/react-reconciler/src/forks/ReactFiberHostConfig.custom.js
+2
@@ -41,6 +41,8 @@ export opaque type NoTimeout = mixed; // eslint-disable-line no-undef
41
export const getPublicInstance = $$$hostConfig.getPublicInstance;
42
export const getRootHostContext = $$$hostConfig.getRootHostContext;
43
export const getChildHostContext = $$$hostConfig.getChildHostContext;
44
+export const getChildHostContextForEvent =
45
+ $$$hostConfig.getChildHostContextForEvent;
46
export const prepareForCommit = $$$hostConfig.prepareForCommit;
47
export const resetAfterCommit = $$$hostConfig.resetAfterCommit;
48
export const createInstance = $$$hostConfig.createInstance;
packages/react-test-renderer/src/ReactTestHostConfig.js
+47
-2
@@ -10,6 +10,14 @@
10
import warning from 'shared/warning';
11
12
import type {ReactEventResponder} from 'shared/ReactTypes';
13
+import {
14
+ REACT_EVENT_COMPONENT_TYPE,
15
+ REACT_EVENT_TARGET_TYPE,
16
+ REACT_EVENT_TARGET_TOUCH_HIT,
17
+} from 'shared/ReactSymbols';
18
+import getElementFromTouchHitTarget from 'shared/getElementFromTouchHitTarget';
19
+
20
+import {enableEventAPI} from 'shared/ReactFeatureFlags';
21
22
export type Type = string;
23
export type Props = Object;
@@ -42,6 +50,8 @@ export type NoTimeout = -1;
50
export * from 'shared/HostConfigWithNoPersistence';
51
export * from 'shared/HostConfigWithNoHydration';
52
53
+const EVENT_COMPONENT_CONTEXT = {};
54
+const EVENT_TARGET_CONTEXT = {};
55
const NO_CONTEXT = {};
56
const UPDATE_SIGNAL = {};
57
if (__DEV__) {
@@ -117,6 +127,24 @@ export function getChildHostContext(
127
return NO_CONTEXT;
128
}
129
130
+export function getChildHostContextForEvent(
131
+ parentHostContext: HostContext,
132
+ type: Symbol | number,
133
+): HostContext {
134
+ if (__DEV__ && enableEventAPI) {
135
+ if (type === REACT_EVENT_COMPONENT_TYPE) {
136
+ return EVENT_COMPONENT_CONTEXT;
137
+ } else if (type === REACT_EVENT_TARGET_TYPE) {
138
+ warning(
139
+ parentHostContext === EVENT_COMPONENT_CONTEXT,
140
+ 'validateDOMNesting: React event targets must be direct children of event components.',
141
+ );
142
+ return EVENT_TARGET_CONTEXT;
143
+ }
144
+ }
145
+ return NO_CONTEXT;
146
+}
147
+
148
export function prepareForCommit(containerInfo: Container): void {
149
// noop
150
}
@@ -188,6 +216,20 @@ export function createTextInstance(
216
hostContext: Object,
217
internalInstanceHandle: Object,
218
): TextInstance {
219
+ if (__DEV__ && enableEventAPI) {
220
+ warning(
221
+ hostContext !== EVENT_COMPONENT_CONTEXT,
222
+ 'validateDOMNesting: React event components cannot have text DOM nodes as children. ' +
223
+ 'Wrap the child text "%s" in an element.',
224
+ text,
225
+ );
226
+ warning(
227
+ hostContext !== EVENT_TARGET_CONTEXT,
228
+ 'validateDOMNesting: React event targets cannot have text DOM nodes as children. ' +
229
+ 'Wrap the child text "%s" in an element.',
230
+ text,
231
+ );
232
+ }
233
return {
234
text,
235
isHidden: false,
@@ -272,9 +314,12 @@ export function handleEventComponent(
314
}
315
316
export function handleEventTarget(
275
- type: string,
317
+ type: Symbol | number,
318
props: Props,
319
internalInstanceHandle: Object,
320
) {
279
- // TODO: add handleEventTarget implementation
321
+ if (type === REACT_EVENT_TARGET_TOUCH_HIT) {
322
+ // Validates that there is a single element
323
+ getElementFromTouchHitTarget(internalInstanceHandle);
324
+ }
325
}
packages/shared/ReactSymbols.js
+1
-1
@@ -47,7 +47,7 @@ export const REACT_SUSPENSE_TYPE = hasSymbol
47
export const REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;
48
export const REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;
49
export const REACT_EVENT_COMPONENT_TYPE = hasSymbol
50
- ? Symbol.for('react.event')
50
+ ? Symbol.for('react.event_component')
51
: 0xead5;
52
export const REACT_EVENT_TARGET_TYPE = hasSymbol
53
? Symbol.for('react.event_target')
packages/shared/ReactTypes.js
+7
-3
@@ -14,7 +14,7 @@ export type ReactNode =
14
| ReactFragment
15
| ReactProvider<any>
16
| ReactConsumer<any>
17
- | ReactEvent
17
+ | ReactEventComponent
18
| ReactEventTarget;
19
20
export type ReactEmpty = null | void | boolean;
@@ -81,13 +81,17 @@ export type RefObject = {|
81
current: any,
82
|};
83
84
+export type ReactEventResponderEventType =
85
+ | string
86
+ | {name: string, passive?: boolean, capture?: boolean};
87
+
88
export type ReactEventResponder = {
85
- targetEventTypes: Array<string>,
89
+ targetEventTypes: Array<ReactEventResponderEventType>,
90
createInitialState?: (props: Object) => Object,
91
handleEvent: (context: Object, props: Object, state: Object) => void,
92
};
93
90
-export type ReactEvent = {|
94
+export type ReactEventComponent = {|
95
$$typeof: Symbol | number,
96
props: null | Object,
97
responder: ReactEventResponder,
packages/shared/forks/ReactFeatureFlags.test-renderer.js
+1
@@ -27,6 +27,7 @@ export const enableStableConcurrentModeAPIs = false;
27
export const warnAboutShorthandPropertyCollision = false;
28
export const enableSchedulerDebugging = false;
29
export const warnAboutDeprecatedSetNativeProps = false;
30
+export const enableEventAPI = false;
31
32
// Only used in www builds.
33
export function addUserTimingListener() {
packages/shared/getElementFromTouchHitTarget.js
new
+85
@@ -0,0 +1,85 @@
1
+/**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ * @flow
8
+ */
9
+
10
+import type {Fiber} from 'react-reconciler/src/ReactFiber';
11
+
12
+import {HostComponent} from 'shared/ReactWorkTags';
13
+import warning from 'shared/warning';
14
+
15
+type HostContext = Object;
16
+
17
+type TextInstance =
18
+ | Text
19
+ | {|
20
+ text: string,
21
+ id: number,
22
+ hidden: boolean,
23
+ context: HostContext,
24
+ |};
25
+
26
+type Instance =
27
+ | Element
28
+ | {|
29
+ type: string,
30
+ id: number,
31
+ children: Array<Instance | TextInstance>,
32
+ text: string | null,
33
+ prop: any,
34
+ hidden: boolean,
35
+ context: HostContext,
36
+ |};
37
+
38
+export default function getElementFromTouchHitTarget(
39
+ targetFiber: Fiber,
40
+): null | Instance {
41
+ // Traverse through child fibers and find the first host components
42
+ let node = targetFiber.child;
43
+ let hostComponent = null;
44
+
45
+ while (node !== null) {
46
+ if (node.tag === HostComponent) {
47
+ if (__DEV__) {
48
+ if (hostComponent === null) {
49
+ hostComponent = node.stateNode;
50
+ } else {
51
+ warning(
52
+ false,
53
+ '<TouchHitTarget> must only have a single DOM element as a child. ' +
54
+ 'Found many children.',
55
+ );
56
+ }
57
+ while (node !== null) {
58
+ if (node === targetFiber) {
59
+ return hostComponent;
60
+ } else if (node.sibling !== null) {
61
+ node = node.sibling;
62
+ break;
63
+ }
64
+ node = node.return;
65
+ }
66
+ } else {
67
+ return node.stateNode;
68
+ }
69
+ } else if (node.child !== null) {
70
+ node = node.child;
71
+ } else if (node.sibling !== null) {
72
+ node = node.sibling;
73
+ } else {
74
+ break;
75
+ }
76
+ }
77
+ if (__DEV__) {
78
+ warning(
79
+ hostComponent !== null,
80
+ '<TouchHitTarget> must have a single DOM element as a child. ' +
81
+ 'Found no children.',
82
+ );
83
+ }
84
+ return hostComponent;
85
+}
scripts/rollup/results.json
+239
-239
@@ -4,29 +4,29 @@
4
"filename": "react.development.js",
5
"bundleType": "UMD_DEV",
6
"packageName": "react",
7
- "size": 102032,
8
- "gzip": 26457
7
+ "size": 102492,
8
+ "gzip": 26625
9
},
10
{
11
"filename": "react.production.min.js",
12
"bundleType": "UMD_PROD",
13
"packageName": "react",
14
- "size": 12564,
15
- "gzip": 4826
14
+ "size": 12609,
15
+ "gzip": 4834
16
},
17
{
18
"filename": "react.development.js",
19
"bundleType": "NODE_DEV",
20
"packageName": "react",
21
- "size": 63704,
22
- "gzip": 17181
21
+ "size": 64139,
22
+ "gzip": 17318
23
},
24
{
25
"filename": "react.production.min.js",
26
"bundleType": "NODE_PROD",
27
"packageName": "react",
28
- "size": 6831,
29
- "gzip": 2817
28
+ "size": 6834,
29
+ "gzip": 2814
30
},
31
{
32
"filename": "React-dev.js",
@@ -46,29 +46,29 @@
46
"filename": "react-dom.development.js",
47
"bundleType": "UMD_DEV",
48
"packageName": "react-dom",
49
- "size": 791682,
50
- "gzip": 179962
49
+ "size": 803793,
50
+ "gzip": 183116
51
},
52
{
53
"filename": "react-dom.production.min.js",
54
"bundleType": "UMD_PROD",
55
"packageName": "react-dom",
56
- "size": 107808,
57
- "gzip": 34704
56
+ "size": 107752,
57
+ "gzip": 34911
58
},
59
{
60
"filename": "react-dom.development.js",
61
"bundleType": "NODE_DEV",
62
"packageName": "react-dom",
63
- "size": 786187,
64
- "gzip": 178415
63
+ "size": 798048,
64
+ "gzip": 181482
65
},
66
{
67
"filename": "react-dom.production.min.js",
68
"bundleType": "NODE_PROD",
69
"packageName": "react-dom",
70
- "size": 108031,
71
- "gzip": 34186
70
+ "size": 107733,
71
+ "gzip": 34431
72
},
73
{
74
"filename": "ReactDOM-dev.js",
@@ -88,29 +88,29 @@
88
"filename": "react-dom-test-utils.development.js",
89
"bundleType": "UMD_DEV",
90
"packageName": "react-dom",
91
- "size": 48181,
92
- "gzip": 13291
91
+ "size": 48274,
92
+ "gzip": 13318
93
},
94
{
95
"filename": "react-dom-test-utils.production.min.js",
96
"bundleType": "UMD_PROD",
97
"packageName": "react-dom",
98
- "size": 10504,
99
- "gzip": 3882
98
+ "size": 10511,
99
+ "gzip": 3880
100
},
101
{
102
"filename": "react-dom-test-utils.development.js",
103
"bundleType": "NODE_DEV",
104
"packageName": "react-dom",
105
- "size": 47895,
106
- "gzip": 13220
105
+ "size": 47988,
106
+ "gzip": 13245
107
},
108
{
109
"filename": "react-dom-test-utils.production.min.js",
110
"bundleType": "NODE_PROD",
111
"packageName": "react-dom",
112
- "size": 10281,
113
- "gzip": 3814
112
+ "size": 10288,
113
+ "gzip": 3812
114
},
115
{
116
"filename": "ReactTestUtils-dev.js",
@@ -123,29 +123,29 @@
123
"filename": "react-dom-unstable-native-dependencies.development.js",
124
"bundleType": "UMD_DEV",
125
"packageName": "react-dom",
126
- "size": 62058,
127
- "gzip": 16289
126
+ "size": 62061,
127
+ "gzip": 16285
128
},
129
{
130
"filename": "react-dom-unstable-native-dependencies.production.min.js",
131
"bundleType": "UMD_PROD",
132
"packageName": "react-dom",
133
- "size": 11263,
134
- "gzip": 3892
133
+ "size": 11266,
134
+ "gzip": 3889
135
},
136
{
137
"filename": "react-dom-unstable-native-dependencies.development.js",
138
"bundleType": "NODE_DEV",
139
"packageName": "react-dom",
140
- "size": 61722,
141
- "gzip": 16156
140
+ "size": 61725,
141
+ "gzip": 16151
142
},
143
{
144
"filename": "react-dom-unstable-native-dependencies.production.min.js",
145
"bundleType": "NODE_PROD",
146
"packageName": "react-dom",
147
- "size": 10998,
148
- "gzip": 3785
147
+ "size": 11001,
148
+ "gzip": 3783
149
},
150
{
151
"filename": "ReactDOMUnstableNativeDependencies-dev.js",
@@ -165,29 +165,29 @@
165
"filename": "react-dom-server.browser.development.js",
166
"bundleType": "UMD_DEV",
167
"packageName": "react-dom",
168
- "size": 130425,
169
- "gzip": 34746
168
+ "size": 133264,
169
+ "gzip": 35517
170
},
171
{
172
"filename": "react-dom-server.browser.production.min.js",
173
"bundleType": "UMD_PROD",
174
"packageName": "react-dom",
175
- "size": 19319,
176
- "gzip": 7379
175
+ "size": 19666,
176
+ "gzip": 7443
177
},
178
{
179
"filename": "react-dom-server.browser.development.js",
180
"bundleType": "NODE_DEV",
181
"packageName": "react-dom",
182
- "size": 126463,
183
- "gzip": 33795
182
+ "size": 129302,
183
+ "gzip": 34571
184
},
185
{
186
"filename": "react-dom-server.browser.production.min.js",
187
"bundleType": "NODE_PROD",
188
"packageName": "react-dom",
189
- "size": 19239,
190
- "gzip": 7368
189
+ "size": 19590,
190
+ "gzip": 7447
191
},
192
{
193
"filename": "ReactDOMServer-dev.js",
@@ -207,43 +207,43 @@
207
"filename": "react-dom-server.node.development.js",
208
"bundleType": "NODE_DEV",
209
"packageName": "react-dom",
210
- "size": 128570,
211
- "gzip": 34348
210
+ "size": 131409,
211
+ "gzip": 35129
212
},
213
{
214
"filename": "react-dom-server.node.production.min.js",
215
"bundleType": "NODE_PROD",
216
"packageName": "react-dom",
217
- "size": 20132,
218
- "gzip": 7685
217
+ "size": 20483,
218
+ "gzip": 7757
219
},
220
{
221
"filename": "react-art.development.js",
222
"bundleType": "UMD_DEV",
223
"packageName": "react-art",
224
- "size": 562387,
225
- "gzip": 121860
224
+ "size": 570224,
225
+ "gzip": 123819
226
},
227
{
228
"filename": "react-art.production.min.js",
229
"bundleType": "UMD_PROD",
230
"packageName": "react-art",
231
- "size": 99616,
232
- "gzip": 30538
231
+ "size": 99370,
232
+ "gzip": 30598
233
},
234
{
235
"filename": "react-art.development.js",
236
"bundleType": "NODE_DEV",
237
"packageName": "react-art",
238
- "size": 491818,
239
- "gzip": 104175
238
+ "size": 499479,
239
+ "gzip": 106084
240
},
241
{
242
"filename": "react-art.production.min.js",
243
"bundleType": "NODE_PROD",
244
"packageName": "react-art",
245
- "size": 63873,
246
- "gzip": 19446
245
+ "size": 63450,
246
+ "gzip": 19455
247
},
248
{
249
"filename": "ReactART-dev.js",
@@ -291,29 +291,29 @@
291
"filename": "react-test-renderer.development.js",
292
"bundleType": "UMD_DEV",
293
"packageName": "react-test-renderer",
294
- "size": 503952,
295
- "gzip": 106548
294
+ "size": 508633,
295
+ "gzip": 107760
296
},
297
{
298
"filename": "react-test-renderer.production.min.js",
299
"bundleType": "UMD_PROD",
300
"packageName": "react-test-renderer",
301
- "size": 65222,
302
- "gzip": 19962
301
+ "size": 64479,
302
+ "gzip": 19791
303
},
304
{
305
"filename": "react-test-renderer.development.js",
306
"bundleType": "NODE_DEV",
307
"packageName": "react-test-renderer",
308
- "size": 498258,
309
- "gzip": 105207
308
+ "size": 504043,
309
+ "gzip": 106587
310
},
311
{
312
"filename": "react-test-renderer.production.min.js",
313
"bundleType": "NODE_PROD",
314
"packageName": "react-test-renderer",
315
- "size": 64873,
316
- "gzip": 19614
315
+ "size": 64119,
316
+ "gzip": 19538
317
},
318
{
319
"filename": "ReactTestRenderer-dev.js",
@@ -326,29 +326,29 @@
326
"filename": "react-test-renderer-shallow.development.js",
327
"bundleType": "UMD_DEV",
328
"packageName": "react-test-renderer",
329
- "size": 38084,
330
- "gzip": 9724
329
+ "size": 38113,
330
+ "gzip": 9733
331
},
332
{
333
"filename": "react-test-renderer-shallow.production.min.js",
334
"bundleType": "UMD_PROD",
335
"packageName": "react-test-renderer",
336
- "size": 11382,
337
- "gzip": 3422
336
+ "size": 11385,
337
+ "gzip": 3419
338
},
339
{
340
"filename": "react-test-renderer-shallow.development.js",
341
"bundleType": "NODE_DEV",
342
"packageName": "react-test-renderer",
343
- "size": 32246,
344
- "gzip": 8323
343
+ "size": 32275,
344
+ "gzip": 8333
345
},
346
{
347
"filename": "react-test-renderer-shallow.production.min.js",
348
"bundleType": "NODE_PROD",
349
"packageName": "react-test-renderer",
350
- "size": 12043,
351
- "gzip": 3734
350
+ "size": 12046,
351
+ "gzip": 3733
352
},
353
{
354
"filename": "ReactShallowRenderer-dev.js",
@@ -361,57 +361,57 @@
361
"filename": "react-noop-renderer.development.js",
362
"bundleType": "NODE_DEV",
363
"packageName": "react-noop-renderer",
364
- "size": 28240,
365
- "gzip": 6740
364
+ "size": 26949,
365
+ "gzip": 6362
366
},
367
{
368
"filename": "react-noop-renderer.production.min.js",
369
"bundleType": "NODE_PROD",
370
"packageName": "react-noop-renderer",
371
- "size": 10081,
372
- "gzip": 3367
371
+ "size": 9933,
372
+ "gzip": 3165
373
},
374
{
375
"filename": "react-reconciler.development.js",
376
"bundleType": "NODE_DEV",
377
"packageName": "react-reconciler",
378
- "size": 489120,
379
- "gzip": 102507
378
+ "size": 497879,
379
+ "gzip": 104645
380
},
381
{
382
"filename": "react-reconciler.production.min.js",
383
"bundleType": "NODE_PROD",
384
"packageName": "react-reconciler",
385
- "size": 65080,
386
- "gzip": 19234
385
+ "size": 64551,
386
+ "gzip": 19325
387
},
388
{
389
"filename": "react-reconciler-persistent.development.js",
390
"bundleType": "NODE_DEV",
391
"packageName": "react-reconciler",
392
- "size": 487276,
393
- "gzip": 101780
392
+ "size": 495898,
393
+ "gzip": 103848
394
},
395
{
396
"filename": "react-reconciler-persistent.production.min.js",
397
"bundleType": "NODE_PROD",
398
"packageName": "react-reconciler",
399
- "size": 65091,
400
- "gzip": 19239
399
+ "size": 64562,
400
+ "gzip": 19330
401
},
402
{
403
"filename": "react-reconciler-reflection.development.js",
404
"bundleType": "NODE_DEV",
405
"packageName": "react-reconciler",
406
- "size": 16132,
407
- "gzip": 5091
406
+ "size": 16161,
407
+ "gzip": 5096
408
},
409
{
410
"filename": "react-reconciler-reflection.production.min.js",
411
"bundleType": "NODE_PROD",
412
"packageName": "react-reconciler",
413
- "size": 2757,
414
- "gzip": 1247
413
+ "size": 2760,
414
+ "gzip": 1244
415
},
416
{
417
"filename": "react-call-return.development.js",
@@ -431,29 +431,29 @@
431
"filename": "react-is.development.js",
432
"bundleType": "UMD_DEV",
433
"packageName": "react-is",
434
- "size": 8255,
435
- "gzip": 2495
434
+ "size": 8551,
435
+ "gzip": 2554
436
},
437
{
438
"filename": "react-is.production.min.js",
439
"bundleType": "UMD_PROD",
440
"packageName": "react-is",
441
- "size": 2342,
442
- "gzip": 898
441
+ "size": 2466,
442
+ "gzip": 928
443
},
444
{
445
"filename": "react-is.development.js",
446
"bundleType": "NODE_DEV",
447
"packageName": "react-is",
448
- "size": 8066,
449
- "gzip": 2445
448
+ "size": 8362,
449
+ "gzip": 2502
450
},
451
{
452
"filename": "react-is.production.min.js",
453
"bundleType": "NODE_PROD",
454
"packageName": "react-is",
455
- "size": 2339,
456
- "gzip": 838
455
+ "size": 2463,
456
+ "gzip": 870
457
},
458
{
459
"filename": "ReactIs-dev.js",
@@ -487,22 +487,22 @@
487
"filename": "create-subscription.development.js",
488
"bundleType": "NODE_DEV",
489
"packageName": "create-subscription",
490
- "size": 8535,
491
- "gzip": 2957
490
+ "size": 8538,
491
+ "gzip": 2952
492
},
493
{
494
"filename": "create-subscription.production.min.js",
495
"bundleType": "NODE_PROD",
496
"packageName": "create-subscription",
497
- "size": 2886,
498
- "gzip": 1346
497
+ "size": 2889,
498
+ "gzip": 1344
499
},
500
{
501
"filename": "React-dev.js",
502
"bundleType": "FB_WWW_DEV",
503
"packageName": "react",
504
- "size": 60786,
505
- "gzip": 16140
504
+ "size": 61163,
505
+ "gzip": 16239
506
},
507
{
508
"filename": "React-prod.js",
@@ -515,22 +515,22 @@
515
"filename": "ReactDOM-dev.js",
516
"bundleType": "FB_WWW_DEV",
517
"packageName": "react-dom",
518
- "size": 809740,
519
- "gzip": 179616
518
+ "size": 821918,
519
+ "gzip": 182691
520
},
521
{
522
"filename": "ReactDOM-prod.js",
523
"bundleType": "FB_WWW_PROD",
524
"packageName": "react-dom",
525
- "size": 329960,
526
- "gzip": 60112
525
+ "size": 333267,
526
+ "gzip": 61003
527
},
528
{
529
"filename": "ReactTestUtils-dev.js",
530
"bundleType": "FB_WWW_DEV",
531
"packageName": "react-dom",
532
- "size": 44795,
533
- "gzip": 12159
532
+ "size": 44870,
533
+ "gzip": 12188
534
},
535
{
536
"filename": "ReactDOMUnstableNativeDependencies-dev.js",
@@ -550,113 +550,113 @@
550
"filename": "ReactDOMServer-dev.js",
551
"bundleType": "FB_WWW_DEV",
552
"packageName": "react-dom",
553
- "size": 127337,
554
- "gzip": 33235
553
+ "size": 130310,
554
+ "gzip": 33947
555
},
556
{
557
"filename": "ReactDOMServer-prod.js",
558
"bundleType": "FB_WWW_PROD",
559
"packageName": "react-dom",
560
- "size": 46343,
561
- "gzip": 10662
560
+ "size": 46994,
561
+ "gzip": 10956
562
},
563
{
564
"filename": "ReactART-dev.js",
565
"bundleType": "FB_WWW_DEV",
566
"packageName": "react-art",
567
- "size": 501297,
568
- "gzip": 103384
567
+ "size": 509037,
568
+ "gzip": 105217
569
},
570
{
571
"filename": "ReactART-prod.js",
572
"bundleType": "FB_WWW_PROD",
573
"packageName": "react-art",
574
- "size": 200132,
575
- "gzip": 33817
574
+ "size": 201874,
575
+ "gzip": 34245
576
},
577
{
578
"filename": "ReactNativeRenderer-dev.js",
579
"bundleType": "RN_FB_DEV",
580
"packageName": "react-native-renderer",
581
- "size": 631255,
582
- "gzip": 134845
581
+ "size": 637829,
582
+ "gzip": 136280
583
},
584
{
585
"filename": "ReactNativeRenderer-prod.js",
586
"bundleType": "RN_FB_PROD",
587
"packageName": "react-native-renderer",
588
- "size": 252735,
589
- "gzip": 44084
588
+ "size": 251569,
589
+ "gzip": 43973
590
},
591
{
592
"filename": "ReactNativeRenderer-dev.js",
593
"bundleType": "RN_OSS_DEV",
594
"packageName": "react-native-renderer",
595
- "size": 631168,
596
- "gzip": 134810
595
+ "size": 637742,
596
+ "gzip": 136246
597
},
598
{
599
"filename": "ReactNativeRenderer-prod.js",
600
"bundleType": "RN_OSS_PROD",
601
"packageName": "react-native-renderer",
602
- "size": 252749,
603
- "gzip": 44079
602
+ "size": 251583,
603
+ "gzip": 43970
604
},
605
{
606
"filename": "ReactFabric-dev.js",
607
"bundleType": "RN_FB_DEV",
608
"packageName": "react-native-renderer",
609
- "size": 621889,
610
- "gzip": 132504
609
+ "size": 628028,
610
+ "gzip": 133874
611
},
612
{
613
"filename": "ReactFabric-prod.js",
614
"bundleType": "RN_FB_PROD",
615
"packageName": "react-native-renderer",
616
- "size": 244896,
617
- "gzip": 42571
616
+ "size": 245497,
617
+ "gzip": 42746
618
},
619
{
620
"filename": "ReactFabric-dev.js",
621
"bundleType": "RN_OSS_DEV",
622
"packageName": "react-native-renderer",
623
- "size": 621794,
624
- "gzip": 132455
623
+ "size": 627933,
624
+ "gzip": 133834
625
},
626
{
627
"filename": "ReactFabric-prod.js",
628
"bundleType": "RN_OSS_PROD",
629
"packageName": "react-native-renderer",
630
- "size": 244902,
631
- "gzip": 42561
630
+ "size": 245503,
631
+ "gzip": 42741
632
},
633
{
634
"filename": "ReactTestRenderer-dev.js",
635
"bundleType": "FB_WWW_DEV",
636
"packageName": "react-test-renderer",
637
- "size": 508573,
638
- "gzip": 104823
637
+ "size": 514514,
638
+ "gzip": 106185
639
},
640
{
641
"filename": "ReactShallowRenderer-dev.js",
642
"bundleType": "FB_WWW_DEV",
643
"packageName": "react-test-renderer",
644
- "size": 30628,
645
- "gzip": 7749
644
+ "size": 30652,
645
+ "gzip": 7761
646
},
647
{
648
"filename": "ReactIs-dev.js",
649
"bundleType": "FB_WWW_DEV",
650
"packageName": "react-is",
651
- "size": 6437,
652
- "gzip": 1724
651
+ "size": 6754,
652
+ "gzip": 1788
653
},
654
{
655
"filename": "ReactIs-prod.js",
656
"bundleType": "FB_WWW_PROD",
657
"packageName": "react-is",
658
- "size": 4838,
659
- "gzip": 1202
658
+ "size": 5133,
659
+ "gzip": 1256
660
},
661
{
662
"filename": "scheduler.development.js",
@@ -676,15 +676,15 @@
676
"filename": "scheduler.development.js",
677
"bundleType": "NODE_DEV",
678
"packageName": "scheduler",
679
- "size": 23505,
680
- "gzip": 6019
679
+ "size": 23508,
680
+ "gzip": 6017
681
},
682
{
683
"filename": "scheduler.production.min.js",
684
"bundleType": "NODE_PROD",
685
"packageName": "scheduler",
686
- "size": 4888,
687
- "gzip": 1819
686
+ "size": 4891,
687
+ "gzip": 1813
688
},
689
{
690
"filename": "SimpleCacheProvider-dev.js",
@@ -704,36 +704,36 @@
704
"filename": "react-noop-renderer-persistent.development.js",
705
"bundleType": "NODE_DEV",
706
"packageName": "react-noop-renderer",
707
- "size": 28359,
708
- "gzip": 6753
707
+ "size": 27068,
708
+ "gzip": 6375
709
},
710
{
711
"filename": "react-noop-renderer-persistent.production.min.js",
712
"bundleType": "NODE_PROD",
713
"packageName": "react-noop-renderer",
714
- "size": 10103,
715
- "gzip": 3373
714
+ "size": 9955,
715
+ "gzip": 3170
716
},
717
{
718
"filename": "react-dom.profiling.min.js",
719
"bundleType": "NODE_PROFILING",
720
"packageName": "react-dom",
721
- "size": 111178,
722
- "gzip": 35023
721
+ "size": 110923,
722
+ "gzip": 35060
723
},
724
{
725
"filename": "ReactNativeRenderer-profiling.js",
726
"bundleType": "RN_OSS_PROFILING",
727
"packageName": "react-native-renderer",
728
- "size": 259254,
729
- "gzip": 45666
728
+ "size": 257964,
729
+ "gzip": 45359
730
},
731
{
732
"filename": "ReactFabric-profiling.js",
733
"bundleType": "RN_OSS_PROFILING",
734
"packageName": "react-native-renderer",
735
- "size": 251284,
736
- "gzip": 44137
735
+ "size": 250954,
736
+ "gzip": 44143
737
},
738
{
739
"filename": "Scheduler-dev.js",
@@ -767,64 +767,64 @@
767
"filename": "ReactDOM-profiling.js",
768
"bundleType": "FB_WWW_PROFILING",
769
"packageName": "react-dom",
770
- "size": 336694,
771
- "gzip": 61627
770
+ "size": 339339,
771
+ "gzip": 62379
772
},
773
{
774
"filename": "ReactNativeRenderer-profiling.js",
775
"bundleType": "RN_FB_PROFILING",
776
"packageName": "react-native-renderer",
777
- "size": 259235,
778
- "gzip": 45675
777
+ "size": 257945,
778
+ "gzip": 45363
779
},
780
{
781
"filename": "ReactFabric-profiling.js",
782
"bundleType": "RN_FB_PROFILING",
783
"packageName": "react-native-renderer",
784
- "size": 251273,
785
- "gzip": 44141
784
+ "size": 250943,
785
+ "gzip": 44145
786
},
787
{
788
"filename": "react.profiling.min.js",
789
"bundleType": "UMD_PROFILING",
790
"packageName": "react",
791
- "size": 14773,
792
- "gzip": 5356
791
+ "size": 14818,
792
+ "gzip": 5369
793
},
794
{
795
"filename": "react-dom.profiling.min.js",
796
"bundleType": "UMD_PROFILING",
797
"packageName": "react-dom",
798
- "size": 110796,
799
- "gzip": 35607
798
+ "size": 110829,
799
+ "gzip": 35621
800
},
801
{
802
"filename": "scheduler-tracing.development.js",
803
"bundleType": "NODE_DEV",
804
"packageName": "scheduler",
805
- "size": 10737,
806
- "gzip": 2535
805
+ "size": 10878,
806
+ "gzip": 2594
807
},
808
{
809
"filename": "scheduler-tracing.production.min.js",
810
"bundleType": "NODE_PROD",
811
"packageName": "scheduler",
812
- "size": 719,
813
- "gzip": 374
812
+ "size": 722,
813
+ "gzip": 372
814
},
815
{
816
"filename": "scheduler-tracing.profiling.min.js",
817
"bundleType": "NODE_PROFILING",
818
"packageName": "scheduler",
819
- "size": 3334,
820
- "gzip": 991
819
+ "size": 3337,
820
+ "gzip": 987
821
},
822
{
823
"filename": "SchedulerTracing-dev.js",
824
"bundleType": "FB_WWW_DEV",
825
"packageName": "scheduler",
826
- "size": 10207,
827
- "gzip": 2134
826
+ "size": 10267,
827
+ "gzip": 2151
828
},
829
{
830
"filename": "SchedulerTracing-prod.js",
@@ -844,106 +844,106 @@
844
"filename": "react-cache.development.js",
845
"bundleType": "NODE_DEV",
846
"packageName": "react-cache",
847
- "size": 9030,
848
- "gzip": 3016
847
+ "size": 9192,
848
+ "gzip": 3076
849
},
850
{
851
"filename": "react-cache.production.min.js",
852
"bundleType": "NODE_PROD",
853
"packageName": "react-cache",
854
- "size": 2199,
855
- "gzip": 1125
854
+ "size": 2202,
855
+ "gzip": 1121
856
},
857
{
858
"filename": "ReactCache-dev.js",
859
"bundleType": "FB_WWW_DEV",
860
"packageName": "react-cache",
861
- "size": 7429,
862
- "gzip": 2370
861
+ "size": 7587,
862
+ "gzip": 2444
863
},
864
{
865
"filename": "ReactCache-prod.js",
866
"bundleType": "FB_WWW_PROD",
867
"packageName": "react-cache",
868
- "size": 5200,
869
- "gzip": 1641
868
+ "size": 5235,
869
+ "gzip": 1648
870
},
871
{
872
"filename": "react-cache.development.js",
873
"bundleType": "UMD_DEV",
874
"packageName": "react-cache",
875
- "size": 9261,
876
- "gzip": 3090
875
+ "size": 9423,
876
+ "gzip": 3152
877
},
878
{
879
"filename": "react-cache.production.min.js",
880
"bundleType": "UMD_PROD",
881
"packageName": "react-cache",
882
- "size": 2398,
883
- "gzip": 1215
882
+ "size": 2405,
883
+ "gzip": 1214
884
},
885
{
886
"filename": "jest-react.development.js",
887
"bundleType": "NODE_DEV",
888
"packageName": "jest-react",
889
- "size": 9286,
890
- "gzip": 3053
889
+ "size": 7455,
890
+ "gzip": 2737
891
},
892
{
893
"filename": "jest-react.production.min.js",
894
"bundleType": "NODE_PROD",
895
"packageName": "jest-react",
896
- "size": 3716,
897
- "gzip": 1655
896
+ "size": 2930,
897
+ "gzip": 1442
898
},
899
{
900
"filename": "JestReact-dev.js",
901
"bundleType": "FB_WWW_DEV",
902
"packageName": "jest-react",
903
- "size": 6125,
904
- "gzip": 1827
903
+ "size": 4208,
904
+ "gzip": 1490
905
},
906
{
907
"filename": "JestReact-prod.js",
908
"bundleType": "FB_WWW_PROD",
909
"packageName": "jest-react",
910
- "size": 5201,
911
- "gzip": 1623
910
+ "size": 3592,
911
+ "gzip": 1315
912
},
913
{
914
"filename": "react-debug-tools.development.js",
915
"bundleType": "NODE_DEV",
916
"packageName": "react-debug-tools",
917
- "size": 19024,
918
- "gzip": 5638
917
+ "size": 19625,
918
+ "gzip": 5835
919
},
920
{
921
"filename": "react-debug-tools.production.min.js",
922
"bundleType": "NODE_PROD",
923
"packageName": "react-debug-tools",
924
- "size": 5800,
925
- "gzip": 2343
924
+ "size": 5929,
925
+ "gzip": 2395
926
},
927
{
928
"filename": "eslint-plugin-react-hooks.development.js",
929
"bundleType": "NODE_DEV",
930
"packageName": "eslint-plugin-react-hooks",
931
- "size": 50458,
932
- "gzip": 11887
931
+ "size": 75099,
932
+ "gzip": 17223
933
},
934
{
935
"filename": "eslint-plugin-react-hooks.production.min.js",
936
"bundleType": "NODE_PROD",
937
"packageName": "eslint-plugin-react-hooks",
938
- "size": 12598,
939
- "gzip": 4566
938
+ "size": 19731,
939
+ "gzip": 6811
940
},
941
{
942
"filename": "ReactDOMFizzServer-dev.js",
943
"bundleType": "FB_WWW_DEV",
944
"packageName": "react-dom",
945
- "size": 3772,
946
- "gzip": 1432
945
+ "size": 3796,
946
+ "gzip": 1444
947
},
948
{
949
"filename": "ReactDOMFizzServer-prod.js",
@@ -956,141 +956,141 @@
956
"filename": "react-noop-renderer-server.development.js",
957
"bundleType": "NODE_DEV",
958
"packageName": "react-noop-renderer",
959
- "size": 1861,
960
- "gzip": 869
959
+ "size": 1864,
960
+ "gzip": 868
961
},
962
{
963
"filename": "react-noop-renderer-server.production.min.js",
964
"bundleType": "NODE_PROD",
965
"packageName": "react-noop-renderer",
966
- "size": 804,
967
- "gzip": 482
966
+ "size": 807,
967
+ "gzip": 480
968
},
969
{
970
"filename": "react-stream.development.js",
971
"bundleType": "NODE_DEV",
972
"packageName": "react-stream",
973
- "size": 4633,
974
- "gzip": 1683
973
+ "size": 4674,
974
+ "gzip": 1693
975
},
976
{
977
"filename": "react-stream.production.min.js",
978
"bundleType": "NODE_PROD",
979
"packageName": "react-stream",
980
- "size": 1224,
980
+ "size": 1227,
981
"gzip": 655
982
},
983
{
984
"filename": "react-dom-unstable-fizz.browser.development.js",
985
"bundleType": "UMD_DEV",
986
"packageName": "react-dom",
987
- "size": 3704,
988
- "gzip": 1463
987
+ "size": 3745,
988
+ "gzip": 1476
989
},
990
{
991
"filename": "react-dom-unstable-fizz.browser.production.min.js",
992
"bundleType": "UMD_PROD",
993
"packageName": "react-dom",
994
- "size": 1227,
995
- "gzip": 697
994
+ "size": 1230,
995
+ "gzip": 694
996
},
997
{
998
"filename": "react-dom-unstable-fizz.browser.development.js",
999
"bundleType": "NODE_DEV",
1000
"packageName": "react-dom",
1001
- "size": 3528,
1002
- "gzip": 1416
1001
+ "size": 3569,
1002
+ "gzip": 1433
1003
},
1004
{
1005
"filename": "react-dom-unstable-fizz.browser.production.min.js",
1006
"bundleType": "NODE_PROD",
1007
"packageName": "react-dom",
1008
- "size": 1063,
1008
+ "size": 1066,
1009
"gzip": 628
1010
},
1011
{
1012
"filename": "react-dom-unstable-fizz.node.development.js",
1013
"bundleType": "NODE_DEV",
1014
"packageName": "react-dom",
1015
- "size": 3780,
1016
- "gzip": 1443
1015
+ "size": 3821,
1016
+ "gzip": 1459
1017
},
1018
{
1019
"filename": "react-dom-unstable-fizz.node.production.min.js",
1020
"bundleType": "NODE_PROD",
1021
"packageName": "react-dom",
1022
- "size": 1122,
1022
+ "size": 1125,
1023
"gzip": 659
1024
},
1025
{
1026
"filename": "ESLintPluginReactHooks-dev.js",
1027
"bundleType": "FB_WWW_DEV",
1028
"packageName": "eslint-plugin-react-hooks",
1029
- "size": 54073,
1030
- "gzip": 12239
1029
+ "size": 80483,
1030
+ "gzip": 17729
1031
},
1032
{
1033
"filename": "react-dom-unstable-fire.development.js",
1034
"bundleType": "UMD_DEV",
1035
"packageName": "react-dom",
1036
- "size": 792036,
1037
- "gzip": 180102
1036
+ "size": 804147,
1037
+ "gzip": 183253
1038
},
1039
{
1040
"filename": "react-dom-unstable-fire.production.min.js",
1041
"bundleType": "UMD_PROD",
1042
"packageName": "react-dom",
1043
- "size": 107823,
1044
- "gzip": 34713
1043
+ "size": 107767,
1044
+ "gzip": 34920
1045
},
1046
{
1047
"filename": "react-dom-unstable-fire.profiling.min.js",
1048
"bundleType": "UMD_PROFILING",
1049
"packageName": "react-dom",
1050
- "size": 110811,
1051
- "gzip": 35616
1050
+ "size": 110844,
1051
+ "gzip": 35630
1052
},
1053
{
1054
"filename": "react-dom-unstable-fire.development.js",
1055
"bundleType": "NODE_DEV",
1056
"packageName": "react-dom",
1057
- "size": 786540,
1058
- "gzip": 178557
1057
+ "size": 798401,
1058
+ "gzip": 181622
1059
},
1060
{
1061
"filename": "react-dom-unstable-fire.production.min.js",
1062
"bundleType": "NODE_PROD",
1063
"packageName": "react-dom",
1064
- "size": 108045,
1065
- "gzip": 34197
1064
+ "size": 107747,
1065
+ "gzip": 34441
1066
},
1067
{
1068
"filename": "react-dom-unstable-fire.profiling.min.js",
1069
"bundleType": "NODE_PROFILING",
1070
"packageName": "react-dom",
1071
- "size": 111192,
1072
- "gzip": 35033
1071
+ "size": 110937,
1072
+ "gzip": 35069
1073
},
1074
{
1075
"filename": "ReactFire-dev.js",
1076
"bundleType": "FB_WWW_DEV",
1077
"packageName": "react-dom",
1078
- "size": 808931,
1079
- "gzip": 179569
1078
+ "size": 821109,
1079
+ "gzip": 182607
1080
},
1081
{
1082
"filename": "ReactFire-prod.js",
1083
"bundleType": "FB_WWW_PROD",
1084
"packageName": "react-dom",
1085
- "size": 318110,
1086
- "gzip": 57721
1085
+ "size": 321531,
1086
+ "gzip": 58583
1087
},
1088
{
1089
"filename": "ReactFire-profiling.js",
1090
"bundleType": "FB_WWW_PROFILING",
1091
"packageName": "react-dom",
1092
- "size": 324881,
1093
- "gzip": 59172
1092
+ "size": 327694,
1093
+ "gzip": 59916
1094
},
1095
{
1096
"filename": "jest-mock-scheduler.development.js",
@@ -1124,15 +1124,15 @@
1124
"filename": "scheduler-unstable_mock.development.js",
1125
"bundleType": "NODE_DEV",
1126
"packageName": "scheduler",
1127
- "size": 17926,
1128
- "gzip": 4128
1127
+ "size": 17929,
1128
+ "gzip": 4125
1129
},
1130
{
1131
"filename": "scheduler-unstable_mock.production.min.js",
1132
"bundleType": "NODE_PROD",
1133
"packageName": "scheduler",
1134
- "size": 4173,
1135
- "gzip": 1606
1134
+ "size": 4176,
1135
+ "gzip": 1603
1136
},
1137
{
1138
"filename": "SchedulerMock-dev.js",