@samitouri / QOS-React / commits / 6031bea239

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"