mirror of
https://github.com/zebrajr/react.git
synced 2026-01-15 12:15:22 +00:00
Add Experimental Fabric Renderer (#12069)
This commit is contained in:
committed by
GitHub
parent
4ca7855ca0
commit
6031bea239
16
packages/react-native-renderer/fabric.js
vendored
Normal file
16
packages/react-native-renderer/fabric.js
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
/**
|
||||
* Copyright (c) 2013-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
const ReactFabric = require('./src/ReactFabric');
|
||||
|
||||
// TODO: decide on the top-level export form.
|
||||
// This is hacky but makes it work with both Rollup and Jest.
|
||||
module.exports = ReactFabric.default ? ReactFabric.default : ReactFabric;
|
||||
130
packages/react-native-renderer/src/ReactFabric.js
vendored
Normal file
130
packages/react-native-renderer/src/ReactFabric.js
vendored
Normal file
@@ -0,0 +1,130 @@
|
||||
/**
|
||||
* Copyright (c) 2013-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow
|
||||
*/
|
||||
|
||||
import type {ReactNativeType} from './ReactNativeTypes';
|
||||
import type {ReactNodeList} from 'shared/ReactTypes';
|
||||
|
||||
import './ReactNativeInjection';
|
||||
|
||||
import * as ReactPortal from 'shared/ReactPortal';
|
||||
import * as ReactGenericBatching from 'events/ReactGenericBatching';
|
||||
import TouchHistoryMath from 'events/TouchHistoryMath';
|
||||
import * as ReactGlobalSharedState from 'shared/ReactGlobalSharedState';
|
||||
import ReactVersion from 'shared/ReactVersion';
|
||||
|
||||
import NativeMethodsMixin from './NativeMethodsMixin';
|
||||
import ReactNativeBridgeEventPlugin from './ReactNativeBridgeEventPlugin';
|
||||
import ReactNativeComponent from './ReactNativeComponent';
|
||||
import * as ReactNativeComponentTree from './ReactNativeComponentTree';
|
||||
import ReactFabricRenderer from './ReactFabricRenderer';
|
||||
import ReactNativePropRegistry from './ReactNativePropRegistry';
|
||||
import {getInspectorDataForViewTag} from './ReactNativeFiberInspector';
|
||||
import createReactNativeComponentClass from './createReactNativeComponentClass';
|
||||
import {injectFindHostInstanceFabric} from './findNodeHandle';
|
||||
import findNumericNodeHandle from './findNumericNodeHandle';
|
||||
import takeSnapshot from './takeSnapshot';
|
||||
|
||||
injectFindHostInstanceFabric(ReactFabricRenderer.findHostInstance);
|
||||
|
||||
ReactGenericBatching.injection.injectFiberBatchedUpdates(
|
||||
ReactFabricRenderer.batchedUpdates,
|
||||
);
|
||||
|
||||
const roots = new Map();
|
||||
|
||||
const ReactFabric: ReactNativeType = {
|
||||
NativeComponent: ReactNativeComponent,
|
||||
|
||||
findNodeHandle: findNumericNodeHandle,
|
||||
|
||||
render(element: React$Element<any>, containerTag: any, callback: ?Function) {
|
||||
let root = roots.get(containerTag);
|
||||
|
||||
if (!root) {
|
||||
// TODO (bvaughn): If we decide to keep the wrapper component,
|
||||
// We could create a wrapper for containerTag as well to reduce special casing.
|
||||
root = ReactFabricRenderer.createContainer(containerTag, false, false);
|
||||
roots.set(containerTag, root);
|
||||
}
|
||||
ReactFabricRenderer.updateContainer(element, root, null, callback);
|
||||
|
||||
return ReactFabricRenderer.getPublicRootInstance(root);
|
||||
},
|
||||
|
||||
unmountComponentAtNode(containerTag: number) {
|
||||
const root = roots.get(containerTag);
|
||||
if (root) {
|
||||
// TODO: Is it safe to reset this now or should I wait since this unmount could be deferred?
|
||||
ReactFabricRenderer.updateContainer(null, root, null, () => {
|
||||
roots.delete(containerTag);
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
unmountComponentAtNodeAndRemoveContainer(containerTag: number) {
|
||||
ReactFabric.unmountComponentAtNode(containerTag);
|
||||
},
|
||||
|
||||
createPortal(
|
||||
children: ReactNodeList,
|
||||
containerTag: number,
|
||||
key: ?string = null,
|
||||
) {
|
||||
return ReactPortal.createPortal(children, containerTag, null, key);
|
||||
},
|
||||
|
||||
unstable_batchedUpdates: ReactGenericBatching.batchedUpdates,
|
||||
|
||||
flushSync: ReactFabricRenderer.flushSync,
|
||||
|
||||
__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: {
|
||||
// Used as a mixin in many createClass-based components
|
||||
NativeMethodsMixin,
|
||||
// Used by react-native-github/Libraries/ components
|
||||
ReactNativeBridgeEventPlugin, // requireNativeComponent
|
||||
ReactGlobalSharedState, // Systrace
|
||||
ReactNativeComponentTree, // InspectorUtils, ScrollResponder
|
||||
ReactNativePropRegistry, // flattenStyle, Stylesheet
|
||||
TouchHistoryMath, // PanResponder
|
||||
createReactNativeComponentClass, // RCTText, RCTView, ReactNativeART
|
||||
takeSnapshot, // react-native-implementation
|
||||
},
|
||||
};
|
||||
|
||||
if (__DEV__) {
|
||||
// $FlowFixMe
|
||||
Object.assign(
|
||||
ReactFabric.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,
|
||||
{
|
||||
// TODO: none of these work since Fiber. Remove these dependencies.
|
||||
// Used by RCTRenderingPerf, Systrace:
|
||||
ReactDebugTool: {
|
||||
addHook() {},
|
||||
removeHook() {},
|
||||
},
|
||||
// Used by ReactPerfStallHandler, RCTRenderingPerf:
|
||||
ReactPerf: {
|
||||
start() {},
|
||||
stop() {},
|
||||
printInclusive() {},
|
||||
printWasted() {},
|
||||
},
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
ReactFabricRenderer.injectIntoDevTools({
|
||||
findFiberByHostInstance: ReactNativeComponentTree.getClosestInstanceFromNode,
|
||||
getInspectorDataForViewTag: getInspectorDataForViewTag,
|
||||
bundleType: __DEV__ ? 1 : 0,
|
||||
version: ReactVersion,
|
||||
rendererPackageName: 'react-native-renderer',
|
||||
});
|
||||
|
||||
export default ReactFabric;
|
||||
321
packages/react-native-renderer/src/ReactFabricRenderer.js
vendored
Normal file
321
packages/react-native-renderer/src/ReactFabricRenderer.js
vendored
Normal file
@@ -0,0 +1,321 @@
|
||||
/**
|
||||
* Copyright (c) 2013-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow
|
||||
*/
|
||||
|
||||
import type {
|
||||
MeasureInWindowOnSuccessCallback,
|
||||
MeasureLayoutOnSuccessCallback,
|
||||
MeasureOnSuccessCallback,
|
||||
NativeMethodsMixinType,
|
||||
ReactNativeBaseComponentViewConfig,
|
||||
} from './ReactNativeTypes';
|
||||
|
||||
import {mountSafeCallback, warnForStyleProps} from './NativeMethodsMixinUtils';
|
||||
import * as ReactGenericBatching from 'events/ReactGenericBatching';
|
||||
import * as ReactNativeAttributePayload from './ReactNativeAttributePayload';
|
||||
import * as ReactNativeFrameScheduling from './ReactNativeFrameScheduling';
|
||||
import * as ReactNativeViewConfigRegistry from './ReactNativeViewConfigRegistry';
|
||||
import ReactFiberReconciler from 'react-reconciler';
|
||||
import ReactNativeTagHandles from './ReactNativeTagHandles';
|
||||
|
||||
import deepFreezeAndThrowOnMutationInDev from 'deepFreezeAndThrowOnMutationInDev';
|
||||
import emptyObject from 'fbjs/lib/emptyObject';
|
||||
|
||||
// Modules provided by RN:
|
||||
import TextInputState from 'TextInputState';
|
||||
import FabricUIManager from 'FabricUIManager';
|
||||
import UIManager from 'UIManager';
|
||||
|
||||
/**
|
||||
* This is used for refs on host components.
|
||||
*/
|
||||
class ReactFabricHostComponent {
|
||||
_nativeTag: number;
|
||||
viewConfig: ReactNativeBaseComponentViewConfig;
|
||||
currentProps: Props;
|
||||
|
||||
constructor(
|
||||
tag: number,
|
||||
viewConfig: ReactNativeBaseComponentViewConfig,
|
||||
props: Props,
|
||||
) {
|
||||
this._nativeTag = tag;
|
||||
this.viewConfig = viewConfig;
|
||||
this.currentProps = props;
|
||||
}
|
||||
|
||||
blur() {
|
||||
TextInputState.blurTextInput(this._nativeTag);
|
||||
}
|
||||
|
||||
focus() {
|
||||
TextInputState.focusTextInput(this._nativeTag);
|
||||
}
|
||||
|
||||
measure(callback: MeasureOnSuccessCallback) {
|
||||
UIManager.measure(this._nativeTag, mountSafeCallback(this, callback));
|
||||
}
|
||||
|
||||
measureInWindow(callback: MeasureInWindowOnSuccessCallback) {
|
||||
UIManager.measureInWindow(
|
||||
this._nativeTag,
|
||||
mountSafeCallback(this, callback),
|
||||
);
|
||||
}
|
||||
|
||||
measureLayout(
|
||||
relativeToNativeNode: number,
|
||||
onSuccess: MeasureLayoutOnSuccessCallback,
|
||||
onFail: () => void /* currently unused */,
|
||||
) {
|
||||
UIManager.measureLayout(
|
||||
this._nativeTag,
|
||||
relativeToNativeNode,
|
||||
mountSafeCallback(this, onFail),
|
||||
mountSafeCallback(this, onSuccess),
|
||||
);
|
||||
}
|
||||
|
||||
setNativeProps(nativeProps: Object) {
|
||||
if (__DEV__) {
|
||||
warnForStyleProps(nativeProps, this.viewConfig.validAttributes);
|
||||
}
|
||||
|
||||
const updatePayload = ReactNativeAttributePayload.create(
|
||||
nativeProps,
|
||||
this.viewConfig.validAttributes,
|
||||
);
|
||||
|
||||
// Avoid the overhead of bridge calls if there's no update.
|
||||
// This is an expensive no-op for Android, and causes an unnecessary
|
||||
// view invalidation for certain components (eg RCTTextInput) on iOS.
|
||||
if (updatePayload != null) {
|
||||
UIManager.updateView(
|
||||
this._nativeTag,
|
||||
this.viewConfig.uiViewClassName,
|
||||
updatePayload,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// eslint-disable-next-line no-unused-expressions
|
||||
(ReactFabricHostComponent.prototype: NativeMethodsMixinType);
|
||||
|
||||
type Node = Object;
|
||||
type ChildSet = Object;
|
||||
type Container = number;
|
||||
type Instance = {
|
||||
node: Node,
|
||||
canonical: ReactFabricHostComponent,
|
||||
};
|
||||
type Props = Object;
|
||||
type TextInstance = {
|
||||
node: Node,
|
||||
};
|
||||
|
||||
const ReactFabricRenderer = ReactFiberReconciler({
|
||||
appendInitialChild(
|
||||
parentInstance: Instance,
|
||||
child: Instance | TextInstance,
|
||||
): void {
|
||||
FabricUIManager.appendChild(parentInstance.node, child.node);
|
||||
},
|
||||
|
||||
createInstance(
|
||||
type: string,
|
||||
props: Props,
|
||||
rootContainerInstance: Container,
|
||||
hostContext: {},
|
||||
internalInstanceHandle: Object,
|
||||
): Instance {
|
||||
const tag = ReactNativeTagHandles.allocateTag();
|
||||
const viewConfig = ReactNativeViewConfigRegistry.get(type);
|
||||
|
||||
if (__DEV__) {
|
||||
for (const key in viewConfig.validAttributes) {
|
||||
if (props.hasOwnProperty(key)) {
|
||||
deepFreezeAndThrowOnMutationInDev(props[key]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const updatePayload = ReactNativeAttributePayload.create(
|
||||
props,
|
||||
viewConfig.validAttributes,
|
||||
);
|
||||
|
||||
const node = FabricUIManager.createNode(
|
||||
tag, // reactTag
|
||||
viewConfig.uiViewClassName, // viewName
|
||||
rootContainerInstance, // rootTag
|
||||
updatePayload, // props
|
||||
internalInstanceHandle, // internalInstanceHandle
|
||||
);
|
||||
|
||||
const component = new ReactFabricHostComponent(tag, viewConfig, props);
|
||||
|
||||
return {
|
||||
node: node,
|
||||
canonical: component,
|
||||
};
|
||||
},
|
||||
|
||||
createTextInstance(
|
||||
text: string,
|
||||
rootContainerInstance: Container,
|
||||
hostContext: {},
|
||||
internalInstanceHandle: Object,
|
||||
): TextInstance {
|
||||
const tag = ReactNativeTagHandles.allocateTag();
|
||||
|
||||
const node = FabricUIManager.createNode(
|
||||
tag, // reactTag
|
||||
'RCTRawText', // viewName
|
||||
rootContainerInstance, // rootTag
|
||||
{text: text}, // props
|
||||
internalInstanceHandle, // instance handle
|
||||
);
|
||||
|
||||
return {
|
||||
node: node,
|
||||
};
|
||||
},
|
||||
|
||||
finalizeInitialChildren(
|
||||
parentInstance: Instance,
|
||||
type: string,
|
||||
props: Props,
|
||||
rootContainerInstance: Container,
|
||||
): boolean {
|
||||
return false;
|
||||
},
|
||||
|
||||
getRootHostContext(): {} {
|
||||
return emptyObject;
|
||||
},
|
||||
|
||||
getChildHostContext(): {} {
|
||||
return emptyObject;
|
||||
},
|
||||
|
||||
getPublicInstance(instance) {
|
||||
return instance.canonical;
|
||||
},
|
||||
|
||||
now: ReactNativeFrameScheduling.now,
|
||||
|
||||
prepareForCommit(): void {
|
||||
// Noop
|
||||
},
|
||||
|
||||
prepareUpdate(
|
||||
instance: Instance,
|
||||
type: string,
|
||||
oldProps: Props,
|
||||
newProps: Props,
|
||||
rootContainerInstance: Container,
|
||||
hostContext: {},
|
||||
): null | Object {
|
||||
const viewConfig = instance.canonical.viewConfig;
|
||||
const updatePayload = ReactNativeAttributePayload.diff(
|
||||
oldProps,
|
||||
newProps,
|
||||
viewConfig.validAttributes,
|
||||
);
|
||||
// TODO: If the event handlers have changed, we need to update the current props
|
||||
// in the commit phase but there is no host config hook to do it yet.
|
||||
return updatePayload;
|
||||
},
|
||||
|
||||
resetAfterCommit(): void {
|
||||
// Noop
|
||||
},
|
||||
|
||||
scheduleDeferredCallback: ReactNativeFrameScheduling.scheduleDeferredCallback,
|
||||
cancelDeferredCallback: ReactNativeFrameScheduling.cancelDeferredCallback,
|
||||
|
||||
shouldDeprioritizeSubtree(type: string, props: Props): boolean {
|
||||
return false;
|
||||
},
|
||||
|
||||
shouldSetTextContent(type: string, props: Props): boolean {
|
||||
// TODO (bvaughn) Revisit this decision.
|
||||
// Always returning false simplifies the createInstance() implementation,
|
||||
// But creates an additional child Fiber for raw text children.
|
||||
// No additional native views are created though.
|
||||
// It's not clear to me which is better so I'm deferring for now.
|
||||
// More context @ github.com/facebook/react/pull/8560#discussion_r92111303
|
||||
return false;
|
||||
},
|
||||
|
||||
persistence: {
|
||||
cloneInstance(
|
||||
instance: Instance,
|
||||
updatePayload: null | Object,
|
||||
type: string,
|
||||
oldProps: Props,
|
||||
newProps: Props,
|
||||
internalInstanceHandle: Object,
|
||||
keepChildren: boolean,
|
||||
recyclableInstance: null | Instance,
|
||||
): Instance {
|
||||
const node = instance.node;
|
||||
let clone;
|
||||
if (keepChildren) {
|
||||
if (updatePayload !== null) {
|
||||
clone = FabricUIManager.cloneNodeWithNewProps(node, updatePayload);
|
||||
} else {
|
||||
clone = FabricUIManager.cloneNode(node);
|
||||
}
|
||||
} else {
|
||||
if (updatePayload !== null) {
|
||||
clone = FabricUIManager.cloneNodeWithNewChildrenAndProps(
|
||||
node,
|
||||
updatePayload,
|
||||
);
|
||||
} else {
|
||||
clone = FabricUIManager.cloneNodeWithNewChildren(node);
|
||||
}
|
||||
}
|
||||
return {
|
||||
node: clone,
|
||||
canonical: instance.canonical,
|
||||
};
|
||||
},
|
||||
|
||||
createContainerChildSet(container: Container): ChildSet {
|
||||
return FabricUIManager.createChildSet(container);
|
||||
},
|
||||
|
||||
appendChildToContainerChildSet(
|
||||
childSet: ChildSet,
|
||||
child: Instance | TextInstance,
|
||||
): void {
|
||||
FabricUIManager.appendChildToSet(childSet, child.node);
|
||||
},
|
||||
|
||||
finalizeContainerChildren(
|
||||
container: Container,
|
||||
newChildren: ChildSet,
|
||||
): void {
|
||||
FabricUIManager.completeRoot(container, newChildren);
|
||||
},
|
||||
|
||||
replaceContainerChildren(
|
||||
container: Container,
|
||||
newChildren: ChildSet,
|
||||
): void {},
|
||||
},
|
||||
});
|
||||
|
||||
ReactGenericBatching.injection.injectFiberBatchedUpdates(
|
||||
ReactFabricRenderer.batchedUpdates,
|
||||
);
|
||||
|
||||
export default ReactFabricRenderer;
|
||||
@@ -119,11 +119,11 @@ function restoreDeletedValuesInNestedArray(
|
||||
}
|
||||
|
||||
function diffNestedArrayProperty(
|
||||
updatePayload: ?Object,
|
||||
updatePayload: null | Object,
|
||||
prevArray: Array<NestedNode>,
|
||||
nextArray: Array<NestedNode>,
|
||||
validAttributes: AttributeConfiguration,
|
||||
): ?Object {
|
||||
): null | Object {
|
||||
const minLength =
|
||||
prevArray.length < nextArray.length ? prevArray.length : nextArray.length;
|
||||
let i;
|
||||
@@ -157,11 +157,11 @@ function diffNestedArrayProperty(
|
||||
}
|
||||
|
||||
function diffNestedProperty(
|
||||
updatePayload: ?Object,
|
||||
updatePayload: null | Object,
|
||||
prevProp: NestedNode,
|
||||
nextProp: NestedNode,
|
||||
validAttributes: AttributeConfiguration,
|
||||
): ?Object {
|
||||
): null | Object {
|
||||
if (!updatePayload && prevProp === nextProp) {
|
||||
// If no properties have been added, then we can bail out quickly on object
|
||||
// equality.
|
||||
@@ -224,7 +224,7 @@ function diffNestedProperty(
|
||||
* updatePayload.
|
||||
*/
|
||||
function addNestedProperty(
|
||||
updatePayload: ?Object,
|
||||
updatePayload: null | Object,
|
||||
nextProp: NestedNode,
|
||||
validAttributes: AttributeConfiguration,
|
||||
) {
|
||||
@@ -258,10 +258,10 @@ function addNestedProperty(
|
||||
* adds a null sentinel to the updatePayload, for each prop key.
|
||||
*/
|
||||
function clearNestedProperty(
|
||||
updatePayload: ?Object,
|
||||
updatePayload: null | Object,
|
||||
prevProp: NestedNode,
|
||||
validAttributes: AttributeConfiguration,
|
||||
): ?Object {
|
||||
): null | Object {
|
||||
if (!prevProp) {
|
||||
return updatePayload;
|
||||
}
|
||||
@@ -293,11 +293,11 @@ function clearNestedProperty(
|
||||
* anything changed.
|
||||
*/
|
||||
function diffProperties(
|
||||
updatePayload: ?Object,
|
||||
updatePayload: null | Object,
|
||||
prevProps: Object,
|
||||
nextProps: Object,
|
||||
validAttributes: AttributeConfiguration,
|
||||
): ?Object {
|
||||
): null | Object {
|
||||
let attributeConfig: ?(CustomAttributeConfiguration | AttributeConfiguration);
|
||||
let nextProp;
|
||||
let prevProp;
|
||||
@@ -465,10 +465,10 @@ function diffProperties(
|
||||
* addProperties adds all the valid props to the payload after being processed.
|
||||
*/
|
||||
function addProperties(
|
||||
updatePayload: ?Object,
|
||||
updatePayload: null | Object,
|
||||
props: Object,
|
||||
validAttributes: AttributeConfiguration,
|
||||
): ?Object {
|
||||
): null | Object {
|
||||
// TODO: Fast path
|
||||
return diffProperties(updatePayload, emptyObject, props, validAttributes);
|
||||
}
|
||||
@@ -478,10 +478,10 @@ function addProperties(
|
||||
* to the payload for each valid key.
|
||||
*/
|
||||
function clearProperties(
|
||||
updatePayload: ?Object,
|
||||
updatePayload: null | Object,
|
||||
prevProps: Object,
|
||||
validAttributes: AttributeConfiguration,
|
||||
): ?Object {
|
||||
): null | Object {
|
||||
// TODO: Fast path
|
||||
return diffProperties(updatePayload, prevProps, emptyObject, validAttributes);
|
||||
}
|
||||
@@ -489,7 +489,7 @@ function clearProperties(
|
||||
export function create(
|
||||
props: Object,
|
||||
validAttributes: AttributeConfiguration,
|
||||
): ?Object {
|
||||
): null | Object {
|
||||
return addProperties(
|
||||
null, // updatePayload
|
||||
props,
|
||||
@@ -501,7 +501,7 @@ export function diff(
|
||||
prevProps: Object,
|
||||
nextProps: Object,
|
||||
validAttributes: AttributeConfiguration,
|
||||
): ?Object {
|
||||
): null | Object {
|
||||
return diffProperties(
|
||||
null, // updatePayload
|
||||
prevProps,
|
||||
|
||||
@@ -149,7 +149,7 @@ class ReactNativeComponent<DefaultProps, Props, State> extends React.Component<
|
||||
}
|
||||
|
||||
const viewConfig: ReactNativeBaseComponentViewConfig =
|
||||
maybeInstance.viewConfig;
|
||||
maybeInstance.viewConfig || maybeInstance.canonical.viewConfig;
|
||||
|
||||
const updatePayload = ReactNativeAttributePayload.create(
|
||||
nativeProps,
|
||||
|
||||
@@ -20,11 +20,19 @@ export function uncacheFiberNode(tag) {
|
||||
}
|
||||
|
||||
function getInstanceFromTag(tag) {
|
||||
return instanceCache[tag] || null;
|
||||
if (typeof tag === 'number') {
|
||||
return instanceCache[tag] || null;
|
||||
} else {
|
||||
// Fabric will invoke event emitters on a direct fiber reference
|
||||
return tag;
|
||||
}
|
||||
}
|
||||
|
||||
function getTagFromInstance(inst) {
|
||||
const tag = inst.stateNode._nativeTag;
|
||||
let tag = inst.stateNode._nativeTag;
|
||||
if (tag === undefined) {
|
||||
tag = inst.stateNode.canonical._nativeTag;
|
||||
}
|
||||
invariant(tag, 'All native instances should have a tag.');
|
||||
return tag;
|
||||
}
|
||||
|
||||
@@ -27,14 +27,14 @@ import ReactNativeFiberHostComponent from './ReactNativeFiberHostComponent';
|
||||
import * as ReactNativeFrameScheduling from './ReactNativeFrameScheduling';
|
||||
import ReactNativeTagHandles from './ReactNativeTagHandles';
|
||||
|
||||
export type Container = number;
|
||||
type Container = number;
|
||||
export type Instance = {
|
||||
_children: Array<Instance | number>,
|
||||
_nativeTag: number,
|
||||
viewConfig: ReactNativeBaseComponentViewConfig,
|
||||
};
|
||||
export type Props = Object;
|
||||
export type TextInstance = number;
|
||||
type Props = Object;
|
||||
type TextInstance = number;
|
||||
|
||||
function recursivelyUncacheFiberNode(node: Instance | TextInstance) {
|
||||
if (typeof node === 'number') {
|
||||
|
||||
@@ -3,13 +3,15 @@
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow
|
||||
*/
|
||||
|
||||
// Module provided by RN:
|
||||
import UIManager from 'UIManager';
|
||||
|
||||
const ReactNativeGlobalResponderHandler = {
|
||||
onChange: function(from, to, blockNativeResponder) {
|
||||
onChange: function(from: any, to: any, blockNativeResponder: boolean) {
|
||||
if (to !== null) {
|
||||
const tag = to.stateNode._nativeTag;
|
||||
UIManager.setJSResponder(tag, blockNativeResponder);
|
||||
|
||||
@@ -28,9 +28,12 @@ import ReactNativeFiberRenderer from './ReactNativeFiberRenderer';
|
||||
import ReactNativePropRegistry from './ReactNativePropRegistry';
|
||||
import {getInspectorDataForViewTag} from './ReactNativeFiberInspector';
|
||||
import createReactNativeComponentClass from './createReactNativeComponentClass';
|
||||
import {injectFindHostInstance} from './findNodeHandle';
|
||||
import findNumericNodeHandle from './findNumericNodeHandle';
|
||||
import takeSnapshot from './takeSnapshot';
|
||||
|
||||
injectFindHostInstance(ReactNativeFiberRenderer.findHostInstance);
|
||||
|
||||
ReactGenericBatching.injection.injectFiberBatchedUpdates(
|
||||
ReactNativeFiberRenderer.batchedUpdates,
|
||||
);
|
||||
|
||||
111
packages/react-native-renderer/src/__mocks__/FabricUIManager.js
vendored
Normal file
111
packages/react-native-renderer/src/__mocks__/FabricUIManager.js
vendored
Normal file
@@ -0,0 +1,111 @@
|
||||
/**
|
||||
* Copyright (c) 2013-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
// Mock of the Native Hooks
|
||||
|
||||
const invariant = require('fbjs/lib/invariant');
|
||||
|
||||
const roots = new Map();
|
||||
const allocatedTags = new Set();
|
||||
|
||||
const RCTFabricUIManager = {
|
||||
__dumpHierarchyForJestTestsOnly: function() {
|
||||
function dumpSubtree(info, indent) {
|
||||
let out = '';
|
||||
out +=
|
||||
' '.repeat(indent) + info.viewName + ' ' + JSON.stringify(info.props);
|
||||
for (const child of info.children) {
|
||||
out += '\n' + dumpSubtree(child, indent + 2);
|
||||
}
|
||||
return out;
|
||||
}
|
||||
let result = [];
|
||||
for (const [rootTag, childSet] of roots) {
|
||||
result.push(rootTag);
|
||||
for (const child of childSet) {
|
||||
result.push(dumpSubtree(child, 1));
|
||||
}
|
||||
}
|
||||
return result.join('\n');
|
||||
},
|
||||
createNode: jest.fn(function createNode(
|
||||
reactTag,
|
||||
viewName,
|
||||
rootTag,
|
||||
props,
|
||||
instanceHandle,
|
||||
) {
|
||||
invariant(
|
||||
!allocatedTags.has(reactTag),
|
||||
'Created two native views with tag %s',
|
||||
reactTag,
|
||||
);
|
||||
allocatedTags.add(reactTag);
|
||||
return {
|
||||
reactTag: reactTag,
|
||||
viewName: viewName,
|
||||
props: props,
|
||||
children: [],
|
||||
};
|
||||
}),
|
||||
cloneNode: jest.fn(function cloneNode(node) {
|
||||
return {
|
||||
reactTag: node.reactTag,
|
||||
viewName: node.viewName,
|
||||
props: node.props,
|
||||
children: node.children,
|
||||
};
|
||||
}),
|
||||
cloneNodeWithNewChildren: jest.fn(function cloneNodeWithNewChildren(node) {
|
||||
return {
|
||||
reactTag: node.reactTag,
|
||||
viewName: node.viewName,
|
||||
props: node.props,
|
||||
children: [],
|
||||
};
|
||||
}),
|
||||
cloneNodeWithNewProps: jest.fn(function cloneNodeWithNewProps(
|
||||
node,
|
||||
newProps,
|
||||
) {
|
||||
return {
|
||||
reactTag: node.reactTag,
|
||||
viewName: node.viewName,
|
||||
props: newProps,
|
||||
children: node.children,
|
||||
};
|
||||
}),
|
||||
cloneNodeWithNewChildrenAndProps: jest.fn(
|
||||
function cloneNodeWithNewChildrenAndProps(node, newProps) {
|
||||
return {
|
||||
reactTag: node.reactTag,
|
||||
viewName: node.viewName,
|
||||
props: newProps,
|
||||
children: [],
|
||||
};
|
||||
},
|
||||
),
|
||||
appendChild: jest.fn(function appendChild(parentNode, childNode) {
|
||||
parentNode.children.push(childNode);
|
||||
}),
|
||||
|
||||
createChildSet: jest.fn(function createChildSet() {
|
||||
return [];
|
||||
}),
|
||||
|
||||
appendChildToSet: jest.fn(function appendChildToSet(childSet, childNode) {
|
||||
childSet.push(childNode);
|
||||
}),
|
||||
|
||||
completeRoot: jest.fn(function completeRoot(rootTag, newChildSet) {
|
||||
roots.set(rootTag, newChildSet);
|
||||
}),
|
||||
};
|
||||
|
||||
module.exports = RCTFabricUIManager;
|
||||
@@ -0,0 +1,208 @@
|
||||
/**
|
||||
* Copyright (c) 2013-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @emails react-core
|
||||
* @jest-environment node
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
let React;
|
||||
let ReactFabric;
|
||||
let createReactNativeComponentClass;
|
||||
let UIManager;
|
||||
let FabricUIManager;
|
||||
|
||||
jest.mock('shared/ReactFeatureFlags', () =>
|
||||
require('shared/forks/ReactFeatureFlags.native-fabric'),
|
||||
);
|
||||
|
||||
describe('ReactFabric', () => {
|
||||
beforeEach(() => {
|
||||
jest.resetModules();
|
||||
|
||||
React = require('react');
|
||||
ReactFabric = require('react-native-renderer/fabric');
|
||||
FabricUIManager = require('FabricUIManager');
|
||||
UIManager = require('UIManager');
|
||||
createReactNativeComponentClass = require('../createReactNativeComponentClass')
|
||||
.default;
|
||||
});
|
||||
|
||||
it('should be able to create and render a native component', () => {
|
||||
const View = createReactNativeComponentClass('View', () => ({
|
||||
validAttributes: {foo: true},
|
||||
uiViewClassName: 'View',
|
||||
}));
|
||||
|
||||
ReactFabric.render(<View foo="test" />, 1);
|
||||
expect(FabricUIManager.createNode).toBeCalled();
|
||||
expect(FabricUIManager.appendChild).not.toBeCalled();
|
||||
expect(FabricUIManager.completeRoot).toBeCalled();
|
||||
});
|
||||
|
||||
it('should be able to create and update a native component', () => {
|
||||
const View = createReactNativeComponentClass('View', () => ({
|
||||
validAttributes: {foo: true},
|
||||
uiViewClassName: 'View',
|
||||
}));
|
||||
|
||||
const firstNode = {};
|
||||
|
||||
FabricUIManager.createNode.mockReturnValue(firstNode);
|
||||
|
||||
ReactFabric.render(<View foo="foo" />, 11);
|
||||
|
||||
expect(FabricUIManager.createNode.mock.calls.length).toBe(1);
|
||||
|
||||
ReactFabric.render(<View foo="bar" />, 11);
|
||||
|
||||
expect(FabricUIManager.createNode.mock.calls.length).toBe(1);
|
||||
expect(FabricUIManager.cloneNodeWithNewProps).toBeCalledWith(firstNode, {
|
||||
foo: 'bar',
|
||||
});
|
||||
});
|
||||
|
||||
it('should not call FabricUIManager.cloneNode after render for properties that have not changed', () => {
|
||||
const Text = createReactNativeComponentClass('Text', () => ({
|
||||
validAttributes: {foo: true},
|
||||
uiViewClassName: 'Text',
|
||||
}));
|
||||
|
||||
ReactFabric.render(<Text foo="a">1</Text>, 11);
|
||||
expect(FabricUIManager.cloneNode).not.toBeCalled();
|
||||
expect(FabricUIManager.cloneNodeWithNewChildren).not.toBeCalled();
|
||||
expect(FabricUIManager.cloneNodeWithNewProps).not.toBeCalled();
|
||||
expect(FabricUIManager.cloneNodeWithNewChildrenAndProps).not.toBeCalled();
|
||||
|
||||
// If no properties have changed, we shouldn't call cloneNode.
|
||||
ReactFabric.render(<Text foo="a">1</Text>, 11);
|
||||
expect(FabricUIManager.cloneNode).not.toBeCalled();
|
||||
expect(FabricUIManager.cloneNodeWithNewChildren).not.toBeCalled();
|
||||
expect(FabricUIManager.cloneNodeWithNewProps).not.toBeCalled();
|
||||
expect(FabricUIManager.cloneNodeWithNewChildrenAndProps).not.toBeCalled();
|
||||
|
||||
// Only call cloneNode for the changed property (and not for text).
|
||||
ReactFabric.render(<Text foo="b">1</Text>, 11);
|
||||
expect(FabricUIManager.cloneNode).not.toBeCalled();
|
||||
expect(FabricUIManager.cloneNodeWithNewChildren).not.toBeCalled();
|
||||
expect(FabricUIManager.cloneNodeWithNewProps.mock.calls.length).toBe(1);
|
||||
expect(FabricUIManager.cloneNodeWithNewChildrenAndProps).not.toBeCalled();
|
||||
|
||||
// Only call cloneNode for the changed text (and no other properties).
|
||||
ReactFabric.render(<Text foo="b">2</Text>, 11);
|
||||
expect(FabricUIManager.cloneNode).not.toBeCalled();
|
||||
expect(FabricUIManager.cloneNodeWithNewChildren.mock.calls.length).toBe(1);
|
||||
expect(FabricUIManager.cloneNodeWithNewProps.mock.calls.length).toBe(1);
|
||||
expect(FabricUIManager.cloneNodeWithNewChildrenAndProps).not.toBeCalled();
|
||||
|
||||
// Call cloneNode for both changed text and properties.
|
||||
ReactFabric.render(<Text foo="c">3</Text>, 11);
|
||||
expect(FabricUIManager.cloneNode).not.toBeCalled();
|
||||
expect(FabricUIManager.cloneNodeWithNewChildren.mock.calls.length).toBe(1);
|
||||
expect(FabricUIManager.cloneNodeWithNewProps.mock.calls.length).toBe(1);
|
||||
expect(
|
||||
FabricUIManager.cloneNodeWithNewChildrenAndProps.mock.calls.length,
|
||||
).toBe(1);
|
||||
});
|
||||
|
||||
it('should not call UIManager.updateView from setNativeProps for properties that have not changed', () => {
|
||||
const View = createReactNativeComponentClass('View', () => ({
|
||||
validAttributes: {foo: true},
|
||||
uiViewClassName: 'View',
|
||||
}));
|
||||
|
||||
class Subclass extends ReactFabric.NativeComponent {
|
||||
render() {
|
||||
return <View />;
|
||||
}
|
||||
}
|
||||
|
||||
[View, Subclass].forEach(Component => {
|
||||
UIManager.updateView.mockReset();
|
||||
|
||||
let viewRef;
|
||||
ReactFabric.render(
|
||||
<Component
|
||||
foo="bar"
|
||||
ref={ref => {
|
||||
viewRef = ref;
|
||||
}}
|
||||
/>,
|
||||
11,
|
||||
);
|
||||
expect(UIManager.updateView).not.toBeCalled();
|
||||
|
||||
viewRef.setNativeProps({});
|
||||
expect(UIManager.updateView).not.toBeCalled();
|
||||
|
||||
viewRef.setNativeProps({foo: 'baz'});
|
||||
expect(UIManager.updateView.mock.calls.length).toBe(1);
|
||||
});
|
||||
});
|
||||
|
||||
it('returns the correct instance and calls it in the callback', () => {
|
||||
const View = createReactNativeComponentClass('View', () => ({
|
||||
validAttributes: {foo: true},
|
||||
uiViewClassName: 'View',
|
||||
}));
|
||||
|
||||
let a;
|
||||
let b;
|
||||
const c = ReactFabric.render(
|
||||
<View foo="foo" ref={v => (a = v)} />,
|
||||
11,
|
||||
function() {
|
||||
b = this;
|
||||
},
|
||||
);
|
||||
|
||||
expect(a).toBeTruthy();
|
||||
expect(a).toBe(b);
|
||||
expect(a).toBe(c);
|
||||
});
|
||||
|
||||
it('renders and reorders children', () => {
|
||||
const View = createReactNativeComponentClass('View', () => ({
|
||||
validAttributes: {title: true},
|
||||
uiViewClassName: 'View',
|
||||
}));
|
||||
|
||||
class Component extends React.Component {
|
||||
render() {
|
||||
const chars = this.props.chars.split('');
|
||||
return (
|
||||
<View>{chars.map(text => <View key={text} title={text} />)}</View>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Mini multi-child stress test: lots of reorders, some adds, some removes.
|
||||
const before = 'abcdefghijklmnopqrst';
|
||||
const after = 'mxhpgwfralkeoivcstzy';
|
||||
|
||||
ReactFabric.render(<Component chars={before} />, 11);
|
||||
expect(FabricUIManager.__dumpHierarchyForJestTestsOnly()).toMatchSnapshot();
|
||||
|
||||
ReactFabric.render(<Component chars={after} />, 11);
|
||||
expect(FabricUIManager.__dumpHierarchyForJestTestsOnly()).toMatchSnapshot();
|
||||
});
|
||||
|
||||
it('calls setState with no arguments', () => {
|
||||
let mockArgs;
|
||||
class Component extends React.Component {
|
||||
componentDidMount() {
|
||||
this.setState({}, (...args) => (mockArgs = args));
|
||||
}
|
||||
render() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
ReactFabric.render(<Component />, 11);
|
||||
expect(mockArgs.length).toEqual(0);
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,51 @@
|
||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`ReactFabric renders and reorders children 1`] = `
|
||||
"11
|
||||
View null
|
||||
View {\\"title\\":\\"a\\"}
|
||||
View {\\"title\\":\\"b\\"}
|
||||
View {\\"title\\":\\"c\\"}
|
||||
View {\\"title\\":\\"d\\"}
|
||||
View {\\"title\\":\\"e\\"}
|
||||
View {\\"title\\":\\"f\\"}
|
||||
View {\\"title\\":\\"g\\"}
|
||||
View {\\"title\\":\\"h\\"}
|
||||
View {\\"title\\":\\"i\\"}
|
||||
View {\\"title\\":\\"j\\"}
|
||||
View {\\"title\\":\\"k\\"}
|
||||
View {\\"title\\":\\"l\\"}
|
||||
View {\\"title\\":\\"m\\"}
|
||||
View {\\"title\\":\\"n\\"}
|
||||
View {\\"title\\":\\"o\\"}
|
||||
View {\\"title\\":\\"p\\"}
|
||||
View {\\"title\\":\\"q\\"}
|
||||
View {\\"title\\":\\"r\\"}
|
||||
View {\\"title\\":\\"s\\"}
|
||||
View {\\"title\\":\\"t\\"}"
|
||||
`;
|
||||
|
||||
exports[`ReactFabric renders and reorders children 2`] = `
|
||||
"11
|
||||
View null
|
||||
View {\\"title\\":\\"m\\"}
|
||||
View {\\"title\\":\\"x\\"}
|
||||
View {\\"title\\":\\"h\\"}
|
||||
View {\\"title\\":\\"p\\"}
|
||||
View {\\"title\\":\\"g\\"}
|
||||
View {\\"title\\":\\"w\\"}
|
||||
View {\\"title\\":\\"f\\"}
|
||||
View {\\"title\\":\\"r\\"}
|
||||
View {\\"title\\":\\"a\\"}
|
||||
View {\\"title\\":\\"l\\"}
|
||||
View {\\"title\\":\\"k\\"}
|
||||
View {\\"title\\":\\"e\\"}
|
||||
View {\\"title\\":\\"o\\"}
|
||||
View {\\"title\\":\\"i\\"}
|
||||
View {\\"title\\":\\"v\\"}
|
||||
View {\\"title\\":\\"c\\"}
|
||||
View {\\"title\\":\\"s\\"}
|
||||
View {\\"title\\":\\"t\\"}
|
||||
View {\\"title\\":\\"z\\"}
|
||||
View {\\"title\\":\\"y\\"}"
|
||||
`;
|
||||
@@ -15,7 +15,24 @@ import getComponentName from 'shared/getComponentName';
|
||||
import invariant from 'fbjs/lib/invariant';
|
||||
import warning from 'fbjs/lib/warning';
|
||||
|
||||
import ReactNativeFiberRenderer from './ReactNativeFiberRenderer';
|
||||
// TODO: Share this module between Fabric and React Native renderers
|
||||
// so that both can be used in the same tree.
|
||||
|
||||
let findHostInstance = function(fiber: Fiber): any {
|
||||
return null;
|
||||
};
|
||||
|
||||
let findHostInstanceFabric = function(fiber: Fiber): any {
|
||||
return null;
|
||||
};
|
||||
|
||||
export function injectFindHostInstance(impl: (fiber: Fiber) => any) {
|
||||
findHostInstance = impl;
|
||||
}
|
||||
|
||||
export function injectFindHostInstanceFabric(impl: (fiber: Fiber) => any) {
|
||||
findHostInstanceFabric = impl;
|
||||
}
|
||||
|
||||
/**
|
||||
* ReactNative vs ReactWeb
|
||||
@@ -81,7 +98,10 @@ function findNodeHandle(componentOrHandle: any): any {
|
||||
// ReactInstanceMap.get here will always succeed for mounted components
|
||||
const internalInstance: Fiber = ReactInstanceMap.get(component);
|
||||
if (internalInstance) {
|
||||
return ReactNativeFiberRenderer.findHostInstance(internalInstance);
|
||||
return (
|
||||
findHostInstance(internalInstance) ||
|
||||
findHostInstanceFabric(internalInstance)
|
||||
);
|
||||
} else {
|
||||
if (component) {
|
||||
return component;
|
||||
|
||||
@@ -123,8 +123,17 @@ export default function<T, P, I, TI, HI, PI, C, CC, CX, PL>(
|
||||
case HostRoot: {
|
||||
const updateQueue = finishedWork.updateQueue;
|
||||
if (updateQueue !== null) {
|
||||
const instance =
|
||||
finishedWork.child !== null ? finishedWork.child.stateNode : null;
|
||||
let instance = null;
|
||||
if (finishedWork.child !== null) {
|
||||
switch (finishedWork.child.tag) {
|
||||
case HostComponent:
|
||||
instance = getPublicInstance(finishedWork.child.stateNode);
|
||||
break;
|
||||
case ClassComponent:
|
||||
instance = finishedWork.child.stateNode;
|
||||
break;
|
||||
}
|
||||
}
|
||||
commitCallbacks(updateQueue, instance);
|
||||
}
|
||||
return;
|
||||
|
||||
@@ -18,7 +18,7 @@ export const enableUserTimingAPI = __DEV__;
|
||||
export const enableMutatingReconciler = true;
|
||||
// Experimental noop mode (currently unused):
|
||||
export const enableNoopReconciler = false;
|
||||
// Experimental persistent mode (CS):
|
||||
// Experimental persistent mode (Fabric):
|
||||
export const enablePersistentReconciler = false;
|
||||
|
||||
// Helps identify side effects in begin-phase lifecycle hooks and setState reducers:
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
import invariant from 'fbjs/lib/invariant';
|
||||
|
||||
import typeof * as FeatureFlagsType from 'shared/ReactFeatureFlags';
|
||||
import typeof * as CSFeatureFlagsType from './ReactFeatureFlags.native-cs';
|
||||
import typeof * as FabricFeatureFlagsType from './ReactFeatureFlags.native-fabric';
|
||||
|
||||
export const debugRenderPhaseSideEffects = false;
|
||||
export const enableAsyncSubtreeAPI = true;
|
||||
@@ -18,7 +18,7 @@ export const enableCreateRoot = false;
|
||||
export const enableUserTimingAPI = __DEV__;
|
||||
export const warnAboutDeprecatedLifecycles = false;
|
||||
|
||||
// React Native CS uses persistent reconciler.
|
||||
// React Fabric uses persistent reconciler.
|
||||
export const enableMutatingReconciler = false;
|
||||
export const enableNoopReconciler = false;
|
||||
export const enablePersistentReconciler = true;
|
||||
@@ -32,4 +32,4 @@ export function addUserTimingListener() {
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
type Check<_X, Y: _X, X: Y = _X> = null;
|
||||
// eslint-disable-next-line no-unused-expressions
|
||||
(null: Check<CSFeatureFlagsType, FeatureFlagsType>);
|
||||
(null: Check<FabricFeatureFlagsType, FeatureFlagsType>);
|
||||
31
scripts/flow/react-native-host-hooks.js
vendored
31
scripts/flow/react-native-host-hooks.js
vendored
@@ -81,7 +81,38 @@ declare module 'UIManager' {
|
||||
quality?: number,
|
||||
},
|
||||
): Promise<any>;
|
||||
declare function setJSResponder(
|
||||
reactTag: number,
|
||||
blockNativeResponder: boolean,
|
||||
): void;
|
||||
declare function clearJSResponder(): void;
|
||||
}
|
||||
|
||||
declare module 'FabricUIManager' {
|
||||
declare function createNode(
|
||||
reactTag: number,
|
||||
viewName: string,
|
||||
rootTag: number,
|
||||
props: ?Object,
|
||||
instanceHandle: Object,
|
||||
): Object;
|
||||
declare function cloneNode(node: Object): Object;
|
||||
declare function cloneNodeWithNewChildren(node: Object): Object;
|
||||
declare function cloneNodeWithNewProps(
|
||||
node: Object,
|
||||
newProps: ?Object,
|
||||
): Object;
|
||||
declare function cloneNodeWithNewChildrenAndProps(
|
||||
node: Object,
|
||||
newProps: ?Object,
|
||||
): Object;
|
||||
declare function appendChild(node: Object, childNode: Object): void;
|
||||
|
||||
declare function createChildSet(rootTag: number): Object;
|
||||
declare function appendChildToSet(childSet: Object, childNode: Object): void;
|
||||
declare function completeRoot(rootTag: number, childSet: Object): void;
|
||||
}
|
||||
|
||||
declare module 'View' {
|
||||
declare module.exports: typeof React$Component;
|
||||
}
|
||||
|
||||
@@ -131,6 +131,28 @@ const bundles = [
|
||||
],
|
||||
},
|
||||
|
||||
/******* React Native Fabric *******/
|
||||
{
|
||||
label: 'native-fabric',
|
||||
bundleTypes: [RN_DEV, RN_PROD],
|
||||
moduleType: RENDERER,
|
||||
entry: 'react-native-renderer/fabric',
|
||||
global: 'ReactFabric',
|
||||
externals: [
|
||||
'ExceptionsManager',
|
||||
'InitializeCore',
|
||||
'Platform',
|
||||
'RCTEventEmitter',
|
||||
'TextInputState',
|
||||
'UIManager',
|
||||
'FabricUIManager',
|
||||
'View',
|
||||
'deepDiffer',
|
||||
'deepFreezeAndThrowOnMutationInDev',
|
||||
'flattenStyle',
|
||||
],
|
||||
},
|
||||
|
||||
/******* React Test Renderer *******/
|
||||
{
|
||||
label: 'test',
|
||||
|
||||
@@ -34,6 +34,8 @@ const forks = Object.freeze({
|
||||
switch (entry) {
|
||||
case 'react-native-renderer':
|
||||
return 'shared/forks/ReactFeatureFlags.native.js';
|
||||
case 'react-native-renderer/src/ReactFabric':
|
||||
return 'shared/forks/ReactFeatureFlags.native-fabric.js';
|
||||
default:
|
||||
switch (bundleType) {
|
||||
case FB_DEV:
|
||||
|
||||
@@ -46,85 +46,85 @@
|
||||
"filename": "react-dom.development.js",
|
||||
"bundleType": "UMD_DEV",
|
||||
"packageName": "react-dom",
|
||||
"size": 561031,
|
||||
"gzip": 132753
|
||||
"size": 569094,
|
||||
"gzip": 133855
|
||||
},
|
||||
{
|
||||
"filename": "react-dom.production.min.js",
|
||||
"bundleType": "UMD_PROD",
|
||||
"packageName": "react-dom",
|
||||
"size": 93750,
|
||||
"gzip": 30816
|
||||
"size": 94278,
|
||||
"gzip": 30883
|
||||
},
|
||||
{
|
||||
"filename": "react-dom.development.js",
|
||||
"bundleType": "NODE_DEV",
|
||||
"packageName": "react-dom",
|
||||
"size": 545064,
|
||||
"gzip": 129039
|
||||
"size": 553111,
|
||||
"gzip": 130124
|
||||
},
|
||||
{
|
||||
"filename": "react-dom.production.min.js",
|
||||
"bundleType": "NODE_PROD",
|
||||
"packageName": "react-dom",
|
||||
"size": 92174,
|
||||
"gzip": 29919
|
||||
"size": 92696,
|
||||
"gzip": 29923
|
||||
},
|
||||
{
|
||||
"filename": "ReactDOM-dev.js",
|
||||
"bundleType": "FB_DEV",
|
||||
"packageName": "react-dom",
|
||||
"size": 562543,
|
||||
"gzip": 131280
|
||||
"size": 571833,
|
||||
"gzip": 132486
|
||||
},
|
||||
{
|
||||
"filename": "ReactDOM-prod.js",
|
||||
"bundleType": "FB_PROD",
|
||||
"packageName": "react-dom",
|
||||
"size": 264955,
|
||||
"gzip": 51224
|
||||
"size": 267496,
|
||||
"gzip": 51395
|
||||
},
|
||||
{
|
||||
"filename": "react-dom-test-utils.development.js",
|
||||
"bundleType": "UMD_DEV",
|
||||
"packageName": "react-dom",
|
||||
"size": 41264,
|
||||
"gzip": 11741
|
||||
"size": 41636,
|
||||
"gzip": 11940
|
||||
},
|
||||
{
|
||||
"filename": "react-dom-test-utils.production.min.js",
|
||||
"bundleType": "UMD_PROD",
|
||||
"packageName": "react-dom",
|
||||
"size": 10565,
|
||||
"gzip": 3914
|
||||
"size": 10616,
|
||||
"gzip": 3941
|
||||
},
|
||||
{
|
||||
"filename": "react-dom-test-utils.development.js",
|
||||
"bundleType": "NODE_DEV",
|
||||
"packageName": "react-dom",
|
||||
"size": 36001,
|
||||
"gzip": 10275
|
||||
"size": 36373,
|
||||
"gzip": 10481
|
||||
},
|
||||
{
|
||||
"filename": "react-dom-test-utils.production.min.js",
|
||||
"bundleType": "NODE_PROD",
|
||||
"packageName": "react-dom",
|
||||
"size": 10142,
|
||||
"gzip": 3828
|
||||
"size": 10160,
|
||||
"gzip": 3834
|
||||
},
|
||||
{
|
||||
"filename": "ReactTestUtils-dev.js",
|
||||
"bundleType": "FB_DEV",
|
||||
"packageName": "react-dom",
|
||||
"size": 36716,
|
||||
"gzip": 10358
|
||||
"size": 37102,
|
||||
"gzip": 10564
|
||||
},
|
||||
{
|
||||
"filename": "react-dom-unstable-native-dependencies.development.js",
|
||||
"bundleType": "UMD_DEV",
|
||||
"packageName": "react-dom",
|
||||
"size": 63124,
|
||||
"gzip": 16553
|
||||
"size": 63220,
|
||||
"gzip": 16592
|
||||
},
|
||||
{
|
||||
"filename": "react-dom-unstable-native-dependencies.production.min.js",
|
||||
@@ -137,8 +137,8 @@
|
||||
"filename": "react-dom-unstable-native-dependencies.development.js",
|
||||
"bundleType": "NODE_DEV",
|
||||
"packageName": "react-dom",
|
||||
"size": 58686,
|
||||
"gzip": 15380
|
||||
"size": 58782,
|
||||
"gzip": 15415
|
||||
},
|
||||
{
|
||||
"filename": "react-dom-unstable-native-dependencies.production.min.js",
|
||||
@@ -151,8 +151,8 @@
|
||||
"filename": "ReactDOMUnstableNativeDependencies-dev.js",
|
||||
"bundleType": "FB_DEV",
|
||||
"packageName": "react-dom",
|
||||
"size": 57769,
|
||||
"gzip": 14752
|
||||
"size": 57873,
|
||||
"gzip": 14804
|
||||
},
|
||||
{
|
||||
"filename": "ReactDOMUnstableNativeDependencies-prod.js",
|
||||
@@ -165,162 +165,162 @@
|
||||
"filename": "react-dom-server.browser.development.js",
|
||||
"bundleType": "UMD_DEV",
|
||||
"packageName": "react-dom",
|
||||
"size": 93545,
|
||||
"gzip": 25061
|
||||
"size": 96757,
|
||||
"gzip": 25839
|
||||
},
|
||||
{
|
||||
"filename": "react-dom-server.browser.production.min.js",
|
||||
"bundleType": "UMD_PROD",
|
||||
"packageName": "react-dom",
|
||||
"size": 14258,
|
||||
"gzip": 5749
|
||||
"size": 14488,
|
||||
"gzip": 5818
|
||||
},
|
||||
{
|
||||
"filename": "react-dom-server.browser.development.js",
|
||||
"bundleType": "NODE_DEV",
|
||||
"packageName": "react-dom",
|
||||
"size": 82603,
|
||||
"gzip": 22355
|
||||
"size": 85807,
|
||||
"gzip": 23140
|
||||
},
|
||||
{
|
||||
"filename": "react-dom-server.browser.production.min.js",
|
||||
"bundleType": "NODE_PROD",
|
||||
"packageName": "react-dom",
|
||||
"size": 13600,
|
||||
"gzip": 5503
|
||||
"size": 13829,
|
||||
"gzip": 5574
|
||||
},
|
||||
{
|
||||
"filename": "ReactDOMServer-dev.js",
|
||||
"bundleType": "FB_DEV",
|
||||
"packageName": "react-dom",
|
||||
"size": 86081,
|
||||
"gzip": 22377
|
||||
"size": 90048,
|
||||
"gzip": 23276
|
||||
},
|
||||
{
|
||||
"filename": "ReactDOMServer-prod.js",
|
||||
"bundleType": "FB_PROD",
|
||||
"packageName": "react-dom",
|
||||
"size": 29791,
|
||||
"gzip": 7706
|
||||
"size": 30295,
|
||||
"gzip": 7822
|
||||
},
|
||||
{
|
||||
"filename": "react-dom-server.node.development.js",
|
||||
"bundleType": "NODE_DEV",
|
||||
"packageName": "react-dom",
|
||||
"size": 84571,
|
||||
"gzip": 22859
|
||||
"size": 87775,
|
||||
"gzip": 23648
|
||||
},
|
||||
{
|
||||
"filename": "react-dom-server.node.production.min.js",
|
||||
"bundleType": "NODE_PROD",
|
||||
"packageName": "react-dom",
|
||||
"size": 14424,
|
||||
"gzip": 5812
|
||||
"size": 14653,
|
||||
"gzip": 5882
|
||||
},
|
||||
{
|
||||
"filename": "react-art.development.js",
|
||||
"bundleType": "UMD_DEV",
|
||||
"packageName": "react-art",
|
||||
"size": 357962,
|
||||
"gzip": 80313
|
||||
"size": 366568,
|
||||
"gzip": 81568
|
||||
},
|
||||
{
|
||||
"filename": "react-art.production.min.js",
|
||||
"bundleType": "UMD_PROD",
|
||||
"packageName": "react-art",
|
||||
"size": 83566,
|
||||
"gzip": 26202
|
||||
"size": 84611,
|
||||
"gzip": 26455
|
||||
},
|
||||
{
|
||||
"filename": "react-art.development.js",
|
||||
"bundleType": "NODE_DEV",
|
||||
"packageName": "react-art",
|
||||
"size": 282049,
|
||||
"gzip": 61216
|
||||
"size": 290639,
|
||||
"gzip": 62540
|
||||
},
|
||||
{
|
||||
"filename": "react-art.production.min.js",
|
||||
"bundleType": "NODE_PROD",
|
||||
"packageName": "react-art",
|
||||
"size": 47228,
|
||||
"gzip": 15196
|
||||
"size": 48273,
|
||||
"gzip": 15466
|
||||
},
|
||||
{
|
||||
"filename": "ReactART-dev.js",
|
||||
"bundleType": "FB_DEV",
|
||||
"packageName": "react-art",
|
||||
"size": 286110,
|
||||
"gzip": 60960
|
||||
"size": 295882,
|
||||
"gzip": 62334
|
||||
},
|
||||
{
|
||||
"filename": "ReactART-prod.js",
|
||||
"bundleType": "FB_PROD",
|
||||
"packageName": "react-art",
|
||||
"size": 144750,
|
||||
"gzip": 25349
|
||||
"size": 147792,
|
||||
"gzip": 25778
|
||||
},
|
||||
{
|
||||
"filename": "ReactNativeRenderer-dev.js",
|
||||
"bundleType": "RN_DEV",
|
||||
"packageName": "react-native-renderer",
|
||||
"size": 410401,
|
||||
"gzip": 91364
|
||||
"size": 421415,
|
||||
"gzip": 92969
|
||||
},
|
||||
{
|
||||
"filename": "ReactNativeRenderer-prod.js",
|
||||
"bundleType": "RN_PROD",
|
||||
"packageName": "react-native-renderer",
|
||||
"size": 196483,
|
||||
"gzip": 34394
|
||||
"size": 200039,
|
||||
"gzip": 35042
|
||||
},
|
||||
{
|
||||
"filename": "react-test-renderer.development.js",
|
||||
"bundleType": "NODE_DEV",
|
||||
"packageName": "react-test-renderer",
|
||||
"size": 278620,
|
||||
"gzip": 60006
|
||||
"size": 287210,
|
||||
"gzip": 61295
|
||||
},
|
||||
{
|
||||
"filename": "react-test-renderer.production.min.js",
|
||||
"bundleType": "NODE_PROD",
|
||||
"packageName": "react-test-renderer",
|
||||
"size": 45590,
|
||||
"gzip": 14534
|
||||
"size": 46631,
|
||||
"gzip": 14753
|
||||
},
|
||||
{
|
||||
"filename": "ReactTestRenderer-dev.js",
|
||||
"bundleType": "FB_DEV",
|
||||
"packageName": "react-test-renderer",
|
||||
"size": 282777,
|
||||
"gzip": 59760
|
||||
"size": 292549,
|
||||
"gzip": 61128
|
||||
},
|
||||
{
|
||||
"filename": "react-test-renderer-shallow.development.js",
|
||||
"bundleType": "NODE_DEV",
|
||||
"packageName": "react-test-renderer",
|
||||
"size": 11293,
|
||||
"gzip": 3095
|
||||
"size": 17328,
|
||||
"gzip": 4208
|
||||
},
|
||||
{
|
||||
"filename": "react-test-renderer-shallow.production.min.js",
|
||||
"bundleType": "NODE_PROD",
|
||||
"packageName": "react-test-renderer",
|
||||
"size": 5640,
|
||||
"gzip": 2049
|
||||
"size": 6421,
|
||||
"gzip": 2181
|
||||
},
|
||||
{
|
||||
"filename": "ReactShallowRenderer-dev.js",
|
||||
"bundleType": "FB_DEV",
|
||||
"packageName": "react-test-renderer",
|
||||
"size": 11530,
|
||||
"gzip": 3060
|
||||
"size": 18804,
|
||||
"gzip": 4332
|
||||
},
|
||||
{
|
||||
"filename": "react-noop-renderer.development.js",
|
||||
"bundleType": "NODE_DEV",
|
||||
"packageName": "react-noop-renderer",
|
||||
"size": 18222,
|
||||
"gzip": 5112
|
||||
"size": 18298,
|
||||
"gzip": 5159
|
||||
},
|
||||
{
|
||||
"filename": "react-noop-renderer.production.min.js",
|
||||
@@ -333,15 +333,15 @@
|
||||
"filename": "react-reconciler.development.js",
|
||||
"bundleType": "NODE_DEV",
|
||||
"packageName": "react-reconciler",
|
||||
"size": 260466,
|
||||
"gzip": 55624
|
||||
"size": 269084,
|
||||
"gzip": 56920
|
||||
},
|
||||
{
|
||||
"filename": "react-reconciler.production.min.js",
|
||||
"bundleType": "NODE_PROD",
|
||||
"packageName": "react-reconciler",
|
||||
"size": 38900,
|
||||
"gzip": 12567
|
||||
"size": 39964,
|
||||
"gzip": 12786
|
||||
},
|
||||
{
|
||||
"filename": "react-reconciler-reflection.development.js",
|
||||
@@ -370,6 +370,20 @@
|
||||
"packageName": "react-call-return",
|
||||
"size": 971,
|
||||
"gzip": 525
|
||||
},
|
||||
{
|
||||
"filename": "ReactFabric-dev.js",
|
||||
"bundleType": "RN_DEV",
|
||||
"packageName": "react-native-renderer",
|
||||
"size": 416100,
|
||||
"gzip": 91978
|
||||
},
|
||||
{
|
||||
"filename": "ReactFabric-prod.js",
|
||||
"bundleType": "RN_PROD",
|
||||
"packageName": "react-native-renderer",
|
||||
"size": 195831,
|
||||
"gzip": 34427
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
450
yarn.lock
450
yarn.lock
@@ -10,6 +10,14 @@
|
||||
esutils "^2.0.2"
|
||||
js-tokens "^3.0.0"
|
||||
|
||||
"@babel/code-frame@^7.0.0-beta.35":
|
||||
version "7.0.0-beta.38"
|
||||
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.38.tgz#c0af5930617e55e050336838e3a3670983b0b2b2"
|
||||
dependencies:
|
||||
chalk "^2.0.0"
|
||||
esutils "^2.0.2"
|
||||
js-tokens "^3.0.0"
|
||||
|
||||
"@babel/helper-function-name@7.0.0-beta.36":
|
||||
version "7.0.0-beta.36"
|
||||
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:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f"
|
||||
|
||||
acorn-globals@^3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf"
|
||||
dependencies:
|
||||
acorn "^4.0.4"
|
||||
|
||||
acorn-globals@^4.0.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.1.0.tgz#ab716025dbe17c54d3ef81d32ece2b2d99fe2538"
|
||||
@@ -99,7 +101,7 @@ acorn@^3.0.4:
|
||||
version "3.3.0"
|
||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
|
||||
|
||||
acorn@^4.0.3, acorn@^4.0.4:
|
||||
acorn@^4.0.3:
|
||||
version "4.0.11"
|
||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.11.tgz#edcda3bd937e7556410d42ed5860f67399c794c0"
|
||||
|
||||
@@ -107,10 +109,6 @@ acorn@^5.0.0, acorn@^5.1.2:
|
||||
version "5.3.0"
|
||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.3.0.tgz#7446d39459c54fb49a80e6ee6478149b940ec822"
|
||||
|
||||
acorn@^5.0.1:
|
||||
version "5.0.3"
|
||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.0.3.tgz#c460df08491463f028ccb82eab3730bf01087b3d"
|
||||
|
||||
acorn@^5.2.1:
|
||||
version "5.2.1"
|
||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.2.1.tgz#317ac7821826c22c702d66189ab8359675f135d7"
|
||||
@@ -547,13 +545,6 @@ babel-helpers@^6.24.1:
|
||||
babel-runtime "^6.22.0"
|
||||
babel-template "^6.24.1"
|
||||
|
||||
babel-jest@21.3.0-beta.4:
|
||||
version "21.3.0-beta.4"
|
||||
resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-21.3.0-beta.4.tgz#43d3975be81fb029d2d675d913803c123267309d"
|
||||
dependencies:
|
||||
babel-plugin-istanbul "^4.1.5"
|
||||
babel-preset-jest "21.3.0-beta.4"
|
||||
|
||||
babel-jest@^22.0.6:
|
||||
version "22.0.6"
|
||||
resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.0.6.tgz#807a2a5f5fad7789c57174a955cd14b11045299f"
|
||||
@@ -603,10 +594,6 @@ babel-plugin-istanbul@^4.1.5:
|
||||
istanbul-lib-instrument "^1.7.5"
|
||||
test-exclude "^4.1.1"
|
||||
|
||||
babel-plugin-jest-hoist@21.3.0-beta.4:
|
||||
version "21.3.0-beta.4"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-21.3.0-beta.4.tgz#a1283b7e556c3cf236604c17e0f18aaa9cf3d79a"
|
||||
|
||||
babel-plugin-jest-hoist@^22.0.6:
|
||||
version "22.0.6"
|
||||
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:
|
||||
dependencies:
|
||||
babel-plugin-transform-flow-strip-types "^6.22.0"
|
||||
|
||||
babel-preset-jest@21.3.0-beta.4:
|
||||
version "21.3.0-beta.4"
|
||||
resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-21.3.0-beta.4.tgz#d4f797e00a23c0a027a42341684702888d90789a"
|
||||
dependencies:
|
||||
babel-plugin-jest-hoist "21.3.0-beta.4"
|
||||
babel-plugin-syntax-object-rest-spread "^6.13.0"
|
||||
|
||||
babel-preset-jest@^22.0.6:
|
||||
version "22.0.6"
|
||||
resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.0.6.tgz#d13202533db9495c98663044d9f51b273d3984c8"
|
||||
@@ -1291,6 +1271,14 @@ cliui@^3.2.0:
|
||||
strip-ansi "^3.0.1"
|
||||
wrap-ansi "^2.0.0"
|
||||
|
||||
cliui@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.0.0.tgz#743d4650e05f36d1ed2575b59638d87322bfbbcc"
|
||||
dependencies:
|
||||
string-width "^2.1.1"
|
||||
strip-ansi "^4.0.0"
|
||||
wrap-ansi "^2.0.0"
|
||||
|
||||
clone-buffer@^1.0.0:
|
||||
version "1.0.0"
|
||||
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:
|
||||
dependencies:
|
||||
once "^1.4.0"
|
||||
|
||||
"errno@>=0.1.1 <0.2.0-0":
|
||||
version "0.1.4"
|
||||
resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d"
|
||||
dependencies:
|
||||
prr "~0.0.0"
|
||||
|
||||
error-ex@^1.2.0:
|
||||
version "1.3.1"
|
||||
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:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
|
||||
|
||||
escodegen@^1.6.1:
|
||||
version "1.8.1"
|
||||
resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018"
|
||||
dependencies:
|
||||
esprima "^2.7.1"
|
||||
estraverse "^1.9.1"
|
||||
esutils "^2.0.2"
|
||||
optionator "^0.8.1"
|
||||
optionalDependencies:
|
||||
source-map "~0.2.0"
|
||||
|
||||
escodegen@^1.9.0:
|
||||
version "1.9.0"
|
||||
resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.0.tgz#9811a2f265dc1cd3894420ee3717064b632b8852"
|
||||
@@ -1982,7 +1953,7 @@ esprima-fb@~15001.1001.0-dev-harmony-fb:
|
||||
version "15001.1001.0-dev-harmony-fb"
|
||||
resolved "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz#43beb57ec26e8cf237d3dd8b33e42533577f2659"
|
||||
|
||||
esprima@^2.6.0, esprima@^2.7.1:
|
||||
esprima@^2.6.0:
|
||||
version "2.7.3"
|
||||
resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
|
||||
|
||||
@@ -1990,6 +1961,10 @@ esprima@^3.1.1, esprima@^3.1.3, esprima@~3.1.0:
|
||||
version "3.1.3"
|
||||
resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
|
||||
|
||||
esprima@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804"
|
||||
|
||||
esquery@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa"
|
||||
@@ -2003,10 +1978,6 @@ esrecurse@^4.1.0:
|
||||
estraverse "~4.1.0"
|
||||
object-assign "^4.0.1"
|
||||
|
||||
estraverse@^1.9.1:
|
||||
version "1.9.3"
|
||||
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44"
|
||||
|
||||
estraverse@^4.0.0, estraverse@^4.1.1, estraverse@^4.2.0:
|
||||
version "4.2.0"
|
||||
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
|
||||
@@ -2074,17 +2045,6 @@ expand-tilde@^1.2.2:
|
||||
dependencies:
|
||||
os-homedir "^1.0.1"
|
||||
|
||||
expect@21.3.0-beta.4:
|
||||
version "21.3.0-beta.4"
|
||||
resolved "https://registry.yarnpkg.com/expect/-/expect-21.3.0-beta.4.tgz#e1243ad493fb9dec41793ab0ffd08a3a81eb9cb4"
|
||||
dependencies:
|
||||
ansi-styles "^3.2.0"
|
||||
jest-diff "21.3.0-beta.4"
|
||||
jest-get-type "21.3.0-beta.4"
|
||||
jest-matcher-utils "21.3.0-beta.4"
|
||||
jest-message-util "21.3.0-beta.4"
|
||||
jest-regex-util "^21.2.0"
|
||||
|
||||
expect@^22.0.6:
|
||||
version "22.0.6"
|
||||
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:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771"
|
||||
|
||||
function-bind@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
|
||||
|
||||
functional-red-black-tree@^1.0.1:
|
||||
version "1.0.1"
|
||||
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:
|
||||
once "^1.3.0"
|
||||
wrappy "1"
|
||||
|
||||
inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3:
|
||||
inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
|
||||
|
||||
@@ -3026,7 +2990,7 @@ is-property@^1.0.0:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
|
||||
|
||||
is-regex@^1.0.3:
|
||||
is-regex@^1.0.3, is-regex@^1.0.4:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
|
||||
dependencies:
|
||||
@@ -3182,53 +3146,12 @@ jasmine-check@^1.0.0-rc.0:
|
||||
dependencies:
|
||||
testcheck "^1.0.0-rc"
|
||||
|
||||
jest-changed-files@^21.2.0:
|
||||
version "21.2.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-21.2.0.tgz#5dbeecad42f5d88b482334902ce1cba6d9798d29"
|
||||
dependencies:
|
||||
throat "^4.0.0"
|
||||
|
||||
jest-changed-files@^22.0.6:
|
||||
version "22.0.6"
|
||||
resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-22.0.6.tgz#fca38cf4c89920c66aad1707e91d25bbea238875"
|
||||
dependencies:
|
||||
throat "^4.0.0"
|
||||
|
||||
jest-cli@21.3.0-beta.4:
|
||||
version "21.3.0-beta.4"
|
||||
resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-21.3.0-beta.4.tgz#50a1c2773cfeff68dbb1fe454a3f259ad5850fa6"
|
||||
dependencies:
|
||||
ansi-escapes "^3.0.0"
|
||||
chalk "^2.0.1"
|
||||
glob "^7.1.2"
|
||||
graceful-fs "^4.1.11"
|
||||
is-ci "^1.0.10"
|
||||
istanbul-api "^1.1.14"
|
||||
istanbul-lib-coverage "^1.1.1"
|
||||
istanbul-lib-instrument "^1.8.0"
|
||||
istanbul-lib-source-maps "^1.2.1"
|
||||
jest-changed-files "^21.2.0"
|
||||
jest-config "21.3.0-beta.4"
|
||||
jest-environment-jsdom "21.3.0-beta.4"
|
||||
jest-haste-map "21.3.0-beta.4"
|
||||
jest-message-util "21.3.0-beta.4"
|
||||
jest-regex-util "^21.2.0"
|
||||
jest-resolve-dependencies "^21.2.0"
|
||||
jest-runner "21.3.0-beta.4"
|
||||
jest-runtime "21.3.0-beta.4"
|
||||
jest-snapshot "21.3.0-beta.4"
|
||||
jest-util "21.3.0-beta.4"
|
||||
micromatch "^2.3.11"
|
||||
node-notifier "^5.1.2"
|
||||
pify "^3.0.0"
|
||||
rimraf "^2.5.4"
|
||||
slash "^1.0.0"
|
||||
string-length "^2.0.0"
|
||||
strip-ansi "^4.0.0"
|
||||
which "^1.2.12"
|
||||
worker-farm "^1.3.1"
|
||||
yargs "^9.0.0"
|
||||
|
||||
jest-cli@^22.0.6:
|
||||
version "22.0.6"
|
||||
resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-22.0.6.tgz#a2f1e5e094c42b29d22815463ae57f4d07e292ac"
|
||||
@@ -3265,22 +3188,6 @@ jest-cli@^22.0.6:
|
||||
which "^1.2.12"
|
||||
yargs "^10.0.3"
|
||||
|
||||
jest-config@21.3.0-beta.4:
|
||||
version "21.3.0-beta.4"
|
||||
resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-21.3.0-beta.4.tgz#03c936c605c5ec11bbd42aa9d2715d4d96cb11ee"
|
||||
dependencies:
|
||||
chalk "^2.0.1"
|
||||
glob "^7.1.1"
|
||||
jest-environment-jsdom "21.3.0-beta.4"
|
||||
jest-environment-node "21.3.0-beta.4"
|
||||
jest-get-type "21.3.0-beta.4"
|
||||
jest-jasmine2 "21.3.0-beta.4"
|
||||
jest-regex-util "^21.2.0"
|
||||
jest-resolve "21.3.0-beta.4"
|
||||
jest-util "21.3.0-beta.4"
|
||||
jest-validate "21.3.0-beta.4"
|
||||
pretty-format "21.3.0-beta.4"
|
||||
|
||||
jest-config@^22.0.6:
|
||||
version "22.0.6"
|
||||
resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.0.6.tgz#8af116784df189b98ed6fd6c307bce4181f7f012"
|
||||
@@ -3297,15 +3204,6 @@ jest-config@^22.0.6:
|
||||
jest-validate "^22.0.6"
|
||||
pretty-format "^22.0.6"
|
||||
|
||||
jest-diff@21.3.0-beta.4:
|
||||
version "21.3.0-beta.4"
|
||||
resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-21.3.0-beta.4.tgz#75e795e83f6c3368720c2ddd1f0cbed1543c4139"
|
||||
dependencies:
|
||||
chalk "^2.0.1"
|
||||
diff "^3.2.0"
|
||||
jest-get-type "21.3.0-beta.4"
|
||||
pretty-format "21.3.0-beta.4"
|
||||
|
||||
jest-diff@^22.0.6:
|
||||
version "22.0.6"
|
||||
resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-22.0.6.tgz#38c07187324564ecf6389a980a2f0e86e7e79890"
|
||||
@@ -3315,26 +3213,12 @@ jest-diff@^22.0.6:
|
||||
jest-get-type "^22.0.6"
|
||||
pretty-format "^22.0.6"
|
||||
|
||||
jest-docblock@21.3.0-beta.4:
|
||||
version "21.3.0-beta.4"
|
||||
resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.3.0-beta.4.tgz#11c3121cccc39d826d484e0951cb2faad1fe1ebd"
|
||||
dependencies:
|
||||
detect-newline "^2.1.0"
|
||||
|
||||
jest-docblock@^22.0.6:
|
||||
version "22.0.6"
|
||||
resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.0.6.tgz#f187fb2c67eec0999e569d563092125283084f9e"
|
||||
dependencies:
|
||||
detect-newline "^2.1.0"
|
||||
|
||||
jest-environment-jsdom@21.3.0-beta.4:
|
||||
version "21.3.0-beta.4"
|
||||
resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-21.3.0-beta.4.tgz#aa2831f1ac6b2c88a7ec965990517960d5828da1"
|
||||
dependencies:
|
||||
jest-mock "21.3.0-beta.4"
|
||||
jest-util "21.3.0-beta.4"
|
||||
jsdom "^9.12.0"
|
||||
|
||||
jest-environment-jsdom@^22.0.6:
|
||||
version "22.0.6"
|
||||
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:
|
||||
jest-util "^22.0.6"
|
||||
jsdom "^11.5.1"
|
||||
|
||||
jest-environment-node@21.3.0-beta.4:
|
||||
version "21.3.0-beta.4"
|
||||
resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-21.3.0-beta.4.tgz#d4d620ee495d9af84edc157466ff962596e783ab"
|
||||
dependencies:
|
||||
jest-mock "21.3.0-beta.4"
|
||||
jest-util "21.3.0-beta.4"
|
||||
|
||||
jest-environment-node@^22.0.6:
|
||||
version "22.0.6"
|
||||
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:
|
||||
jest-mock "^22.0.6"
|
||||
jest-util "^22.0.6"
|
||||
|
||||
jest-get-type@21.3.0-beta.4:
|
||||
version "21.3.0-beta.4"
|
||||
resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-21.3.0-beta.4.tgz#248b16f9b8fe2887a0baa35b31905d73d66e56e0"
|
||||
|
||||
jest-get-type@^22.0.6:
|
||||
version "22.0.6"
|
||||
resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.0.6.tgz#301fbc0760779fdbad37b6e3239a3c1811aa75cb"
|
||||
|
||||
jest-haste-map@21.3.0-beta.4:
|
||||
version "21.3.0-beta.4"
|
||||
resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-21.3.0-beta.4.tgz#dd8736c40c6db933e16f8f402a45fec859a310f5"
|
||||
dependencies:
|
||||
fb-watchman "^2.0.0"
|
||||
graceful-fs "^4.1.11"
|
||||
jest-docblock "21.3.0-beta.4"
|
||||
micromatch "^2.3.11"
|
||||
sane "^2.0.0"
|
||||
worker-farm "^1.3.1"
|
||||
|
||||
jest-haste-map@^22.0.6:
|
||||
version "22.0.6"
|
||||
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:
|
||||
micromatch "^2.3.11"
|
||||
sane "^2.0.0"
|
||||
|
||||
jest-jasmine2@21.3.0-beta.4:
|
||||
version "21.3.0-beta.4"
|
||||
resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-21.3.0-beta.4.tgz#da0f065ce48c8eaaec1de6c1074ad05cc5a9f96f"
|
||||
dependencies:
|
||||
chalk "^2.0.1"
|
||||
expect "21.3.0-beta.4"
|
||||
graceful-fs "^4.1.11"
|
||||
jest-diff "21.3.0-beta.4"
|
||||
jest-matcher-utils "21.3.0-beta.4"
|
||||
jest-message-util "21.3.0-beta.4"
|
||||
jest-snapshot "21.3.0-beta.4"
|
||||
p-cancelable "^0.3.0"
|
||||
source-map-support "^0.5.0"
|
||||
|
||||
jest-jasmine2@^22.0.6:
|
||||
version "22.0.6"
|
||||
resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.0.6.tgz#db9eae709978a8d67a52f7b90d74cab7301107f5"
|
||||
@@ -3423,14 +3271,6 @@ jest-leak-detector@^22.0.6:
|
||||
dependencies:
|
||||
pretty-format "^22.0.6"
|
||||
|
||||
jest-matcher-utils@21.3.0-beta.4:
|
||||
version "21.3.0-beta.4"
|
||||
resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-21.3.0-beta.4.tgz#a83ad12d284c4c3a4db87ba5830f84a16b9a4a91"
|
||||
dependencies:
|
||||
chalk "^2.0.1"
|
||||
jest-get-type "21.3.0-beta.4"
|
||||
pretty-format "21.3.0-beta.4"
|
||||
|
||||
jest-matcher-utils@^22.0.6:
|
||||
version "22.0.6"
|
||||
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:
|
||||
jest-get-type "^22.0.6"
|
||||
pretty-format "^22.0.6"
|
||||
|
||||
jest-message-util@21.3.0-beta.4:
|
||||
version "21.3.0-beta.4"
|
||||
resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-21.3.0-beta.4.tgz#018dd79f8d7b1a4bbbd9f5b3d59354d14ac9641f"
|
||||
dependencies:
|
||||
chalk "^2.0.1"
|
||||
micromatch "^2.3.11"
|
||||
slash "^1.0.0"
|
||||
stack-utils "^1.0.1"
|
||||
|
||||
jest-message-util@^22.0.6:
|
||||
version "22.0.6"
|
||||
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:
|
||||
slash "^1.0.0"
|
||||
stack-utils "^1.0.1"
|
||||
|
||||
jest-mock@21.3.0-beta.4:
|
||||
version "21.3.0-beta.4"
|
||||
resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-21.3.0-beta.4.tgz#f318168c781a340c2a75fbb3cc40559670531ddd"
|
||||
|
||||
jest-mock@^22.0.6:
|
||||
version "22.0.6"
|
||||
resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.0.6.tgz#0d1f51ec2bf1e72cd58e79cb76f587e6397306ec"
|
||||
|
||||
jest-regex-util@^21.2.0:
|
||||
version "21.2.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-21.2.0.tgz#1b1e33e63143babc3e0f2e6c9b5ba1eb34b2d530"
|
||||
|
||||
jest-regex-util@^22.0.6:
|
||||
version "22.0.6"
|
||||
resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-22.0.6.tgz#cd01d33c5993340f5d61be09b270773787a41d88"
|
||||
|
||||
jest-resolve-dependencies@^21.2.0:
|
||||
version "21.2.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-21.2.0.tgz#9e231e371e1a736a1ad4e4b9a843bc72bfe03d09"
|
||||
dependencies:
|
||||
jest-regex-util "^21.2.0"
|
||||
|
||||
jest-resolve-dependencies@^22.0.6:
|
||||
version "22.0.6"
|
||||
resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-22.0.6.tgz#dd976f0a9c2874d32edf4876b0a965cef48d479b"
|
||||
dependencies:
|
||||
jest-regex-util "^22.0.6"
|
||||
|
||||
jest-resolve@21.3.0-beta.4:
|
||||
version "21.3.0-beta.4"
|
||||
resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-21.3.0-beta.4.tgz#66771415f4be5363b846a6b00599c0e9b01dc726"
|
||||
dependencies:
|
||||
browser-resolve "^1.11.2"
|
||||
chalk "^2.0.1"
|
||||
|
||||
jest-resolve@^22.0.6:
|
||||
version "22.0.6"
|
||||
resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.0.6.tgz#29d7aa425adb9aae7aa5ae157483dffba724e52b"
|
||||
@@ -3500,21 +3310,6 @@ jest-resolve@^22.0.6:
|
||||
browser-resolve "^1.11.2"
|
||||
chalk "^2.0.1"
|
||||
|
||||
jest-runner@21.3.0-beta.4:
|
||||
version "21.3.0-beta.4"
|
||||
resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-21.3.0-beta.4.tgz#a52680a5aff6f1e160c6f520d86482224905d5fa"
|
||||
dependencies:
|
||||
jest-config "21.3.0-beta.4"
|
||||
jest-docblock "21.3.0-beta.4"
|
||||
jest-haste-map "21.3.0-beta.4"
|
||||
jest-jasmine2 "21.3.0-beta.4"
|
||||
jest-message-util "21.3.0-beta.4"
|
||||
jest-runtime "21.3.0-beta.4"
|
||||
jest-util "21.3.0-beta.4"
|
||||
pify "^3.0.0"
|
||||
throat "^4.0.0"
|
||||
worker-farm "^1.3.1"
|
||||
|
||||
jest-runner@^22.0.6:
|
||||
version "22.0.6"
|
||||
resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-22.0.6.tgz#1986ee82b7968d21f04c402e5b67e3da71496f19"
|
||||
@@ -3530,27 +3325,6 @@ jest-runner@^22.0.6:
|
||||
jest-worker "^22.0.6"
|
||||
throat "^4.0.0"
|
||||
|
||||
jest-runtime@21.3.0-beta.4:
|
||||
version "21.3.0-beta.4"
|
||||
resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-21.3.0-beta.4.tgz#22238a05341baf88857e44e39a881c28807e5a36"
|
||||
dependencies:
|
||||
babel-jest "21.3.0-beta.4"
|
||||
babel-plugin-istanbul "^4.1.5"
|
||||
chalk "^2.0.1"
|
||||
convert-source-map "^1.4.0"
|
||||
graceful-fs "^4.1.11"
|
||||
jest-config "21.3.0-beta.4"
|
||||
jest-haste-map "21.3.0-beta.4"
|
||||
jest-regex-util "^21.2.0"
|
||||
jest-resolve "21.3.0-beta.4"
|
||||
jest-util "21.3.0-beta.4"
|
||||
json-stable-stringify "^1.0.1"
|
||||
micromatch "^2.3.11"
|
||||
slash "^1.0.0"
|
||||
strip-bom "3.0.0"
|
||||
write-file-atomic "^2.1.0"
|
||||
yargs "^9.0.0"
|
||||
|
||||
jest-runtime@^22.0.6:
|
||||
version "22.0.6"
|
||||
resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-22.0.6.tgz#827c35e706adfc22e685de733ba3ab78cda72bfc"
|
||||
@@ -3574,17 +3348,6 @@ jest-runtime@^22.0.6:
|
||||
write-file-atomic "^2.1.0"
|
||||
yargs "^10.0.3"
|
||||
|
||||
jest-snapshot@21.3.0-beta.4:
|
||||
version "21.3.0-beta.4"
|
||||
resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-21.3.0-beta.4.tgz#0ba657b322029c2855dd6ac95a6494bf101de7dc"
|
||||
dependencies:
|
||||
chalk "^2.0.1"
|
||||
jest-diff "21.3.0-beta.4"
|
||||
jest-matcher-utils "21.3.0-beta.4"
|
||||
mkdirp "^0.5.1"
|
||||
natural-compare "^1.4.0"
|
||||
pretty-format "21.3.0-beta.4"
|
||||
|
||||
jest-snapshot@^22.0.6:
|
||||
version "22.0.6"
|
||||
resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.0.6.tgz#30c1f85b6f050891c4a2060d807a3d65a594591c"
|
||||
@@ -3596,18 +3359,6 @@ jest-snapshot@^22.0.6:
|
||||
natural-compare "^1.4.0"
|
||||
pretty-format "^22.0.6"
|
||||
|
||||
jest-util@21.3.0-beta.4:
|
||||
version "21.3.0-beta.4"
|
||||
resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-21.3.0-beta.4.tgz#88bd0c8d1d51098336cf6696e3ae27d38b881664"
|
||||
dependencies:
|
||||
callsites "^2.0.0"
|
||||
chalk "^2.0.1"
|
||||
graceful-fs "^4.1.11"
|
||||
jest-message-util "21.3.0-beta.4"
|
||||
jest-mock "21.3.0-beta.4"
|
||||
jest-validate "21.3.0-beta.4"
|
||||
mkdirp "^0.5.1"
|
||||
|
||||
jest-util@^22.0.6:
|
||||
version "22.0.6"
|
||||
resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.0.6.tgz#539b3f21f4e2e458bb38719aa0e417109fe31657"
|
||||
@@ -3620,15 +3371,6 @@ jest-util@^22.0.6:
|
||||
jest-validate "^22.0.6"
|
||||
mkdirp "^0.5.1"
|
||||
|
||||
jest-validate@21.3.0-beta.4:
|
||||
version "21.3.0-beta.4"
|
||||
resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-21.3.0-beta.4.tgz#cfb0cdb38f7eb694f909ad041687645fd1b90452"
|
||||
dependencies:
|
||||
chalk "^2.0.1"
|
||||
jest-get-type "21.3.0-beta.4"
|
||||
leven "^2.1.0"
|
||||
pretty-format "21.3.0-beta.4"
|
||||
|
||||
jest-validate@^22.0.6:
|
||||
version "22.0.6"
|
||||
resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.0.6.tgz#48c6972f154fa4abe20d0686a9b819d142740167"
|
||||
@@ -3718,30 +3460,6 @@ jsdom@^11.5.1:
|
||||
whatwg-url "^6.3.0"
|
||||
xml-name-validator "^2.0.1"
|
||||
|
||||
jsdom@^9.12.0:
|
||||
version "9.12.0"
|
||||
resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4"
|
||||
dependencies:
|
||||
abab "^1.0.3"
|
||||
acorn "^4.0.4"
|
||||
acorn-globals "^3.1.0"
|
||||
array-equal "^1.0.0"
|
||||
content-type-parser "^1.0.1"
|
||||
cssom ">= 0.3.2 < 0.4.0"
|
||||
cssstyle ">= 0.2.37 < 0.3.0"
|
||||
escodegen "^1.6.1"
|
||||
html-encoding-sniffer "^1.0.1"
|
||||
nwmatcher ">= 1.3.9 < 2.0.0"
|
||||
parse5 "^1.5.1"
|
||||
request "^2.79.0"
|
||||
sax "^1.2.1"
|
||||
symbol-tree "^3.2.1"
|
||||
tough-cookie "^2.3.2"
|
||||
webidl-conversions "^4.0.0"
|
||||
whatwg-encoding "^1.0.1"
|
||||
whatwg-url "^4.3.0"
|
||||
xml-name-validator "^2.0.1"
|
||||
|
||||
jsesc@^1.3.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
|
||||
@@ -4055,7 +3773,7 @@ mem@^1.1.0:
|
||||
dependencies:
|
||||
mimic-fn "^1.0.0"
|
||||
|
||||
merge-stream@^1.0.0:
|
||||
merge-stream@^1.0.0, merge-stream@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1"
|
||||
dependencies:
|
||||
@@ -4262,10 +3980,6 @@ number-is-nan@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
|
||||
|
||||
"nwmatcher@>= 1.3.9 < 2.0.0":
|
||||
version "1.3.9"
|
||||
resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.3.9.tgz#8bab486ff7fa3dfd086656bbe8b17116d3692d2a"
|
||||
|
||||
nwmatcher@^1.4.3:
|
||||
version "1.4.3"
|
||||
resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.3.tgz#64348e3b3d80f035b40ac11563d278f8b72db89c"
|
||||
@@ -4373,7 +4087,7 @@ os-shim@^0.1.2:
|
||||
version "0.1.3"
|
||||
resolved "https://registry.yarnpkg.com/os-shim/-/os-shim-0.1.3.tgz#6b62c3791cf7909ea35ed46e17658bb417cb3917"
|
||||
|
||||
os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.1:
|
||||
os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
|
||||
|
||||
@@ -4392,10 +4106,6 @@ output-file-sync@^1.1.0:
|
||||
mkdirp "^0.5.1"
|
||||
object-assign "^4.1.0"
|
||||
|
||||
p-cancelable@^0.3.0:
|
||||
version "0.3.0"
|
||||
resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa"
|
||||
|
||||
p-finally@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
|
||||
@@ -4452,10 +4162,6 @@ parse-passwd@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
|
||||
|
||||
parse5@^1.5.1:
|
||||
version "1.5.1"
|
||||
resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94"
|
||||
|
||||
parse5@^3.0.2:
|
||||
version "3.0.3"
|
||||
resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c"
|
||||
@@ -4522,10 +4228,6 @@ pify@^2.0.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
|
||||
|
||||
pify@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
|
||||
|
||||
pinkie-promise@^2.0.0:
|
||||
version "2.0.1"
|
||||
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:
|
||||
version "1.8.1"
|
||||
resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.8.1.tgz#91064d778c08c85ac1cbe6b23195c34310d039f9"
|
||||
|
||||
pretty-format@21.3.0-beta.4:
|
||||
version "21.3.0-beta.4"
|
||||
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-21.3.0-beta.4.tgz#6b3b8aba0b7097f821156e5fd1e3bc0fa923b17f"
|
||||
dependencies:
|
||||
ansi-regex "^3.0.0"
|
||||
ansi-styles "^3.2.0"
|
||||
|
||||
pretty-format@^22.0.6:
|
||||
version "22.0.6"
|
||||
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.0.6.tgz#bbb78e38445f263c2d3b9e281f4b844380990720"
|
||||
@@ -4615,10 +4310,6 @@ proxy-from-env@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee"
|
||||
|
||||
prr@~0.0.0:
|
||||
version "0.0.0"
|
||||
resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a"
|
||||
|
||||
pseudomap@^1.0.1, pseudomap@^1.0.2:
|
||||
version "1.0.2"
|
||||
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
|
||||
string_decoder "~1.0.0"
|
||||
util-deprecate "~1.0.1"
|
||||
|
||||
readable-stream@^2.0.5:
|
||||
readable-stream@^2.0.5, readable-stream@^2.2.2:
|
||||
version "2.3.3"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c"
|
||||
dependencies:
|
||||
@@ -4936,7 +4627,7 @@ request@2.79.0:
|
||||
tunnel-agent "~0.4.1"
|
||||
uuid "^3.0.0"
|
||||
|
||||
request@^2.79.0, request@^2.81.0:
|
||||
request@^2.81.0:
|
||||
version "2.81.0"
|
||||
resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0"
|
||||
dependencies:
|
||||
@@ -5296,12 +4987,6 @@ source-map@^0.6.0:
|
||||
version "0.6.1"
|
||||
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
|
||||
|
||||
source-map@~0.2.0:
|
||||
version "0.2.0"
|
||||
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d"
|
||||
dependencies:
|
||||
amdefine ">=0.0.4"
|
||||
|
||||
source-map@~0.5.6:
|
||||
version "0.5.7"
|
||||
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:
|
||||
dependencies:
|
||||
punycode "^1.4.1"
|
||||
|
||||
tough-cookie@^2.3.2, tough-cookie@~2.3.0:
|
||||
tough-cookie@~2.3.0:
|
||||
version "2.3.2"
|
||||
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a"
|
||||
dependencies:
|
||||
@@ -5669,10 +5354,6 @@ tr46@^1.0.0:
|
||||
dependencies:
|
||||
punycode "^2.1.0"
|
||||
|
||||
tr46@~0.0.3:
|
||||
version "0.0.3"
|
||||
resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
|
||||
|
||||
trim-right@^1.0.0, trim-right@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
|
||||
@@ -5709,7 +5390,7 @@ type-check@~0.3.2:
|
||||
dependencies:
|
||||
prelude-ls "~1.1.2"
|
||||
|
||||
typedarray@~0.0.5:
|
||||
typedarray@^0.0.6, typedarray@~0.0.5:
|
||||
version "0.0.6"
|
||||
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
|
||||
|
||||
@@ -5840,14 +5521,6 @@ watch@~0.10.0:
|
||||
version "0.10.0"
|
||||
resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc"
|
||||
|
||||
webidl-conversions@^3.0.0:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
|
||||
|
||||
webidl-conversions@^4.0.0:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.1.tgz#8015a17ab83e7e1b311638486ace81da6ce206a0"
|
||||
|
||||
webidl-conversions@^4.0.1, webidl-conversions@^4.0.2:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
|
||||
@@ -5869,13 +5542,6 @@ whatwg-fetch@>=0.10.0:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84"
|
||||
|
||||
whatwg-url@^4.3.0:
|
||||
version "4.7.1"
|
||||
resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.7.1.tgz#df4dc2e3f25a63b1fa5b32ed6d6c139577d690de"
|
||||
dependencies:
|
||||
tr46 "~0.0.3"
|
||||
webidl-conversions "^3.0.0"
|
||||
|
||||
whatwg-url@^6.3.0:
|
||||
version "6.4.0"
|
||||
resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.4.0.tgz#08fdf2b9e872783a7a1f6216260a1d66cc722e08"
|
||||
@@ -5934,13 +5600,6 @@ wordwrap@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
|
||||
|
||||
worker-farm@^1.3.1:
|
||||
version "1.3.1"
|
||||
resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.3.1.tgz#4333112bb49b17aa050b87895ca6b2cacf40e5ff"
|
||||
dependencies:
|
||||
errno ">=0.1.1 <0.2.0-0"
|
||||
xtend ">=4.0.0 <4.1.0-0"
|
||||
|
||||
wrap-ansi@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
|
||||
@@ -6001,6 +5660,12 @@ yargs-parser@^7.0.0:
|
||||
dependencies:
|
||||
camelcase "^4.1.0"
|
||||
|
||||
yargs-parser@^8.1.0:
|
||||
version "8.1.0"
|
||||
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950"
|
||||
dependencies:
|
||||
camelcase "^4.1.0"
|
||||
|
||||
yargs@8.0.1:
|
||||
version "8.0.1"
|
||||
resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.1.tgz#420ef75e840c1457a80adcca9bc6fa3849de51aa"
|
||||
@@ -6019,6 +5684,23 @@ yargs@8.0.1:
|
||||
y18n "^3.2.1"
|
||||
yargs-parser "^7.0.0"
|
||||
|
||||
yargs@^10.0.3:
|
||||
version "10.1.2"
|
||||
resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.2.tgz#454d074c2b16a51a43e2fb7807e4f9de69ccb5c5"
|
||||
dependencies:
|
||||
cliui "^4.0.0"
|
||||
decamelize "^1.1.1"
|
||||
find-up "^2.1.0"
|
||||
get-caller-file "^1.0.1"
|
||||
os-locale "^2.0.0"
|
||||
require-directory "^2.1.1"
|
||||
require-main-filename "^1.0.1"
|
||||
set-blocking "^2.0.0"
|
||||
string-width "^2.0.0"
|
||||
which-module "^2.0.0"
|
||||
y18n "^3.2.1"
|
||||
yargs-parser "^8.1.0"
|
||||
|
||||
yargs@^4.8.0:
|
||||
version "4.8.1"
|
||||
resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0"
|
||||
@@ -6056,24 +5738,6 @@ yargs@^6.3.0, yargs@^6.5.0:
|
||||
y18n "^3.2.1"
|
||||
yargs-parser "^4.2.0"
|
||||
|
||||
yargs@^9.0.0:
|
||||
version "9.0.1"
|
||||
resolved "https://registry.yarnpkg.com/yargs/-/yargs-9.0.1.tgz#52acc23feecac34042078ee78c0c007f5085db4c"
|
||||
dependencies:
|
||||
camelcase "^4.1.0"
|
||||
cliui "^3.2.0"
|
||||
decamelize "^1.1.1"
|
||||
get-caller-file "^1.0.1"
|
||||
os-locale "^2.0.0"
|
||||
read-pkg-up "^2.0.0"
|
||||
require-directory "^2.1.1"
|
||||
require-main-filename "^1.0.1"
|
||||
set-blocking "^2.0.0"
|
||||
string-width "^2.0.0"
|
||||
which-module "^2.0.0"
|
||||
y18n "^3.2.1"
|
||||
yargs-parser "^7.0.0"
|
||||
|
||||
yargs@~3.10.0:
|
||||
version "3.10.0"
|
||||
resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
|
||||
|
||||
Reference in New Issue
Block a user