Add Experimental Fabric Renderer (#12069)
Sebastian Markbåge committed
Jan 22, 2018 at 09:58 UTC
6031bea239d75e60882769f804e041f89cd22014
21 files changed
+1114
-502
packages/react-native-renderer/fabric.js
new
+16
@@ -0,0 +1,16 @@
1
+/**
2
+ * Copyright (c) 2013-present, Facebook, Inc.
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
+'use strict';
11
+
12
+const ReactFabric = require('./src/ReactFabric');
13
+
14
+// TODO: decide on the top-level export form.
15
+// This is hacky but makes it work with both Rollup and Jest.
16
+module.exports = ReactFabric.default ? ReactFabric.default : ReactFabric;
packages/react-native-renderer/src/ReactFabric.js
new
+130
@@ -0,0 +1,130 @@
1
+/**
2
+ * Copyright (c) 2013-present, Facebook, Inc.
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 {ReactNativeType} from './ReactNativeTypes';
11
+import type {ReactNodeList} from 'shared/ReactTypes';
12
+
13
+import './ReactNativeInjection';
14
+
15
+import * as ReactPortal from 'shared/ReactPortal';
16
+import * as ReactGenericBatching from 'events/ReactGenericBatching';
17
+import TouchHistoryMath from 'events/TouchHistoryMath';
18
+import * as ReactGlobalSharedState from 'shared/ReactGlobalSharedState';
19
+import ReactVersion from 'shared/ReactVersion';
20
+
21
+import NativeMethodsMixin from './NativeMethodsMixin';
22
+import ReactNativeBridgeEventPlugin from './ReactNativeBridgeEventPlugin';
23
+import ReactNativeComponent from './ReactNativeComponent';
24
+import * as ReactNativeComponentTree from './ReactNativeComponentTree';
25
+import ReactFabricRenderer from './ReactFabricRenderer';
26
+import ReactNativePropRegistry from './ReactNativePropRegistry';
27
+import {getInspectorDataForViewTag} from './ReactNativeFiberInspector';
28
+import createReactNativeComponentClass from './createReactNativeComponentClass';
29
+import {injectFindHostInstanceFabric} from './findNodeHandle';
30
+import findNumericNodeHandle from './findNumericNodeHandle';
31
+import takeSnapshot from './takeSnapshot';
32
+
33
+injectFindHostInstanceFabric(ReactFabricRenderer.findHostInstance);
34
+
35
+ReactGenericBatching.injection.injectFiberBatchedUpdates(
36
+ ReactFabricRenderer.batchedUpdates,
37
+);
38
+
39
+const roots = new Map();
40
+
41
+const ReactFabric: ReactNativeType = {
42
+ NativeComponent: ReactNativeComponent,
43
+
44
+ findNodeHandle: findNumericNodeHandle,
45
+
46
+ render(element: React$Element<any>, containerTag: any, callback: ?Function) {
47
+ let root = roots.get(containerTag);
48
+
49
+ if (!root) {
50
+ // TODO (bvaughn): If we decide to keep the wrapper component,
51
+ // We could create a wrapper for containerTag as well to reduce special casing.
52
+ root = ReactFabricRenderer.createContainer(containerTag, false, false);
53
+ roots.set(containerTag, root);
54
+ }
55
+ ReactFabricRenderer.updateContainer(element, root, null, callback);
56
+
57
+ return ReactFabricRenderer.getPublicRootInstance(root);
58
+ },
59
+
60
+ unmountComponentAtNode(containerTag: number) {
61
+ const root = roots.get(containerTag);
62
+ if (root) {
63
+ // TODO: Is it safe to reset this now or should I wait since this unmount could be deferred?
64
+ ReactFabricRenderer.updateContainer(null, root, null, () => {
65
+ roots.delete(containerTag);
66
+ });
67
+ }
68
+ },
69
+
70
+ unmountComponentAtNodeAndRemoveContainer(containerTag: number) {
71
+ ReactFabric.unmountComponentAtNode(containerTag);
72
+ },
73
+
74
+ createPortal(
75
+ children: ReactNodeList,
76
+ containerTag: number,
77
+ key: ?string = null,
78
+ ) {
79
+ return ReactPortal.createPortal(children, containerTag, null, key);
80
+ },
81
+
82
+ unstable_batchedUpdates: ReactGenericBatching.batchedUpdates,
83
+
84
+ flushSync: ReactFabricRenderer.flushSync,
85
+
86
+ __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: {
87
+ // Used as a mixin in many createClass-based components
88
+ NativeMethodsMixin,
89
+ // Used by react-native-github/Libraries/ components
90
+ ReactNativeBridgeEventPlugin, // requireNativeComponent
91
+ ReactGlobalSharedState, // Systrace
92
+ ReactNativeComponentTree, // InspectorUtils, ScrollResponder
93
+ ReactNativePropRegistry, // flattenStyle, Stylesheet
94
+ TouchHistoryMath, // PanResponder
95
+ createReactNativeComponentClass, // RCTText, RCTView, ReactNativeART
96
+ takeSnapshot, // react-native-implementation
97
+ },
98
+};
99
+
100
+if (__DEV__) {
101
+ // $FlowFixMe
102
+ Object.assign(
103
+ ReactFabric.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,
104
+ {
105
+ // TODO: none of these work since Fiber. Remove these dependencies.
106
+ // Used by RCTRenderingPerf, Systrace:
107
+ ReactDebugTool: {
108
+ addHook() {},
109
+ removeHook() {},
110
+ },
111
+ // Used by ReactPerfStallHandler, RCTRenderingPerf:
112
+ ReactPerf: {
113
+ start() {},
114
+ stop() {},
115
+ printInclusive() {},
116
+ printWasted() {},
117
+ },
118
+ },
119
+ );
120
+}
121
+
122
+ReactFabricRenderer.injectIntoDevTools({
123
+ findFiberByHostInstance: ReactNativeComponentTree.getClosestInstanceFromNode,
124
+ getInspectorDataForViewTag: getInspectorDataForViewTag,
125
+ bundleType: __DEV__ ? 1 : 0,
126
+ version: ReactVersion,
127
+ rendererPackageName: 'react-native-renderer',
128
+});
129
+
130
+export default ReactFabric;
packages/react-native-renderer/src/ReactFabricRenderer.js
new
+321
@@ -0,0 +1,321 @@
1
+/**
2
+ * Copyright (c) 2013-present, Facebook, Inc.
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 {
11
+ MeasureInWindowOnSuccessCallback,
12
+ MeasureLayoutOnSuccessCallback,
13
+ MeasureOnSuccessCallback,
14
+ NativeMethodsMixinType,
15
+ ReactNativeBaseComponentViewConfig,
16
+} from './ReactNativeTypes';
17
+
18
+import {mountSafeCallback, warnForStyleProps} from './NativeMethodsMixinUtils';
19
+import * as ReactGenericBatching from 'events/ReactGenericBatching';
20
+import * as ReactNativeAttributePayload from './ReactNativeAttributePayload';
21
+import * as ReactNativeFrameScheduling from './ReactNativeFrameScheduling';
22
+import * as ReactNativeViewConfigRegistry from './ReactNativeViewConfigRegistry';
23
+import ReactFiberReconciler from 'react-reconciler';
24
+import ReactNativeTagHandles from './ReactNativeTagHandles';
25
+
26
+import deepFreezeAndThrowOnMutationInDev from 'deepFreezeAndThrowOnMutationInDev';
27
+import emptyObject from 'fbjs/lib/emptyObject';
28
+
29
+// Modules provided by RN:
30
+import TextInputState from 'TextInputState';
31
+import FabricUIManager from 'FabricUIManager';
32
+import UIManager from 'UIManager';
33
+
34
+/**
35
+ * This is used for refs on host components.
36
+ */
37
+class ReactFabricHostComponent {
38
+ _nativeTag: number;
39
+ viewConfig: ReactNativeBaseComponentViewConfig;
40
+ currentProps: Props;
41
+
42
+ constructor(
43
+ tag: number,
44
+ viewConfig: ReactNativeBaseComponentViewConfig,
45
+ props: Props,
46
+ ) {
47
+ this._nativeTag = tag;
48
+ this.viewConfig = viewConfig;
49
+ this.currentProps = props;
50
+ }
51
+
52
+ blur() {
53
+ TextInputState.blurTextInput(this._nativeTag);
54
+ }
55
+
56
+ focus() {
57
+ TextInputState.focusTextInput(this._nativeTag);
58
+ }
59
+
60
+ measure(callback: MeasureOnSuccessCallback) {
61
+ UIManager.measure(this._nativeTag, mountSafeCallback(this, callback));
62
+ }
63
+
64
+ measureInWindow(callback: MeasureInWindowOnSuccessCallback) {
65
+ UIManager.measureInWindow(
66
+ this._nativeTag,
67
+ mountSafeCallback(this, callback),
68
+ );
69
+ }
70
+
71
+ measureLayout(
72
+ relativeToNativeNode: number,
73
+ onSuccess: MeasureLayoutOnSuccessCallback,
74
+ onFail: () => void /* currently unused */,
75
+ ) {
76
+ UIManager.measureLayout(
77
+ this._nativeTag,
78
+ relativeToNativeNode,
79
+ mountSafeCallback(this, onFail),
80
+ mountSafeCallback(this, onSuccess),
81
+ );
82
+ }
83
+
84
+ setNativeProps(nativeProps: Object) {
85
+ if (__DEV__) {
86
+ warnForStyleProps(nativeProps, this.viewConfig.validAttributes);
87
+ }
88
+
89
+ const updatePayload = ReactNativeAttributePayload.create(
90
+ nativeProps,
91
+ this.viewConfig.validAttributes,
92
+ );
93
+
94
+ // Avoid the overhead of bridge calls if there's no update.
95
+ // This is an expensive no-op for Android, and causes an unnecessary
96
+ // view invalidation for certain components (eg RCTTextInput) on iOS.
97
+ if (updatePayload != null) {
98
+ UIManager.updateView(
99
+ this._nativeTag,
100
+ this.viewConfig.uiViewClassName,
101
+ updatePayload,
102
+ );
103
+ }
104
+ }
105
+}
106
+
107
+// eslint-disable-next-line no-unused-expressions
108
+(ReactFabricHostComponent.prototype: NativeMethodsMixinType);
109
+
110
+type Node = Object;
111
+type ChildSet = Object;
112
+type Container = number;
113
+type Instance = {
114
+ node: Node,
115
+ canonical: ReactFabricHostComponent,
116
+};
117
+type Props = Object;
118
+type TextInstance = {
119
+ node: Node,
120
+};
121
+
122
+const ReactFabricRenderer = ReactFiberReconciler({
123
+ appendInitialChild(
124
+ parentInstance: Instance,
125
+ child: Instance | TextInstance,
126
+ ): void {
127
+ FabricUIManager.appendChild(parentInstance.node, child.node);
128
+ },
129
+
130
+ createInstance(
131
+ type: string,
132
+ props: Props,
133
+ rootContainerInstance: Container,
134
+ hostContext: {},
135
+ internalInstanceHandle: Object,
136
+ ): Instance {
137
+ const tag = ReactNativeTagHandles.allocateTag();
138
+ const viewConfig = ReactNativeViewConfigRegistry.get(type);
139
+
140
+ if (__DEV__) {
141
+ for (const key in viewConfig.validAttributes) {
142
+ if (props.hasOwnProperty(key)) {
143
+ deepFreezeAndThrowOnMutationInDev(props[key]);
144
+ }
145
+ }
146
+ }
147
+
148
+ const updatePayload = ReactNativeAttributePayload.create(
149
+ props,
150
+ viewConfig.validAttributes,
151
+ );
152
+
153
+ const node = FabricUIManager.createNode(
154
+ tag, // reactTag
155
+ viewConfig.uiViewClassName, // viewName
156
+ rootContainerInstance, // rootTag
157
+ updatePayload, // props
158
+ internalInstanceHandle, // internalInstanceHandle
159
+ );
160
+
161
+ const component = new ReactFabricHostComponent(tag, viewConfig, props);
162
+
163
+ return {
164
+ node: node,
165
+ canonical: component,
166
+ };
167
+ },
168
+
169
+ createTextInstance(
170
+ text: string,
171
+ rootContainerInstance: Container,
172
+ hostContext: {},
173
+ internalInstanceHandle: Object,
174
+ ): TextInstance {
175
+ const tag = ReactNativeTagHandles.allocateTag();
176
+
177
+ const node = FabricUIManager.createNode(
178
+ tag, // reactTag
179
+ 'RCTRawText', // viewName
180
+ rootContainerInstance, // rootTag
181
+ {text: text}, // props
182
+ internalInstanceHandle, // instance handle
183
+ );
184
+
185
+ return {
186
+ node: node,
187
+ };
188
+ },
189
+
190
+ finalizeInitialChildren(
191
+ parentInstance: Instance,
192
+ type: string,
193
+ props: Props,
194
+ rootContainerInstance: Container,
195
+ ): boolean {
196
+ return false;
197
+ },
198
+
199
+ getRootHostContext(): {} {
200
+ return emptyObject;
201
+ },
202
+
203
+ getChildHostContext(): {} {
204
+ return emptyObject;
205
+ },
206
+
207
+ getPublicInstance(instance) {
208
+ return instance.canonical;
209
+ },
210
+
211
+ now: ReactNativeFrameScheduling.now,
212
+
213
+ prepareForCommit(): void {
214
+ // Noop
215
+ },
216
+
217
+ prepareUpdate(
218
+ instance: Instance,
219
+ type: string,
220
+ oldProps: Props,
221
+ newProps: Props,
222
+ rootContainerInstance: Container,
223
+ hostContext: {},
224
+ ): null | Object {
225
+ const viewConfig = instance.canonical.viewConfig;
226
+ const updatePayload = ReactNativeAttributePayload.diff(
227
+ oldProps,
228
+ newProps,
229
+ viewConfig.validAttributes,
230
+ );
231
+ // TODO: If the event handlers have changed, we need to update the current props
232
+ // in the commit phase but there is no host config hook to do it yet.
233
+ return updatePayload;
234
+ },
235
+
236
+ resetAfterCommit(): void {
237
+ // Noop
238
+ },
239
+
240
+ scheduleDeferredCallback: ReactNativeFrameScheduling.scheduleDeferredCallback,
241
+ cancelDeferredCallback: ReactNativeFrameScheduling.cancelDeferredCallback,
242
+
243
+ shouldDeprioritizeSubtree(type: string, props: Props): boolean {
244
+ return false;
245
+ },
246
+
247
+ shouldSetTextContent(type: string, props: Props): boolean {
248
+ // TODO (bvaughn) Revisit this decision.
249
+ // Always returning false simplifies the createInstance() implementation,
250
+ // But creates an additional child Fiber for raw text children.
251
+ // No additional native views are created though.
252
+ // It's not clear to me which is better so I'm deferring for now.
253
+ // More context @ github.com/facebook/react/pull/8560#discussion_r92111303
254
+ return false;
255
+ },
256
+
257
+ persistence: {
258
+ cloneInstance(
259
+ instance: Instance,
260
+ updatePayload: null | Object,
261
+ type: string,
262
+ oldProps: Props,
263
+ newProps: Props,
264
+ internalInstanceHandle: Object,
265
+ keepChildren: boolean,
266
+ recyclableInstance: null | Instance,
267
+ ): Instance {
268
+ const node = instance.node;
269
+ let clone;
270
+ if (keepChildren) {
271
+ if (updatePayload !== null) {
272
+ clone = FabricUIManager.cloneNodeWithNewProps(node, updatePayload);
273
+ } else {
274
+ clone = FabricUIManager.cloneNode(node);
275
+ }
276
+ } else {
277
+ if (updatePayload !== null) {
278
+ clone = FabricUIManager.cloneNodeWithNewChildrenAndProps(
279
+ node,
280
+ updatePayload,
281
+ );
282
+ } else {
283
+ clone = FabricUIManager.cloneNodeWithNewChildren(node);
284
+ }
285
+ }
286
+ return {
287
+ node: clone,
288
+ canonical: instance.canonical,
289
+ };
290
+ },
291
+
292
+ createContainerChildSet(container: Container): ChildSet {
293
+ return FabricUIManager.createChildSet(container);
294
+ },
295
+
296
+ appendChildToContainerChildSet(
297
+ childSet: ChildSet,
298
+ child: Instance | TextInstance,
299
+ ): void {
300
+ FabricUIManager.appendChildToSet(childSet, child.node);
301
+ },
302
+
303
+ finalizeContainerChildren(
304
+ container: Container,
305
+ newChildren: ChildSet,
306
+ ): void {
307
+ FabricUIManager.completeRoot(container, newChildren);
308
+ },
309
+
310
+ replaceContainerChildren(
311
+ container: Container,
312
+ newChildren: ChildSet,
313
+ ): void {},
314
+ },
315
+});
316
+
317
+ReactGenericBatching.injection.injectFiberBatchedUpdates(
318
+ ReactFabricRenderer.batchedUpdates,
319
+);
320
+
321
+export default ReactFabricRenderer;
packages/react-native-renderer/src/ReactNativeAttributePayload.js
+15
-15
@@ -119,11 +119,11 @@ function restoreDeletedValuesInNestedArray(
119
}
120
121
function diffNestedArrayProperty(
122
- updatePayload: ?Object,
122
+ updatePayload: null | Object,
123
prevArray: Array<NestedNode>,
124
nextArray: Array<NestedNode>,
125
validAttributes: AttributeConfiguration,
126
-): ?Object {
126
+): null | Object {
127
const minLength =
128
prevArray.length < nextArray.length ? prevArray.length : nextArray.length;
129
let i;
@@ -157,11 +157,11 @@ function diffNestedArrayProperty(
157
}
158
159
function diffNestedProperty(
160
- updatePayload: ?Object,
160
+ updatePayload: null | Object,
161
prevProp: NestedNode,
162
nextProp: NestedNode,
163
validAttributes: AttributeConfiguration,
164
-): ?Object {
164
+): null | Object {
165
if (!updatePayload && prevProp === nextProp) {
166
// If no properties have been added, then we can bail out quickly on object
167
// equality.
@@ -224,7 +224,7 @@ function diffNestedProperty(
224
* updatePayload.
225
*/
226
function addNestedProperty(
227
- updatePayload: ?Object,
227
+ updatePayload: null | Object,
228
nextProp: NestedNode,
229
validAttributes: AttributeConfiguration,
230
) {
@@ -258,10 +258,10 @@ function addNestedProperty(
258
* adds a null sentinel to the updatePayload, for each prop key.
259
*/
260
function clearNestedProperty(
261
- updatePayload: ?Object,
261
+ updatePayload: null | Object,
262
prevProp: NestedNode,
263
validAttributes: AttributeConfiguration,
264
-): ?Object {
264
+): null | Object {
265
if (!prevProp) {
266
return updatePayload;
267
}
@@ -293,11 +293,11 @@ function clearNestedProperty(
293
* anything changed.
294
*/
295
function diffProperties(
296
- updatePayload: ?Object,
296
+ updatePayload: null | Object,
297
prevProps: Object,
298
nextProps: Object,
299
validAttributes: AttributeConfiguration,
300
-): ?Object {
300
+): null | Object {
301
let attributeConfig: ?(CustomAttributeConfiguration | AttributeConfiguration);
302
let nextProp;
303
let prevProp;
@@ -465,10 +465,10 @@ function diffProperties(
465
* addProperties adds all the valid props to the payload after being processed.
466
*/
467
function addProperties(
468
- updatePayload: ?Object,
468
+ updatePayload: null | Object,
469
props: Object,
470
validAttributes: AttributeConfiguration,
471
-): ?Object {
471
+): null | Object {
472
// TODO: Fast path
473
return diffProperties(updatePayload, emptyObject, props, validAttributes);
474
}
@@ -478,10 +478,10 @@ function addProperties(
478
* to the payload for each valid key.
479
*/
480
function clearProperties(
481
- updatePayload: ?Object,
481
+ updatePayload: null | Object,
482
prevProps: Object,
483
validAttributes: AttributeConfiguration,
484
-): ?Object {
484
+): null | Object {
485
// TODO: Fast path
486
return diffProperties(updatePayload, prevProps, emptyObject, validAttributes);
487
}
@@ -489,7 +489,7 @@ function clearProperties(
489
export function create(
490
props: Object,
491
validAttributes: AttributeConfiguration,
492
-): ?Object {
492
+): null | Object {
493
return addProperties(
494
null, // updatePayload
495
props,
@@ -501,7 +501,7 @@ export function diff(
501
prevProps: Object,
502
nextProps: Object,
503
validAttributes: AttributeConfiguration,
504
-): ?Object {
504
+): null | Object {
505
return diffProperties(
506
null, // updatePayload
507
prevProps,
packages/react-native-renderer/src/ReactNativeComponent.js
+1
-1
@@ -149,7 +149,7 @@ class ReactNativeComponent<DefaultProps, Props, State> extends React.Component<
149
}
150
151
const viewConfig: ReactNativeBaseComponentViewConfig =
152
- maybeInstance.viewConfig;
152
+ maybeInstance.viewConfig || maybeInstance.canonical.viewConfig;
153
154
const updatePayload = ReactNativeAttributePayload.create(
155
nativeProps,
packages/react-native-renderer/src/ReactNativeComponentTree.js
+10
-2
@@ -20,11 +20,19 @@ export function uncacheFiberNode(tag) {
20
}
21
22
function getInstanceFromTag(tag) {
23
- return instanceCache[tag] || null;
23
+ if (typeof tag === 'number') {
24
+ return instanceCache[tag] || null;
25
+ } else {
26
+ // Fabric will invoke event emitters on a direct fiber reference
27
+ return tag;
28
+ }
29
}
30
31
function getTagFromInstance(inst) {
27
- const tag = inst.stateNode._nativeTag;
32
+ let tag = inst.stateNode._nativeTag;
33
+ if (tag === undefined) {
34
+ tag = inst.stateNode.canonical._nativeTag;
35
+ }
36
invariant(tag, 'All native instances should have a tag.');
37
return tag;
38
}
packages/react-native-renderer/src/ReactNativeFiberRenderer.js
+3
-3
@@ -27,14 +27,14 @@ import ReactNativeFiberHostComponent from './ReactNativeFiberHostComponent';
27
import * as ReactNativeFrameScheduling from './ReactNativeFrameScheduling';
28
import ReactNativeTagHandles from './ReactNativeTagHandles';
29
30
-export type Container = number;
30
+type Container = number;
31
export type Instance = {
32
_children: Array<Instance | number>,
33
_nativeTag: number,
34
viewConfig: ReactNativeBaseComponentViewConfig,
35
};
36
-export type Props = Object;
37
-export type TextInstance = number;
36
+type Props = Object;
37
+type TextInstance = number;
38
39
function recursivelyUncacheFiberNode(node: Instance | TextInstance) {
40
if (typeof node === 'number') {
packages/react-native-renderer/src/ReactNativeGlobalResponderHandler.js
+3
-1
@@ -3,13 +3,15 @@
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
// Module provided by RN:
11
import UIManager from 'UIManager';
12
13
const ReactNativeGlobalResponderHandler = {
12
- onChange: function(from, to, blockNativeResponder) {
14
+ onChange: function(from: any, to: any, blockNativeResponder: boolean) {
15
if (to !== null) {
16
const tag = to.stateNode._nativeTag;
17
UIManager.setJSResponder(tag, blockNativeResponder);
packages/react-native-renderer/src/ReactNativeRenderer.js
+3
@@ -28,9 +28,12 @@ import ReactNativeFiberRenderer from './ReactNativeFiberRenderer';
28
import ReactNativePropRegistry from './ReactNativePropRegistry';
29
import {getInspectorDataForViewTag} from './ReactNativeFiberInspector';
30
import createReactNativeComponentClass from './createReactNativeComponentClass';
31
+import {injectFindHostInstance} from './findNodeHandle';
32
import findNumericNodeHandle from './findNumericNodeHandle';
33
import takeSnapshot from './takeSnapshot';
34
35
+injectFindHostInstance(ReactNativeFiberRenderer.findHostInstance);
36
+
37
ReactGenericBatching.injection.injectFiberBatchedUpdates(
38
ReactNativeFiberRenderer.batchedUpdates,
39
);
packages/react-native-renderer/src/__mocks__/FabricUIManager.js
new
+111
@@ -0,0 +1,111 @@
1
+/**
2
+ * Copyright (c) 2013-present, Facebook, Inc.
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
+
8
+'use strict';
9
+
10
+// Mock of the Native Hooks
11
+
12
+const invariant = require('fbjs/lib/invariant');
13
+
14
+const roots = new Map();
15
+const allocatedTags = new Set();
16
+
17
+const RCTFabricUIManager = {
18
+ __dumpHierarchyForJestTestsOnly: function() {
19
+ function dumpSubtree(info, indent) {
20
+ let out = '';
21
+ out +=
22
+ ' '.repeat(indent) + info.viewName + ' ' + JSON.stringify(info.props);
23
+ for (const child of info.children) {
24
+ out += '\n' + dumpSubtree(child, indent + 2);
25
+ }
26
+ return out;
27
+ }
28
+ let result = [];
29
+ for (const [rootTag, childSet] of roots) {
30
+ result.push(rootTag);
31
+ for (const child of childSet) {
32
+ result.push(dumpSubtree(child, 1));
33
+ }
34
+ }
35
+ return result.join('\n');
36
+ },
37
+ createNode: jest.fn(function createNode(
38
+ reactTag,
39
+ viewName,
40
+ rootTag,
41
+ props,
42
+ instanceHandle,
43
+ ) {
44
+ invariant(
45
+ !allocatedTags.has(reactTag),
46
+ 'Created two native views with tag %s',
47
+ reactTag,
48
+ );
49
+ allocatedTags.add(reactTag);
50
+ return {
51
+ reactTag: reactTag,
52
+ viewName: viewName,
53
+ props: props,
54
+ children: [],
55
+ };
56
+ }),
57
+ cloneNode: jest.fn(function cloneNode(node) {
58
+ return {
59
+ reactTag: node.reactTag,
60
+ viewName: node.viewName,
61
+ props: node.props,
62
+ children: node.children,
63
+ };
64
+ }),
65
+ cloneNodeWithNewChildren: jest.fn(function cloneNodeWithNewChildren(node) {
66
+ return {
67
+ reactTag: node.reactTag,
68
+ viewName: node.viewName,
69
+ props: node.props,
70
+ children: [],
71
+ };
72
+ }),
73
+ cloneNodeWithNewProps: jest.fn(function cloneNodeWithNewProps(
74
+ node,
75
+ newProps,
76
+ ) {
77
+ return {
78
+ reactTag: node.reactTag,
79
+ viewName: node.viewName,
80
+ props: newProps,
81
+ children: node.children,
82
+ };
83
+ }),
84
+ cloneNodeWithNewChildrenAndProps: jest.fn(
85
+ function cloneNodeWithNewChildrenAndProps(node, newProps) {
86
+ return {
87
+ reactTag: node.reactTag,
88
+ viewName: node.viewName,
89
+ props: newProps,
90
+ children: [],
91
+ };
92
+ },
93
+ ),
94
+ appendChild: jest.fn(function appendChild(parentNode, childNode) {
95
+ parentNode.children.push(childNode);
96
+ }),
97
+
98
+ createChildSet: jest.fn(function createChildSet() {
99
+ return [];
100
+ }),
101
+
102
+ appendChildToSet: jest.fn(function appendChildToSet(childSet, childNode) {
103
+ childSet.push(childNode);
104
+ }),
105
+
106
+ completeRoot: jest.fn(function completeRoot(rootTag, newChildSet) {
107
+ roots.set(rootTag, newChildSet);
108
+ }),
109
+};
110
+
111
+module.exports = RCTFabricUIManager;
packages/react-native-renderer/src/__tests__/ReactFabric-test.internal.js
new
+208
@@ -0,0 +1,208 @@
1
+/**
2
+ * Copyright (c) 2013-present, Facebook, Inc.
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 ReactFabric;
15
+let createReactNativeComponentClass;
16
+let UIManager;
17
+let FabricUIManager;
18
+
19
+jest.mock('shared/ReactFeatureFlags', () =>
20
+ require('shared/forks/ReactFeatureFlags.native-fabric'),
21
+);
22
+
23
+describe('ReactFabric', () => {
24
+ beforeEach(() => {
25
+ jest.resetModules();
26
+
27
+ React = require('react');
28
+ ReactFabric = require('react-native-renderer/fabric');
29
+ FabricUIManager = require('FabricUIManager');
30
+ UIManager = require('UIManager');
31
+ createReactNativeComponentClass = require('../createReactNativeComponentClass')
32
+ .default;
33
+ });
34
+
35
+ it('should be able to create and render a native component', () => {
36
+ const View = createReactNativeComponentClass('View', () => ({
37
+ validAttributes: {foo: true},
38
+ uiViewClassName: 'View',
39
+ }));
40
+
41
+ ReactFabric.render(<View foo="test" />, 1);
42
+ expect(FabricUIManager.createNode).toBeCalled();
43
+ expect(FabricUIManager.appendChild).not.toBeCalled();
44
+ expect(FabricUIManager.completeRoot).toBeCalled();
45
+ });
46
+
47
+ it('should be able to create and update a native component', () => {
48
+ const View = createReactNativeComponentClass('View', () => ({
49
+ validAttributes: {foo: true},
50
+ uiViewClassName: 'View',
51
+ }));
52
+
53
+ const firstNode = {};
54
+
55
+ FabricUIManager.createNode.mockReturnValue(firstNode);
56
+
57
+ ReactFabric.render(<View foo="foo" />, 11);
58
+
59
+ expect(FabricUIManager.createNode.mock.calls.length).toBe(1);
60
+
61
+ ReactFabric.render(<View foo="bar" />, 11);
62
+
63
+ expect(FabricUIManager.createNode.mock.calls.length).toBe(1);
64
+ expect(FabricUIManager.cloneNodeWithNewProps).toBeCalledWith(firstNode, {
65
+ foo: 'bar',
66
+ });
67
+ });
68
+
69
+ it('should not call FabricUIManager.cloneNode after render for properties that have not changed', () => {
70
+ const Text = createReactNativeComponentClass('Text', () => ({
71
+ validAttributes: {foo: true},
72
+ uiViewClassName: 'Text',
73
+ }));
74
+
75
+ ReactFabric.render(<Text foo="a">1</Text>, 11);
76
+ expect(FabricUIManager.cloneNode).not.toBeCalled();
77
+ expect(FabricUIManager.cloneNodeWithNewChildren).not.toBeCalled();
78
+ expect(FabricUIManager.cloneNodeWithNewProps).not.toBeCalled();
79
+ expect(FabricUIManager.cloneNodeWithNewChildrenAndProps).not.toBeCalled();
80
+
81
+ // If no properties have changed, we shouldn't call cloneNode.
82
+ ReactFabric.render(<Text foo="a">1</Text>, 11);
83
+ expect(FabricUIManager.cloneNode).not.toBeCalled();
84
+ expect(FabricUIManager.cloneNodeWithNewChildren).not.toBeCalled();
85
+ expect(FabricUIManager.cloneNodeWithNewProps).not.toBeCalled();
86
+ expect(FabricUIManager.cloneNodeWithNewChildrenAndProps).not.toBeCalled();
87
+
88
+ // Only call cloneNode for the changed property (and not for text).
89
+ ReactFabric.render(<Text foo="b">1</Text>, 11);
90
+ expect(FabricUIManager.cloneNode).not.toBeCalled();
91
+ expect(FabricUIManager.cloneNodeWithNewChildren).not.toBeCalled();
92
+ expect(FabricUIManager.cloneNodeWithNewProps.mock.calls.length).toBe(1);
93
+ expect(FabricUIManager.cloneNodeWithNewChildrenAndProps).not.toBeCalled();
94
+
95
+ // Only call cloneNode for the changed text (and no other properties).
96
+ ReactFabric.render(<Text foo="b">2</Text>, 11);
97
+ expect(FabricUIManager.cloneNode).not.toBeCalled();
98
+ expect(FabricUIManager.cloneNodeWithNewChildren.mock.calls.length).toBe(1);
99
+ expect(FabricUIManager.cloneNodeWithNewProps.mock.calls.length).toBe(1);
100
+ expect(FabricUIManager.cloneNodeWithNewChildrenAndProps).not.toBeCalled();
101
+
102
+ // Call cloneNode for both changed text and properties.
103
+ ReactFabric.render(<Text foo="c">3</Text>, 11);
104
+ expect(FabricUIManager.cloneNode).not.toBeCalled();
105
+ expect(FabricUIManager.cloneNodeWithNewChildren.mock.calls.length).toBe(1);
106
+ expect(FabricUIManager.cloneNodeWithNewProps.mock.calls.length).toBe(1);
107
+ expect(
108
+ FabricUIManager.cloneNodeWithNewChildrenAndProps.mock.calls.length,
109
+ ).toBe(1);
110
+ });
111
+
112
+ it('should not call UIManager.updateView from setNativeProps for properties that have not changed', () => {
113
+ const View = createReactNativeComponentClass('View', () => ({
114
+ validAttributes: {foo: true},
115
+ uiViewClassName: 'View',
116
+ }));
117
+
118
+ class Subclass extends ReactFabric.NativeComponent {
119
+ render() {
120
+ return <View />;
121
+ }
122
+ }
123
+
124
+ [View, Subclass].forEach(Component => {
125
+ UIManager.updateView.mockReset();
126
+
127
+ let viewRef;
128
+ ReactFabric.render(
129
+ <Component
130
+ foo="bar"
131
+ ref={ref => {
132
+ viewRef = ref;
133
+ }}
134
+ />,
135
+ 11,
136
+ );
137
+ expect(UIManager.updateView).not.toBeCalled();
138
+
139
+ viewRef.setNativeProps({});
140
+ expect(UIManager.updateView).not.toBeCalled();
141
+
142
+ viewRef.setNativeProps({foo: 'baz'});
143
+ expect(UIManager.updateView.mock.calls.length).toBe(1);
144
+ });
145
+ });
146
+
147
+ it('returns the correct instance and calls it in the callback', () => {
148
+ const View = createReactNativeComponentClass('View', () => ({
149
+ validAttributes: {foo: true},
150
+ uiViewClassName: 'View',
151
+ }));
152
+
153
+ let a;
154
+ let b;
155
+ const c = ReactFabric.render(
156
+ <View foo="foo" ref={v => (a = v)} />,
157
+ 11,
158
+ function() {
159
+ b = this;
160
+ },
161
+ );
162
+
163
+ expect(a).toBeTruthy();
164
+ expect(a).toBe(b);
165
+ expect(a).toBe(c);
166
+ });
167
+
168
+ it('renders and reorders children', () => {
169
+ const View = createReactNativeComponentClass('View', () => ({
170
+ validAttributes: {title: true},
171
+ uiViewClassName: 'View',
172
+ }));
173
+
174
+ class Component extends React.Component {
175
+ render() {
176
+ const chars = this.props.chars.split('');
177
+ return (
178
+ <View>{chars.map(text => <View key={text} title={text} />)}</View>
179
+ );
180
+ }
181
+ }
182
+
183
+ // Mini multi-child stress test: lots of reorders, some adds, some removes.
184
+ const before = 'abcdefghijklmnopqrst';
185
+ const after = 'mxhpgwfralkeoivcstzy';
186
+
187
+ ReactFabric.render(<Component chars={before} />, 11);
188
+ expect(FabricUIManager.__dumpHierarchyForJestTestsOnly()).toMatchSnapshot();
189
+
190
+ ReactFabric.render(<Component chars={after} />, 11);
191
+ expect(FabricUIManager.__dumpHierarchyForJestTestsOnly()).toMatchSnapshot();
192
+ });
193
+
194
+ it('calls setState with no arguments', () => {
195
+ let mockArgs;
196
+ class Component extends React.Component {
197
+ componentDidMount() {
198
+ this.setState({}, (...args) => (mockArgs = args));
199
+ }
200
+ render() {
201
+ return false;
202
+ }
203
+ }
204
+
205
+ ReactFabric.render(<Component />, 11);
206
+ expect(mockArgs.length).toEqual(0);
207
+ });
208
+});
packages/react-native-renderer/src/__tests__/__snapshots__/ReactFabric-test.internal.js.snap
new
+51
@@ -0,0 +1,51 @@
1
+// Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+exports[`ReactFabric renders and reorders children 1`] = `
4
+"11
5
+ View null
6
+ View {\\"title\\":\\"a\\"}
7
+ View {\\"title\\":\\"b\\"}
8
+ View {\\"title\\":\\"c\\"}
9
+ View {\\"title\\":\\"d\\"}
10
+ View {\\"title\\":\\"e\\"}
11
+ View {\\"title\\":\\"f\\"}
12
+ View {\\"title\\":\\"g\\"}
13
+ View {\\"title\\":\\"h\\"}
14
+ View {\\"title\\":\\"i\\"}
15
+ View {\\"title\\":\\"j\\"}
16
+ View {\\"title\\":\\"k\\"}
17
+ View {\\"title\\":\\"l\\"}
18
+ View {\\"title\\":\\"m\\"}
19
+ View {\\"title\\":\\"n\\"}
20
+ View {\\"title\\":\\"o\\"}
21
+ View {\\"title\\":\\"p\\"}
22
+ View {\\"title\\":\\"q\\"}
23
+ View {\\"title\\":\\"r\\"}
24
+ View {\\"title\\":\\"s\\"}
25
+ View {\\"title\\":\\"t\\"}"
26
+`;
27
+
28
+exports[`ReactFabric renders and reorders children 2`] = `
29
+"11
30
+ View null
31
+ View {\\"title\\":\\"m\\"}
32
+ View {\\"title\\":\\"x\\"}
33
+ View {\\"title\\":\\"h\\"}
34
+ View {\\"title\\":\\"p\\"}
35
+ View {\\"title\\":\\"g\\"}
36
+ View {\\"title\\":\\"w\\"}
37
+ View {\\"title\\":\\"f\\"}
38
+ View {\\"title\\":\\"r\\"}
39
+ View {\\"title\\":\\"a\\"}
40
+ View {\\"title\\":\\"l\\"}
41
+ View {\\"title\\":\\"k\\"}
42
+ View {\\"title\\":\\"e\\"}
43
+ View {\\"title\\":\\"o\\"}
44
+ View {\\"title\\":\\"i\\"}
45
+ View {\\"title\\":\\"v\\"}
46
+ View {\\"title\\":\\"c\\"}
47
+ View {\\"title\\":\\"s\\"}
48
+ View {\\"title\\":\\"t\\"}
49
+ View {\\"title\\":\\"z\\"}
50
+ View {\\"title\\":\\"y\\"}"
51
+`;
packages/react-native-renderer/src/findNodeHandle.js
+22
-2
@@ -15,7 +15,24 @@ import getComponentName from 'shared/getComponentName';
15
import invariant from 'fbjs/lib/invariant';
16
import warning from 'fbjs/lib/warning';
17
18
-import ReactNativeFiberRenderer from './ReactNativeFiberRenderer';
18
+// TODO: Share this module between Fabric and React Native renderers
19
+// so that both can be used in the same tree.
20
+
21
+let findHostInstance = function(fiber: Fiber): any {
22
+ return null;
23
+};
24
+
25
+let findHostInstanceFabric = function(fiber: Fiber): any {
26
+ return null;
27
+};
28
+
29
+export function injectFindHostInstance(impl: (fiber: Fiber) => any) {
30
+ findHostInstance = impl;
31
+}
32
+
33
+export function injectFindHostInstanceFabric(impl: (fiber: Fiber) => any) {
34
+ findHostInstanceFabric = impl;
35
+}
36
37
/**
38
* ReactNative vs ReactWeb
@@ -81,7 +98,10 @@ function findNodeHandle(componentOrHandle: any): any {
98
// ReactInstanceMap.get here will always succeed for mounted components
99
const internalInstance: Fiber = ReactInstanceMap.get(component);
100
if (internalInstance) {
84
- return ReactNativeFiberRenderer.findHostInstance(internalInstance);
101
+ return (
102
+ findHostInstance(internalInstance) ||
103
+ findHostInstanceFabric(internalInstance)
104
+ );
105
} else {
106
if (component) {
107
return component;
packages/react-reconciler/src/ReactFiberCommitWork.js
+11
-2
@@ -123,8 +123,17 @@ export default function<T, P, I, TI, HI, PI, C, CC, CX, PL>(
123
case HostRoot: {
124
const updateQueue = finishedWork.updateQueue;
125
if (updateQueue !== null) {
126
- const instance =
127
- finishedWork.child !== null ? finishedWork.child.stateNode : null;
126
+ let instance = null;
127
+ if (finishedWork.child !== null) {
128
+ switch (finishedWork.child.tag) {
129
+ case HostComponent:
130
+ instance = getPublicInstance(finishedWork.child.stateNode);
131
+ break;
132
+ case ClassComponent:
133
+ instance = finishedWork.child.stateNode;
134
+ break;
135
+ }
136
+ }
137
commitCallbacks(updateQueue, instance);
138
}
139
return;
packages/shared/ReactFeatureFlags.js
+1
-1
@@ -18,7 +18,7 @@ export const enableUserTimingAPI = __DEV__;
18
export const enableMutatingReconciler = true;
19
// Experimental noop mode (currently unused):
20
export const enableNoopReconciler = false;
21
-// Experimental persistent mode (CS):
21
+// Experimental persistent mode (Fabric):
22
export const enablePersistentReconciler = false;
23
24
// Helps identify side effects in begin-phase lifecycle hooks and setState reducers:
packages/shared/forks/ReactFeatureFlags.native-fabric.js
renamed
+3
-3
@@ -10,7 +10,7 @@
10
import invariant from 'fbjs/lib/invariant';
11
12
import typeof * as FeatureFlagsType from 'shared/ReactFeatureFlags';
13
-import typeof * as CSFeatureFlagsType from './ReactFeatureFlags.native-cs';
13
+import typeof * as FabricFeatureFlagsType from './ReactFeatureFlags.native-fabric';
14
15
export const debugRenderPhaseSideEffects = false;
16
export const enableAsyncSubtreeAPI = true;
@@ -18,7 +18,7 @@ export const enableCreateRoot = false;
18
export const enableUserTimingAPI = __DEV__;
19
export const warnAboutDeprecatedLifecycles = false;
20
21
-// React Native CS uses persistent reconciler.
21
+// React Fabric uses persistent reconciler.
22
export const enableMutatingReconciler = false;
23
export const enableNoopReconciler = false;
24
export const enablePersistentReconciler = true;
@@ -32,4 +32,4 @@ export function addUserTimingListener() {
32
// eslint-disable-next-line no-unused-vars
33
type Check<_X, Y: _X, X: Y = _X> = null;
34
// eslint-disable-next-line no-unused-expressions
35
-(null: Check<CSFeatureFlagsType, FeatureFlagsType>);
35
+(null: Check<FabricFeatureFlagsType, FeatureFlagsType>);
scripts/flow/react-native-host-hooks.js
+31
@@ -81,7 +81,38 @@ declare module 'UIManager' {
81
quality?: number,
82
},
83
): Promise<any>;
84
+ declare function setJSResponder(
85
+ reactTag: number,
86
+ blockNativeResponder: boolean,
87
+ ): void;
88
+ declare function clearJSResponder(): void;
89
}
90
+
91
+declare module 'FabricUIManager' {
92
+ declare function createNode(
93
+ reactTag: number,
94
+ viewName: string,
95
+ rootTag: number,
96
+ props: ?Object,
97
+ instanceHandle: Object,
98
+ ): Object;
99
+ declare function cloneNode(node: Object): Object;
100
+ declare function cloneNodeWithNewChildren(node: Object): Object;
101
+ declare function cloneNodeWithNewProps(
102
+ node: Object,
103
+ newProps: ?Object,
104
+ ): Object;
105
+ declare function cloneNodeWithNewChildrenAndProps(
106
+ node: Object,
107
+ newProps: ?Object,
108
+ ): Object;
109
+ declare function appendChild(node: Object, childNode: Object): void;
110
+
111
+ declare function createChildSet(rootTag: number): Object;
112
+ declare function appendChildToSet(childSet: Object, childNode: Object): void;
113
+ declare function completeRoot(rootTag: number, childSet: Object): void;
114
+}
115
+
116
declare module 'View' {
117
declare module.exports: typeof React$Component;
118
}
scripts/rollup/bundles.js
+22
@@ -131,6 +131,28 @@ const bundles = [
131
],
132
},
133
134
+ /******* React Native Fabric *******/
135
+ {
136
+ label: 'native-fabric',
137
+ bundleTypes: [RN_DEV, RN_PROD],
138
+ moduleType: RENDERER,
139
+ entry: 'react-native-renderer/fabric',
140
+ global: 'ReactFabric',
141
+ externals: [
142
+ 'ExceptionsManager',
143
+ 'InitializeCore',
144
+ 'Platform',
145
+ 'RCTEventEmitter',
146
+ 'TextInputState',
147
+ 'UIManager',
148
+ 'FabricUIManager',
149
+ 'View',
150
+ 'deepDiffer',
151
+ 'deepFreezeAndThrowOnMutationInDev',
152
+ 'flattenStyle',
153
+ ],
154
+ },
155
+
156
/******* React Test Renderer *******/
157
{
158
label: 'test',
scripts/rollup/forks.js
+2
@@ -34,6 +34,8 @@ const forks = Object.freeze({
34
switch (entry) {
35
case 'react-native-renderer':
36
return 'shared/forks/ReactFeatureFlags.native.js';
37
+ case 'react-native-renderer/src/ReactFabric':
38
+ return 'shared/forks/ReactFeatureFlags.native-fabric.js';
39
default:
40
switch (bundleType) {
41
case FB_DEV:
scripts/rollup/results.json
+93
-79
@@ -46,85 +46,85 @@
46
"filename": "react-dom.development.js",
47
"bundleType": "UMD_DEV",
48
"packageName": "react-dom",
49
- "size": 561031,
50
- "gzip": 132753
49
+ "size": 569094,
50
+ "gzip": 133855
51
},
52
{
53
"filename": "react-dom.production.min.js",
54
"bundleType": "UMD_PROD",
55
"packageName": "react-dom",
56
- "size": 93750,
57
- "gzip": 30816
56
+ "size": 94278,
57
+ "gzip": 30883
58
},
59
{
60
"filename": "react-dom.development.js",
61
"bundleType": "NODE_DEV",
62
"packageName": "react-dom",
63
- "size": 545064,
64
- "gzip": 129039
63
+ "size": 553111,
64
+ "gzip": 130124
65
},
66
{
67
"filename": "react-dom.production.min.js",
68
"bundleType": "NODE_PROD",
69
"packageName": "react-dom",
70
- "size": 92174,
71
- "gzip": 29919
70
+ "size": 92696,
71
+ "gzip": 29923
72
},
73
{
74
"filename": "ReactDOM-dev.js",
75
"bundleType": "FB_DEV",
76
"packageName": "react-dom",
77
- "size": 562543,
78
- "gzip": 131280
77
+ "size": 571833,
78
+ "gzip": 132486
79
},
80
{
81
"filename": "ReactDOM-prod.js",
82
"bundleType": "FB_PROD",
83
"packageName": "react-dom",
84
- "size": 264955,
85
- "gzip": 51224
84
+ "size": 267496,
85
+ "gzip": 51395
86
},
87
{
88
"filename": "react-dom-test-utils.development.js",
89
"bundleType": "UMD_DEV",
90
"packageName": "react-dom",
91
- "size": 41264,
92
- "gzip": 11741
91
+ "size": 41636,
92
+ "gzip": 11940
93
},
94
{
95
"filename": "react-dom-test-utils.production.min.js",
96
"bundleType": "UMD_PROD",
97
"packageName": "react-dom",
98
- "size": 10565,
99
- "gzip": 3914
98
+ "size": 10616,
99
+ "gzip": 3941
100
},
101
{
102
"filename": "react-dom-test-utils.development.js",
103
"bundleType": "NODE_DEV",
104
"packageName": "react-dom",
105
- "size": 36001,
106
- "gzip": 10275
105
+ "size": 36373,
106
+ "gzip": 10481
107
},
108
{
109
"filename": "react-dom-test-utils.production.min.js",
110
"bundleType": "NODE_PROD",
111
"packageName": "react-dom",
112
- "size": 10142,
113
- "gzip": 3828
112
+ "size": 10160,
113
+ "gzip": 3834
114
},
115
{
116
"filename": "ReactTestUtils-dev.js",
117
"bundleType": "FB_DEV",
118
"packageName": "react-dom",
119
- "size": 36716,
120
- "gzip": 10358
119
+ "size": 37102,
120
+ "gzip": 10564
121
},
122
{
123
"filename": "react-dom-unstable-native-dependencies.development.js",
124
"bundleType": "UMD_DEV",
125
"packageName": "react-dom",
126
- "size": 63124,
127
- "gzip": 16553
126
+ "size": 63220,
127
+ "gzip": 16592
128
},
129
{
130
"filename": "react-dom-unstable-native-dependencies.production.min.js",
@@ -137,8 +137,8 @@
137
"filename": "react-dom-unstable-native-dependencies.development.js",
138
"bundleType": "NODE_DEV",
139
"packageName": "react-dom",
140
- "size": 58686,
141
- "gzip": 15380
140
+ "size": 58782,
141
+ "gzip": 15415
142
},
143
{
144
"filename": "react-dom-unstable-native-dependencies.production.min.js",
@@ -151,8 +151,8 @@
151
"filename": "ReactDOMUnstableNativeDependencies-dev.js",
152
"bundleType": "FB_DEV",
153
"packageName": "react-dom",
154
- "size": 57769,
155
- "gzip": 14752
154
+ "size": 57873,
155
+ "gzip": 14804
156
},
157
{
158
"filename": "ReactDOMUnstableNativeDependencies-prod.js",
@@ -165,162 +165,162 @@
165
"filename": "react-dom-server.browser.development.js",
166
"bundleType": "UMD_DEV",
167
"packageName": "react-dom",
168
- "size": 93545,
169
- "gzip": 25061
168
+ "size": 96757,
169
+ "gzip": 25839
170
},
171
{
172
"filename": "react-dom-server.browser.production.min.js",
173
"bundleType": "UMD_PROD",
174
"packageName": "react-dom",
175
- "size": 14258,
176
- "gzip": 5749
175
+ "size": 14488,
176
+ "gzip": 5818
177
},
178
{
179
"filename": "react-dom-server.browser.development.js",
180
"bundleType": "NODE_DEV",
181
"packageName": "react-dom",
182
- "size": 82603,
183
- "gzip": 22355
182
+ "size": 85807,
183
+ "gzip": 23140
184
},
185
{
186
"filename": "react-dom-server.browser.production.min.js",
187
"bundleType": "NODE_PROD",
188
"packageName": "react-dom",
189
- "size": 13600,
190
- "gzip": 5503
189
+ "size": 13829,
190
+ "gzip": 5574
191
},
192
{
193
"filename": "ReactDOMServer-dev.js",
194
"bundleType": "FB_DEV",
195
"packageName": "react-dom",
196
- "size": 86081,
197
- "gzip": 22377
196
+ "size": 90048,
197
+ "gzip": 23276
198
},
199
{
200
"filename": "ReactDOMServer-prod.js",
201
"bundleType": "FB_PROD",
202
"packageName": "react-dom",
203
- "size": 29791,
204
- "gzip": 7706
203
+ "size": 30295,
204
+ "gzip": 7822
205
},
206
{
207
"filename": "react-dom-server.node.development.js",
208
"bundleType": "NODE_DEV",
209
"packageName": "react-dom",
210
- "size": 84571,
211
- "gzip": 22859
210
+ "size": 87775,
211
+ "gzip": 23648
212
},
213
{
214
"filename": "react-dom-server.node.production.min.js",
215
"bundleType": "NODE_PROD",
216
"packageName": "react-dom",
217
- "size": 14424,
218
- "gzip": 5812
217
+ "size": 14653,
218
+ "gzip": 5882
219
},
220
{
221
"filename": "react-art.development.js",
222
"bundleType": "UMD_DEV",
223
"packageName": "react-art",
224
- "size": 357962,
225
- "gzip": 80313
224
+ "size": 366568,
225
+ "gzip": 81568
226
},
227
{
228
"filename": "react-art.production.min.js",
229
"bundleType": "UMD_PROD",
230
"packageName": "react-art",
231
- "size": 83566,
232
- "gzip": 26202
231
+ "size": 84611,
232
+ "gzip": 26455
233
},
234
{
235
"filename": "react-art.development.js",
236
"bundleType": "NODE_DEV",
237
"packageName": "react-art",
238
- "size": 282049,
239
- "gzip": 61216
238
+ "size": 290639,
239
+ "gzip": 62540
240
},
241
{
242
"filename": "react-art.production.min.js",
243
"bundleType": "NODE_PROD",
244
"packageName": "react-art",
245
- "size": 47228,
246
- "gzip": 15196
245
+ "size": 48273,
246
+ "gzip": 15466
247
},
248
{
249
"filename": "ReactART-dev.js",
250
"bundleType": "FB_DEV",
251
"packageName": "react-art",
252
- "size": 286110,
253
- "gzip": 60960
252
+ "size": 295882,
253
+ "gzip": 62334
254
},
255
{
256
"filename": "ReactART-prod.js",
257
"bundleType": "FB_PROD",
258
"packageName": "react-art",
259
- "size": 144750,
260
- "gzip": 25349
259
+ "size": 147792,
260
+ "gzip": 25778
261
},
262
{
263
"filename": "ReactNativeRenderer-dev.js",
264
"bundleType": "RN_DEV",
265
"packageName": "react-native-renderer",
266
- "size": 410401,
267
- "gzip": 91364
266
+ "size": 421415,
267
+ "gzip": 92969
268
},
269
{
270
"filename": "ReactNativeRenderer-prod.js",
271
"bundleType": "RN_PROD",
272
"packageName": "react-native-renderer",
273
- "size": 196483,
274
- "gzip": 34394
273
+ "size": 200039,
274
+ "gzip": 35042
275
},
276
{
277
"filename": "react-test-renderer.development.js",
278
"bundleType": "NODE_DEV",
279
"packageName": "react-test-renderer",
280
- "size": 278620,
281
- "gzip": 60006
280
+ "size": 287210,
281
+ "gzip": 61295
282
},
283
{
284
"filename": "react-test-renderer.production.min.js",
285
"bundleType": "NODE_PROD",
286
"packageName": "react-test-renderer",
287
- "size": 45590,
288
- "gzip": 14534
287
+ "size": 46631,
288
+ "gzip": 14753
289
},
290
{
291
"filename": "ReactTestRenderer-dev.js",
292
"bundleType": "FB_DEV",
293
"packageName": "react-test-renderer",
294
- "size": 282777,
295
- "gzip": 59760
294
+ "size": 292549,
295
+ "gzip": 61128
296
},
297
{
298
"filename": "react-test-renderer-shallow.development.js",
299
"bundleType": "NODE_DEV",
300
"packageName": "react-test-renderer",
301
- "size": 11293,
302
- "gzip": 3095
301
+ "size": 17328,
302
+ "gzip": 4208
303
},
304
{
305
"filename": "react-test-renderer-shallow.production.min.js",
306
"bundleType": "NODE_PROD",
307
"packageName": "react-test-renderer",
308
- "size": 5640,
309
- "gzip": 2049
308
+ "size": 6421,
309
+ "gzip": 2181
310
},
311
{
312
"filename": "ReactShallowRenderer-dev.js",
313
"bundleType": "FB_DEV",
314
"packageName": "react-test-renderer",
315
- "size": 11530,
316
- "gzip": 3060
315
+ "size": 18804,
316
+ "gzip": 4332
317
},
318
{
319
"filename": "react-noop-renderer.development.js",
320
"bundleType": "NODE_DEV",
321
"packageName": "react-noop-renderer",
322
- "size": 18222,
323
- "gzip": 5112
322
+ "size": 18298,
323
+ "gzip": 5159
324
},
325
{
326
"filename": "react-noop-renderer.production.min.js",
@@ -333,15 +333,15 @@
333
"filename": "react-reconciler.development.js",
334
"bundleType": "NODE_DEV",
335
"packageName": "react-reconciler",
336
- "size": 260466,
337
- "gzip": 55624
336
+ "size": 269084,
337
+ "gzip": 56920
338
},
339
{
340
"filename": "react-reconciler.production.min.js",
341
"bundleType": "NODE_PROD",
342
"packageName": "react-reconciler",
343
- "size": 38900,
344
- "gzip": 12567
343
+ "size": 39964,
344
+ "gzip": 12786
345
},
346
{
347
"filename": "react-reconciler-reflection.development.js",
@@ -370,6 +370,20 @@
370
"packageName": "react-call-return",
371
"size": 971,
372
"gzip": 525
373
+ },
374
+ {
375
+ "filename": "ReactFabric-dev.js",
376
+ "bundleType": "RN_DEV",
377
+ "packageName": "react-native-renderer",
378
+ "size": 416100,
379
+ "gzip": 91978
380
+ },
381
+ {
382
+ "filename": "ReactFabric-prod.js",
383
+ "bundleType": "RN_PROD",
384
+ "packageName": "react-native-renderer",
385
+ "size": 195831,
386
+ "gzip": 34427
387
}
388
]
375
-}
389
+}
\ No newline at end of file
yarn.lock
+57
-393
@@ -10,6 +10,14 @@
10
esutils "^2.0.2"
11
js-tokens "^3.0.0"
12
13
+"@babel/code-frame@^7.0.0-beta.35":
14
+ version "7.0.0-beta.38"
15
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.38.tgz#c0af5930617e55e050336838e3a3670983b0b2b2"
16
+ dependencies:
17
+ chalk "^2.0.0"
18
+ esutils "^2.0.2"
19
+ js-tokens "^3.0.0"
20
+
21
"@babel/helper-function-name@7.0.0-beta.36":
22
version "7.0.0-beta.36"
23
resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.36.tgz#366e3bc35147721b69009f803907c4d53212e88d"
@@ -73,12 +81,6 @@ abbrev@1:
81
version "1.1.0"
82
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f"
83
76
-acorn-globals@^3.1.0:
77
- version "3.1.0"
78
- resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf"
79
- dependencies:
80
- acorn "^4.0.4"
81
-
84
acorn-globals@^4.0.0:
85
version "4.1.0"
86
resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.1.0.tgz#ab716025dbe17c54d3ef81d32ece2b2d99fe2538"
@@ -99,7 +101,7 @@ acorn@^3.0.4:
101
version "3.3.0"
102
resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
103
102
-acorn@^4.0.3, acorn@^4.0.4:
104
+acorn@^4.0.3:
105
version "4.0.11"
106
resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.11.tgz#edcda3bd937e7556410d42ed5860f67399c794c0"
107
@@ -107,10 +109,6 @@ acorn@^5.0.0, acorn@^5.1.2:
109
version "5.3.0"
110
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.3.0.tgz#7446d39459c54fb49a80e6ee6478149b940ec822"
111
110
-acorn@^5.0.1:
111
- version "5.0.3"
112
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.0.3.tgz#c460df08491463f028ccb82eab3730bf01087b3d"
113
-
112
acorn@^5.2.1:
113
version "5.2.1"
114
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.2.1.tgz#317ac7821826c22c702d66189ab8359675f135d7"
@@ -547,13 +545,6 @@ babel-helpers@^6.24.1:
545
babel-runtime "^6.22.0"
546
babel-template "^6.24.1"
547
550
-babel-jest@21.3.0-beta.4:
551
- version "21.3.0-beta.4"
552
- resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-21.3.0-beta.4.tgz#43d3975be81fb029d2d675d913803c123267309d"
553
- dependencies:
554
- babel-plugin-istanbul "^4.1.5"
555
- babel-preset-jest "21.3.0-beta.4"
556
-
548
babel-jest@^22.0.6:
549
version "22.0.6"
550
resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.0.6.tgz#807a2a5f5fad7789c57174a955cd14b11045299f"
@@ -603,10 +594,6 @@ babel-plugin-istanbul@^4.1.5:
594
istanbul-lib-instrument "^1.7.5"
595
test-exclude "^4.1.1"
596
606
-babel-plugin-jest-hoist@21.3.0-beta.4:
607
- version "21.3.0-beta.4"
608
- resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-21.3.0-beta.4.tgz#a1283b7e556c3cf236604c17e0f18aaa9cf3d79a"
609
-
597
babel-plugin-jest-hoist@^22.0.6:
598
version "22.0.6"
599
resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.0.6.tgz#551269ded350a15d6585da35d16d449df30d66c4"
@@ -895,13 +882,6 @@ babel-preset-flow@^6.23.0:
882
dependencies:
883
babel-plugin-transform-flow-strip-types "^6.22.0"
884
898
-babel-preset-jest@21.3.0-beta.4:
899
- version "21.3.0-beta.4"
900
- resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-21.3.0-beta.4.tgz#d4f797e00a23c0a027a42341684702888d90789a"
901
- dependencies:
902
- babel-plugin-jest-hoist "21.3.0-beta.4"
903
- babel-plugin-syntax-object-rest-spread "^6.13.0"
904
-
885
babel-preset-jest@^22.0.6:
886
version "22.0.6"
887
resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.0.6.tgz#d13202533db9495c98663044d9f51b273d3984c8"
@@ -1291,6 +1271,14 @@ cliui@^3.2.0:
1271
strip-ansi "^3.0.1"
1272
wrap-ansi "^2.0.0"
1273
1274
+cliui@^4.0.0:
1275
+ version "4.0.0"
1276
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.0.0.tgz#743d4650e05f36d1ed2575b59638d87322bfbbcc"
1277
+ dependencies:
1278
+ string-width "^2.1.1"
1279
+ strip-ansi "^4.0.0"
1280
+ wrap-ansi "^2.0.0"
1281
+
1282
clone-buffer@^1.0.0:
1283
version "1.0.0"
1284
resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58"
@@ -1750,12 +1738,6 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0:
1738
dependencies:
1739
once "^1.4.0"
1740
1753
-"errno@>=0.1.1 <0.2.0-0":
1754
- version "0.1.4"
1755
- resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d"
1756
- dependencies:
1757
- prr "~0.0.0"
1758
-
1741
error-ex@^1.2.0:
1742
version "1.3.1"
1743
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc"
@@ -1855,17 +1837,6 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
1837
version "1.0.5"
1838
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
1839
1858
-escodegen@^1.6.1:
1859
- version "1.8.1"
1860
- resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018"
1861
- dependencies:
1862
- esprima "^2.7.1"
1863
- estraverse "^1.9.1"
1864
- esutils "^2.0.2"
1865
- optionator "^0.8.1"
1866
- optionalDependencies:
1867
- source-map "~0.2.0"
1868
-
1840
escodegen@^1.9.0:
1841
version "1.9.0"
1842
resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.0.tgz#9811a2f265dc1cd3894420ee3717064b632b8852"
@@ -1982,7 +1953,7 @@ esprima-fb@~15001.1001.0-dev-harmony-fb:
1953
version "15001.1001.0-dev-harmony-fb"
1954
resolved "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz#43beb57ec26e8cf237d3dd8b33e42533577f2659"
1955
1985
-esprima@^2.6.0, esprima@^2.7.1:
1956
+esprima@^2.6.0:
1957
version "2.7.3"
1958
resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
1959
@@ -1990,6 +1961,10 @@ esprima@^3.1.1, esprima@^3.1.3, esprima@~3.1.0:
1961
version "3.1.3"
1962
resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
1963
1964
+esprima@^4.0.0:
1965
+ version "4.0.0"
1966
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804"
1967
+
1968
esquery@^1.0.0:
1969
version "1.0.0"
1970
resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa"
@@ -2003,10 +1978,6 @@ esrecurse@^4.1.0:
1978
estraverse "~4.1.0"
1979
object-assign "^4.0.1"
1980
2006
-estraverse@^1.9.1:
2007
- version "1.9.3"
2008
- resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44"
2009
-
1981
estraverse@^4.0.0, estraverse@^4.1.1, estraverse@^4.2.0:
1982
version "4.2.0"
1983
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
@@ -2074,17 +2045,6 @@ expand-tilde@^1.2.2:
2045
dependencies:
2046
os-homedir "^1.0.1"
2047
2077
-expect@21.3.0-beta.4:
2078
- version "21.3.0-beta.4"
2079
- resolved "https://registry.yarnpkg.com/expect/-/expect-21.3.0-beta.4.tgz#e1243ad493fb9dec41793ab0ffd08a3a81eb9cb4"
2080
- dependencies:
2081
- ansi-styles "^3.2.0"
2082
- jest-diff "21.3.0-beta.4"
2083
- jest-get-type "21.3.0-beta.4"
2084
- jest-matcher-utils "21.3.0-beta.4"
2085
- jest-message-util "21.3.0-beta.4"
2086
- jest-regex-util "^21.2.0"
2087
-
2048
expect@^22.0.6:
2049
version "22.0.6"
2050
resolved "https://registry.yarnpkg.com/expect/-/expect-22.0.6.tgz#69e1761ecb5ba354513e546e6187beda79e18078"
@@ -2390,6 +2350,10 @@ function-bind@^1.0.2, function-bind@^1.1.0:
2350
version "1.1.0"
2351
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771"
2352
2353
+function-bind@^1.1.1:
2354
+ version "1.1.1"
2355
+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
2356
+
2357
functional-red-black-tree@^1.0.1:
2358
version "1.0.1"
2359
resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
@@ -2827,7 +2791,7 @@ inflight@^1.0.4:
2791
once "^1.3.0"
2792
wrappy "1"
2793
2830
-inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3:
2794
+inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3:
2795
version "2.0.3"
2796
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
2797
@@ -3026,7 +2990,7 @@ is-property@^1.0.0:
2990
version "1.0.2"
2991
resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
2992
3029
-is-regex@^1.0.3:
2993
+is-regex@^1.0.3, is-regex@^1.0.4:
2994
version "1.0.4"
2995
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
2996
dependencies:
@@ -3182,53 +3146,12 @@ jasmine-check@^1.0.0-rc.0:
3146
dependencies:
3147
testcheck "^1.0.0-rc"
3148
3185
-jest-changed-files@^21.2.0:
3186
- version "21.2.0"
3187
- resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-21.2.0.tgz#5dbeecad42f5d88b482334902ce1cba6d9798d29"
3188
- dependencies:
3189
- throat "^4.0.0"
3190
-
3149
jest-changed-files@^22.0.6:
3150
version "22.0.6"
3151
resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-22.0.6.tgz#fca38cf4c89920c66aad1707e91d25bbea238875"
3152
dependencies:
3153
throat "^4.0.0"
3154
3197
-jest-cli@21.3.0-beta.4:
3198
- version "21.3.0-beta.4"
3199
- resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-21.3.0-beta.4.tgz#50a1c2773cfeff68dbb1fe454a3f259ad5850fa6"
3200
- dependencies:
3201
- ansi-escapes "^3.0.0"
3202
- chalk "^2.0.1"
3203
- glob "^7.1.2"
3204
- graceful-fs "^4.1.11"
3205
- is-ci "^1.0.10"
3206
- istanbul-api "^1.1.14"
3207
- istanbul-lib-coverage "^1.1.1"
3208
- istanbul-lib-instrument "^1.8.0"
3209
- istanbul-lib-source-maps "^1.2.1"
3210
- jest-changed-files "^21.2.0"
3211
- jest-config "21.3.0-beta.4"
3212
- jest-environment-jsdom "21.3.0-beta.4"
3213
- jest-haste-map "21.3.0-beta.4"
3214
- jest-message-util "21.3.0-beta.4"
3215
- jest-regex-util "^21.2.0"
3216
- jest-resolve-dependencies "^21.2.0"
3217
- jest-runner "21.3.0-beta.4"
3218
- jest-runtime "21.3.0-beta.4"
3219
- jest-snapshot "21.3.0-beta.4"
3220
- jest-util "21.3.0-beta.4"
3221
- micromatch "^2.3.11"
3222
- node-notifier "^5.1.2"
3223
- pify "^3.0.0"
3224
- rimraf "^2.5.4"
3225
- slash "^1.0.0"
3226
- string-length "^2.0.0"
3227
- strip-ansi "^4.0.0"
3228
- which "^1.2.12"
3229
- worker-farm "^1.3.1"
3230
- yargs "^9.0.0"
3231
-
3155
jest-cli@^22.0.6:
3156
version "22.0.6"
3157
resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-22.0.6.tgz#a2f1e5e094c42b29d22815463ae57f4d07e292ac"
@@ -3265,22 +3188,6 @@ jest-cli@^22.0.6:
3188
which "^1.2.12"
3189
yargs "^10.0.3"
3190
3268
-jest-config@21.3.0-beta.4:
3269
- version "21.3.0-beta.4"
3270
- resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-21.3.0-beta.4.tgz#03c936c605c5ec11bbd42aa9d2715d4d96cb11ee"
3271
- dependencies:
3272
- chalk "^2.0.1"
3273
- glob "^7.1.1"
3274
- jest-environment-jsdom "21.3.0-beta.4"
3275
- jest-environment-node "21.3.0-beta.4"
3276
- jest-get-type "21.3.0-beta.4"
3277
- jest-jasmine2 "21.3.0-beta.4"
3278
- jest-regex-util "^21.2.0"
3279
- jest-resolve "21.3.0-beta.4"
3280
- jest-util "21.3.0-beta.4"
3281
- jest-validate "21.3.0-beta.4"
3282
- pretty-format "21.3.0-beta.4"
3283
-
3191
jest-config@^22.0.6:
3192
version "22.0.6"
3193
resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.0.6.tgz#8af116784df189b98ed6fd6c307bce4181f7f012"
@@ -3297,15 +3204,6 @@ jest-config@^22.0.6:
3204
jest-validate "^22.0.6"
3205
pretty-format "^22.0.6"
3206
3300
-jest-diff@21.3.0-beta.4:
3301
- version "21.3.0-beta.4"
3302
- resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-21.3.0-beta.4.tgz#75e795e83f6c3368720c2ddd1f0cbed1543c4139"
3303
- dependencies:
3304
- chalk "^2.0.1"
3305
- diff "^3.2.0"
3306
- jest-get-type "21.3.0-beta.4"
3307
- pretty-format "21.3.0-beta.4"
3308
-
3207
jest-diff@^22.0.6:
3208
version "22.0.6"
3209
resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-22.0.6.tgz#38c07187324564ecf6389a980a2f0e86e7e79890"
@@ -3315,26 +3213,12 @@ jest-diff@^22.0.6:
3213
jest-get-type "^22.0.6"
3214
pretty-format "^22.0.6"
3215
3318
-jest-docblock@21.3.0-beta.4:
3319
- version "21.3.0-beta.4"
3320
- resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.3.0-beta.4.tgz#11c3121cccc39d826d484e0951cb2faad1fe1ebd"
3321
- dependencies:
3322
- detect-newline "^2.1.0"
3323
-
3216
jest-docblock@^22.0.6:
3217
version "22.0.6"
3218
resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.0.6.tgz#f187fb2c67eec0999e569d563092125283084f9e"
3219
dependencies:
3220
detect-newline "^2.1.0"
3221
3330
-jest-environment-jsdom@21.3.0-beta.4:
3331
- version "21.3.0-beta.4"
3332
- resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-21.3.0-beta.4.tgz#aa2831f1ac6b2c88a7ec965990517960d5828da1"
3333
- dependencies:
3334
- jest-mock "21.3.0-beta.4"
3335
- jest-util "21.3.0-beta.4"
3336
- jsdom "^9.12.0"
3337
-
3222
jest-environment-jsdom@^22.0.6:
3223
version "22.0.6"
3224
resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-22.0.6.tgz#243f3fa7167a1f293410aec8d3eb12ab8de4f748"
@@ -3343,13 +3227,6 @@ jest-environment-jsdom@^22.0.6:
3227
jest-util "^22.0.6"
3228
jsdom "^11.5.1"
3229
3346
-jest-environment-node@21.3.0-beta.4:
3347
- version "21.3.0-beta.4"
3348
- resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-21.3.0-beta.4.tgz#d4d620ee495d9af84edc157466ff962596e783ab"
3349
- dependencies:
3350
- jest-mock "21.3.0-beta.4"
3351
- jest-util "21.3.0-beta.4"
3352
-
3230
jest-environment-node@^22.0.6:
3231
version "22.0.6"
3232
resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-22.0.6.tgz#4f34ac4c0591297aceefa6a93421360bd56e5a74"
@@ -3357,25 +3234,10 @@ jest-environment-node@^22.0.6:
3234
jest-mock "^22.0.6"
3235
jest-util "^22.0.6"
3236
3360
-jest-get-type@21.3.0-beta.4:
3361
- version "21.3.0-beta.4"
3362
- resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-21.3.0-beta.4.tgz#248b16f9b8fe2887a0baa35b31905d73d66e56e0"
3363
-
3237
jest-get-type@^22.0.6:
3238
version "22.0.6"
3239
resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.0.6.tgz#301fbc0760779fdbad37b6e3239a3c1811aa75cb"
3240
3368
-jest-haste-map@21.3.0-beta.4:
3369
- version "21.3.0-beta.4"
3370
- resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-21.3.0-beta.4.tgz#dd8736c40c6db933e16f8f402a45fec859a310f5"
3371
- dependencies:
3372
- fb-watchman "^2.0.0"
3373
- graceful-fs "^4.1.11"
3374
- jest-docblock "21.3.0-beta.4"
3375
- micromatch "^2.3.11"
3376
- sane "^2.0.0"
3377
- worker-farm "^1.3.1"
3378
-
3241
jest-haste-map@^22.0.6:
3242
version "22.0.6"
3243
resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.0.6.tgz#198d665f65e1c484fef106a3c970c5b47903647e"
@@ -3387,20 +3249,6 @@ jest-haste-map@^22.0.6:
3249
micromatch "^2.3.11"
3250
sane "^2.0.0"
3251
3390
-jest-jasmine2@21.3.0-beta.4:
3391
- version "21.3.0-beta.4"
3392
- resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-21.3.0-beta.4.tgz#da0f065ce48c8eaaec1de6c1074ad05cc5a9f96f"
3393
- dependencies:
3394
- chalk "^2.0.1"
3395
- expect "21.3.0-beta.4"
3396
- graceful-fs "^4.1.11"
3397
- jest-diff "21.3.0-beta.4"
3398
- jest-matcher-utils "21.3.0-beta.4"
3399
- jest-message-util "21.3.0-beta.4"
3400
- jest-snapshot "21.3.0-beta.4"
3401
- p-cancelable "^0.3.0"
3402
- source-map-support "^0.5.0"
3403
-
3252
jest-jasmine2@^22.0.6:
3253
version "22.0.6"
3254
resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.0.6.tgz#db9eae709978a8d67a52f7b90d74cab7301107f5"
@@ -3423,14 +3271,6 @@ jest-leak-detector@^22.0.6:
3271
dependencies:
3272
pretty-format "^22.0.6"
3273
3426
-jest-matcher-utils@21.3.0-beta.4:
3427
- version "21.3.0-beta.4"
3428
- resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-21.3.0-beta.4.tgz#a83ad12d284c4c3a4db87ba5830f84a16b9a4a91"
3429
- dependencies:
3430
- chalk "^2.0.1"
3431
- jest-get-type "21.3.0-beta.4"
3432
- pretty-format "21.3.0-beta.4"
3433
-
3274
jest-matcher-utils@^22.0.6:
3275
version "22.0.6"
3276
resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.0.6.tgz#55675242b2af1de913f44e00aa4d68a38d349b07"
@@ -3439,15 +3279,6 @@ jest-matcher-utils@^22.0.6:
3279
jest-get-type "^22.0.6"
3280
pretty-format "^22.0.6"
3281
3442
-jest-message-util@21.3.0-beta.4:
3443
- version "21.3.0-beta.4"
3444
- resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-21.3.0-beta.4.tgz#018dd79f8d7b1a4bbbd9f5b3d59354d14ac9641f"
3445
- dependencies:
3446
- chalk "^2.0.1"
3447
- micromatch "^2.3.11"
3448
- slash "^1.0.0"
3449
- stack-utils "^1.0.1"
3450
-
3282
jest-message-util@^22.0.6:
3283
version "22.0.6"
3284
resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-22.0.6.tgz#2b30edce5131a9358f529ad66ff84835ba4ed457"
@@ -3458,41 +3289,20 @@ jest-message-util@^22.0.6:
3289
slash "^1.0.0"
3290
stack-utils "^1.0.1"
3291
3461
-jest-mock@21.3.0-beta.4:
3462
- version "21.3.0-beta.4"
3463
- resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-21.3.0-beta.4.tgz#f318168c781a340c2a75fbb3cc40559670531ddd"
3464
-
3292
jest-mock@^22.0.6:
3293
version "22.0.6"
3294
resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.0.6.tgz#0d1f51ec2bf1e72cd58e79cb76f587e6397306ec"
3295
3469
-jest-regex-util@^21.2.0:
3470
- version "21.2.0"
3471
- resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-21.2.0.tgz#1b1e33e63143babc3e0f2e6c9b5ba1eb34b2d530"
3472
-
3296
jest-regex-util@^22.0.6:
3297
version "22.0.6"
3298
resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-22.0.6.tgz#cd01d33c5993340f5d61be09b270773787a41d88"
3299
3477
-jest-resolve-dependencies@^21.2.0:
3478
- version "21.2.0"
3479
- resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-21.2.0.tgz#9e231e371e1a736a1ad4e4b9a843bc72bfe03d09"
3480
- dependencies:
3481
- jest-regex-util "^21.2.0"
3482
-
3300
jest-resolve-dependencies@^22.0.6:
3301
version "22.0.6"
3302
resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-22.0.6.tgz#dd976f0a9c2874d32edf4876b0a965cef48d479b"
3303
dependencies:
3304
jest-regex-util "^22.0.6"
3305
3489
-jest-resolve@21.3.0-beta.4:
3490
- version "21.3.0-beta.4"
3491
- resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-21.3.0-beta.4.tgz#66771415f4be5363b846a6b00599c0e9b01dc726"
3492
- dependencies:
3493
- browser-resolve "^1.11.2"
3494
- chalk "^2.0.1"
3495
-
3306
jest-resolve@^22.0.6:
3307
version "22.0.6"
3308
resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.0.6.tgz#29d7aa425adb9aae7aa5ae157483dffba724e52b"
@@ -3500,21 +3310,6 @@ jest-resolve@^22.0.6:
3310
browser-resolve "^1.11.2"
3311
chalk "^2.0.1"
3312
3503
-jest-runner@21.3.0-beta.4:
3504
- version "21.3.0-beta.4"
3505
- resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-21.3.0-beta.4.tgz#a52680a5aff6f1e160c6f520d86482224905d5fa"
3506
- dependencies:
3507
- jest-config "21.3.0-beta.4"
3508
- jest-docblock "21.3.0-beta.4"
3509
- jest-haste-map "21.3.0-beta.4"
3510
- jest-jasmine2 "21.3.0-beta.4"
3511
- jest-message-util "21.3.0-beta.4"
3512
- jest-runtime "21.3.0-beta.4"
3513
- jest-util "21.3.0-beta.4"
3514
- pify "^3.0.0"
3515
- throat "^4.0.0"
3516
- worker-farm "^1.3.1"
3517
-
3313
jest-runner@^22.0.6:
3314
version "22.0.6"
3315
resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-22.0.6.tgz#1986ee82b7968d21f04c402e5b67e3da71496f19"
@@ -3530,27 +3325,6 @@ jest-runner@^22.0.6:
3325
jest-worker "^22.0.6"
3326
throat "^4.0.0"
3327
3533
-jest-runtime@21.3.0-beta.4:
3534
- version "21.3.0-beta.4"
3535
- resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-21.3.0-beta.4.tgz#22238a05341baf88857e44e39a881c28807e5a36"
3536
- dependencies:
3537
- babel-jest "21.3.0-beta.4"
3538
- babel-plugin-istanbul "^4.1.5"
3539
- chalk "^2.0.1"
3540
- convert-source-map "^1.4.0"
3541
- graceful-fs "^4.1.11"
3542
- jest-config "21.3.0-beta.4"
3543
- jest-haste-map "21.3.0-beta.4"
3544
- jest-regex-util "^21.2.0"
3545
- jest-resolve "21.3.0-beta.4"
3546
- jest-util "21.3.0-beta.4"
3547
- json-stable-stringify "^1.0.1"
3548
- micromatch "^2.3.11"
3549
- slash "^1.0.0"
3550
- strip-bom "3.0.0"
3551
- write-file-atomic "^2.1.0"
3552
- yargs "^9.0.0"
3553
-
3328
jest-runtime@^22.0.6:
3329
version "22.0.6"
3330
resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-22.0.6.tgz#827c35e706adfc22e685de733ba3ab78cda72bfc"
@@ -3574,17 +3348,6 @@ jest-runtime@^22.0.6:
3348
write-file-atomic "^2.1.0"
3349
yargs "^10.0.3"
3350
3577
-jest-snapshot@21.3.0-beta.4:
3578
- version "21.3.0-beta.4"
3579
- resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-21.3.0-beta.4.tgz#0ba657b322029c2855dd6ac95a6494bf101de7dc"
3580
- dependencies:
3581
- chalk "^2.0.1"
3582
- jest-diff "21.3.0-beta.4"
3583
- jest-matcher-utils "21.3.0-beta.4"
3584
- mkdirp "^0.5.1"
3585
- natural-compare "^1.4.0"
3586
- pretty-format "21.3.0-beta.4"
3587
-
3351
jest-snapshot@^22.0.6:
3352
version "22.0.6"
3353
resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.0.6.tgz#30c1f85b6f050891c4a2060d807a3d65a594591c"
@@ -3596,18 +3359,6 @@ jest-snapshot@^22.0.6:
3359
natural-compare "^1.4.0"
3360
pretty-format "^22.0.6"
3361
3599
-jest-util@21.3.0-beta.4:
3600
- version "21.3.0-beta.4"
3601
- resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-21.3.0-beta.4.tgz#88bd0c8d1d51098336cf6696e3ae27d38b881664"
3602
- dependencies:
3603
- callsites "^2.0.0"
3604
- chalk "^2.0.1"
3605
- graceful-fs "^4.1.11"
3606
- jest-message-util "21.3.0-beta.4"
3607
- jest-mock "21.3.0-beta.4"
3608
- jest-validate "21.3.0-beta.4"
3609
- mkdirp "^0.5.1"
3610
-
3362
jest-util@^22.0.6:
3363
version "22.0.6"
3364
resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.0.6.tgz#539b3f21f4e2e458bb38719aa0e417109fe31657"
@@ -3620,15 +3371,6 @@ jest-util@^22.0.6:
3371
jest-validate "^22.0.6"
3372
mkdirp "^0.5.1"
3373
3623
-jest-validate@21.3.0-beta.4:
3624
- version "21.3.0-beta.4"
3625
- resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-21.3.0-beta.4.tgz#cfb0cdb38f7eb694f909ad041687645fd1b90452"
3626
- dependencies:
3627
- chalk "^2.0.1"
3628
- jest-get-type "21.3.0-beta.4"
3629
- leven "^2.1.0"
3630
- pretty-format "21.3.0-beta.4"
3631
-
3374
jest-validate@^22.0.6:
3375
version "22.0.6"
3376
resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.0.6.tgz#48c6972f154fa4abe20d0686a9b819d142740167"
@@ -3718,30 +3460,6 @@ jsdom@^11.5.1:
3460
whatwg-url "^6.3.0"
3461
xml-name-validator "^2.0.1"
3462
3721
-jsdom@^9.12.0:
3722
- version "9.12.0"
3723
- resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4"
3724
- dependencies:
3725
- abab "^1.0.3"
3726
- acorn "^4.0.4"
3727
- acorn-globals "^3.1.0"
3728
- array-equal "^1.0.0"
3729
- content-type-parser "^1.0.1"
3730
- cssom ">= 0.3.2 < 0.4.0"
3731
- cssstyle ">= 0.2.37 < 0.3.0"
3732
- escodegen "^1.6.1"
3733
- html-encoding-sniffer "^1.0.1"
3734
- nwmatcher ">= 1.3.9 < 2.0.0"
3735
- parse5 "^1.5.1"
3736
- request "^2.79.0"
3737
- sax "^1.2.1"
3738
- symbol-tree "^3.2.1"
3739
- tough-cookie "^2.3.2"
3740
- webidl-conversions "^4.0.0"
3741
- whatwg-encoding "^1.0.1"
3742
- whatwg-url "^4.3.0"
3743
- xml-name-validator "^2.0.1"
3744
-
3463
jsesc@^1.3.0:
3464
version "1.3.0"
3465
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
@@ -4055,7 +3773,7 @@ mem@^1.1.0:
3773
dependencies:
3774
mimic-fn "^1.0.0"
3775
4058
-merge-stream@^1.0.0:
3776
+merge-stream@^1.0.0, merge-stream@^1.0.1:
3777
version "1.0.1"
3778
resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1"
3779
dependencies:
@@ -4262,10 +3980,6 @@ number-is-nan@^1.0.0:
3980
version "1.0.1"
3981
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
3982
4265
-"nwmatcher@>= 1.3.9 < 2.0.0":
4266
- version "1.3.9"
4267
- resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.3.9.tgz#8bab486ff7fa3dfd086656bbe8b17116d3692d2a"
4268
-
3983
nwmatcher@^1.4.3:
3984
version "1.4.3"
3985
resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.3.tgz#64348e3b3d80f035b40ac11563d278f8b72db89c"
@@ -4373,7 +4087,7 @@ os-shim@^0.1.2:
4087
version "0.1.3"
4088
resolved "https://registry.yarnpkg.com/os-shim/-/os-shim-0.1.3.tgz#6b62c3791cf7909ea35ed46e17658bb417cb3917"
4089
4376
-os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.1:
4090
+os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2:
4091
version "1.0.2"
4092
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
4093
@@ -4392,10 +4106,6 @@ output-file-sync@^1.1.0:
4106
mkdirp "^0.5.1"
4107
object-assign "^4.1.0"
4108
4395
-p-cancelable@^0.3.0:
4396
- version "0.3.0"
4397
- resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa"
4398
-
4109
p-finally@^1.0.0:
4110
version "1.0.0"
4111
resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
@@ -4452,10 +4162,6 @@ parse-passwd@^1.0.0:
4162
version "1.0.0"
4163
resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
4164
4455
-parse5@^1.5.1:
4456
- version "1.5.1"
4457
- resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94"
4458
-
4165
parse5@^3.0.2:
4166
version "3.0.3"
4167
resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c"
@@ -4522,10 +4228,6 @@ pify@^2.0.0:
4228
version "2.3.0"
4229
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
4230
4525
-pify@^3.0.0:
4526
- version "3.0.0"
4527
- resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
4528
-
4231
pinkie-promise@^2.0.0:
4232
version "2.0.1"
4233
resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
@@ -4564,13 +4266,6 @@ prettier@1.8.1, prettier@^1.0.0:
4266
version "1.8.1"
4267
resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.8.1.tgz#91064d778c08c85ac1cbe6b23195c34310d039f9"
4268
4567
-pretty-format@21.3.0-beta.4:
4568
- version "21.3.0-beta.4"
4569
- resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-21.3.0-beta.4.tgz#6b3b8aba0b7097f821156e5fd1e3bc0fa923b17f"
4570
- dependencies:
4571
- ansi-regex "^3.0.0"
4572
- ansi-styles "^3.2.0"
4573
-
4269
pretty-format@^22.0.6:
4270
version "22.0.6"
4271
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.0.6.tgz#bbb78e38445f263c2d3b9e281f4b844380990720"
@@ -4615,10 +4310,6 @@ proxy-from-env@^1.0.0:
4310
version "1.0.0"
4311
resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee"
4312
4618
-prr@~0.0.0:
4619
- version "0.0.0"
4620
- resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a"
4621
-
4313
pseudomap@^1.0.1, pseudomap@^1.0.2:
4314
version "1.0.2"
4315
resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
@@ -4747,7 +4438,7 @@ readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable
4438
string_decoder "~1.0.0"
4439
util-deprecate "~1.0.1"
4440
4750
-readable-stream@^2.0.5:
4441
+readable-stream@^2.0.5, readable-stream@^2.2.2:
4442
version "2.3.3"
4443
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c"
4444
dependencies:
@@ -4936,7 +4627,7 @@ request@2.79.0:
4627
tunnel-agent "~0.4.1"
4628
uuid "^3.0.0"
4629
4939
-request@^2.79.0, request@^2.81.0:
4630
+request@^2.81.0:
4631
version "2.81.0"
4632
resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0"
4633
dependencies:
@@ -5296,12 +4987,6 @@ source-map@^0.6.0:
4987
version "0.6.1"
4988
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
4989
5299
-source-map@~0.2.0:
5300
- version "0.2.0"
5301
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d"
5302
- dependencies:
5303
- amdefine ">=0.0.4"
5304
-
4990
source-map@~0.5.6:
4991
version "0.5.7"
4992
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
@@ -5657,7 +5342,7 @@ tough-cookie@>=2.3.3, tough-cookie@^2.3.3, tough-cookie@~2.3.3:
5342
dependencies:
5343
punycode "^1.4.1"
5344
5660
-tough-cookie@^2.3.2, tough-cookie@~2.3.0:
5345
+tough-cookie@~2.3.0:
5346
version "2.3.2"
5347
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a"
5348
dependencies:
@@ -5669,10 +5354,6 @@ tr46@^1.0.0:
5354
dependencies:
5355
punycode "^2.1.0"
5356
5672
-tr46@~0.0.3:
5673
- version "0.0.3"
5674
- resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
5675
-
5357
trim-right@^1.0.0, trim-right@^1.0.1:
5358
version "1.0.1"
5359
resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
@@ -5709,7 +5390,7 @@ type-check@~0.3.2:
5390
dependencies:
5391
prelude-ls "~1.1.2"
5392
5712
-typedarray@~0.0.5:
5393
+typedarray@^0.0.6, typedarray@~0.0.5:
5394
version "0.0.6"
5395
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
5396
@@ -5840,14 +5521,6 @@ watch@~0.10.0:
5521
version "0.10.0"
5522
resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc"
5523
5843
-webidl-conversions@^3.0.0:
5844
- version "3.0.1"
5845
- resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
5846
-
5847
-webidl-conversions@^4.0.0:
5848
- version "4.0.1"
5849
- resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.1.tgz#8015a17ab83e7e1b311638486ace81da6ce206a0"
5850
-
5524
webidl-conversions@^4.0.1, webidl-conversions@^4.0.2:
5525
version "4.0.2"
5526
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
@@ -5869,13 +5542,6 @@ whatwg-fetch@>=0.10.0:
5542
version "2.0.3"
5543
resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84"
5544
5872
-whatwg-url@^4.3.0:
5873
- version "4.7.1"
5874
- resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.7.1.tgz#df4dc2e3f25a63b1fa5b32ed6d6c139577d690de"
5875
- dependencies:
5876
- tr46 "~0.0.3"
5877
- webidl-conversions "^3.0.0"
5878
-
5545
whatwg-url@^6.3.0:
5546
version "6.4.0"
5547
resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.4.0.tgz#08fdf2b9e872783a7a1f6216260a1d66cc722e08"
@@ -5934,13 +5600,6 @@ wordwrap@~1.0.0:
5600
version "1.0.0"
5601
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
5602
5937
-worker-farm@^1.3.1:
5938
- version "1.3.1"
5939
- resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.3.1.tgz#4333112bb49b17aa050b87895ca6b2cacf40e5ff"
5940
- dependencies:
5941
- errno ">=0.1.1 <0.2.0-0"
5942
- xtend ">=4.0.0 <4.1.0-0"
5943
-
5603
wrap-ansi@^2.0.0:
5604
version "2.1.0"
5605
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
@@ -6001,6 +5660,12 @@ yargs-parser@^7.0.0:
5660
dependencies:
5661
camelcase "^4.1.0"
5662
5663
+yargs-parser@^8.1.0:
5664
+ version "8.1.0"
5665
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950"
5666
+ dependencies:
5667
+ camelcase "^4.1.0"
5668
+
5669
yargs@8.0.1:
5670
version "8.0.1"
5671
resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.1.tgz#420ef75e840c1457a80adcca9bc6fa3849de51aa"
@@ -6019,6 +5684,23 @@ yargs@8.0.1:
5684
y18n "^3.2.1"
5685
yargs-parser "^7.0.0"
5686
5687
+yargs@^10.0.3:
5688
+ version "10.1.2"
5689
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.2.tgz#454d074c2b16a51a43e2fb7807e4f9de69ccb5c5"
5690
+ dependencies:
5691
+ cliui "^4.0.0"
5692
+ decamelize "^1.1.1"
5693
+ find-up "^2.1.0"
5694
+ get-caller-file "^1.0.1"
5695
+ os-locale "^2.0.0"
5696
+ require-directory "^2.1.1"
5697
+ require-main-filename "^1.0.1"
5698
+ set-blocking "^2.0.0"
5699
+ string-width "^2.0.0"
5700
+ which-module "^2.0.0"
5701
+ y18n "^3.2.1"
5702
+ yargs-parser "^8.1.0"
5703
+
5704
yargs@^4.8.0:
5705
version "4.8.1"
5706
resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0"
@@ -6056,24 +5738,6 @@ yargs@^6.3.0, yargs@^6.5.0:
5738
y18n "^3.2.1"
5739
yargs-parser "^4.2.0"
5740
6059
-yargs@^9.0.0:
6060
- version "9.0.1"
6061
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-9.0.1.tgz#52acc23feecac34042078ee78c0c007f5085db4c"
6062
- dependencies:
6063
- camelcase "^4.1.0"
6064
- cliui "^3.2.0"
6065
- decamelize "^1.1.1"
6066
- get-caller-file "^1.0.1"
6067
- os-locale "^2.0.0"
6068
- read-pkg-up "^2.0.0"
6069
- require-directory "^2.1.1"
6070
- require-main-filename "^1.0.1"
6071
- set-blocking "^2.0.0"
6072
- string-width "^2.0.0"
6073
- which-module "^2.0.0"
6074
- y18n "^3.2.1"
6075
- yargs-parser "^7.0.0"
6076
-
5741
yargs@~3.10.0:
5742
version "3.10.0"
5743
resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"